diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/AbstractStaticStateArtifact.java @ 4183:1755a1bfe5ce

Merged
author Christian Lins <christian.lins@intevation.de>
date Fri, 19 Oct 2012 09:20:52 +0200
parents 4e1b3b4ef132
children 79878efbdf07
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/AbstractStaticStateArtifact.java	Tue Oct 16 12:44:15 2012 +0200
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/AbstractStaticStateArtifact.java	Fri Oct 19 09:20:52 2012 +0200
@@ -1,10 +1,26 @@
 package de.intevation.flys.artifacts;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import de.intevation.artifacts.CallContext;
+import de.intevation.artifacts.ArtifactNamespaceContext;
+
+import de.intevation.artifacts.common.utils.XMLUtils;
+import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
+
+import de.intevation.artifactdatabase.ProtocolUtils;
+import de.intevation.artifactdatabase.data.StateData;
 import de.intevation.artifactdatabase.state.State;
 
+import de.intevation.flys.artifacts.states.StaticState;
+
 /**
  * A abstract baseclass for Artifacts which are using only one static state.
  *
@@ -15,7 +31,10 @@
  */
 public abstract class AbstractStaticStateArtifact extends StaticFLYSArtifact {
 
-    private transient State staticstate;
+    private transient StaticState staticstate;
+
+    private static final Logger logger =
+        Logger.getLogger(AbstractStaticStateArtifact.class);
 
     /**
      * Get a list containing the one and only State.
@@ -45,11 +64,11 @@
      */
     protected abstract void initStaticState();
 
-    protected void setStaticState(State state) {
+    protected void setStaticState(StaticState state) {
         this.staticstate = state;
     }
 
-    protected State getStaticState() {
+    protected StaticState getStaticState() {
         if (staticstate == null) {
             initStaticState();
         }
@@ -66,4 +85,56 @@
     protected State getState(Object context, String stateID) {
         return getStaticState();
     }
+
+    @Override
+    public Document describe(Document data, CallContext cc) {
+        logger.debug("Describe artifact: " + identifier());
+
+        Document desc = XMLUtils.newDocument();
+
+        ElementCreator creator = new ElementCreator(
+            desc,
+            ArtifactNamespaceContext.NAMESPACE_URI,
+            ArtifactNamespaceContext.NAMESPACE_PREFIX);
+
+        Element root = ProtocolUtils.createRootNode(creator);
+        desc.appendChild(root);
+
+        Element name = ProtocolUtils.createArtNode(
+            creator, "name",
+            new String[] { "value" },
+            new String[] { getName() });
+
+        root.appendChild(name);
+        root.appendChild(createOutputModes(cc, desc, creator));
+
+        ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash());
+
+        // Add the data to an anonymous state.
+        Collection<StateData> datas = getAllData();
+        if (datas.size() > 0) {
+            Element ui = creator.create("ui");
+            Element staticE = creator.create("static");
+
+            StaticState current = getStaticState();
+            Element state = current.describeStatic(this, desc, root, cc, null);
+            staticE.appendChild(state);
+
+            for (StateData dataItem : datas) {
+                Element itemelent = creator.create("data");
+                creator.addAttr(itemelent, "name", dataItem.getName(), true);
+                creator.addAttr(itemelent, "type", dataItem.getType(), true);
+                state.appendChild(itemelent);
+                Element valuement = creator.create("item");
+                creator.addAttr(valuement, "label", dataItem.getDescription(), true);
+                creator.addAttr(valuement, "value", dataItem.getValue().toString(), true);
+                itemelent.appendChild(valuement);
+            }
+
+            ui.appendChild(staticE);
+            root.appendChild(ui);
+        }
+
+        return desc;
+    }
 }

http://dive4elements.wald.intevation.org