Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/collections/OutputParser.java @ 2089:0da8874bd378
Added initial state to map artifact to be able to advance and step back.
The map artifact overrides describe() to have the complete UI information in the
describe response document.
flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Fri, 06 Jan 2012 12:02:10 +0000 |
parents | 2fe270661b20 |
children | 22732713c54d |
line wrap: on
line source
package de.intevation.flys.collections; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import de.intevation.artifacts.ArtifactDatabase; import de.intevation.artifacts.ArtifactDatabaseException; 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.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.model.ManagedFacetAdapter; public class OutputParser { /** Constant XPath that points to the outputmodes of an artifact. */ public static final String XPATH_ARTIFACT_OUTPUTMODES = "/art:result/art:outputmodes/art:output"; private static Logger logger = Logger.getLogger(OutputParser.class); protected ArtifactDatabase db; protected CallMeta meta; protected CallContext context; /** Map outputs name to Output. */ protected Map<String, Output> outs; /** Map facets name to list of Facets. */ protected List<Facet> facets; /** * @param db Database used to fetch artifacts, outputs and facets. */ public OutputParser(ArtifactDatabase db, CallContext context) { this.db = db; this.meta = context.getMeta(); this.context = context; this.outs = new HashMap<String, Output>(); this.facets = new ArrayList<Facet>(); } /** * Gets raw artifact with given id and sorts outputs in mapping. * Converts Facets to ManagedFacets on the way. * @param uuid uuid of artifact to load from database. */ public void parse(String uuid) throws ArtifactDatabaseException { logger.debug("OutputParser.parse: " + uuid); FLYSArtifact flys = (FLYSArtifact) db.getRawArtifact(uuid); List<Output> outList = flys.getOutputs(context); for (Output out: outList) { String name = out.getName(); Output o = outs.get(name); int pos = 1; if (o == null) { o = new DefaultOutput( out.getName(), out.getDescription(), out.getMimeType(), new ArrayList<Facet>(), out.getType()); outs.put(name, o); } else { logger.debug("OutputParser.parse: Use 'old' Output"); pos = o.getFacets().size() + 1; } List<Facet> mfacets = facet2ManagedFacet(uuid, out.getFacets(), pos); o.addFacets(mfacets); this.facets.addAll(mfacets); } } /** * Access mapping of Outputname to Output. */ public Map<String, Output> getOuts() { return outs; } /** * Access all facets. */ public List<Facet> getFacets() { return this.facets; } /** * Creates a list of ManagedFacets from list of Facets. * @param pos Position of first facet (for each other the positions * will be increased). */ protected List<Facet> facet2ManagedFacet( String uuid, List<Facet> old, int pos) { List<Facet> newFacets = new ArrayList<Facet>(old.size()); for (Facet f: old) { newFacets.add(new ManagedFacetAdapter(f, uuid, pos++, 1, 1)); } return newFacets; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :