view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/CrossSectionWaterLineFacet.java @ 2024:2bb160b2768e

New facet, will ease converting other facets to be able to contribute to area computations. flys-artifacts/trunk@3481 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 20 Dec 2011 09:00:51 +0000
parents e384d78ff78b
children f834a6961bb7
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import org.apache.log4j.Logger;

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

import de.intevation.flys.model.CrossSectionLine;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.CallContext;

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

import de.intevation.flys.artifacts.WaterLineArtifact;


/**
 * Facet for Waterlines in Cross Sections.
 */
public class CrossSectionWaterLineFacet
extends      DefaultFacet
implements   FacetTypes {

    private static Logger logger = Logger.getLogger(CrossSectionWaterLineFacet.class);


    /** Trivial constructor, set (maybe localized) description. */
    public CrossSectionWaterLineFacet(int idx, String description) {
        super(idx, CROSS_SECTION_WATER_LINE, description);
    }


    /**
     * Gets waterline (crossed with cross section) of waterlevel.
     */
    public Object getData(Artifact artifact, CallContext context) {
        logger.debug("Get data for cross section water line");

        List<DataProvider> providers = context.
            getDataProvider(CrossSectionFacet.BLACKBOARD_CS_MASTER_DATA);
        if (providers.size() < 1) {
            logger.warn("Could not find Cross-Section data provider.");
            return new double[][] {};
        }
        
        Object crossSection = providers.get(0)
            .provideData(CrossSectionFacet.BLACKBOARD_CS_MASTER_DATA, null, context);

        WaterLineArtifact winfo = (WaterLineArtifact)artifact;

        return winfo.getWaterLines(this.getIndex(), (CrossSectionLine) crossSection);
    }


    public List getDataProviderKeys(Artifact art) {
        List list = new ArrayList();
        list.add(art.identifier() + getIndex());
        return list;
    }


    /**
     * Can provide the curve/line drawn.
     * @param key      will respond on uuid+index
     * @param param    ignored
     * @param context  ignored
     * @return data to draw "intersection" of master cross section and
     *         the waterlevel at that position.
     */
    public Object provideBlackboardData(Artifact artifact,
        Object key,
        Object param,
        CallContext context
    ) {
        if (key.equals(artifact.identifier() + getIndex())) {
            return getData(artifact, context);
        }
        else {
            logger.warn("Cannot provide data for key: " + key);
            return null;
        }
    }


    /** Do a deep copy. */
    @Override 
    public Facet deepCopy() {
        CrossSectionWaterLineFacet copy = new CrossSectionWaterLineFacet(
            this.getIndex(),
            this.description);
        copy.set(this);
        return copy;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org