teichmann@5831: package org.dive4elements.river.artifacts; ingo@1836: ingo@1836: import java.util.List; ingo@1836: ingo@1836: import org.w3c.dom.Document; ingo@1836: ingo@1836: import org.apache.log4j.Logger; ingo@1836: ingo@1836: import com.vividsolutions.jts.geom.Envelope; ingo@1836: teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.CallMeta; ingo@1836: 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@1836: teichmann@5831: import org.dive4elements.river.model.River; teichmann@5831: import org.dive4elements.river.model.CrossSectionTrack; 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@1836: ingo@1836: ingo@1836: public class WMSQPSArtifact extends WMSDBArtifact { ingo@1836: ingo@1836: public static final String NAME = "qps"; ingo@1836: ingo@1836: ingo@1836: private static final Logger logger = ingo@1836: Logger.getLogger(WMSQPSArtifact.class); ingo@1836: ingo@1836: ingo@1836: @Override ingo@1836: public void setup( ingo@1836: String identifier, ingo@1836: ArtifactFactory factory, ingo@1836: Object context, ingo@1836: CallMeta callMeta, ingo@1836: Document data) ingo@1836: { ingo@1836: logger.debug("WMSQPSArtifact.setup"); ingo@1836: ingo@1836: super.setup(identifier, factory, context, callMeta, data); ingo@1836: } ingo@1836: ingo@1836: ingo@1836: @Override ingo@1836: public String getName() { ingo@1836: return NAME; ingo@1836: } ingo@1836: ingo@1836: ingo@1836: @Override ingo@1836: public State getCurrentState(Object cc) { ingo@1836: State s = new WMSQPSState(this); ingo@1836: bjoern@4497: List fs = getFacets(getCurrentStateId()); ingo@1836: ingo@1836: DefaultOutput o = new DefaultOutput( ingo@1836: "floodmap", ingo@1836: "floodmap", ingo@1836: "image/png", ingo@1836: fs, ingo@1836: "map"); ingo@1836: ingo@1836: s.getOutputs().add(o); ingo@1836: ingo@1836: return s; ingo@1836: } ingo@1836: ingo@1836: ingo@1836: public static class WMSQPSState extends WMSDBState implements FacetTypes { ingo@1836: ingo@1836: private static final Logger logger = ingo@1836: Logger.getLogger(WMSQPSState.class); ingo@1836: ingo@1836: public WMSQPSState(WMSDBArtifact artifact) { ingo@1836: super(artifact); ingo@1836: } ingo@1836: ingo@1836: @Override ingo@1836: protected String getFacetType() { ingo@1836: return FLOODMAP_QPS; ingo@1836: } ingo@1836: ingo@1836: @Override ingo@1836: protected String getUrl() { ingo@1836: return FLYSUtils.getUserWMSUrl(artifact.identifier()); ingo@1836: } ingo@1836: ingo@1836: @Override ingo@1836: protected String getSrid() { ingo@1836: River river = RiverFactory.getRiver(getRiverId()); ingo@1836: return FLYSUtils.getRiverSrid(river.getName()); ingo@1836: } ingo@1836: ingo@1836: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { ingo@1836: River river = RiverFactory.getRiver(getRiverId()); aheinecke@5469: List qps; ingo@1836: aheinecke@5469: String kind = getIdPart(2); aheinecke@5469: aheinecke@5469: if (kind != null && kind.equals("1")) { aheinecke@5469: qps = CrossSectionTrack.getCrossSectionTrack(river.getName(), aheinecke@5469: Integer.parseInt(kind)); aheinecke@5469: } else if (kind != null) { aheinecke@5469: qps = CrossSectionTrack.getCrossSectionTrack(river.getName(), aheinecke@5469: getName(), Integer.parseInt(kind)); aheinecke@5469: } else { aheinecke@5469: qps = CrossSectionTrack.getCrossSectionTrack(river.getName(), aheinecke@5469: getName()); aheinecke@5469: } ingo@1836: ingo@1836: Envelope max = null; ingo@1836: ingo@1836: for (CrossSectionTrack qp: qps) { ingo@1836: Envelope env = qp.getGeom().getEnvelopeInternal(); ingo@1836: ingo@1836: if (max == null) { ingo@1836: max = env; ingo@1836: continue; ingo@1836: } ingo@1836: ingo@1836: max.expandToInclude(env); ingo@1836: } ingo@1836: ingo@3918: return max != null && reproject ingo@3301: ? GeometryUtils.transform(max, getSrid()) ingo@3301: : max; ingo@1836: } ingo@1836: ingo@1836: @Override ingo@1836: protected String getFilter() { aheinecke@5469: String kind = getIdPart(2); aheinecke@5469: if (kind != null && kind.equals("1")) { aheinecke@5469: // There can be several layers named qps that differ in kind aheinecke@5469: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5469: " AND kind_id=" + kind; aheinecke@5469: } else if (kind != null) { aheinecke@5469: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5469: " AND kind_id=" + kind + aheinecke@5469: " AND name='" + getName() + "'"; aheinecke@5469: } aheinecke@5469: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5469: " AND name='" + getName() + "'"; ingo@1836: } ingo@1836: ingo@1836: @Override ingo@1836: protected String getDataString() { ingo@1845: String srid = getSrid(); ingo@1845: ingo@1845: if (FLYSUtils.isUsingOracle()) { ingo@1845: return "geom FROM cross_section_tracks USING SRID " + srid; ingo@1845: } ingo@1845: else { ingo@1845: return "geom FROM cross_section_tracks " + ingo@1845: "USING UNIQUE id USING SRID " + srid; ingo@1845: } ingo@1836: } ingo@1836: ingo@1836: @Override ingo@1836: protected String getGeometryType() { ingo@1836: return "LINE"; ingo@1836: } ingo@1836: } // end of WMSQPSState ingo@1836: } ingo@1836: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :