Java tutorial
/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale 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 General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ /* * Cr le 26 avr. 04 * * Pour changer le modle de ce fichier gnr, allez : * Fentre>Prfrences>Java>Gnration de code>Code et commentaires */ package org.squale.welcom.outils; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.Date; import java.util.HashMap; import java.util.Locale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.validator.GenericValidator; import org.apache.struts.util.MessageResources; import org.squale.welcom.struts.plugin.WelcomContext; import org.squale.welcom.taglib.aide.Aide; import org.squale.welcom.taglib.aide.AideException; /** * @author M327837 Pour changer le modle de ce commentaire de type gnr, allez : * Fentre>Prfrences>Java>Gnration de code>Code et commentaires */ public class WelcomConfigurator implements IWConfigurator { /** instance */ private static final HashMap htSingleton = new HashMap(); /** logger */ private static Log logStartup = LogFactory.getLog("Welcom"); /** Message bundle de l'application, pour la configuration */ private MessageResources message = null; /** Message bundle interne ... contient la conf de welcom par defaut */ private static MessageResources messageInternal = null; /** Emplacement par default de la conf de Welcom dans son package */ private final static String MSG_INTERNAL_KEY = "org.squale.welcom.resources.WelcomResources"; /** Date de derniere modification de parametres */ private Date lastDateFile = null; /** Nom du fichier de configuration du projet pour welcom */ private String fileName = ""; /** Le fichie de configuration est trouv */ private boolean goodFileResources = false; /** Version de la charte */ private Charte charte = null; /** * @return Pseudo Singleton /recupere sous la clef JNDI : java:comp/env/welcomConfContext */ public static WelcomConfigurator getInstance() { WelcomConfigurator wc; final String welcomContextName = WelcomContext.getWelcomContextName(); synchronized (htSingleton) { wc = (WelcomConfigurator) htSingleton.get(welcomContextName); if (wc == null) { wc = new WelcomConfigurator(); htSingleton.put(welcomContextName, wc); } } return wc; } /** * Initialise les proprits du fichier de configuration - lastDate - isGoodResources * * @param pFileName fichier de configuration */ private void initializeFile(final String pFileName) { String realFileName = ""; this.fileName = pFileName; InputStream is = null; if (!GenericValidator.isBlankOrNull(fileName)) { // Set up to load the property resource for this locale key, if we can realFileName = fileName.replace('.', '/') + ".properties"; goodFileResources = true; final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); // Recherche la date de derniere modification final URL url = classLoader.getResource(realFileName); URLConnection urlConn; try { urlConn = url.openConnection(); urlConn.setUseCaches(false); urlConn.connect(); urlConn.getLastModified(); lastDateFile = new Date(urlConn.getLastModified()); } catch (final Exception e) { goodFileResources = false; } // Regarde si le fichier n'est pas vide is = classLoader.getResourceAsStream(realFileName); goodFileResources = (is != null); } } /** * Retourne la charte actuelle dans le fichier de config * * @return la charte interne */ public Charte getInternalCharte() { if (charte == null) { String versionMajor = WelcomConfigurator.getMessage(WelcomConfigurator.CHARTE); String versionMinor = WelcomConfigurator.getMessage("charte" + versionMajor + ".version"); String version = versionMajor + "." + versionMinor; if ("v2.001".equalsIgnoreCase(version)) { charte = Charte.V2_001; } else if ("v2.002".equalsIgnoreCase(version)) { charte = Charte.V2_002; } else if ("v3.001".equalsIgnoreCase(version)) { charte = Charte.V3_001; } else { /** Par default si ca merde ... */ charte = Charte.V3_001; logStartup.warn("Erreur sur la lecture de la charte passage en " + charte); } } return charte; } /** * @return Troune vrai si le fichier est trouv */ public boolean isGoodFileResources() { return goodFileResources; } /** * @return Retourne la date de derniere modification du fichier */ public Date getLastDateFile() { return lastDateFile; } /** * initialise la configuration de Welcom * * @param pFileName : File name */ private void initialize(final String pFileName) { initializeFile(pFileName); if (!GenericValidator.isBlankOrNull(pFileName)) { if (message != null) { logStartup.warn("Double initialisation de Welcom"); logStartup.warn("Seules les proprits du dernier init seront prises en compte !"); logStartup.warn("Spcifier votre welcomContext (Variable d'environnement du web.xml)"); } if (isGoodFileResources()) { logStartup.info("Initialisation de " + WelcomContext.getWelcomContextName() + " : " + fileName); message = MessageResources.getMessageResources(fileName); } else { logStartup.info("ERREUR : fichier de config welcom non trouv '" + fileName + "'"); } } else { logStartup.info("Initialisation de Welcom avec configuration par default"); } messageInternal = MessageResources.getMessageResources(MSG_INTERNAL_KEY); // Init De l'aide initAide(); } /******************************************************************************************************************* * Partie statique ******************************************************************************************************************/ /** * Initilisation via le fichier de config * * @param fileName : Nom de la resource locale du projet. Celle-cis surcharge les definition de welcom */ public static void init(final String fileName) { getInstance().initialize(fileName); } /** * Initialisation par default si par de resource par l'utilisateur */ private static void init() { getInstance().initialize(null); } /** * Initialisation de l'aide .... Utilis seulement par agir / n'est pas proppos aux auters projets */ private static void initAide() { if (Util.isTrue(getMessage("aide.active"))) { final String aideRessource = getMessage("aide.properties"); final String aidePath = getMessage("aide.path.url"); if (GenericValidator.isBlankOrNull(aideRessource)) { logStartup.info("Parametre Aide.properties : null"); } else { logStartup.info("Fichier d'aide :" + aideRessource); try { Aide.openAide(aideRessource, aidePath); } catch (final AideException ae) { logStartup.error(ae.getMessage(), ae); } } } } /** * Recuperation des messages de configuration .... L'internationnalisaion n'est pas necessaire * * @param locale : locale * @param key : Clef a cherch * @param arg1 : attribut 1 * @param arg2 : attribut 2 * @param arg3 : attribut 3 * @param arg4 : attribut 4 * @return Valeur */ private String getComputedMessage(final Locale locale, final String key, final Object arg1, final Object arg2, final Object arg3, final Object arg4) { if ((message == null) && (messageInternal == null)) { WelcomConfigurator.init(); } if ((message != null) && message.isPresent(locale, key)) { return message.getMessage(locale, key, arg1, arg2, arg3, arg4); } else { return messageInternal.getMessage(locale, key, arg1, arg2, arg3, arg4); } } /** * Recuperation des messages de configuration .... L'internationnalisaion n'est pas necessaire * * @param locale : locale * @param key : Clef a cherch * @param arg1 : attribut 1 * @param arg2 : attribut 2 * @param arg3 : attribut 3 * @param arg4 : attribut 4 * @return Valeur */ private static String getMessage(final Locale locale, final String key, final Object arg1, final Object arg2, final Object arg3, final Object arg4) { return getInstance().getComputedMessage(locale, key, arg1, arg2, arg3, arg4); } /** * Recuperation des messages de configuration .... * * @param partialKey : Clef a cherch * @return Valeur */ public static String getMessageWithFullCfgChartePrefix(final String partialKey) { final Charte vcharte = WelcomConfigurator.getCharte(); String prefix = vcharte.getWelcomConfigFullPrefix(); return getMessage((Locale) null, prefix + partialKey, null, null, null, null); } /** * Recuperation des messages de configuration .... * * @param partialKey : Clef a cherch * @return Valeur */ public static String getMessageWithCfgChartePrefix(final String partialKey) { final Charte vcharte = WelcomConfigurator.getCharte(); String prefix = vcharte.getWelcomConfigPrefix(); return getMessage((Locale) null, prefix + partialKey, null, null, null, null); } /** * Recuperation des messages de configuration .... * * @param key : Clef a cherch * @return Valeur */ public static String getMessage(final String key) { return getMessage((Locale) null, key, null, null, null, null); } /** * Recuperation des messages de configuration .... * * @param key : Clef a cherch * @param arg1 : attribut 1 * @return Valeur */ public static String getMessage(final String key, final Object arg1) { return getMessage(null, key, arg1, null, null, null); } /** * Recuperation des messages de configuration .... * * @param key : Clef a cherch * @param arg1 : attribut 1 * @param arg2 : attribut 2 * @return Valeur */ public static String getMessage(final String key, final Object arg1, final Object arg2) { return getMessage(null, key, arg1, arg2, null, null); } /** * Recuperation des messages de configuration .... * * @param key : Clef a cherch * @param arg1 : attribut 1 * @param arg2 : attribut 2 * @param arg3 : attribut 3 * @return Valeur */ public static String getMessage(final String key, final Object arg1, final Object arg2, final Object arg3) { return getMessage(null, key, arg1, arg2, arg3, null); } /** * Recuperation des messages de configuration .... * * @param key : Clef a cherch * @param arg1 : attribut 1 * @param arg2 : attribut 2 * @param arg3 : attribut 3 * @param arg4 : attribut 4 * @return Valeur */ public static String getMessage(final String key, final Object arg1, final Object arg2, final Object arg3, final Object arg4) { return getMessage(key, arg1, arg2, arg3, arg4); } /** * @return Date de modification des fichiers */ public static Date getLastDate() { return getInstance().getLastDateFile(); } /** * Retourne la charte actuelle dans le fichier de config * * @return la charte actuelle dans le fichier de config */ public static Charte getCharte() { return getInstance().getInternalCharte(); } }