teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts; ingo@942: ingo@1832: import com.vividsolutions.jts.geom.Envelope; ingo@1832: import com.vividsolutions.jts.geom.Geometry; ingo@1832: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.State; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.RiverFactory; teichmann@5831: import org.dive4elements.river.model.River; teichmann@5831: import org.dive4elements.river.model.RiverAxis; teichmann@5865: import org.dive4elements.river.utils.RiverUtils; teichmann@5831: import org.dive4elements.river.utils.GeometryUtils; ingo@942: christian@4864: import java.util.List; ingo@942: christian@4864: import org.apache.log4j.Logger; christian@4864: christian@4864: @Deprecated ingo@1832: public class RiverAxisArtifact extends WMSDBArtifact { ingo@942: ingo@942: public static final String NAME = "riveraxis"; ingo@942: ingo@942: teichmann@8202: private static final Logger log = ingo@942: Logger.getLogger(RiverAxisArtifact.class); ingo@942: ingo@942: ingo@942: @Override ingo@1832: public String getName() { ingo@1832: return NAME; ingo@1832: } ingo@1832: ingo@1832: ingo@1832: @Override ingo@1832: public State getCurrentState(Object cc) { ingo@1832: State s = new RiverAxisState(this); ingo@1832: bjoern@4497: List fs = getFacets(getCurrentStateId()); ingo@1832: ingo@1832: DefaultOutput o = new DefaultOutput( ingo@1832: "floodmap", ingo@1832: "floodmap", ingo@1832: "image/png", ingo@1832: fs, ingo@1832: "map"); ingo@1832: ingo@1832: s.getOutputs().add(o); ingo@1832: ingo@1832: return s; ingo@1832: } ingo@1832: ingo@1832: ingo@1832: public static class RiverAxisState extends WMSDBState implements FacetTypes ingo@1075: { teichmann@8202: private static final Logger log = ingo@1832: Logger.getLogger(RiverAxisState.class); ingo@1832: ingo@1832: protected Geometry geom; ingo@1832: protected int riverId; ingo@1832: raimund@2082: public RiverAxisState(){} raimund@2082: teichmann@5867: public RiverAxisState(D4EArtifact artifact) { ingo@1832: super(artifact); ingo@1832: } ingo@1832: aheinecke@6705: private boolean isUnofficial() { aheinecke@6705: return getIdPart(2) != null && !getIdPart(2).equals("1"); aheinecke@6705: } aheinecke@6705: ingo@1832: @Override ingo@1832: protected String getFacetType() { ingo@1832: return FLOODMAP_RIVERAXIS; ingo@1832: } ingo@1832: ingo@1832: @Override christian@4864: protected String getLayer() { aheinecke@6705: if (isUnofficial()) { aheinecke@6705: return super.getLayer(); aheinecke@6705: } christian@4864: return RiverFactory.getRiver(getRiverId()).getName(); christian@4864: } christian@4864: christian@4864: @Override ingo@1832: protected String getUrl() { aheinecke@6705: if (isUnofficial()) { aheinecke@6705: return RiverUtils.getUserWMSUrl(artifact.identifier()); aheinecke@6705: } else { aheinecke@6705: return RiverUtils.getRiverWMSUrl(); aheinecke@6705: } ingo@1832: } ingo@1832: ingo@1832: @Override ingo@1832: protected String getSrid() { ingo@1832: River river = RiverFactory.getRiver(getRiverId()); teichmann@5865: return RiverUtils.getRiverSrid(river.getName()); ingo@1832: } ingo@1832: ingo@1832: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { ingo@1832: River river = RiverFactory.getRiver(getRiverId()); aheinecke@5477: List axes; sascha@3923: aheinecke@5477: String kind = getIdPart(2); aheinecke@5477: tom@8747: if (kind != null && !kind.equals(RiverAxis.KIND_CURRENT)) { aheinecke@5477: axes = RiverAxis.getRiverAxis(river.getName(), aheinecke@5477: getName(), Integer.parseInt(kind)); aheinecke@5477: } else { aheinecke@5477: if (reproject) { tom@8856: log.debug("Query extent for RiverAxis with Srid: " tom@8856: + getSrid()); aheinecke@5477: return GeometryUtils.transform( aheinecke@5477: GeometryUtils.getRiverBoundary(river.getName()), aheinecke@5477: getSrid()); aheinecke@5477: } tom@8747: return GeometryUtils.getRiverBoundary(river.getName()); ingo@3918: } aheinecke@5477: aheinecke@5477: Envelope max = null; aheinecke@5477: aheinecke@5477: for (RiverAxis ax: axes) { aheinecke@5477: Envelope env = ax.getGeom().getEnvelopeInternal(); aheinecke@5477: aheinecke@5477: if (max == null) { aheinecke@5477: max = env; aheinecke@5477: continue; aheinecke@5477: } aheinecke@5477: aheinecke@5477: max.expandToInclude(env); ingo@3918: } aheinecke@5477: aheinecke@5477: return max != null && reproject aheinecke@5477: ? GeometryUtils.transform(max, getSrid()) aheinecke@5477: : max; ingo@1832: } ingo@1832: ingo@1832: @Override ingo@1832: protected String getFilter() { aheinecke@5477: String kind = getIdPart(2); tom@8747: if (kind != null && kind.equals(RiverAxis.KIND_CURRENT)) { aheinecke@5477: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5477: " AND kind_id=" + kind; tom@8747: } tom@8747: if (kind != null) { aheinecke@5477: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5477: " AND kind_id=" + kind + aheinecke@5477: " AND name='" + getName() + "'"; tom@8747: } tom@8747: if (getIdPart(1) != null) { aheinecke@5477: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5477: " AND name='" + getName() + "'"; aheinecke@5477: } aheinecke@5477: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5477: " AND kind_id=" + kind; ingo@1832: } ingo@1832: ingo@1832: @Override ingo@1832: protected String getDataString() { teichmann@5865: if (RiverUtils.isUsingOracle()) { aheinecke@5304: return "geom FROM river_axes USING SRID " + getSrid(); ingo@1845: } tom@8747: return "geom FROM river_axes USING UNIQUE id"; ingo@1832: } ingo@1832: ingo@1832: @Override ingo@1832: protected String getGeometryType() { ingo@1832: return "LINE"; ingo@1832: } ingo@1832: } // end of WMSKmState ingo@942: } ingo@942: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :