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