view flys-artifacts/src/main/java/de/intevation/flys/collections/OutputParser.java @ 1059:fdb0f4ef96f0

Made FLYS artifacts cloneable. flys-artifacts/trunk@2531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 23 Aug 2011 11:07:21 +0000
parents 59ae2a823e73
children a70e0cbc5e02
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;

    protected Map<String, Output> outs;


    public OutputParser(ArtifactDatabase db, CallContext context) {
        this.db      = db;
        this.meta    = context.getMeta();
        this.context = context;
        this.outs    = new HashMap<String, Output>();
    }


    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 {
                pos = o.getFacets().size() + 1;
            }

            List<Facet> facets = facet2ManagedFacet(uuid, out.getFacets(), pos);
            o.addFacets(facets);
        }
    }


    public Map<String, Output> getOuts() {
        return outs;
    }


    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));
        }

        return newFacets;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org