view flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSFloodplainArtifact.java @ 4496:d8992459b408

Add method to return the facets of an artifact This methos should be used to get the facets of an artifact instead of accessing the facets member variable directly.
author Björn Ricks <bjoern.ricks@intevation.de>
date Wed, 14 Nov 2012 11:11:04 +0100
parents 9fac337192c9
children a2735a4bf75e
line wrap: on
line source
package de.intevation.flys.artifacts;

import java.util.List;

import org.w3c.dom.Document;

import org.apache.log4j.Logger;

import com.vividsolutions.jts.geom.Envelope;

import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallMeta;

import de.intevation.artifactdatabase.state.DefaultOutput;
import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifactdatabase.state.State;

import de.intevation.flys.model.Floodplain;
import de.intevation.flys.model.River;

import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.RiverFactory;
import de.intevation.flys.utils.FLYSUtils;
import de.intevation.flys.utils.GeometryUtils;


public class WMSFloodplainArtifact extends WMSDBArtifact {

    public static final String NAME = "floodplain";


    private static final Logger logger =
        Logger.getLogger(WMSFloodplainArtifact.class);


    @Override
    public void setup(
        String          identifier,
        ArtifactFactory factory,
        Object          context,
        CallMeta        callMeta,
        Document        data)
    {
        logger.debug("WMSFloodplainArtifact.setup");

        super.setup(identifier, factory, context, callMeta, data);
    }


    @Override
    public String getName() {
        return NAME;
    }


    @Override
    public State getCurrentState(Object cc) {
        State s = new FloodplainState(this);

        List<Facet> fs = facets.get(getCurrentStateId());

        DefaultOutput o = new DefaultOutput(
            "floodmap",
            "floodmap",
            "image/png",
            fs,
            "map");

        s.getOutputs().add(o);

        return s;
    }


    public static class FloodplainState extends WMSDBState implements FacetTypes
    {
        private static final Logger logger =
            Logger.getLogger(FloodplainState.class);

        protected int riverId;

        public FloodplainState(WMSDBArtifact artifact) {
            super(artifact);
            riverId = 0;
        }

        public int getRiverId() {
            if (riverId == 0) {
                String ids = artifact.getDataAsString("ids");

                try {
                    riverId = Integer.parseInt(ids);
                }
                catch (NumberFormatException nfe) {
                    logger.error("Cannot parse river id from '" + ids + "'");
                }
            }

            return riverId;
        }

        protected River getRiver() {
            return RiverFactory.getRiver(getRiverId());
        }

        @Override
        protected String getFacetType() {
            return FLOODMAP_FLOODPLAIN;
        }

        @Override
        protected String getUrl() {
            return FLYSUtils.getUserWMSUrl(artifact.identifier());
        }

        @Override
        protected String getSrid() {
            River river = getRiver();
            return FLYSUtils.getRiverSrid(river.getName());
        }

        @Override
        protected Envelope getExtent(boolean reproject) {
            River      river = getRiver();
            Floodplain plain = Floodplain.getFloodplain(river.getName());

            Envelope e = plain.getGeom().getEnvelopeInternal();

            return e != null && reproject
                ? GeometryUtils.transform(e, getSrid())
                : e;
        }

        @Override
        protected String getFilter() {
            return "river_id=" + String.valueOf(getRiverId());
        }

        @Override
        protected String getDataString() {
            String srid = getSrid();

            if (FLYSUtils.isUsingOracle()) {
                return "geom FROM floodplain USING SRID " + srid;
            }
            else {
                return "geom FROM floodplain USING UNIQUE id USING SRID " +srid;
            }
        }

        @Override
        protected String getGeometryType() {
            return "POLYGON";
        }
    } // end of WMSKmState
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org