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 :