ingo@105: package de.intevation.flys.artifacts;
ingo@105:
ingo@109: import java.util.List;
ingo@109:
ingo@105: import org.w3c.dom.Document;
ingo@110: import org.w3c.dom.Element;
ingo@105:
ingo@105: import org.apache.log4j.Logger;
ingo@105:
ingo@110: import de.intevation.artifacts.ArtifactNamespaceContext;
ingo@105: import de.intevation.artifacts.CallContext;
ingo@105:
ingo@110: import de.intevation.artifactdatabase.ProtocolUtils;
ingo@110: import de.intevation.artifactdatabase.state.State;
ingo@110: import de.intevation.artifactdatabase.state.StateEngine;
ingo@112: import de.intevation.artifactdatabase.transition.TransitionEngine;
ingo@110:
ingo@109: import de.intevation.artifacts.common.utils.XMLUtils;
ingo@109:
ingo@109: import de.intevation.flys.artifacts.context.FLYSContext;
ingo@105:
ingo@105:
ingo@105: /**
ingo@105: * The default WINFO artifact.
ingo@105: *
ingo@105: * @author Ingo Weinzierl
ingo@105: */
ingo@119: public class WINFOArtifact extends FLYSArtifact {
ingo@105:
ingo@105: /** The logger for this class */
ingo@105: private static Logger logger = Logger.getLogger(WINFOArtifact.class);
ingo@105:
ingo@105:
ingo@105: /**
ingo@105: * The default constructor.
ingo@105: */
ingo@105: public WINFOArtifact() {
ingo@105: }
ingo@105:
ingo@105:
ingo@105: /**
ingo@105: * This method returns a description of this artifact.
ingo@105: *
ingo@105: * @param data Some data.
ingo@105: * @param CallContext The CallContext.
ingo@105: *
ingo@105: * @return the description of this artifact.
ingo@105: */
ingo@105: public Document describe(Document data, CallContext context) {
ingo@119: logger.debug("Describe: the current state is: " + getCurrentStateId());
ingo@105:
ingo@112: FLYSContext flysContext = null;
ingo@112: if (context instanceof FLYSContext) {
ingo@112: flysContext = (FLYSContext) context;
ingo@112: }
ingo@112: else {
ingo@112: flysContext = (FLYSContext) context.globalContext();
ingo@112: }
ingo@110:
ingo@112: StateEngine stateEngine = (StateEngine) flysContext.get(
ingo@112: FLYSContext.STATE_ENGINE_KEY);
ingo@112:
ingo@112: TransitionEngine transitionEngine = (TransitionEngine) flysContext.get(
ingo@112: FLYSContext.TRANSITION_ENGINE_KEY);
ingo@112:
ingo@112: List reachable = transitionEngine.getReachableStates(
ingo@119: getCurrentState(context), stateEngine);
ingo@112:
ingo@112: Document description = XMLUtils.newDocument();
ingo@110: XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator(
ingo@110: description,
ingo@110: ArtifactNamespaceContext.NAMESPACE_URI,
ingo@110: ArtifactNamespaceContext.NAMESPACE_PREFIX);
ingo@110:
ingo@110: Element root = ProtocolUtils.createRootNode(creator);
ingo@115: description.appendChild(root);
ingo@115:
ingo@119: State current = getCurrentState(context);
ingo@119:
ingo@110: ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash());
ingo@119: ProtocolUtils.appendState(creator, root, current);
ingo@112: ProtocolUtils.appendReachableStates(creator, root, reachable);
ingo@110:
ingo@119: current.describe(description, root, context, identifier());
ingo@110:
ingo@110: return description;
ingo@105: }
ingo@105: }
ingo@105: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :