# HG changeset patch # User Ingo Weinzierl # Date 1300117392 0 # Node ID b18aebd1342f5449988be2e3feedefcf8ff851d6 # Parent 25593857b8f8f216ac8f7faddf520f5eb1f2f2fb Added an abstract base class DefaultState for States. flys-artifacts/trunk@1466 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 25593857b8f8 -r b18aebd1342f flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon Mar 14 14:16:37 2011 +0000 +++ b/flys-artifacts/ChangeLog Mon Mar 14 15:43:12 2011 +0000 @@ -1,3 +1,13 @@ +2011-03-14 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/states/DefaultState.java: + New. This is the base state for the FLYS application. It provides a + method that creates the dynamic ui node for the DESCRIBE. + + * src/main/java/de/intevation/flys/artifacts/states/RiverSelect.java, + src/main/java/de/intevation/flys/artifacts/states/GaugeSelect.java: Both + classes extend the abstract base class DefaultState. + 2011-03-14 Ingo Weinzierl * src/main/java/de/intevation/flys/artifacts/resources/Resources.java: diff -r 25593857b8f8 -r b18aebd1342f flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DefaultState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DefaultState.java Mon Mar 14 15:43:12 2011 +0000 @@ -0,0 +1,118 @@ +package de.intevation.flys.artifacts.states; + +import java.util.Collection; +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.resources.Resources; + + +/** + * @author Ingo Weinzierl + */ +public abstract class DefaultState extends AbstractState { + + /** The logger that is used in this class.*/ + private static Logger logger = Logger.getLogger(DefaultState.class); + + + public Element describe( + Document document, + Node root, + CallContext context, + String uuid) + { + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element ui = ProtocolUtils.createArtNode( + creator, "dynamic", null, null); + + Map theData = getData(); + if (theData == null) { + return ui; + } + + Collection dataItems = theData.values(); + + for (StateData data: dataItems) { + String name = data.getName(); + Element select = createData(creator, data, context); + + Element choices = ProtocolUtils.createArtNode( + creator, "choices", null, null); + + select.appendChild(choices); + ui.appendChild(select); + + Element[] items = createItems(creator, name, context); + for (Element item: items) { + choices.appendChild(item); + } + } + + return ui; + } + + + /** + * This method creates the root node that contains the list of selectable + * items. + * + * @param cr The ElementCreator. + * @param name The name of the amount of data. + * + * @return the root node of the item list. + */ + protected Element createData( + XMLUtils.ElementCreator cr, + StateData data, + CallContext context) + { + Element select = ProtocolUtils.createArtNode( + cr, "select", null, null); + cr.addAttr(select, "name", data.getName()); + + Element label = ProtocolUtils.createArtNode( + cr, "label", null, null); + + label.setTextContent(Resources.getMsg( + context.getMeta(), + getID(), + getID())); + + return select; + } + + + /** + * This method creates a list of items. These items represent the amount of + * input data that is possible for this state. + * + * @param cr The ElementCreator. + * @param name The name of the amount of data. + * + * @return a list of items. + */ + protected abstract Element[] createItems( + XMLUtils.ElementCreator cr, + String name, + CallContext context); +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 25593857b8f8 -r b18aebd1342f flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeSelect.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeSelect.java Mon Mar 14 14:16:37 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeSelect.java Mon Mar 14 15:43:12 2011 +0000 @@ -3,6 +3,7 @@ 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; @@ -31,7 +32,7 @@ } - public void describe( + public Element describe( Document document, Node root, CallContext context, @@ -39,6 +40,8 @@ { // TODO Implement me logger.error("Currently not implemented."); + + return null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 25593857b8f8 -r b18aebd1342f 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 Mon Mar 14 14:16:37 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverSelect.java Mon Mar 14 15:43:12 2011 +0000 @@ -1,32 +1,28 @@ 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; +import de.intevation.flys.artifacts.resources.Resources; /** * @author Ingo Weinzierl */ -public class RiverSelect extends AbstractState { +public class RiverSelect extends DefaultState { /** The logger used in this class. */ private static Logger logger = Logger.getLogger(RiverSelect.class); @@ -35,7 +31,6 @@ * The default constructor that initializes an empty State object. */ public RiverSelect() { - super(null, null); } @@ -49,76 +44,46 @@ } - /** - * 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) + protected Element createData( + XMLUtils.ElementCreator cr, + StateData data, + CallContext context) { - 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 select = ProtocolUtils.createArtNode( + cr, "select", + new String[] { "uiprovider" }, + new String[] { "select_with_map" }); + cr.addAttr(select, "name", data.getName()); - 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[] { "uiprovider" }, - new String[] { "select_with_map" }); + Element label = ProtocolUtils.createArtNode( + cr, "label", null, null); - Element label = ProtocolUtils.createArtNode( - creator, "label", null, null); - - Element choices = ProtocolUtils.createArtNode( - creator, "choices", null, null); - - label.setTextContent("River"); + Element choices = ProtocolUtils.createArtNode( + cr, "choices", null, null); - select.appendChild(label); - select.appendChild(choices); - - List rivers = RiverFactory.getRivers(); + label.setTextContent(Resources.getMsg( + context.getMeta(), + getID(), + getID())); - for (River river: rivers) { - choices.appendChild(createRiverItem(creator, river)); - } + return select; + } - dynamicUI.appendChild(select); - } + + protected Element[] createItems( + XMLUtils.ElementCreator cr, + String name, + CallContext context) + { + List rivers = RiverFactory.getRivers(); + Element[] items = new Element[rivers.size()]; + + int idx = 0; + for (River river: rivers) { + items[idx++] = createRiverItem(cr, river); } - ui.appendChild(staticUI); - ui.appendChild(dynamicUI); - - root.appendChild(ui); + return items; }