view flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java @ 4896:27d58b7b5edd

Builder: When looking for a statement in contexts, also search in macro definitions.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 29 Jan 2013 10:52:57 +0100
parents ba4d7f153890
children a9243df307b1 2c1045a1e3fe
line wrap: on
line source
package de.intevation.flys.wsplgen;

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

import org.apache.log4j.Logger;

import com.vividsolutions.jts.geom.Envelope;

import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifacts.CallContext;
import de.intevation.flys.artifacts.access.RangeAccess;
import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.map.WMSLayerFacet;
import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet;
import de.intevation.flys.artifacts.resources.Resources;
import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
import de.intevation.flys.model.CrossSectionTrack;
import de.intevation.flys.utils.FLYSUtils;
import de.intevation.flys.utils.GeometryUtils;
import de.intevation.flys.utils.MapfileGenerator;


public class FacetCreator implements FacetTypes {

    public static final String I18N_WSPLGEN_RESULT    = "floodmap.uesk";
    public static final String I18N_WSPLGEN_DEFAULT   = "floodmap.uesk";
    public static final String I18N_BARRIERS          = "floodmap.barriers";
    public static final String I18N_BARRIERS_DEFAULT  = "floodmap.barriers";
    public static final String I18N_USERSHAPE         = "floodmap.usershape";
    public static final String I18N_USERSHAPE_DEFAULT = "floodmap.usershape";

    protected FLYSArtifact artifact;

    protected CallContext  cc;

    protected List<Facet> facets;
    protected List<Facet> tmpFacets;

    protected String url;
    protected String hash;
    protected String stateId;


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


    public FacetCreator(
        FLYSArtifact artifact,
        CallContext  cc,
        String       hash,
        String       sId,
        List<Facet>  facets
    ) {
        this.tmpFacets  = new ArrayList<Facet>(2);
        this.facets     = facets;
        this.artifact   = artifact;
        this.cc         = cc;
        this.hash       = hash;
        this.stateId    = sId;
    }

    // TODO We have FLYSUtils and will have RiverAccess to do this
    protected String getRiver() {
        return artifact.getDataAsString("river");
    }

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

    protected String getSrid() {
        return FLYSUtils.getRiverSrid(artifact);
    }

    protected Envelope getWSPLGENBounds() {
        String river = getRiver();
        RangeAccess rangeAccess = new RangeAccess(artifact, null);
        double kms[] = rangeAccess.getKmRange();

        logger.debug("### getWSPLGENBounds");
        logger.debug("###    from km: " + kms[0]);
        logger.debug("###    to   km: " + kms[1]);

        CrossSectionTrack a =
            CrossSectionTrack.getCrossSectionTrack(river, kms[0]);

        CrossSectionTrack b =
            CrossSectionTrack.getCrossSectionTrack(river, kms[1]);

        if (a == null || b == null) {
            return null;
        }

        Envelope envA = a.getGeom().getEnvelopeInternal();
        Envelope envB = b.getGeom().getEnvelopeInternal();

        envA.expandToInclude(envB);
        envA = GeometryUtils.transform(envA, getSrid());

        logger.debug("###    => " + envA);

        return envA;
    }

    protected Envelope getBounds() {
        return GeometryUtils.getRiverBoundary(getRiver());
    }

    public List<Facet> getFacets() {
        return tmpFacets;
    }

    public void createWSPLGENFacet() {
        String river = getRiver();
        RangeAccess rangeAccess = new RangeAccess(artifact, null);
        double kms[] = rangeAccess.getKmRange();

        WSPLGENLayerFacet wsplgen = new WSPLGENLayerFacet(
            0,
            FLOODMAP_WSPLGEN,
            Resources.format(
                cc.getMeta(),
                I18N_WSPLGEN_RESULT,
                I18N_WSPLGEN_DEFAULT,
                river,
                kms[0], kms[1]),
            ComputeType.ADVANCE,
            stateId,
            hash,
            getUrl());

        Envelope bounds = getWSPLGENBounds();

        if (bounds == null) {
            bounds = getBounds();
        }

        wsplgen.addLayer(
            MapfileGenerator.MS_WSPLGEN_PREFIX + artifact.identifier());
        wsplgen.setSrid(getSrid());
        wsplgen.setOriginalExtent(bounds);
        wsplgen.setExtent(bounds);

        tmpFacets.add(wsplgen);
    }

    public void createBarrierFacet() {
        WMSLayerFacet barriers = new WMSLayerFacet(
            1,
            FLOODMAP_BARRIERS,
            Resources.getMsg(
                cc.getMeta(),
                I18N_BARRIERS,
                I18N_BARRIERS_DEFAULT),
            ComputeType.ADVANCE,
            stateId,
            hash,
            getUrl());

        barriers.addLayer(
            MapfileGenerator.MS_BARRIERS_PREFIX + artifact.identifier());
        barriers.setSrid(getSrid());
        barriers.setExtent(getBounds());

        tmpFacets.add(barriers);
    }


    public void createUserShapeFacet() {
        WMSLayerFacet shape = new WMSLayerFacet(
            1,
            FLOODMAP_USERSHAPE,
            Resources.getMsg(
                cc.getMeta(),
                I18N_USERSHAPE,
                I18N_USERSHAPE_DEFAULT),
            ComputeType.ADVANCE,
            stateId,
            hash,
            getUrl());

        shape.addLayer(
            MapfileGenerator.MS_USERSHAPE_PREFIX + artifact.identifier());
        shape.setSrid(getSrid());
        shape.setExtent(getBounds());

        tmpFacets.add(shape);
    }


    public void finish() {
        facets.addAll(getFacets());
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org