Mercurial > dive4elements > river
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; + } }