ingo@346: package de.intevation.flys.collections; ingo@346: ingo@944: import java.util.ArrayList; ingo@346: import java.util.HashMap; ingo@944: import java.util.List; ingo@346: import java.util.Map; ingo@346: ingo@346: import org.apache.log4j.Logger; ingo@346: ingo@346: import de.intevation.artifacts.ArtifactDatabase; ingo@346: import de.intevation.artifacts.ArtifactDatabaseException; ingo@944: import de.intevation.artifacts.CallContext; ingo@346: import de.intevation.artifacts.CallMeta; ingo@346: ingo@346: import de.intevation.artifactdatabase.state.DefaultOutput; ingo@944: import de.intevation.artifactdatabase.state.Facet; ingo@346: import de.intevation.artifactdatabase.state.Output; ingo@346: ingo@944: import de.intevation.flys.artifacts.FLYSArtifact; ingo@945: import de.intevation.flys.artifacts.model.ManagedFacetAdapter; ingo@346: ingo@346: ingo@346: public class OutputParser { ingo@346: ingo@346: /** Constant XPath that points to the outputmodes of an artifact.*/ ingo@346: public static final String XPATH_ARTIFACT_OUTPUTMODES = ingo@346: "/art:result/art:outputmodes/art:output"; ingo@346: ingo@346: ingo@346: private static Logger logger = Logger.getLogger(OutputParser.class); ingo@346: ingo@346: protected ArtifactDatabase db; ingo@346: protected CallMeta meta; ingo@944: protected CallContext context; ingo@346: ingo@346: protected Map outs; ingo@346: ingo@346: ingo@944: public OutputParser(ArtifactDatabase db, CallContext context) { ingo@944: this.db = db; ingo@944: this.meta = context.getMeta(); ingo@944: this.context = context; ingo@944: this.outs = new HashMap(); ingo@346: } ingo@346: ingo@346: ingo@346: public void parse(String uuid) ingo@346: throws ArtifactDatabaseException ingo@346: { ingo@346: logger.debug("OutputParser.parse: " + uuid); ingo@346: ingo@944: FLYSArtifact flys = (FLYSArtifact) db.getRawArtifact(uuid); ingo@346: ingo@944: List outList = flys.getOutputs(context); ingo@346: ingo@944: for (Output out: outList) { ingo@944: String name = out.getName(); ingo@346: ingo@944: Output o = outs.get(name); ingo@944: int pos = 1; ingo@346: ingo@944: if (o == null) { ingo@944: o = new DefaultOutput( ingo@944: out.getName(), ingo@944: out.getDescription(), ingo@944: out.getMimeType(), ingo@944: new ArrayList(), ingo@944: out.getType()); ingo@944: ingo@944: outs.put(name, o); ingo@944: } ingo@944: else { ingo@944: pos = o.getFacets().size() + 1; ingo@944: } ingo@944: ingo@944: List facets = facet2ManagedFacet(uuid, out.getFacets(), pos); ingo@944: o.addFacets(facets); ingo@346: } ingo@346: } ingo@346: ingo@346: ingo@346: public Map getOuts() { ingo@346: return outs; ingo@346: } ingo@346: ingo@346: ingo@944: protected List facet2ManagedFacet( ingo@944: String uuid, ingo@944: List old, ingo@944: int pos) ingo@944: { ingo@944: List newFacets = new ArrayList(old.size()); ingo@346: ingo@944: for (Facet f: old) { ingo@945: newFacets.add(new ManagedFacetAdapter(f, uuid, pos++, 1)); ingo@346: } ingo@346: ingo@944: return newFacets; ingo@346: } ingo@346: } ingo@346: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :