view flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java @ 4488:5041105d2edd

Check if response code from GGInA is 200 OK Only parse the GGInA response if the status code is 200 OK. This improves the error message if GGInA is not available and shows the real reason instead of a JDOM error while parsing the response.
author Björn Ricks <bjoern.ricks@intevation.de>
date Wed, 14 Nov 2012 10:36:21 +0100
parents 6ccdcb956c14
children ba4d7f153890
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.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;
    }

    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();
        double kms[] = FLYSUtils.getKmRange(artifact);

        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();
        double kms[] = FLYSUtils.getKmRange(artifact);

        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