view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/CrossSectionFacet.java @ 5818:a4ff4167be1e

Request feature info on all layers and show it as html if the server does not return valid gml. Non queryable layers produce an error message when the request fails. This is good enough
author Andre Heinecke <aheinecke@intevation.de>
date Wed, 24 Apr 2013 17:33:27 +0200
parents 31168ac9c7e7
children
line wrap: on
line source
package de.intevation.flys.artifacts.model;

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

import org.apache.log4j.Logger;

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

import de.intevation.artifactdatabase.state.Facet;

import de.intevation.flys.artifacts.CrossSectionArtifact;

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


/**
 * Trival Facet for Cross Sections (profiles).
 */
public class CrossSectionFacet
extends      BlackboardDataFacet
implements   FacetTypes {

    public static String BLACKBOARD_CS_MASTER_DATA
        = "crosssection.masterprofile.data";

    public static String BLACKBOARD_CS_PREV_KM
        = "crosssection.masterprofile.km.prev";

    public static String BLACKBOARD_CS_NEXT_KM
        = "crosssection.masterprofile.km.next";


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

    protected ComputeType type;


    /** Trivial constructor, set (maybe localized) description. */
    public CrossSectionFacet(int idx, String description) {
        super(idx, CROSS_SECTION, description);
        type = ComputeType.ADVANCE;
    }


    /** Tell world we know about crosssection masters data and its index. */
    public List getStaticDataProviderKeys(Artifact art) {
        CrossSectionArtifact artifact = (CrossSectionArtifact) art;
        List keys = new ArrayList();
        if (artifact.isMaster()) {
            keys.add(BLACKBOARD_CS_MASTER_DATA);
            keys.add(BLACKBOARD_CS_PREV_KM);
            keys.add(BLACKBOARD_CS_NEXT_KM);
        }
        keys.add(artifact.identifier() + getIndex());
        keys.addAll(super.getStaticDataProviderKeys(art));
        return keys;
    }


    /**
     * Can provide the master cross section lines or its index.
     * @param artifact crosssection-artifact
     * @param key      will respond on BLACKBOARD_CS_MASTER_DATA
     * @param param    ignored
     * @param context  ignored
     * @return data from artifact (cross section master track).
     */
    public Object provideBlackboardData(Artifact artifact,
        Object key,
        Object param,
        CallContext context
    ) {
        CrossSectionArtifact crossSection = (CrossSectionArtifact) artifact;

        if (key.equals(BLACKBOARD_CS_MASTER_DATA)) {
            return crossSection.searchCrossSectionLine();
        }
        else if (key.equals(artifact.identifier() + getIndex())) {
            return getData(artifact, context);
        }
        else if (key.equals(BLACKBOARD_CS_NEXT_KM)) {
            return crossSection.getNextKm();
        }
        else if (key.equals(BLACKBOARD_CS_PREV_KM)) {
            return crossSection.getPrevKm();
        }
        else {
            Object obj = super.provideBlackboardData(artifact, key, param,
                context);
            if (obj == null) {
                logger.warn("Cannot provide data for key: " + key);
            }
            return obj;
        }
    }


    /**
     * 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 cross section");

        CrossSectionArtifact artifact = (CrossSectionArtifact)art;

        return artifact.getCrossSectionData();
    }


    /** Do a deep copy. */
    @Override
    public Facet deepCopy() {
        CrossSectionFacet copy = new CrossSectionFacet(this.index, 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