Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticFLYSArtifact.java @ 4454:c0a418cbd80c
Register flowvelocity artifact factory.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 08 Nov 2012 16:51:58 +0100 |
parents | 529d0e61e70d |
children | a2735a4bf75e |
line wrap: on
line source
package de.intevation.flys.artifacts; 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.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.artifactdatabase.data.StateData; import de.intevation.artifactdatabase.ProtocolUtils; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Output; import de.intevation.artifactdatabase.state.State; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; /** * A basic FLYSArtifact. */ public abstract class StaticFLYSArtifact extends FLYSArtifact { /** Private logger. */ private static final Logger logger = Logger.getLogger(StaticFLYSArtifact.class); /** Path to 'ids' (data) in doc that comes from datacage. */ public static final String XPATH_IDS = "/art:action/art:ids/@value"; /** * Create description document which includes outputmodes. * @param data ignored. */ @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); ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash()); root.appendChild(createOutputModes(cc, desc, creator)); // 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"); Element state = creator.create("state"); ui.appendChild(staticE); staticE.appendChild(state); root.appendChild(ui); 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); } } return desc; } /** * Return the value of id element in Datacage data document. * @param data Document as passed by datacage. * @return the id element value of data document. */ public static String getDatacageIDValue(Document data) { return XMLUtils.xpathString(data, XPATH_IDS, ArtifactNamespaceContext.INSTANCE); } protected Element createOutputModes( CallContext cc, Document doc, ElementCreator creator) { Element outs = ProtocolUtils.createArtNode( creator, "outputmodes", null, null); State state = getCurrentState(cc); List<Output> list = state.getOutputs(); if (list != null && list.size() > 0) { List<Facet> fs = facets.get(state.getID()); if (fs != null && fs.size() > 0) { List<Output> generated = generateOutputs(list, fs); logger.debug("Found " + fs.size() + " current facets."); if (!generated.isEmpty()) { ProtocolUtils.appendOutputModes( doc, outs, generated); } } else { logger.debug("No facets found for the current state."); } } return outs; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :