Java tutorial
/* 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); }