# HG changeset patch # User Ingo Weinzierl # Date 1297156285 0 # Node ID b51e92fef704f6269f437ad77fe7f56727f5d685 # Parent 394b9580ceae979203bcc29028e9e23876cb4df4 The RiverSelect state creates the dynamic UI part for the describe document now. flys-artifacts/trunk@1304 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 394b9580ceae -r b51e92fef704 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Tue Feb 08 09:02:18 2011 +0000 +++ b/flys-artifacts/ChangeLog Tue Feb 08 09:11:25 2011 +0000 @@ -1,3 +1,14 @@ +2011-02-08 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java: The + RiverSelect state is called to create the UI part of the describe + document. + + * src/main/java/de/intevation/flys/artifacts/states/RiverSelect.java: + Implemented the dynamic UI part of describe(). The static part is not + inserted into the describe document at the moment. We need a reference to + the previous states for this. + 2011-02-08 Ingo Weinzierl * src/main/java/de/intevation/flys/artifacts/model/RiverFactory.java, diff -r 394b9580ceae -r b51e92fef704 flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Tue Feb 08 09:02:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Tue Feb 08 09:11:25 2011 +0000 @@ -124,13 +124,13 @@ ArtifactNamespaceContext.NAMESPACE_PREFIX); Element root = ProtocolUtils.createRootNode(creator); + description.appendChild(root); + ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash()); ProtocolUtils.appendState(creator, root, currentState); ProtocolUtils.appendReachableStates(creator, root, reachable); - logger.warn("TODO: Implement the model and ui description!"); - description.appendChild(root); - + currentState.describe(description, root, context, identifier()); return description; } diff -r 394b9580ceae -r b51e92fef704 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverSelect.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverSelect.java Tue Feb 08 09:02:18 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverSelect.java Tue Feb 08 09:11:25 2011 +0000 @@ -1,14 +1,27 @@ package de.intevation.flys.artifacts.states; +import java.util.Collection; +import java.util.List; +import java.util.Map; + import org.apache.log4j.Logger; import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.w3c.dom.Node; import de.intevation.artifacts.CallContext; +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.common.utils.XMLUtils; + +import de.intevation.artifactdatabase.ProtocolUtils; +import de.intevation.artifactdatabase.data.StateData; import de.intevation.artifactdatabase.state.AbstractState; +import de.intevation.flys.artifacts.model.River; +import de.intevation.flys.artifacts.model.RiverFactory; + /** * @author Ingo Weinzierl @@ -36,14 +49,100 @@ } + /** + * This method creates the UI part of the artifact's describe document. The + * ui part consists of a static - representing previous inserted data - and + * a dynamic part - representing data that is necessary to be inserted in + * the current state. + * + * @param document The describe document. + * @param root The root node of the describe document. + * @param context The CallContext. + * @param uuid The uuid of the artifact. + */ public void describe( Document document, Node root, CallContext context, String uuid) { - // TODO Implement me - logger.error("Currently not implemented."); + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element ui = ProtocolUtils.createArtNode( + creator, "ui", null, null); + + Element staticUI = ProtocolUtils.createArtNode( + creator, "static", null, null); + + // TODO Add the static data + logger.error("TODO: ADD STATIC DATA TO DESCRIBE DOCUMENT."); + + Element dynamicUI = ProtocolUtils.createArtNode( + creator, "dynamic", null, null); + + Map data = getData(); + + if (data != null) { + Collection items = data.values(); + + for (StateData item: items) { + Element select = ProtocolUtils.createArtNode( + creator, "select", + new String[] { "special" }, + new String[] { "river" }); + + Element label = ProtocolUtils.createArtNode( + creator, "label", null, null); + + Element choices = ProtocolUtils.createArtNode( + creator, "choices", null, null); + + label.setTextContent("River"); + + select.appendChild(label); + select.appendChild(choices); + + List rivers = RiverFactory.getRivers(); + + for (River river: rivers) { + choices.appendChild(createRiverItem(creator, river)); + } + + dynamicUI.appendChild(select); + } + } + + ui.appendChild(staticUI); + ui.appendChild(dynamicUI); + + root.appendChild(ui); + } + + + /** + * This method creates a node that represents a river item. This node + * contains the label and the value that describe the river. + * + * @param cr The ElementCreator. + * @param river The river. + * + * @return the element that contains the information about the river. + */ + protected Element createRiverItem(XMLUtils.ElementCreator cr, River river) { + Element item = ProtocolUtils.createArtNode(cr, "item", null, null); + Element label = ProtocolUtils.createArtNode(cr, "label", null, null); + Element value = ProtocolUtils.createArtNode(cr, "value", null, null); + + label.setTextContent(river.getName()); + value.setTextContent(river.getName()); + + item.appendChild(label); + item.appendChild(value); + + return item; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :