tim@335: package de.intevation.gnv.state;
tim@335:
sascha@779: import de.intevation.gnv.artifacts.GNVArtifactBase;
sascha@779:
tim@335: import org.apache.log4j.Logger;
sascha@779:
tim@335: import org.w3c.dom.Node;
tim@335:
tim@335: /**
ingo@796: * This factory should be used to create new state objects with help of a
ingo@796: * configuration segment.
ingo@796: *
sascha@780: * @author Tim Englich
sascha@778: *
tim@335: */
tim@335: public class StateFactory {
tim@335:
tim@335: /**
tim@335: * the logger, used to log exceptions and additonaly information
tim@335: */
tim@335: private static Logger log = Logger.getLogger(GNVArtifactBase.class);
tim@335:
tim@335: private static StateFactory instance = null;
tim@335:
tim@335: /**
tim@335: * Constructor
tim@335: */
tim@335: public StateFactory() {
tim@335: super();
tim@335: }
tim@335:
ingo@796: /**
ingo@796: * Return the instance of this class.
ingo@796: *
ingo@796: * @return
ingo@796: */
tim@335: public static StateFactory getInstance() {
tim@335: if (instance == null) {
tim@335: instance = new StateFactory();
tim@335: }
tim@335: return instance;
tim@335: }
tim@335:
ingo@796: /**
ingo@796: * This method creates a new state with help of the information in
ingo@796: * configuration and calls its setup method after creation.
ingo@796: *
ingo@796: * @param configuration
ingo@796: * @return the new state.
ingo@796: */
tim@335: public State createState(Node configuration) {
tim@335: log.debug("StateFactory.createState");
tim@335: State state = null;
tim@335: try {
tim@335: String classname = ((org.w3c.dom.Element)configuration).getAttribute("state");
tim@335: state = (State) (Class.forName(classname).newInstance());
tim@335: state.setup(configuration);
tim@335: } catch (InstantiationException e) {
tim@335: log.error(e, e);
tim@335: } catch (IllegalAccessException e) {
tim@335: log.error(e, e);
tim@335: } catch (ClassNotFoundException e) {
tim@335: log.error(e, e);
tim@335: }
tim@335: return state;
tim@335: }
tim@335:
tim@335: }
ingo@796: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :