view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/CrossSectionWaterLineFacet.java @ 5430:ba489a16f4d8

Datacage Function Resolver: Lift from static to object space.
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 26 Mar 2013 16:16:12 +0100
parents 719680a282e5
children
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import org.apache.log4j.Logger;

import java.util.List;

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

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.flys.artifacts.WaterLineArtifact;

import de.intevation.flys.model.FastCrossSectionLine;

import de.intevation.flys.artifacts.geom.Lines;


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

    /** Private logger to use. */
    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);
    }


    /**
     * Trivial constructor, set (maybe localized) description.
     * @param idx Index of this facet.
     * @param name 'type' of this facet.
     * @param description (maybe) localized user-visible description.
     */
    public CrossSectionWaterLineFacet(int idx, String name, String description) {
        super(idx, name, 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 Lines.LineData(new double[][] {}, 0d, 0d);
        }

        Object crossSection = providers.get(0)
            .provideData(CrossSectionFacet.BLACKBOARD_CS_MASTER_DATA,
                null, context);
        Object nextKm = providers.get(0).
            provideData(CrossSectionFacet.BLACKBOARD_CS_NEXT_KM, null, context);
        Object prevKm = providers.get(0).
            provideData(CrossSectionFacet.BLACKBOARD_CS_PREV_KM, null, context);
        if (prevKm == null)
            prevKm = new Double(-1d);
        if (nextKm == null)
            nextKm = new Double(-1d);

        if (!(artifact instanceof WaterLineArtifact)) {
            logger.error("CrossSectionWaterLineFacet needs WaterLineArtifact");
            return new Lines.LineData(new double[][] {}, 0d,0d);
        }
        WaterLineArtifact lineArtifact = (WaterLineArtifact) artifact;

        if (crossSection != null) {
            return lineArtifact.getWaterLines(this.getIndex(),
                (FastCrossSectionLine) crossSection, (Double) nextKm,
                (Double) prevKm, context);
        }
        else {
            return new Lines.LineData(new double[][] {}, 0d,0d);
        }
    }


    /** 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