/** * 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/>. */ package org.squale.squalecommon.enterpriselayer.facade.config.xml; import java.io.InputStream; import org.apache.commons.digester.Digester; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.squalecommon.enterpriselayer.businessobject.config.AuditFrequencyBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.web.BubbleConfBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.web.VolumetryConfBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.AdminParamsBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.SqualixConfigurationBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.StopTimeBO; import org.squale.squalecommon.enterpriselayer.businessobject.rule.QualityGridBO; import org.squale.squalecommon.util.xml.XmlImport; /** * Importation de la configuration Squalix � partir de son fichier de configuration */ public class SqualixConfigImport extends XmlImport { /** Log */ private static Log LOG = LogFactory.getLog( SqualixConfigImport.class ); /** Nom publique de la DTD */ static final String PUBLIC_DTD = "-//Squale//DTD Squalix Configuration 1.2//EN"; /** Localisation de la DTD */ static final String DTD_LOCATION = "/org/squale/squalecommon/dtd/squalix-config-1.2.dtd"; /** Nom du fichier xml contenant les r�gles */ static final String RULES_FILE_NAME = "/org/squale/squalecommon/enterpriselayer/facade/config/xml/configRules.xml"; /** * Constructeur */ public SqualixConfigImport() { super( LOG ); } /** * Importation de la configuration squalix * * @param pStream flux de configuration * @param pErrors erreurs de traitement ou vide si aucune erreur n'est rencontr�e * @return la configuration import�e sous la forme de SqualixConfigurationBO */ public SqualixConfigurationBO importConfig( InputStream pStream, StringBuffer pErrors ) { Digester configDigester = setupDigester( pErrors ); SqualixConfigurationBO config = new SqualixConfigurationBO(); configDigester.push( config ); parse( configDigester, pStream, pErrors ); return config; } /** * Configuration du digester Le digester est utilis� pour le chargement du fichier XML de r�gles * * @param pErrors erreurs de traitement * @return digester */ private Digester setupDigester( StringBuffer pErrors ) { Digester configDigester = preSetupDigester( PUBLIC_DTD, DTD_LOCATION, pErrors ); // Traitement des param�tres g�n�raux configDigester.addObjectCreate( "configuration/stoptimes/stoptime", StopTimeBO.class ); configDigester.addSetProperties( "configuration/stoptimes/stoptime" ); configDigester.addSetNext( "configuration/stoptimes/stoptime", "addStopTime" ); // Traitement de la fr�quence max des audits en fonction des acc�s configDigester.addObjectCreate( "configuration/frequencies/frequency", AuditFrequencyBO.class ); configDigester.addSetProperties( "configuration/frequencies/frequency" ); configDigester.addSetNext( "configuration/frequencies/frequency", "addFrequency" ); // Traitement des t�ches TaskFactory taskFactory = new TaskFactory(); configDigester.addFactoryCreate( "configuration/tasks/task", taskFactory ); configDigester.addSetProperties( "configuration/tasks/task", "class", "className" ); // Traitement de la r�cup�ration des sources SourceManagementFactory sourceManagementFactory = new SourceManagementFactory(); TaskRefFactory taskRefFactory = new TaskRefFactory( taskFactory.getTasks() ); configDigester.addFactoryCreate( "configuration/sourcemanagements/sourcemanagement", sourceManagementFactory ); configDigester.addSetProperties( "configuration/sourcemanagements/sourcemanagement" ); configDigester.addFactoryCreate( "configuration/sourcemanagements/sourcemanagement/analysis/task-ref", taskRefFactory ); configDigester.addSetNext( "configuration/sourcemanagements/sourcemanagement/analysis/task-ref", "addAnalysisTask" ); registerParameterTag( configDigester, "configuration/sourcemanagements/sourcemanagement/analysis/task-ref" ); configDigester.addFactoryCreate( "configuration/sourcemanagements/sourcemanagement/termination/task-ref", taskRefFactory ); registerParameterTag( configDigester, "configuration/sourcemanagements/sourcemanagement/termination/task-ref" ); configDigester.addSetNext( "configuration/sourcemanagements/sourcemanagement/termination/task-ref", "addTerminationTask" ); configDigester.addSetNext( "configuration/sourcemanagements/sourcemanagement", "addSourceManagement" ); // Traitement des profils ProfileFactory profileFactory = new ProfileFactory(); configDigester.addFactoryCreate( "configuration/profiles/profile", profileFactory ); configDigester.addSetProperties( "configuration/profiles/profile" ); // Les grilles configDigester.addObjectCreate( "configuration/profiles/profile/integrityConstraints/grids/grid", QualityGridBO.class ); configDigester.addSetProperties( "configuration/profiles/profile/integrityConstraints/grids/grid" ); configDigester.addSetNext( "configuration/profiles/profile/integrityConstraints/grids/grid", "addGrid" ); // Les Configurations // Le scatterplot configDigester.addObjectCreate( "configuration/profiles/profile/integrityConstraints/displayConfigurations/bubble", BubbleConfBO.class ); String[] nameInXML = { "xtre", "ytre", "xPos", "yPos" }; String[] nameInBO = { "XTre", "YTre", "horizontalAxisPos", "verticalAxisPos" }; configDigester.addSetProperties( "configuration/profiles/profile/integrityConstraints/displayConfigurations/bubble", nameInXML, nameInBO ); configDigester.addSetNext( "configuration/profiles/profile/integrityConstraints/displayConfigurations/bubble", "addProfileDisplayConf" ); // La volum�trie configDigester.addObjectCreate( "configuration/profiles/profile/integrityConstraints/displayConfigurations/volumetries/volumetry", VolumetryConfBO.class ); configDigester.addSetProperties( "configuration/profiles/profile/integrityConstraints/displayConfigurations/volumetries/volumetry", "component", "componentType" ); registerTreTag( configDigester, "configuration/profiles/profile/integrityConstraints/displayConfigurations/volumetries/volumetry" ); configDigester.addSetNext( "configuration/profiles/profile/integrityConstraints/displayConfigurations/volumetries/volumetry", "addProfileDisplayConf" ); // Les t�ches configDigester.addFactoryCreate( "configuration/profiles/profile/analysis/task-ref", taskRefFactory ); registerParameterTag( configDigester, "configuration/profiles/profile/analysis/task-ref" ); configDigester.addSetNext( "configuration/profiles/profile/analysis/task-ref", "addAnalysisTask" ); configDigester.addFactoryCreate( "configuration/profiles/profile/termination/task-ref", taskRefFactory ); registerParameterTag( configDigester, "configuration/profiles/profile/termination/task-ref" ); configDigester.addSetNext( "configuration/profiles/profile/termination/task-ref", "addTerminationTask" ); configDigester.addSetNext( "configuration/profiles/profile", "addProfile" ); // two-to-compute - value configDigester.addObjectCreate( "configuration/admin-params/two-to-compute", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/two-to-compute", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/two-to-compute", 0 ); configDigester.addCallParam( "configuration/admin-params/two-to-compute", 1 ); configDigester.addSetNext( "configuration/admin-params/two-to-compute", "addAdminParam" ); // mail - smtp server configDigester.addObjectCreate( "configuration/admin-params/mail/smtp-server", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/mail/smtp-server", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/mail/smtp-server", 0 ); configDigester.addCallParam( "configuration/admin-params/mail/smtp-server", 1 ); configDigester.addSetNext( "configuration/admin-params/mail/smtp-server", "addAdminParam" ); // mail - default sender configDigester.addObjectCreate( "configuration/admin-params/mail/sender-address", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/mail/sender-address", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/mail/sender-address", 0 ); configDigester.addCallParam( "configuration/admin-params/mail/sender-address", 1 ); configDigester.addSetNext( "configuration/admin-params/mail/sender-address", "addAdminParam" ); // mail - squale's administrators mailing list configDigester.addObjectCreate( "configuration/admin-params/mail/admin-mailing-list", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/mail/admin-mailing-list", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/mail/admin-mailing-list", 0 ); configDigester.addCallParam( "configuration/admin-params/mail/admin-mailing-list", 1 ); configDigester.addSetNext( "configuration/admin-params/mail/admin-mailing-list", "addAdminParam" ); // mail - smtp authentication needed ? configDigester.addObjectCreate( "configuration/admin-params/mail/smtp-authent-needed", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/mail/smtp-authent-needed", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/mail/smtp-authent-needed", 0 ); configDigester.addCallParam( "configuration/admin-params/mail/smtp-authent-needed", 1 ); configDigester.addSetNext( "configuration/admin-params/mail/smtp-authent-needed", "addAdminParam" ); // mail - smtp authentication : user name configDigester.addObjectCreate( "configuration/admin-params/mail/smtp-username", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/mail/smtp-username", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/mail/smtp-username", 0 ); configDigester.addCallParam( "configuration/admin-params/mail/smtp-username", 1 ); configDigester.addSetNext( "configuration/admin-params/mail/smtp-username", "addAdminParam" ); // mail - smtp authentication : password configDigester.addObjectCreate( "configuration/admin-params/mail/smtp-password", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/mail/smtp-password", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/mail/smtp-password", 0 ); configDigester.addCallParam( "configuration/admin-params/mail/smtp-password", 1 ); configDigester.addSetNext( "configuration/admin-params/mail/smtp-password", "addAdminParam" ); // shared repository - mapping java - project - loc configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/mapping/java/module/loc", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/mapping/java/module/loc", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/mapping/java/module/loc", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/mapping/java/module/loc", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/mapping/java/module/loc", "addAdminParam" ); // shared repository - mapping java - project - number of classes configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/mapping/java/module/number-of-classes", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/mapping/java/module/number-of-classes", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/mapping/java/module/number-of-classes", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/mapping/java/module/number-of-classes", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/mapping/java/module/number-of-classes", "addAdminParam" ); // shared repository - mapping java - class - loc configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/mapping/java/class/loc", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/mapping/java/class/loc", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/mapping/java/class/loc", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/mapping/java/class/loc", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/mapping/java/class/loc", "addAdminParam" ); // shared repository - mapping java - class - number of methods configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/mapping/java/class/number-of-methods", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/mapping/java/class/number-of-methods", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/mapping/java/class/number-of-methods", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/mapping/java/class/number-of-methods", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/mapping/java/class/number-of-methods", "addAdminParam" ); // shared repository - mapping java - method - loc configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/mapping/java/method/loc", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/mapping/java/method/loc", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/mapping/java/method/loc", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/mapping/java/method/loc", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/mapping/java/method/loc", "addAdminParam" ); // shared repository - mapping java - method - vg configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/mapping/java/method/vg", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/mapping/java/method/vg", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/mapping/java/method/vg", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/mapping/java/method/vg", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/mapping/java/method/vg", "addAdminParam" ); // shared repository - squalix server name which will done the export configDigester.addObjectCreate( "configuration/admin-params/shared-repository-export/squalix-server/name", AdminParamsBO.class ); configDigester.addCallMethod( "configuration/admin-params/shared-repository-export/squalix-server/name", "setAdminParam", 2, new Class[] { String.class, String.class } ); configDigester.addCallParamPath( "configuration/admin-params/shared-repository-export/squalix-server/name", 0 ); configDigester.addCallParam( "configuration/admin-params/shared-repository-export/squalix-server/name", 1 ); configDigester.addSetNext( "configuration/admin-params/shared-repository-export/squalix-server/name", "addAdminParam" ); return configDigester; } /** * Enregistrement d'un param�tre de t�che * * @param pDigester digester * @param pPath chemin */ private void registerParameterTag( Digester pDigester, String pPath ) { String path = new StringBuffer( pPath ).append( "/parameter" ).toString(); pDigester.addCallMethod( path, "addParameter", 2 ); pDigester.addCallParam( path, 0, "name" ); pDigester.addCallParam( path, 1, "value" ); } /** * Enregistrement d'un tre de configuration de volum�trie * * @param pDigester digester * @param pPath chemin */ private void registerTreTag( Digester pDigester, String pPath ) { String path = new StringBuffer( pPath ).append( "/tre" ).toString(); pDigester.addCallMethod( path, "addTre", 1 ); pDigester.addCallParam( path, 0, "name" ); } }