org.squale.squalix.tools.compiling.java.parser.wsad.JWSADParserConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for org.squale.squalix.tools.compiling.java.parser.wsad.JWSADParserConfiguration.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 juil. 05, par M400832.
 */
package org.squale.squalix.tools.compiling.java.parser.wsad;

import java.lang.reflect.Method;
import java.util.HashMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import org.squale.squalix.configurationmanager.ConfigUtility;
import org.squale.squalix.tools.compiling.CompilingMessages;
import org.squale.squalix.tools.compiling.java.parser.configuration.JParserConfiguration;

/**
 * Cette classe permet de rcuprer la configuration relative au parser de fichiers de classpath pour les projets WSAD
 * 5.x.
 * 
 * @author m400832
 * @version 2.1
 */
public class JWSADParserConfiguration extends JParserConfiguration {

    /**
     * Logger.
     */
    private static final Log LOGGER = LogFactory.getLog(JWSADParserConfiguration.class);

    /**
     * Balise classpath.
     */
    private String mClasspathAnchor = "";

    /**
     * Balise classpathentry.
     */
    private String mClasspathentry = "";

    /**
     * Attribut kind.
     */
    private String mKind = "";

    /**
     * Attribut path.
     */
    private String mPath = "";

    /**
     * Attribut exported.
     */
    private String mExported = "";

    /**
     * Valeur "src" pour l'attribut kind.
     */
    private String mSrc = "";

    /**
     * Valeur "lib" pour l'attribut kind.
     */
    private String mLib = "";

    /**
     * Valeur "var" pour l'attribut kind.
     */
    private String mVar = "";

    /**
     * Valeur "con" pour l'attribut kind.
     */
    private String mCon = "";

    /**
     * HashMap utilise pour la rflexion.
     */
    protected HashMap mMap = null;

    /** indique le type des projets (RSA, WSAD,...) */
    protected String projectType;

    /**
     * Constructeur.
     * 
     * @throws Exception exception en cas d'erreur lors de la configuration.
     */
    public JWSADParserConfiguration() throws Exception {
        super();
        createReflectionMap();
        getConfigurationFromXML(CompilingMessages.getString("configuration.file"));
    }

    /**
     * Cette mthode lance le parsing du fichier de configuration XML.
     * 
     * @param pFile chemin du fichier de configuration  parser.
     * @throws Exception exception en cas d'erreur de parsing.
     */
    private void getConfigurationFromXML(final String pFile) throws Exception {
        LOGGER.trace(CompilingMessages.getString("logs.task.entering_method"));
        boolean isNull = false;

        /* on rcupre le noeud racine */
        Node root = ConfigUtility.getRootNode(pFile, CompilingMessages.getString("configuration.root"));

        /* si le noeud n'est pas nul */
        if (null != root) {
            /* on rcupre le noeud concernant la compilation JAVA */
            Node myNode = ConfigUtility.getNodeByTagName(root, CompilingMessages.getString("configuration.java"));
            /* si le noeud n'est pas nul */
            if (null != myNode) {
                /* on rcupre le noeud concernant le parsing JAVA */
                myNode = ConfigUtility.getNodeByTagName(myNode,
                        CompilingMessages.getString("configuration.java.parsing"));
                /* si le noeud n'est pas nul */
                if (null != myNode) {
                    /*
                     * on rcupre le noeud concernant le parsing pour des projets JAVA dvelopps sous WSAD 4.x et 5.x
                     */
                    myNode = ConfigUtility.getNodeByTagName(myNode,
                            CompilingMessages.getString("configuration.java.parsing.wsad"));
                    /*
                     * on appelle diffrentes mthodes pour rcuprer les donnes
                     */
                    getFilenameFromXML(myNode);
                    /*
                     * on rcupre les valeurs de configuration des noms des cls.
                     */
                    getTagsFromXML(myNode, CompilingMessages.getString("configuration.java.parsing.wsad.keys"),
                            CompilingMessages.getString("configuration.java.parsing.wsad.keys.key"),
                            CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.name"),
                            CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.value"));
                    /*
                     * on rcupre les valeurs de configuration des valeurs des cls.
                     */
                    getTagsFromXML(myNode, CompilingMessages.getString("configuration.java.parsing.wsad.values"),
                            CompilingMessages.getString("configuration.java.parsing.wsad.values.value"),
                            CompilingMessages.getString("configuration.java.parsing.wsad.values.value.name"),
                            CompilingMessages.getString("configuration.java.parsing.wsad.values.value.value"));
                } else {
                    /* noeud non trouv */
                    isNull = true;
                }
            } else {
                /* noeud non trouv */
                isNull = true;
            }
            /* mnage */
            myNode = null;

        } else {
            /* noeud non trouv */
            isNull = true;
        }

        /* si un noeud n'a pas t trouv */
        if (isNull) {
            /* on lance une nouvelle exception */
            throw new Exception(CompilingMessages.getString("exception.xml.node_not_found"));
        }
        /* mnage */
        root = null;
    }

    /**
     * Cette mthode rcupre le nom du fichier de classpath  parser.
     * 
     * @param pNode Noeud XML  parser.
     * @throws Exception exception en cas d'erreur de parsing.
     */
    private void getFilenameFromXML(Node pNode) throws Exception {
        /*
         * on rcupre le noeud contenant le nom du fichier contenant le classpath du projet WSAD
         */
        Node myNode = ConfigUtility.getNodeByTagName(pNode,
                CompilingMessages.getString("configuration.java.parsing.wsad.filename"));

        /* si le noeud n'est pas nul, et est de type ELEMENT */
        if (null != myNode && Node.ELEMENT_NODE == myNode.getNodeType()) {
            setFilename(myNode.getFirstChild().getNodeValue().trim());

            /* sinon, il y a un problme concernant ce noeud */
        } else {
            /* on lance une nouvelle exception */
            throw new Exception(CompilingMessages.getString("exception.xml.node_not_found"));
        }
        myNode = null;
    }

    /**
     * Cette mthode rcupre le nom des cls ncessaires pour parser le fichier de classpath.
     * 
     * @param pNode noeud XML  parser.
     * @param pRootAnchor noeud racine.
     * @param pChildAnchor noeud fils.
     * @param pChildName attribut "name" du noeud fils.
     * @param pChildValue attribut "value" du noeud fils.
     * @throws Exception exception en cas d'erreur lors du parsing.
     * @see #mapKeyValues(String, String)
     */
    private void getTagsFromXML(final Node pNode, final String pRootAnchor, final String pChildAnchor,
            final String pChildName, final String pChildValue) throws Exception {
        LOGGER.trace(CompilingMessages.getString("logs.task.entering_method"));

        /* on rcupre le noeud racine contenant les cls */
        Node myNode = ConfigUtility.getNodeByTagName(pNode, pRootAnchor);

        boolean throwException = false;

        /* si le noeud est bien trouv */
        if (null != myNode && Node.ELEMENT_NODE == myNode.getNodeType()) {

            /* on rcupre le premier noeud fils */
            myNode = ConfigUtility.getNodeByTagName(myNode, pChildAnchor);

            if (null != myNode) {
                /*
                 * on initialise des variables pour la boucle qui va suivre
                 */
                NamedNodeMap attrMap = null;
                String attrValue = null, attrName = null;

                /* tant qu'il y a des noeuds */
                while (null != myNode) {
                    /* s'il est de type ELEMENT */
                    if (Node.ELEMENT_NODE == myNode.getNodeType()) {
                        /* rcupration des attributs du noeud */
                        attrMap = myNode.getAttributes();

                        /* attribut "cl" */
                        attrName = (attrMap.getNamedItem(pChildName)).getNodeValue().trim();

                        /* attribut "valeur" */
                        attrValue = (attrMap.getNamedItem(pChildValue)).getNodeValue().trim();

                        /* on mappe les cls et les valeurs */
                        mapKeyValues(attrName, attrValue);
                    }
                    /* on itre sur les noeuds */
                    myNode = myNode.getNextSibling();
                }
                /* mnage */
                attrMap = null;
                attrName = null;
                attrValue = null;
            } else {
                /* noeud vide */
                throwException = true;
            }
        } else {
            /* noeud vide */
            throwException = true;
        }

        myNode = null;

        /* une erreur s'est produite : le noeud tait vide */
        if (throwException) {
            /* on lance l'exception en rapport */
            throw new Exception(CompilingMessages.getString("exception.xml.node_not_found"));
        }
    }

    /**
     * Cette mthode permet d'attribuer  des attributs de classes des valeurs issues du fichier de configuration xml
     * <code>compiling-
     * config.xml</code>. On utilise la rflexion pour faire chuter les complexits cyclomatique,
     * cyclomatique essentielle, et d'intgration.
     * 
     * @param pKeyName nom de la cl.
     * @param pKeyValue valeur de la cl.
     * @throws Exception exception si le nom de la cl ne fait pas parti des cls pralablement dfinies dans le fichier
     *             de configuration <code>org.squale.squalix.tools.compiling.compiling.properties</code>.
     * @see #createReflectionMap()
     */
    private void mapKeyValues(String pKeyName, String pKeyValue) throws Exception {
        LOGGER.trace(CompilingMessages.getString("logs.task.entering_method"));

        /*
         * on invoque le setter correspondant  la cl pKeyName, en lui passant la valeur pKeyValue
         */
        Object[] obj = { pKeyValue };
        ((Method) (mMap.get(pKeyName))).invoke(this, obj);
    }

    /**
     * Cette mthode cre une map contenant des cls associes  des mthodes de type setter. <br />
     * En procdant ainsi, on pourra facilement affecter une valeur  une variable par rflexion.
     * 
     * @throws Exception exception de rflexion.
     * @see #mapKeyValues(String, String)
     */
    protected void createReflectionMap() throws Exception {
        LOGGER.trace(CompilingMessages.getString("logs.task.entering_method"));

        /*
         * tableau contenant la classe du paramtre  passer  chaque setter. ici, java.lang.String.
         */
        Class[] param = { String.class };

        mMap = new HashMap();

        /* balise <classpath> */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.name.classpath"),
                this.getClass().getMethod("setClasspathAnchor", param));

        /* balise <classpathentry> */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.name.classpathentry"),
                this.getClass().getMethod("setClasspathentry", param));

        /* attribut "kind" pour la balise <classpathentry> */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.name.kind"),
                this.getClass().getMethod("setKind", param));

        /* attribut "path" pour la balise <classpathentry> */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.name.path"),
                this.getClass().getMethod("setPath", param));

        /* attribut "exported" pour la balise <classpathentry> */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.keys.key.name.exported"),
                this.getClass().getMethod("setExported", param));

        /*
         * valeur "src" possible pour l'attribut "kind" pour la balise <classpathentry>
         */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.values.value.name.src"),
                this.getClass().getMethod("setSrc", param));

        /*
         * valeur "lib" possible pour l'attribut "kind" pour la balise <classpathentry>
         */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.values.value.name.lib"),
                this.getClass().getMethod("setLib", param));

        /*
         * valeur "var" possible pour l'attribut "kind" pour la balise <classpathentry>
         */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.values.value.name.var"),
                this.getClass().getMethod("setVar", param));

        /*
         * valeur "con" possible pour l'attribut "kind" pour la balise <classpathentry>
         */
        mMap.put(CompilingMessages.getString("configuration.java.parsing.wsad.values.value.name.con"),
                this.getClass().getMethod("setCon", param));
    }

    /**
     * Getter.
     * 
     * @return la valeur de la balise classpath.
     */
    public String getClasspathAnchor() {
        return mClasspathAnchor;
    }

    /**
     * Getter.
     * 
     * @return la valeur de la balise classpathentry.
     */
    public String getClasspathentry() {
        return mClasspathentry;
    }

    /**
     * Getter.
     * 
     * @return la valeur de l'attribut kind.
     */
    public String getKind() {
        return mKind;
    }

    /**
     * Getter.
     * 
     * @return la valeur de l'attribut path.
     */
    public String getPath() {
        return mPath;
    }

    /**
     * Getter.
     * 
     * @return Valeur "lib" pour l'attribut kind.
     */
    public String getLib() {
        return mLib;
    }

    /**
     * Getter.
     * 
     * @return Valeur "src" pour l'attribut kind.
     */
    public String getSrc() {
        return mSrc;
    }

    /**
     * Getter.
     * 
     * @return Valeur "var" pour l'attribut kind.
     */
    public String getVar() {
        return mVar;
    }

    /**
     * @return la valeur "con" pour l'attribut kind.
     */
    public String getCon() {
        return mCon;
    }

    /**
     * Setter.
     * 
     * @param pLib Valeur "lib" pour l'attribut kind.
     */
    public void setLib(String pLib) {
        mLib = pLib;
    }

    /**
     * @param pValue valeur "con" pour l'attribut kind.
     */
    public void setCon(String pValue) {
        mCon = pValue;
    }

    /**
     * Setter.
     * 
     * @param pVar Valeur "var" pour l'attribut kind.
     */
    public void setVar(String pVar) {
        mVar = pVar;
    }

    /**
     * Setter.
     * 
     * @param pSrc Valeur "src" pour l'attribut kind.
     */
    public void setSrc(String pSrc) {
        mSrc = pSrc;
    }

    /**
     * Setter.
     * 
     * @param pClasspathAnchor la valeur de la balise classpath.
     */
    public void setClasspathAnchor(String pClasspathAnchor) {
        mClasspathAnchor = pClasspathAnchor;
    }

    /**
     * Setter.
     * 
     * @param pClasspathentry la valeur de la balise classpathentry.
     */
    public void setClasspathentry(String pClasspathentry) {
        mClasspathentry = pClasspathentry;
    }

    /**
     * Setter.
     * 
     * @param pKind la valeur de l'attribut kind.
     */
    public void setKind(String pKind) {
        mKind = pKind;
    }

    /**
     * Setter.
     * 
     * @param pPath la valeur de l'attribut path.
     */
    public void setPath(String pPath) {
        mPath = pPath;
    }

    /**
     * @return l'attribut exported
     */
    public String getExported() {
        return mExported;
    }

    /**
     * @param pExported la valeur de l'attribut exported
     */
    public void setExported(String pExported) {
        mExported = pExported;
    }

}