org.viafirma.cliente.util.ConfigUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.viafirma.cliente.util.ConfigUtil.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.util;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.servlet.FilterConfig;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.viafirma.cliente.ViafirmaClientFactory;

/**
 * Mtodos de utilidad para recuperar los parametros de configuracin de la aplicacin.
 * 
 * @author Felix Garcia Borrego (borrego at gmail.com)
 */
public class ConfigUtil {
    private static ConfigUtil singleton;

    public static ConfigUtil getInstance() {
        if (singleton == null) {
            singleton = new ConfigUtil();
        }
        return singleton;
    }

    /**
     * Indica si el cliente ya ha sido inicializado.
     */
    private boolean isInit;

    /**
     * Url a la que se redirecciona en caso de error..
     */
    private String uriError;

    /**
     * Recupera el conjunto de propiedades que utiliza la aplicacin.
     * @param context
     * @return
     */
    public Properties readConfigPropertes() {

        Properties properties = new Properties();

        Context initCtx;
        try {
            // carcamos la configuracin por defecto
            properties.load(getClass().getResourceAsStream("/viafirmaConfig.properties"));

            // recuperamos la configuracin almacenada en el contexto de aplicacin
            initCtx = new InitialContext();
            Context contextInit = (Context) initCtx.lookup("java:comp/env");
            // recuperamos ahora todos los parametros JNDI que estan en el raiz de la aplicacin 
            NamingEnumeration<NameClassPair> propiedadesJDNI = contextInit.list("");
            while (propiedadesJDNI.hasMoreElements()) {
                NameClassPair propiedad = propiedadesJDNI.nextElement();
                Object temp = contextInit.lookup(propiedad.getName());
                if (temp instanceof String) {
                    if (propiedad.getName().startsWith("SYSTEM_")) {
                        String valor = (String) temp;
                        String nombre = StringUtils.substringAfter(propiedad.getName(), "SYSTEM_");
                        System.getProperties().put(nombre, valor);
                        properties.put(nombre, valor);
                    } else {
                        String valor = (String) temp;
                        properties.put(propiedad.getName(), valor);
                    }
                }
            }
            for (Object key : properties.keySet()) {
                if (((String) key).contains("PASSWORD")) {
                    System.out.println("\t\t\t" + key + "=***");
                } else {
                    System.out.println("\t\t\t" + key + "=" + properties.get(key));
                }
            }
        } catch (Exception e) {
            log.error("No se pueden recuperar los parametros de configuracin. JNDI parece no estar disponible. "
                    + e.getMessage());
            //Permitimos el arranque de la aplicacin utilizando la configuracin de los properties.
            //throw new ExceptionInInitializerError("No se pueden recuperar los parametros de configuracin. JNDI parece no estar disponible."+e.getMessage());
        }
        return properties;
    }

    /**
     * Inicializa el filtro. 
     * Configura el cliente Viafirma.
     */
    public void init(FilterConfig config) {
        if (!isInit) {
            isInit = true;
            // recuperamos la configuracin del contexto
            /*
             *       <!--  Configuracin del cliente de ejemplo integrado en la plataforma -->
            <Environment description="Configuracin del Cliente:Proveedor OpenID utilizado para la autenticacin"
                     name="URL_DEFAULT_AUTHENTICATION_PROVIDER"
                     value="http://localhost:8080/viafirma/pip/#ID#" type="java.lang.String" override="false"/>
            <Environment description="Configuracin del Cliente:Proveedor OpenID utilizado para la firma de documentos"
                     name="URL_DEFAULT_SIGN_PROVIDER"
                     value="http://localhost:8080/viafirma/sign/#ID#" type="java.lang.String" override="false"/>
            <Environment description="Configuracin del Cliente: Url de retorno de los datos usdado por el cliente. Es la url que informa el cliente al servidor para que este le retorne aqui el resultado"
                     name="URL_AUTHENTICATION_RETURN_OPEN_ID"
                     value="http://localhost:8080/viafirma/testAuthentication" type="java.lang.String" override="false"/>
            <Environment description="Configuracin del Cliente: Url de retorno del resultado de la firma usdado por el cliente. Es la url que informa el cliente al servidor para que este le retorne aqui el resultado"
                     name="URL_FIRMA_RETURN_OPEN_ID"
                     value="http://localhost:8080/viafirma/testFirma" type="java.lang.String" override="false"/>
                
             * 
             */

            // recuperamos la url en la que se encuentra el proveedor de Viafirma que se desea utilizar
            Properties properties = ConfigUtil.getInstance().readConfigPropertes();
            // las propiedades que esperamos recuperar son: url_proveedor
            String urlProveedor = properties.getProperty(Constantes.PARAM_URL_PROVIDER_VIAFIRMA);
            if (urlProveedor == null) {
                log.error("Falta el prarametro de configuracin :  " + Constantes.PARAM_URL_PROVIDER_VIAFIRMA
                        + ", se intentaran recuperar los parametros de configuracin de forma independiente");
                throw new ExceptionInInitializerError("Parametro '" + Constantes.PARAM_URL_PROVIDER_VIAFIRMA
                        + "' requerido para inicializar el cliente Viafirma.");
            } else {
                // Utilizando el proveedor contruimos las urls de configuracin que necesitamos.
                properties.setProperty(Constantes.PARAM_URL_DEFAULT_AUTHENTICATION_PROVIDER,
                        urlProveedor + "/pip/#ID#");
                properties.setProperty(Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER, urlProveedor + "/sign/#ID#");
                properties.setProperty(Constantes.PARAM_URL_DEFAULT_SIGN_PROVIDER, urlProveedor + "/sign/#ID#");
            }

            // recupero la url de retorno en caso de error.
            uriError = config.getInitParameter(Constantes.PARAM_URI_ERROR);

            // Inicializamos el cliente Viafirma
            ViafirmaClientFactory.init(properties);
        }

    }

    /**
     * @return Returns the uriError.
     */
    public String getUriError() {
        return uriError;
    }

    private Log log = LogFactory.getLog(ConfigUtil.class);
}