ingo@109: package de.intevation.flys.artifacts.states;
ingo@109:
ingo@115: import java.util.Collection;
ingo@115: import java.util.List;
ingo@115: import java.util.Map;
ingo@115:
ingo@109: import org.apache.log4j.Logger;
ingo@109:
ingo@109: import org.w3c.dom.Document;
ingo@115: import org.w3c.dom.Element;
ingo@109: import org.w3c.dom.Node;
ingo@109:
ingo@109: import de.intevation.artifacts.CallContext;
ingo@115: import de.intevation.artifacts.ArtifactNamespaceContext;
ingo@109:
ingo@115: import de.intevation.artifacts.common.utils.XMLUtils;
ingo@115:
ingo@115: import de.intevation.artifactdatabase.ProtocolUtils;
ingo@115: import de.intevation.artifactdatabase.data.StateData;
ingo@109: import de.intevation.artifactdatabase.state.AbstractState;
ingo@109:
ingo@115: import de.intevation.flys.artifacts.model.River;
ingo@115: import de.intevation.flys.artifacts.model.RiverFactory;
ingo@115:
ingo@109:
ingo@109: /**
ingo@109: * @author Ingo Weinzierl
ingo@109: */
ingo@109: public class RiverSelect extends AbstractState {
ingo@109:
ingo@109: /** The logger used in this class. */
ingo@109: private static Logger logger = Logger.getLogger(RiverSelect.class);
ingo@109:
ingo@109: /**
ingo@109: * The default constructor that initializes an empty State object.
ingo@109: */
ingo@109: public RiverSelect() {
ingo@109: super(null, null);
ingo@109: }
ingo@109:
ingo@109:
ingo@109: /**
ingo@109: * Initialize the state based on the state node in the configuration.
ingo@109: *
ingo@109: * @param config The state configuration node.
ingo@109: */
ingo@109: public void setup(Node config) {
ingo@109: super.setup(config);
ingo@109: }
ingo@109:
ingo@109:
ingo@115: /**
ingo@115: * This method creates the UI part of the artifact's describe document. The
ingo@115: * ui part consists of a static - representing previous inserted data - and
ingo@115: * a dynamic part - representing data that is necessary to be inserted in
ingo@115: * the current state.
ingo@115: *
ingo@115: * @param document The describe document.
ingo@115: * @param root The root node of the describe document.
ingo@115: * @param context The CallContext.
ingo@115: * @param uuid The uuid of the artifact.
ingo@115: */
ingo@109: public void describe(
ingo@109: Document document,
ingo@109: Node root,
ingo@109: CallContext context,
ingo@109: String uuid)
ingo@109: {
ingo@115: XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator(
ingo@115: document,
ingo@115: ArtifactNamespaceContext.NAMESPACE_URI,
ingo@115: ArtifactNamespaceContext.NAMESPACE_PREFIX);
ingo@115:
ingo@115: Element ui = ProtocolUtils.createArtNode(
ingo@115: creator, "ui", null, null);
ingo@115:
ingo@115: Element staticUI = ProtocolUtils.createArtNode(
ingo@115: creator, "static", null, null);
ingo@115:
ingo@115: // TODO Add the static data
ingo@115: logger.error("TODO: ADD STATIC DATA TO DESCRIBE DOCUMENT.");
ingo@115:
ingo@115: Element dynamicUI = ProtocolUtils.createArtNode(
ingo@115: creator, "dynamic", null, null);
ingo@115:
ingo@115: Map data = getData();
ingo@115:
ingo@115: if (data != null) {
ingo@115: Collection items = data.values();
ingo@115:
ingo@115: for (StateData item: items) {
ingo@115: Element select = ProtocolUtils.createArtNode(
ingo@115: creator, "select",
ingo@116: new String[] { "uiprovider" },
ingo@116: new String[] { "select_with_map" });
ingo@115:
ingo@115: Element label = ProtocolUtils.createArtNode(
ingo@115: creator, "label", null, null);
ingo@115:
ingo@115: Element choices = ProtocolUtils.createArtNode(
ingo@115: creator, "choices", null, null);
ingo@115:
ingo@115: label.setTextContent("River");
ingo@115:
ingo@115: select.appendChild(label);
ingo@115: select.appendChild(choices);
ingo@115:
ingo@115: List rivers = RiverFactory.getRivers();
ingo@115:
ingo@115: for (River river: rivers) {
ingo@115: choices.appendChild(createRiverItem(creator, river));
ingo@115: }
ingo@115:
ingo@115: dynamicUI.appendChild(select);
ingo@115: }
ingo@115: }
ingo@115:
ingo@115: ui.appendChild(staticUI);
ingo@115: ui.appendChild(dynamicUI);
ingo@115:
ingo@115: root.appendChild(ui);
ingo@115: }
ingo@115:
ingo@115:
ingo@115: /**
ingo@115: * This method creates a node that represents a river item. This node
ingo@115: * contains the label and the value that describe the river.
ingo@115: *
ingo@115: * @param cr The ElementCreator.
ingo@115: * @param river The river.
ingo@115: *
ingo@115: * @return the element that contains the information about the river.
ingo@115: */
ingo@115: protected Element createRiverItem(XMLUtils.ElementCreator cr, River river) {
ingo@115: Element item = ProtocolUtils.createArtNode(cr, "item", null, null);
ingo@115: Element label = ProtocolUtils.createArtNode(cr, "label", null, null);
ingo@115: Element value = ProtocolUtils.createArtNode(cr, "value", null, null);
ingo@115:
ingo@115: label.setTextContent(river.getName());
ingo@115: value.setTextContent(river.getName());
ingo@115:
ingo@115: item.appendChild(label);
ingo@115: item.appendChild(value);
ingo@115:
ingo@115: return item;
ingo@109: }
ingo@109: }
ingo@109: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :