# HG changeset patch # User Ingo Weinzierl # Date 1311008940 0 # Node ID c256061287d74a14c890c21007e09073186d1da9 # Parent 5de90b0cff8e3288df2994ff8c943439301996fc Simplified the code to read all provided Outputs of an Artifact. flys-artifacts/trunk@2357 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 5de90b0cff8e -r c256061287d7 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon Jul 18 15:07:47 2011 +0000 +++ b/flys-artifacts/ChangeLog Mon Jul 18 17:09:00 2011 +0000 @@ -1,3 +1,16 @@ +2011-07-18 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: Added a + method that returns the Outputs for the Artifact. + + * src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java: + Adapeted the call of OutputParser. + + * src/main/java/de/intevation/flys/collections/OutputParser.java: + Simplified the code to read the Outputs of Artifacts. This parser will + now longer parse the DESCRIBE documents of the Artifacts, but query the + Outputs via FLYSArtifact.getOutputs() directly. + 2011-07-18 Ingo Weinzierl * src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java, diff -r 5de90b0cff8e -r c256061287d7 flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Mon Jul 18 15:07:47 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java Mon Jul 18 17:09:00 2011 +0000 @@ -1111,6 +1111,48 @@ } + public List getOutputs(CallContext context) { + List stateIds = getPreviousStateIds(); + + DefaultState cur = (DefaultState) getCurrentState(context); + try { + if (cur.validate(this, context)) { + stateIds.add(cur.getID()); + } + } + catch (IllegalArgumentException iae) { } + + List generated = new ArrayList(); + + FLYSContext flysContext = getFlysContext(context); + StateEngine engine = (StateEngine) flysContext.get( + FLYSContext.STATE_ENGINE_KEY); + + for (String stateId: stateIds) { + DefaultState state = (DefaultState) engine.getState(stateId); + + List list = state.getOutputs(); + if (list == null || list.size() == 0) { + logger.debug("-> No output modes for this state."); + continue; + } + + List fs = facets.get(stateId); + if (fs == null || fs.size() == 0) { + logger.debug("No facets found."); + continue; + } + + List o = generateOutputs(list, fs); + + generated.addAll(o); + } + + + return generated; + } + + protected List generateOutputs(List list, List fs) { List generated = new ArrayList(); diff -r 5de90b0cff8e -r c256061287d7 flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java --- a/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Mon Jul 18 15:07:47 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Mon Jul 18 17:09:00 2011 +0000 @@ -265,7 +265,7 @@ ArtifactNamespaceContext.NAMESPACE_PREFIX); AttributeParser aParser = new AttributeParser(); - OutputParser oParser = new OutputParser(db, context.getMeta()); + OutputParser oParser = new OutputParser(db, context); for (String uuid: items) { try { diff -r 5de90b0cff8e -r c256061287d7 flys-artifacts/src/main/java/de/intevation/flys/collections/OutputParser.java --- a/flys-artifacts/src/main/java/de/intevation/flys/collections/OutputParser.java Mon Jul 18 15:07:47 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/OutputParser.java Mon Jul 18 17:09:00 2011 +0000 @@ -1,27 +1,22 @@ package de.intevation.flys.collections; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; -import javax.xml.xpath.XPathConstants; - import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - import de.intevation.artifacts.ArtifactDatabase; import de.intevation.artifacts.ArtifactDatabaseException; -import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; import de.intevation.artifactdatabase.state.DefaultOutput; +import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Output; -import de.intevation.artifacts.common.utils.XMLUtils; - +import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.model.ManagedFacet; @@ -36,14 +31,16 @@ protected ArtifactDatabase db; protected CallMeta meta; + protected CallContext context; protected Map outs; - public OutputParser(ArtifactDatabase db, CallMeta meta) { - this.db = db; - this.meta = meta; - this.outs = new HashMap(); + public OutputParser(ArtifactDatabase db, CallContext context) { + this.db = db; + this.meta = context.getMeta(); + this.context = context; + this.outs = new HashMap(); } @@ -52,24 +49,32 @@ { logger.debug("OutputParser.parse: " + uuid); - // XXX I am not sure if it works well every time with an empty - // document in the describe operation of an artifact. - Document description = db.describe(uuid, null, meta); + FLYSArtifact flys = (FLYSArtifact) db.getRawArtifact(uuid); - NodeList outs = (NodeList) XMLUtils.xpath( - description, - XPATH_ARTIFACT_OUTPUTMODES, - XPathConstants.NODESET, - ArtifactNamespaceContext.INSTANCE); + List outList = flys.getOutputs(context); - int num = outs != null ? outs.getLength() : 0; - - logger.debug("Artifact has " + num + " outputs."); + for (Output out: outList) { + String name = out.getName(); - for (int i = 0; i < num; i++) { - Element out = (Element)outs.item(i); + Output o = outs.get(name); + int pos = 1; - parseOutput(uuid, out); + if (o == null) { + o = new DefaultOutput( + out.getName(), + out.getDescription(), + out.getMimeType(), + new ArrayList(), + out.getType()); + + outs.put(name, o); + } + else { + pos = o.getFacets().size() + 1; + } + + List facets = facet2ManagedFacet(uuid, out.getFacets(), pos); + o.addFacets(facets); } } @@ -79,71 +84,22 @@ } - protected void addItem(String out, ManagedFacet item) { - Output o = outs.get(out); - - if (o != null) { - int num = o.getFacets().size(); - item.setPosition(num+1); + protected List facet2ManagedFacet( + String uuid, + List old, + int pos) + { + List newFacets = new ArrayList(old.size()); - o.addFacet(item); - } - } - - - protected void parseOutput(String uuid, Element out) { - - String uri = ArtifactNamespaceContext.NAMESPACE_URI; - - String name = out.getAttributeNS(uri, "name"); - - if (outs.get(name) == null) { - logger.debug("Create new output: " + name); - newOutput(out, name); + for (Facet f: old) { + newFacets.add(new ManagedFacet( + f.getName(), + f.getIndex(), + f.getDescription(), + uuid, pos++, 1)); } - parseItems(uuid, out, name); - } - - - protected void newOutput(Element out, String name) { - - String uri = ArtifactNamespaceContext.NAMESPACE_URI; - - String desc = out.getAttributeNS(uri, "description"); - String mimetype = out.getAttributeNS(uri, "mime-type"); - String type = out.getAttributeNS(uri, "type"); - - Output o = new DefaultOutput(name, desc, mimetype, type); - - outs.put(name, o); - } - - - protected void parseItems(String uuid, Node out, String outname) { - NodeList facets = (NodeList) XMLUtils.xpath( - out, "art:facets/art:facet", - XPathConstants.NODESET, - ArtifactNamespaceContext.INSTANCE); - - int num = facets != null ? facets.getLength() : 0; - - String uri = ArtifactNamespaceContext.NAMESPACE_URI; - - logger.debug("Output has " + num + " facets."); - - for (int i = 0; i < num; i++) { - Element facet = (Element) facets.item(i); - - String name = facet.getAttributeNS(uri, "name"); - String desc = facet.getAttributeNS(uri, "description"); - String index = facet.getAttributeNS(uri, "index"); - - ManagedFacet item = new ManagedFacet( - name, Integer.parseInt(index), desc, uuid, 1, 1); - - addItem(outname, item); - } + return newFacets; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :