Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/collections/OutputParser.java @ 4031:e4e345d81a65
issue889/2
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 04 Oct 2012 14:54:44 +0200 |
parents | 1203e12c97a6 |
children |
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; /** * The OutputParsers task is to pull Artifacts from database and put * its outputs and facets into some structures. */ 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); logger.debug(" has " + outList.size() + " Outputs."); for (Output out: outList) { String name = out.getName(); logger.debug("Process Output '" + name + "'"); 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()); logger.debug("There are " + old.size() + " Facets for this Output."); 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 :