view flys-artifacts/src/main/java/de/intevation/flys/artifacts/WaterlevelArtifact.java @ 3318:dbe2f85bf160

merged flys-artifacts/2.8
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:14:35 +0200
parents 3c006a53e551
children afc7bfb4800b
line wrap: on
line source
package de.intevation.flys.artifacts;

import de.intevation.artifactdatabase.state.DefaultFacet;
import de.intevation.artifactdatabase.state.Facet;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallMeta;

import de.intevation.flys.artifacts.states.DefaultState;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import org.w3c.dom.Document;


/**
 * Clone of an WINFOArtifact to expose exactly one waterlevel only.
 * All Facets of the "longitudinal_section" output will be added to the
 * "w_differences" output and filterFacets adjusted accordingly.
 *
 * @TODO Straighten inheritance-line (waterlevel-WINFO or vice versa).
 */
public class WaterlevelArtifact extends WINFOArtifact {

    /** The logger for this class. */
    private static Logger logger = Logger.getLogger(WaterlevelArtifact.class);

    /** The name of the artifact. */
    public static final String ARTIFACT_NAME = "waterlevel";


    /**
     * The default constructor.
     */
    public WaterlevelArtifact() {
    }


    /**
     * Setup and restate longitudinal_section filterfacets to apply to the
     * w_differences output, too. Also, for w_differences, add respective q-
     * filter facets.
     */
    public void setup(
        String          identifier,
        ArtifactFactory factory,
        Object          context,
        CallMeta        callMeta,
        Document        data)
    {
        super.setup(identifier, factory, context, callMeta, data);
        // For w_differences, also allow q-facets.
        if(filterFacets != null) {
            List<Facet> list = new ArrayList<Facet>();
            List<Facet> wlist = filterFacets.get("longitudinal_section");
            for (Facet f: wlist) {
                if (!f.getName().equals("longitudinal_section.q")) {
                    DefaultFacet df = new DefaultFacet(f.getIndex(),
                        "longitudinal_section.q", "");
                    list.add(df);
                }
            }

            list.addAll(wlist);

            filterFacets.put("w_differences", list);
        }
    }


    /**
     * Clone important stuff of an WINFOArtifact.
     * @param artifact the WINFOArtifact to clone stuff from.
     */
    protected void initialize(
        Artifact artifact,
        Object context,
        CallMeta meta)
    {
        WINFOArtifact winfo = (WINFOArtifact) artifact;
        this.data = winfo.cloneData();
        logger.debug("Cloned data of winfo artifact.");
        // Statically add Facets.
        List<Facet> fs = new ArrayList<Facet>();
        DefaultState state = (DefaultState) getCurrentState(context);
        state.computeInit(this, hash(), context, meta, fs);
        if (!fs.isEmpty()) {
            logger.debug("Facets to add in WaterlevelArtifact.initialize .");
            facets.put(getCurrentStateId(), fs);
        }
        else {
            logger.debug("No facets to add in WaterlevelArtifact.initialize ("
                + state.getID() + ").");
        }
    }


    /**
     * Returns the name of the concrete artifact.
     *
     * @return the name of the concrete artifact.
     */
    public String getName() {
        return ARTIFACT_NAME;
    }


    /**
     * Determines Facets initial disposition regarding activity (think of
     * selection in Client ThemeList GUI).
     * WaterlevelArtifact Facets should come to live "inactive" (always
     * return 0).
     *
     * @param facetName name of the facet.
     * @param index     index of the facet.
     *
     * @return Always 0 to have Facets initial predisposition to "inactive".
     */
    @Override
    public int getInitialFacetActivity(
        String outputName,
        String facetName,
        int index)
    {
        return 0;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org