org.squale.welcom.outils.WelcomConfigurator.java Source code

Java tutorial

Introduction

Here is the source code for org.squale.welcom.outils.WelcomConfigurator.java

Source

/**
 * 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&gt;Prfrences&gt;Java&gt;Gnration de code&gt;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&gt;Prfrences&gt;Java&gt;Gnration de code&gt;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();
    }

}