All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nuiton.eugene.models.state.StateModelReader Maven / Gradle / Ivy

/*
 * #%L
 * EUGene :: EUGene
 * 
 * $Id: StateModelReader.java 1243 2013-05-05 08:32:43Z tchemit $
 * $HeadURL: https://svn.nuiton.org/eugene/tags/eugene-2.11/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelReader.java $
 * %%
 * Copyright (C) 2004 - 2012 CodeLutin, Chatellier Eric
 * %%
 * This program 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 (at your option) any later version.
 * 
 * This program 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 Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public 
 * License along with this program.  If not, see
 * .
 * #L%
 */

package org.nuiton.eugene.models.state;

import org.apache.commons.digester3.Digester;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.ModelHelper;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.models.state.xml.DigesterStateModelRuleSet;
import org.nuiton.eugene.models.state.xml.StateModelImpl;
import org.nuiton.util.FileUtil;
import org.nuiton.util.RecursiveProperties;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;

/**
 * To read state model files into a memory state model.
 * 

* Created: 26 oct. 2009 * * @author fdesbois * @version $Id: StateModelReader.java 1243 2013-05-05 08:32:43Z tchemit $ * @plexus.component role="org.nuiton.eugene.ModelReader" role-hint="statemodel" */ public class StateModelReader extends ModelReader { private static final Log log = LogFactory.getLog(StateModelReader.class); @Override public String getModelType() { return ModelHelper.ModelType.STATE.getAlias(); } @Override public String getInputType() { return ModelHelper.ModelInputType.XML.getAlias(); } @Override public StateModel read(File... files) { Digester digester = new Digester(); digester.addRuleSet(new DigesterStateModelRuleSet()); StateModelImpl stateModel = new StateModelImpl(); // process each file for (File file : files) { // fin a deplacer try { digester.push(stateModel); digester.parse(file); // try to load property file loadPropertyFile(file, stateModel); } catch (IOException e) { log.warn("Can't read model file", e); } catch (SAXException e) { log.warn("Can't read model file", e); } } return stateModel; } /** * Try to load property file, associated to current statemodel file * * @param stateModelFile * @param stateModel */ protected void loadPropertyFile(File stateModelFile, StateModelImpl stateModel) { // recherche et charge le fichier propriete associe au modele File dir = stateModelFile.getParentFile(); String ext = FileUtil.extension(stateModelFile); String name = FileUtil.basename(stateModelFile, "." + ext); File propFile = new File(dir, name + ".properties"); RecursiveProperties prop = new RecursiveProperties(); if (!propFile.exists()) { if (log.isInfoEnabled()) { log.info("No property file associated to model : " + propFile); } } else { if (log.isInfoEnabled()) { log.info("Reading model property file " + propFile); } FileInputStream inStream = null; try { inStream = new FileInputStream(propFile); prop.load(inStream); } catch (IOException e) { log.warn("Cannot read property file " + propFile, e); } finally { try { if (inStream != null) { inStream.close(); } } catch (IOException e) { log.warn("Cannot close property file " + propFile, e); } } // on ajoute les proprietes du fichier associe au model for (Enumeration e = prop.keys(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); String value = prop.getProperty(key); if (!key.startsWith("model.tagvalue.")) { log.warn("only tagvalue is allowed on model in properties"); } else { String tag = key.substring("model.tagvalue.".length()); stateModel.addTagValue(tag, value); } } } } }