teichmann@5831: package org.dive4elements.river.artifacts; ingo@2683: ingo@2683: import java.util.List; ingo@2683: ingo@2683: import org.w3c.dom.Document; ingo@2683: ingo@2683: import org.apache.log4j.Logger; ingo@2683: ingo@2683: import com.vividsolutions.jts.geom.Envelope; ingo@2683: teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.CallMeta; ingo@2683: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.State; ingo@2683: teichmann@5831: import org.dive4elements.river.model.River; teichmann@5831: import org.dive4elements.river.model.HydrBoundaryPoly; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.RiverFactory; teichmann@5831: import org.dive4elements.river.utils.FLYSUtils; teichmann@5831: import org.dive4elements.river.utils.GeometryUtils; ingo@2683: ingo@2683: ingo@2683: public class WMSHydrBoundaryPolyArtifact extends WMSDBArtifact { ingo@2683: ingo@2683: public static final String NAME = "hydr_boundary_poly"; ingo@2683: ingo@2683: ingo@2683: private static final Logger logger = ingo@2683: Logger.getLogger(WMSHydrBoundaryPolyArtifact.class); ingo@2683: ingo@2683: ingo@2683: @Override ingo@2683: public void setup( ingo@2683: String identifier, ingo@2683: ArtifactFactory factory, ingo@2683: Object context, ingo@2683: CallMeta callMeta, ingo@2683: Document data) ingo@2683: { ingo@2683: logger.debug("WMSHydrBoundaryArtifact.setup"); ingo@2683: ingo@2683: super.setup(identifier, factory, context, callMeta, data); ingo@2683: } ingo@2683: ingo@2683: ingo@2683: @Override ingo@2683: public String getName() { ingo@2683: return NAME; ingo@2683: } ingo@2683: ingo@2683: ingo@2683: @Override ingo@2683: public State getCurrentState(Object cc) { ingo@2683: State s = new HydrBoundaryPolyState(this); ingo@2683: bjoern@4497: List fs = getFacets(getCurrentStateId()); ingo@2683: ingo@2683: DefaultOutput o = new DefaultOutput( ingo@2683: "floodmap", ingo@2683: "floodmap", ingo@2683: "image/png", ingo@2683: fs, ingo@2683: "map"); ingo@2683: ingo@2683: s.getOutputs().add(o); ingo@2683: ingo@2683: return s; ingo@2683: } ingo@2683: ingo@2683: ingo@2683: public static class HydrBoundaryPolyState extends WMSDBState implements FacetTypes ingo@2683: { ingo@2683: private static final Logger logger = ingo@2683: Logger.getLogger(HydrBoundaryPolyState.class); ingo@2683: ingo@2683: protected int riverId; ingo@2683: ingo@2683: public HydrBoundaryPolyState(WMSDBArtifact artifact) { ingo@2683: super(artifact); ingo@2683: riverId = 0; ingo@2683: } ingo@2683: ingo@2683: @Override ingo@2683: protected String getFacetType() { ingo@2683: return FLOODMAP_HYDR_BOUNDARY_POLY; ingo@2683: } ingo@2683: ingo@2683: @Override ingo@2683: protected String getUrl() { ingo@2683: return FLYSUtils.getUserWMSUrl(artifact.identifier()); ingo@2683: } ingo@2683: ingo@2683: @Override ingo@2683: protected String getSrid() { ingo@2683: River river = RiverFactory.getRiver(getRiverId()); ingo@2683: return FLYSUtils.getRiverSrid(river.getName()); ingo@2683: } ingo@2683: ingo@2683: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { aheinecke@5515: String kind = getIdPart(2); aheinecke@5515: String sectie = getIdPart(3); aheinecke@5515: String sobek = getIdPart(4); aheinecke@5515: int kindId = -1; aheinecke@5515: int sectieId = -1; aheinecke@5515: int sobekId = -1; aheinecke@5515: aheinecke@5515: if (kind != null) { aheinecke@5515: kindId = Integer.parseInt(kind); aheinecke@5515: } aheinecke@5515: if (sectie != null && !sectie.equals("-1")) { aheinecke@5515: sectieId = Integer.parseInt(sectie); aheinecke@5515: } aheinecke@5515: if (sobek != null && !sobek.equals("-1")) { aheinecke@5515: sobekId = Integer.parseInt(sobek); aheinecke@5515: } aheinecke@5515: aheinecke@5515: List boundaries; aheinecke@5515: if (kindId == -1 && sobekId == -1 && sectieId == -1) { aheinecke@5515: boundaries = HydrBoundaryPoly.getHydrBoundaries( aheinecke@5515: getRiverId(), getName()); aheinecke@5515: } else { aheinecke@5515: boundaries = HydrBoundaryPoly.getHydrBoundaries( aheinecke@5515: getRiverId(), kindId, sectieId, sobekId); aheinecke@5515: } ingo@2683: ingo@2683: Envelope max = null; ingo@2683: ingo@2683: for (HydrBoundaryPoly b: boundaries) { ingo@2683: Envelope env = b.getGeom().getEnvelopeInternal(); ingo@2683: ingo@2683: if (max == null) { ingo@2683: max = env; ingo@2683: continue; ingo@2683: } ingo@2683: ingo@2683: max.expandToInclude(env); ingo@2683: } ingo@2683: ingo@3918: return max != null && reproject ingo@3301: ? GeometryUtils.transform(max, getSrid()) ingo@3301: : max; ingo@2683: } ingo@2683: ingo@2683: @Override ingo@2683: protected String getFilter() { aheinecke@5515: // Expected id string: aheinecke@5515: // river_id;layer_name;kind;sectie;sobek aheinecke@5515: String kind = getIdPart(2); aheinecke@5515: String sectie = getIdPart(3); aheinecke@5515: String sobek = getIdPart(4); aheinecke@5515: aheinecke@5515: String filter = ""; aheinecke@5515: if (kind != null && !kind.equals("-1")) { aheinecke@5515: filter += " AND kind = " + kind; aheinecke@5515: } aheinecke@5515: if (sectie != null && !sectie.equals("-1")) { aheinecke@5515: filter += " AND sectie = " + sectie; aheinecke@5515: } aheinecke@5515: if (sobek != null && !sobek.equals("-1")) { aheinecke@5515: filter += " AND sobek = " + sobek; aheinecke@5515: } aheinecke@5515: aheinecke@5515: if (filter.isEmpty()) { aheinecke@5515: filter = " AND name='" + getName() + "'"; aheinecke@5515: } aheinecke@5515: ingo@2683: return "river_id=" + String.valueOf(getRiverId()) aheinecke@5515: + filter; ingo@2683: } ingo@2683: ingo@2683: @Override ingo@2683: protected String getDataString() { ingo@2683: String srid = getSrid(); ingo@2683: ingo@2683: if (FLYSUtils.isUsingOracle()) { aheinecke@5515: return "geom FROM hydr_boundaries_poly USING SRID " + srid; ingo@2683: } ingo@2683: else { aheinecke@5515: return "geom FROM hydr_boundaries_poly USING UNIQUE id USING SRID " + srid; ingo@2683: } ingo@2683: } ingo@2683: ingo@2683: @Override ingo@2683: protected String getGeometryType() { ingo@2683: return "POLYGON"; ingo@2683: } ingo@2683: } // end of HydrBoundaryState ingo@2683: } ingo@2683: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :