/** * 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.jraf.bootstrap.config; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.FactoryConfigurationError; import org.apache.commons.digester.Digester; import org.apache.commons.digester.RuleSetBase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xml.sax.SAXException; import org.squale.jraf.commons.exception.JrafConfigException; import org.squale.jraf.commons.util.DTDEntityResolver; /** * <p>Title : AbstractProviderConfigReader</p> * <p>Description : Classe permettant de lire le fichier de configuration des providers</p> * <p>Copyright : Copyright (c) 2004</p> * * @author Eric BELLARD */ public abstract class AbstractProviderConfigReader extends RuleSetBase implements IProviderConfigReader { /** logger */ private static Log log = LogFactory.getLog(AbstractProviderConfigReader.class); /** dtd location */ private static final String[] _dtdRegistration = { "-//Squale Software,Inc.//DTD Jraf Provider Configuration 2.0//EN", "org/squale/jraf/commons/resources/providers-config.dtd" }; private String configFileName; /** * Lis le fichier de configuration d'un provider * @param in_fileName chemin du fichier de configuration * @return liste de configuration */ public List readConfig(InputStream in_stream) throws JrafConfigException { // liste de configuration List lc_config = new ArrayList(); Digester lc_digester = new Digester(); lc_digester.setEntityResolver(new DTDEntityResolver(_dtdRegistration)); lc_digester.addRuleSet(this); lc_digester.push(lc_config); try { lc_digester.parse(in_stream); } catch (IOException ioe) { ioe.printStackTrace(); throw new JrafConfigException( "Impossible de lire le fichier de configuration", ioe); } catch (SAXException saxe) { saxe.printStackTrace(); throw new JrafConfigException( "Impossible de parser le fichier de configuration", saxe); } catch (FactoryConfigurationError e) { e.printStackTrace(); throw new JrafConfigException( "Impossible de charger le parser xml", e); } finally { if (in_stream != null) { try { in_stream.close(); lc_digester.clear(); } catch (IOException ie) { // nothing to do } } } // retourne la liste de configuration return lc_config; } /** * Digester configuration * @param in_digester digester */ public void addRuleInstances(Digester in_digester) { // creation d'une configuration d'un provider in_digester.addObjectCreate("providers/provider", ProviderConfig.class); // fixe les proprietes in_digester.addSetProperties("providers/provider", "id", "id"); in_digester.addSetProperties( "providers/provider", "class", "className"); in_digester.addCallMethod( "providers/provider/init-param", "putProperty", 2); in_digester.addCallParam("providers/provider/init-param/param-name", 0); in_digester.addCallParam( "providers/provider/init-param/param-value", 1); in_digester.addBeanPropertySetter( "providers/provider/load-on-startup", "loadOnStartup"); // passe au provider suivant in_digester.addSetNext( "providers/provider", "add", ProviderConfig.class.getName()); } /* (non-Javadoc) * @see org.squale.jraf.bootstrap.config.IProviderConfigReader#readConfig() */ public abstract List readConfig() throws JrafConfigException; /** * Retourne le chemin du fichier de configuration * @return chemin du fichier de configuration */ public String getConfigFileName() { return configFileName; } /** * Fixe le chemin du fichier de configuration * @param string chemin du fichier de configuration */ public void setConfigFileName(String string) { configFileName = string; } }