package net.sf.minuteProject.loader; import net.sf.minuteProject.loader.catalog.databasecatalog.DatabasecatalogHolder; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.apache.log4j.Logger; import org.xml.sax.InputSource; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Date; /** * User: Basile Chandesris * Date: 01/11/12 19:51 */ public class XMLRulesLoader { private static Logger logger = Logger.getLogger(XMLRulesLoader.class); private String config; private String configDir; private String digesterRule; public XMLRulesLoader() { } public XMLRulesLoader(String config, String rule) { setConfig(config); digesterRule = rule; } public XMLRulesLoader(String configDir, String config, String rule) { this(config, rule); setConfigDir(configDir); } public String getDigesterRule() { return digesterRule; } private XMLRulesLoader load() throws Exception { if (getConfigDir()==null) return load(getConfig(), getDigesterRule()); return load(getConfigDir(), getConfig(), getDigesterRule()); } private XMLRulesLoader load(String configuration, String rules) throws Exception{ XMLRulesLoader Databasecatalogholder = new XMLRulesLoader(); loadDigester(Databasecatalogholder, getInputStream(configuration), rules); return Databasecatalogholder; } private XMLRulesLoader load (String fileDirName, String fileName, String rules) throws Exception{ XMLRulesLoader Databasecatalogholder = new XMLRulesLoader(); loadDigester(Databasecatalogholder, getInputStream(fileDirName, fileName), rules); return Databasecatalogholder; } public InputStream getInputStream(String fileName) { return getClass().getClassLoader().getSystemResourceAsStream(fileName); } public InputStream getInputStream (String fileDirName, String fileName) throws Exception{ return new FileInputStream(new File(fileDirName+"/"+fileName)); } public void loadDigester(Object object, InputStream input, String rules) throws Exception { try { Digester digester = DigesterLoader.createDigester(new InputSource(rules)); digester.push(object); digester.parse(input); } catch (Exception e) { logger.error("LoadXML failed for "+ rules, e); throw e; } } public void loadDigester(Object object, String input, String rules) throws Exception { try { Digester digester = DigesterLoader.createDigester(new InputSource(rules)); digester.push(object); digester.parse(new InputSource(input)); } catch (Exception e) { logger.error("LoadXML failed for "+ rules, e); throw e; } } public String getConfig() { return config; } public void setConfig(String config) { this.config = config; } public String getConfigDir() { return configDir; } public void setConfigDir(String configDir) { this.configDir = configDir; } public static void main(String args[]) throws Exception { if (args.length < 1) { System.exit(1); } Date startDate = new Date(); logger.info("start time = "+startDate); XMLRulesLoader loader = new XMLRulesLoader(args[0], "net/sf/minuteProject/loader/catalog/databasecatalog/Digester-Databasecatalog-rules.xml"); Date endDate = new Date(); logger.info("time taken : "+(endDate.getTime()-startDate.getTime())/1000+ "s."); } }