view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/AreaFacet.java @ 3785:a5f65e8983be

Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk ........ r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line fix issue865 - missing showarea theme prop. ........ r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line Add robustness checks to prevent NPEs ........ r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line i18n for area label (fix issue487). ........ r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line Update themes to show point descriptions ........ r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines Removed incorrect characteristic diameter. ........ r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines Fixed some stupid bugs in bed quality data factory and calculation. ........ r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line The usual whitespace and import cleanups. ........ r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line Use generics aware Collections.emptyList(). ........ r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line Some more little steps towards "Auslagerung extremer Wasserspiegellagen". ........ r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line A and B facets of fix analyis are now deactivated by default ........ r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines Add the gauge station to the GaugeOverviewInfoService xml response ........ r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines Added CSV export to bed quality calculation. ........ r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines Fix date in changelog entry ........ r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line Removed trailing whitespace. ........ flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 14:58:31 +0000
parents a66df8e8d3df
children
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import java.util.List;

import org.apache.log4j.Logger;

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.AreaArtifact;


/**
 * Trival Facet for areas.
 * Note that this Facet comes in two "types" (names):
 *  <ul>
 *    <li>CROSS_SECTION_AREA (cross_section.area) and</li>
 *    <li>LONGITUDINAL_SECTION_AREA (longitudinal.area</li>
 *  </ul>
 * This is to support different diagram types without being painted in both
 * at the same time. The name has to be given when constructing.
 */
public class AreaFacet
extends      DefaultFacet
{
    private static Logger logger = Logger.getLogger(AreaFacet.class);

    /**
     * Constructor, set (maybe localized) description and name.
     * @param idx Index given when querying artifact for data.
     * @param name important to discern areas in different diagram types.
     */
    public AreaFacet(int idx, String name, String description) {
        super(idx, name, description);
    }


    /**
     * Gets Cross Section (profile).
     * @param art artifact to get data from.
     * @param context ignored
     */
    public Object getData(Artifact art, CallContext context) {
        logger.debug("Get data for area.");

        // Get information from artifact about which
        // info to grab from blackboard.
        //
        // All compatible facets should provide their data
        // under the key (Artifact-UUID + Facet-Index).
        AreaArtifact artifact = (AreaArtifact) art;
        Object lowerData      = null;
        Object upperData      = null;
        String stemFacetName  = null;

        List<DataProvider> providers = context.
            getDataProvider(artifact.getLowerDPKey());
        if (providers.size() < 1) {
            logger.warn("No 'lower' provider given for area [" +
                artifact.getLowerDPKey() + "]");
        }
        else {
            lowerData = providers.get(0).provideData(
                artifact.getLowerDPKey(), null, context);
            logger.debug("'Lower' data provider key for area [" +
                artifact.getLowerDPKey() + "]");
            stemFacetName = artifact.getLowerDPKey().split(":")[1];
        }

        providers = context.getDataProvider(artifact.getUpperDPKey());
        if (providers.size() < 1) {
            logger.warn("No 'upper' provider given for area [" +
                artifact.getUpperDPKey() + "]");
        }
        else {
            upperData = providers.get(0).provideData(
                artifact.getUpperDPKey(), null, context);
            logger.debug("'Upper' data provider key for area [" +
                artifact.getUpperDPKey() + "]");
            if (stemFacetName == null) {
                stemFacetName = artifact.getUpperDPKey().split(":")[1];
            }
        }

        if (upperData == null && lowerData == null) {
            logger.warn("Not given 'upper' and 'lower' for area");
        }

        return new Data(stemFacetName, lowerData, upperData,
            Boolean.valueOf(artifact.getPaintBetween()));
    }


    /** Do a deep copy. */
    @Override
    public Facet deepCopy() {
        AreaFacet copy = new AreaFacet(this.index, this.name, this.description);
        copy.set(this);
        return copy;
    }

    /** Result data bundle. */
    public class Data {
        protected String  rootFacetName;
        protected Object  upperData;
        protected Object  lowerData;
        protected boolean doPaintBetween;

        /** Create a new result data bundle. */
        public Data(String rootName, Object low, Object up, boolean between) {
            this.rootFacetName  = rootName;
            this.lowerData      = low;
            this.upperData      = up;
            this.doPaintBetween = between;
        }

        /** Get name of a facet that is involved in area generation
         * to induce type (e.g. longitudinal_section.w -> "W over km"). */
        public String getRootFacetName() {
            return this.rootFacetName;
        }

        /** Get data for 'upper' curve of area. */
        public Object getUpperData() {
            return this.upperData;
        }

        /** Get data for 'lower' curve of area. */
        public Object getLowerData() {
            return this.lowerData;
        }

        /** Whether to fill whole area between (in contrast to 'under'
         *  or 'over'). */
        public boolean doPaintBetween() {
            return this.doPaintBetween;
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org