ingo@106: package de.intevation.flys.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:
ingo@107: import de.intevation.artifactdatabase.transition.Transition;
ingo@107:
ingo@106: import de.intevation.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 :