es.mityc.firmaJava.configuracion.DespliegueConfiguracionMng.java Source code

Java tutorial

Introduction

Here is the source code for es.mityc.firmaJava.configuracion.DespliegueConfiguracionMng.java

Source

/**
 * LICENCIA LGPL:
 * 
 * Esta librera es Software Libre; Usted puede redistribuirlo y/o modificarlo
 * bajo los trminos de la GNU Lesser General Public License (LGPL)
 * tal y como ha sido publicada por la Free Software Foundation; o
 * bien la versin 2.1 de la Licencia, o (a su eleccin) cualquier versin posterior.
 * 
 * Esta librera se distribuye con la esperanza de que sea til, pero SIN NINGUNA
 * GARANT?A; tampoco las implcitas garantas de MERCANTILIDAD o ADECUACIN A UN
 * PROPSITO PARTICULAR. Consulte la GNU Lesser General Public License (LGPL) para ms
 * detalles
 * 
 * Usted debe recibir una copia de la GNU Lesser General Public License (LGPL)
 * junto con esta librera; si no es as, escriba a la Free Software Foundation Inc.
 * 51 Franklin Street, 5 Piso, Boston, MA 02110-1301, USA o consulte
 * <http://www.gnu.org/licenses/>.
 *
 * Copyright 2008 Ministerio de Industria, Turismo y Comercio
 * 
 */

package es.mityc.firmaJava.configuracion;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Clase para la gestin de configuraciones especficas de despliegue.
 * 
 * <br/><br/>
 * Mediante esta utilidad se puede tener preparados un conjunto de ficheros de propiedades segn el tipo de despliegue
 * que se vaya a hacer del proyecto. Para utilizar una u otra configuracin slo habra que cambiar el fichero de propiedades
 * referenciado en el fichero de propiedades <code>despliegue.properties</code>.
 * 
 * @author  Ministerio de Industria, Turismo y Comercio
 * @version 1.0 beta
 */

public class DespliegueConfiguracionMng {

    private static Log log = LogFactory.getLog(DespliegueConfiguracionMng.class);

    private static DespliegueConfiguracionMng instance;
    private ArrayList<ResourceBundle> props;

    private static final String ST_NO_RECURSOS_FILE = "No se ha encontrado el fichero de recursos";

    static {
        instance = new DespliegueConfiguracionMng();
    }

    /**
     * Obtiene una instancia de la clase.
     * @return instancia nica de la clase
     */
    public static DespliegueConfiguracionMng getInstance() {
        return instance;
    }

    /**
     * Recarga la configuracin
     */
    public static synchronized void reloadConfiguration() {
        instance = new DespliegueConfiguracionMng();
    }

    /**
     * Constructor.
     * 
     * Recupera los ficheros de configuracin que se utilizarn para el despliegue 
     */
    protected DespliegueConfiguracionMng() {
        try {
            ResourceBundle rb = ResourceBundle.getBundle(ConstantesConfiguracion.STR_DESPLIEGUE);
            String files = rb.getString(ConstantesConfiguracion.STR_DESPLIEGUE_CONF_FILE);
            if (files != null) {
                StringTokenizer st = new StringTokenizer(files, ConstantesConfiguracion.COMA);
                props = new ArrayList<ResourceBundle>(st.countTokens());
                boolean hasNext = st.hasMoreTokens();
                while (hasNext) {
                    String file = st.nextToken();
                    hasNext = st.hasMoreTokens();
                    try {
                        props.add(ResourceBundle.getBundle(file));
                    } catch (MissingResourceException ex) {
                        log.debug(ST_NO_RECURSOS_FILE + ConstantesConfiguracion.ESPACIO + file);
                    }
                }
            }
        } catch (MissingResourceException ex) {
            log.debug(ConstantesConfiguracion.STR_RECURSO_NO_DISPONIBLE, ex);
        }
    }

    /**
     * Busca el valor asociado a una clave a travs de todos los ficheros de propiedades configurados.
     * @param key clave
     * @return Devuelve el primer valor asociado encontrado o <code>null</code> si no hay ninguno 
     */
    protected String getValue(String key) {
        // Pese a los problemas de sincronismo, se accede a esta lista sin sincronizacin porque se supone
        // que la estructura no se cambia una vez instanciada la clase o en una recarga (ya sincronizada).
        String value = null;
        // OPTIMIZACION: pasar a otro sistemas de propiedades ms eficiente que un conjunto de resourcebundle (por ejemplo un nico Properties integral con todas las propiedades)
        if (props != null) {
            Iterator<ResourceBundle> it = props.iterator();
            boolean hasNext = it.hasNext();
            while (hasNext) {
                try {
                    value = it.next().getString(key);
                    hasNext = it.hasNext();
                } catch (MissingResourceException ex) {
                    // Continua con el bucle
                    continue;
                }
                break;
            }
        }
        return value;
    }

    /**
     * Recupera la cadena asociada con la clave indicada
     * @param key clave
     * @return cadena asociada, <code>null</code> si no hay cadena asociada
     */
    public String getString(String key) {
        return getValue(key);
    }

    /**
     * Recupera el boolean asociado a la clave indicada
     * @param key clave
     * @return boolean asociado, <code>false</code> si no hay cadena asociada
     */
    public boolean getBoolean(String key) {
        boolean value = false;
        if (props != null) {
            try {
                value = Boolean.parseBoolean(getValue(key));
            } catch (MissingResourceException ex) {
                log.debug(ConstantesConfiguracion.STR_RECURSO_NO_DISPONIBLE, ex);
            }
        }
        return value;
    }

}