org.viafirma.cliente.ViafirmaClientFactory.java Source code

Java tutorial

Introduction

Here is the source code for org.viafirma.cliente.ViafirmaClientFactory.java

Source

/* Copyright (C) 2007 Flix Garca Borrego (borrego at gmail.com)
      
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.
      
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.
      
   You should have received a copy of the GNU Library General Public
   License along with this library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
   MA 02111-1307, USA 
 */
package org.viafirma.cliente;

import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.viafirma.cliente.openid.OpenIdHandler;
import org.viafirma.cliente.openid.OpenIdHandlerFactory;
import org.viafirma.cliente.util.Constantes;
import org.viafirma.cliente.util.TypeRequest;

/**
 * Permite crear instancias del cliente de Viafirma. Para su utilizacin es
 * necesario que la factora este inicializada mediante una llamada al mtodo
 * init
 * 
 * 
 * Parametros de inicializacin: URL_VIAFIRMA_RMI_CONECT: URL RMI a la que se
 * conecta para el envio de ficheros a la plataforma de firma.
 * 
 * 
 * @author Felix Garcia Borrego (borrego at gmail.com)
 */
public class ViafirmaClientFactory {

    /**
     * Inicializa el cliente de viafirma. Este mdodo debe ser invocado por las
     * aplicaciones antes de utilizar cualquier otro mtodo.
     * 
     * @param propiedades
     */
    public synchronized static void init(Properties propiedades) {
        // -------------
        // INICIA la Autenticacin

        // Creo el conjunto de propiedades que se solicitaran al usuario
        // TODO permitir la configuracin del conjunto de propiedades
        // solicitadas
        Set<String> requestProperties = new HashSet<String>();
        // por defecto solicitamos email, nombre, apellidos y nif
        requestProperties.add(TypeRequest.EMAIL.getAlias());
        requestProperties.add(TypeRequest.FIRST_NAME.getAlias());
        requestProperties.add(TypeRequest.LAST_NAME.getAlias());
        requestProperties.add(TypeRequest.USER_NUMER_ID.getAlias());

        requestProperties.add(TypeRequest.OIDS.getAlias());
        requestProperties.add(TypeRequest.TYPE_CERTIFICATE.getAlias());
        requestProperties.add(TypeRequest.CA_NAME.getAlias());

        // recupero la url por defecto utilizada para realizar las
        // autenticacines sobre viafirma
        // simplificando el proceso de autenticacin OpenId.
        // TODO permitir la configuracin de servidores de confianza.
        // (Actualmente solo se permite como servidor de confianza el indicado
        // en este parametro de configuracin)
        String urlDefaultAuthenticationProvider = propiedades
                .getProperty(Constantes.PARAM_URL_DEFAULT_AUTHENTICATION_PROVIDER);
        if (urlDefaultAuthenticationProvider == null) {
            log.fatal("Parametro '" + Constantes.PARAM_URL_DEFAULT_AUTHENTICATION_PROVIDER
                    + "' requerido para inicializar el cliente Viafirma.");
            throw new ExceptionInInitializerError(
                    "Parametro '" + Constantes.PARAM_URL_DEFAULT_AUTHENTICATION_PROVIDER
                            + "' requerido para inicializar el cliente Viafirma.");
        }

        // -------------
        // INICIO de la configuracin de firma

        Set<String> requestFirmaProperties = new HashSet<String>();
        requestFirmaProperties.add(TypeRequest.SIGN_ID.getAlias());
        requestFirmaProperties.add(TypeRequest.SIGN_TIME_STAMP.getAlias());
        // La firma tambien contiene toda la informacin realacionada con el
        // firmante.
        requestFirmaProperties.addAll(requestProperties);

        // recupero el tipo de conector utilizado
        String urlRMI = propiedades.getProperty(Constantes.PARAM_URL_CONECTOR_FIRMA_RMI);
        // Check: Existe conector RMI/WS?
        if (urlRMI == null) {
            log.fatal("Parametro '" + Constantes.PARAM_URL_CONECTOR_FIRMA_RMI
                    + "' requerido para inicializar el cliente Viafirma.");
            throw new ExceptionInInitializerError("Parametro '" + Constantes.PARAM_URL_CONECTOR_FIRMA_RMI
                    + "' requerido para inicializar el cliente Viafirma.");
        }

        String urlDefaultSignProvider = propiedades.getProperty(Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER);
        // Check: Se ha indicado un proveedor de autenticacin Viafirma?
        if (urlDefaultSignProvider == null) {
            log.fatal("Parametro '" + Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER
                    + "' requerido para inicializar el cliente Viafirma.");
            throw new ExceptionInInitializerError("Parametro '" + Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER
                    + "' requerido para inicializar el cliente Viafirma.");
        }

        long tamanyoMaximoDocumento;

        String configMaxSize = propiedades.getProperty(Constantes.PARAM_MAX_SIZE);
        if (configMaxSize == null) {
            // Tamao por defecto
            tamanyoMaximoDocumento = Constantes.MAX_SIZE_UPLOAD_FILE;
        } else {
            tamanyoMaximoDocumento = Long.parseLong(configMaxSize);
        }

        // ----------------
        // Si todo esta OK. Creamos la instancia Singleton

        // recuperamos las instancias del manejador OpenId
        OpenIdHandler openIdHandler = OpenIdHandlerFactory.build(propiedades);
        // creamos una instancia del cliente
        singleton = new ViafirmaClient(tamanyoMaximoDocumento, openIdHandler, urlRMI,
                urlDefaultAuthenticationProvider, urlDefaultSignProvider, requestProperties,
                requestFirmaProperties);
    }

    // ***************************************
    // Implementacin patrn singleton
    // ***************************************

    /**
     * nica instancia creada y gestionada por la factora.
     */
    private static ViafirmaClient singleton;

    /**
     * Retorna una instancia del cliente de firma
     * 
     * @return
     */
    public static ViafirmaClient getInstance() {
        if (singleton == null) {
            throw new ExceptionInInitializerError("El Cliente no ha sido inicializado");
        }
        return singleton;
    }

    /**
     * No tiene contructor
     */
    private ViafirmaClientFactory() {
        // No admitimos contructor
    }

    /**
     * Sistema de log
     */
    private static Log log = LogFactory.getLog(ViafirmaClientFactory.class);

}