view flys-artifacts/src/main/java/de/intevation/flys/artifacts/WaterlevelArtifact.java @ 5415:5bac3e75f59c

WaterlevelSelectState: Avoid npe with extreme results.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 26 Mar 2013 09:40:05 +0100
parents d440057b36f7
children
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.artifactdatabase.state.FacetActivity;

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";

    static {
        // TODO: Move to configuration.
        FacetActivity.Registry.getInstance()
            .register(ARTIFACT_NAME, FacetActivity.INACTIVE);
    }

    /**
     * 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(ChartType.LS);
            if (wlist == null) {
                logger.warn("No matching filterfacets found");
                dumpFilterFacets();
            } else {
                for (Facet f: wlist) {
                    if (!f.getName().equals(LONGITUDINAL_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;
        setData(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 .");
            addFacets(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;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org