view flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSLineArtifact.java @ 2089:0da8874bd378

Added initial state to map artifact to be able to advance and step back. The map artifact overrides describe() to have the complete UI information in the describe response document. flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 06 Jan 2012 12:02:10 +0000
parents ec458853f560
children f5af3adb3b95
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.River;
import de.intevation.flys.model.Line;

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


public class WMSLineArtifact extends WMSDBArtifact {

    public static final String NAME = "lines";


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


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

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


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


    @Override
    public State getCurrentState(Object cc) {
        State s = new LineState(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 LineState extends WMSDBState implements FacetTypes
    {
        private static final Logger logger =
            Logger.getLogger(LineState.class);

        protected int riverId;

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

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

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

            return riverId;
        }

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

        @Override
        protected String getTitle(CallMeta meta) {
            return Resources.getMsg(
                meta,
                FLOODMAP_LINES,
                FLOODMAP_LINES);
        }

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

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

        @Override
        protected Envelope getExtent() {
            List<Line> lines = Line.getLines(getRiverId());

            Envelope max = null;

            for (Line l: lines) {
                Envelope env = l.getGeom().getEnvelopeInternal();

                if (max == null) {
                    max = env;
                    continue;
                }

                max.expandToInclude(env);
            }

            return max;
        }

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

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

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

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

http://dive4elements.wald.intevation.org