ingo@108: package de.intevation.flys.artifacts.states; ingo@108: ingo@108: import javax.xml.xpath.XPathConstants; ingo@108: ingo@108: import org.apache.log4j.Logger; ingo@108: ingo@108: import org.w3c.dom.Node; ingo@108: ingo@108: import de.intevation.artifactdatabase.state.State; ingo@108: ingo@108: import de.intevation.artifacts.common.utils.XMLUtils; ingo@108: ingo@108: ingo@108: /** ingo@108: * @author Ingo Weinzierl ingo@108: */ ingo@108: public class StateFactory { ingo@108: ingo@108: /** The logger used in this class */ ingo@108: private static Logger logger = Logger.getLogger(StateFactory.class); ingo@108: ingo@108: /** The XPath to the classname of the state */ ingo@108: public static final String XPATH_STATE = "@state"; ingo@108: ingo@108: ingo@108: /** ingo@108: * Creates a new State based on the configured class provided by ingo@108: * stateConf. ingo@108: * ingo@108: * @param stateConf The configuration of the state. ingo@108: * ingo@108: * @return a State. ingo@108: */ ingo@108: public static State createState(Node stateConf) { ingo@108: String clazz = (String) XMLUtils.xpath( ingo@108: stateConf, XPATH_STATE, XPathConstants.STRING); ingo@108: ingo@108: State state = null; ingo@108: ingo@108: try { ingo@108: logger.debug("Create a new State for class: " + clazz); ingo@108: state = (State) Class.forName(clazz).newInstance(); ingo@108: state.setup(stateConf); ingo@108: } ingo@108: catch (InstantiationException ie) { ingo@108: logger.error(ie, ie); ingo@108: } ingo@108: catch (IllegalAccessException iae) { ingo@108: logger.error(iae, iae); ingo@108: } ingo@108: catch (ClassNotFoundException cnfe) { ingo@108: logger.error(cnfe, cnfe); ingo@108: } ingo@108: ingo@108: return state; ingo@108: } ingo@108: } ingo@108: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :