teichmann@5831: package org.dive4elements.river.artifacts.transitions; ingo@106: ingo@106: import javax.xml.xpath.XPathConstants; ingo@106: ingo@106: import org.apache.log4j.Logger; ingo@106: ingo@106: import org.w3c.dom.Node; ingo@106: teichmann@5831: import org.dive4elements.artifactdatabase.transition.Transition; ingo@107: teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; ingo@106: ingo@106: ingo@106: /** ingo@106: * @author Ingo Weinzierl ingo@106: */ ingo@106: public class TransitionFactory { ingo@106: ingo@106: /** The logger used in this class */ ingo@106: private static Logger logger = Logger.getLogger(TransitionFactory.class); ingo@106: ingo@106: /** The XPath to the classname of the transition */ ingo@106: public static final String XPATH_TRANSITION = "@transition"; ingo@106: ingo@106: /** The XPath to the current state ID */ ingo@106: public static final String XPATH_CURRENT_STATE = "from/@state"; ingo@106: ingo@106: /** The XPath to the target state ID */ ingo@106: public static final String XPATH_TARGET_STATE = "to/@state"; ingo@106: ingo@106: ingo@106: /** ingo@106: * Creates a new Transition based on the configured class provided by ingo@106: * transitionConf. ingo@106: * ingo@106: * @param transitionConf The configuration of the transition. ingo@106: * ingo@106: * @return a Transition. ingo@106: */ ingo@106: public static Transition createTransition(Node transitionConf) { ingo@106: String clazz = (String) XMLUtils.xpath( ingo@106: transitionConf, XPATH_TRANSITION, XPathConstants.STRING); ingo@106: ingo@106: Transition transition = null; ingo@106: ingo@106: try { ingo@106: transition = (Transition) Class.forName(clazz).newInstance(); ingo@106: ingo@106: String from = (String) XMLUtils.xpath( ingo@106: transitionConf, XPATH_CURRENT_STATE, XPathConstants.STRING); ingo@106: String to = (String) XMLUtils.xpath( ingo@106: transitionConf, XPATH_TARGET_STATE, XPathConstants.STRING); ingo@106: ingo@354: transition.init(transitionConf); ingo@106: transition.setFrom(from); ingo@106: transition.setTo(to); ingo@106: } ingo@106: catch (InstantiationException ie) { ingo@106: logger.error(ie, ie); ingo@106: } ingo@106: catch (IllegalAccessException iae) { ingo@106: logger.error(iae, iae); ingo@106: } ingo@106: catch (ClassNotFoundException cnfe) { ingo@106: logger.error(cnfe, cnfe); ingo@106: } ingo@106: ingo@106: return transition; ingo@106: } ingo@106: } ingo@106: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :