teichmann@5831: package org.dive4elements.river.artifacts; ingo@937: felix@1969: import java.util.Collection; ingo@937: import java.util.List; ingo@937: ingo@937: import org.apache.log4j.Logger; ingo@937: ingo@937: import org.w3c.dom.Document; ingo@937: import org.w3c.dom.Element; ingo@937: teichmann@5831: import org.dive4elements.artifacts.ArtifactNamespaceContext; teichmann@5831: import org.dive4elements.artifacts.CallContext; ingo@937: teichmann@5831: import org.dive4elements.artifactdatabase.data.StateData; teichmann@5831: import org.dive4elements.artifactdatabase.ProtocolUtils; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.Output; teichmann@5831: import org.dive4elements.artifactdatabase.state.State; ingo@937: teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; ingo@937: felix@1969: /** felix@1969: * A basic FLYSArtifact. felix@1969: */ ingo@937: public abstract class StaticFLYSArtifact extends FLYSArtifact { ingo@937: felix@3050: /** Private logger. */ ingo@937: private static final Logger logger = ingo@937: Logger.getLogger(StaticFLYSArtifact.class); ingo@937: felix@2740: /** Path to 'ids' (data) in doc that comes from datacage. */ felix@2740: public static final String XPATH_IDS = "/art:action/art:ids/@value"; ingo@937: felix@1969: /** felix@1969: * Create description document which includes outputmodes. felix@1969: * @param data ignored. felix@1969: */ ingo@937: @Override ingo@937: public Document describe(Document data, CallContext cc) { ingo@937: logger.debug("Describe artifact: " + identifier()); ingo@937: ingo@937: Document desc = XMLUtils.newDocument(); ingo@937: ingo@937: ElementCreator creator = new ElementCreator( ingo@937: desc, ingo@937: ArtifactNamespaceContext.NAMESPACE_URI, ingo@937: ArtifactNamespaceContext.NAMESPACE_PREFIX); ingo@937: ingo@937: Element root = ProtocolUtils.createRootNode(creator); ingo@937: desc.appendChild(root); ingo@937: bjoern@3937: Element name = ProtocolUtils.createArtNode( bjoern@3937: creator, "name", bjoern@3937: new String[] { "value" }, bjoern@3937: new String[] { getName() }); bjoern@3937: bjoern@3937: root.appendChild(name); bjoern@3937: ingo@937: ProtocolUtils.appendDescribeHeader(creator, root, identifier(), hash()); ingo@943: root.appendChild(createOutputModes(cc, desc, creator)); ingo@937: felix@1969: // Add the data to an anonymous state. bjoern@3920: Collection datas = getAllData(); felix@1969: if (datas.size() > 0) { felix@1969: Element ui = creator.create("ui"); felix@1969: Element staticE = creator.create("static"); felix@1969: Element state = creator.create("state"); felix@1969: ui.appendChild(staticE); felix@1969: staticE.appendChild(state); felix@1969: root.appendChild(ui); sascha@3076: felix@1969: for (StateData dataItem : datas) { felix@1969: Element itemelent = creator.create("data"); felix@1969: creator.addAttr(itemelent, "name", dataItem.getName(), true); felix@1969: creator.addAttr(itemelent, "type", dataItem.getType(), true); felix@1969: state.appendChild(itemelent); felix@1969: Element valuement = creator.create("item"); felix@1969: creator.addAttr(valuement, "label", dataItem.getDescription(), true); felix@1969: creator.addAttr(valuement, "value", dataItem.getValue().toString(), true); felix@1969: itemelent.appendChild(valuement); felix@1969: } felix@1969: } felix@1969: ingo@937: return desc; ingo@937: } ingo@937: ingo@937: felix@2741: /** felix@2741: * Return the value of id element in Datacage data document. felix@2741: * @param data Document as passed by datacage. felix@2741: * @return the id element value of data document. felix@2741: */ felix@2741: public static String getDatacageIDValue(Document data) { felix@2741: return XMLUtils.xpathString(data, XPATH_IDS, felix@2741: ArtifactNamespaceContext.INSTANCE); felix@2741: } felix@2741: felix@2741: bjoern@4156: protected Element createOutputModes( ingo@943: CallContext cc, ingo@943: Document doc, ingo@943: ElementCreator creator) ingo@943: { bjoern@4498: logger.debug("createOutputModes"); bjoern@4498: ingo@937: Element outs = ProtocolUtils.createArtNode( ingo@937: creator, "outputmodes", null, null); ingo@937: ingo@937: State state = getCurrentState(cc); bjoern@4498: bjoern@4498: logger.debug("Current state is " + state.getID()); bjoern@4498: ingo@937: List list = state.getOutputs(); ingo@937: ingo@937: if (list != null && list.size() > 0) { bjoern@4497: List fs = getFacets(state.getID()); felix@1771: if (fs != null && fs.size() > 0) { felix@1771: List generated = generateOutputs(list, fs); ingo@937: felix@1771: logger.debug("Found " + fs.size() + " current facets."); ingo@937: if (!generated.isEmpty()) { ingo@937: ProtocolUtils.appendOutputModes( ingo@943: doc, outs, generated); ingo@937: } ingo@937: } ingo@937: else { ingo@937: logger.debug("No facets found for the current state."); ingo@937: } ingo@937: } ingo@937: ingo@937: return outs; ingo@937: } ingo@937: } ingo@937: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :