teichmann@5831: package org.dive4elements.river.artifacts; ingo@1805: ingo@1805: import java.util.List; ingo@1805: ingo@1805: import org.w3c.dom.Document; ingo@1805: ingo@1805: import org.apache.log4j.Logger; ingo@1805: ingo@1805: import com.vividsolutions.jts.geom.Envelope; ingo@1805: import com.vividsolutions.jts.geom.Geometry; ingo@1805: teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.CallMeta; ingo@1805: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.State; ingo@1805: teichmann@5831: import org.dive4elements.river.model.River; teichmann@5831: import org.dive4elements.river.model.RiverAxisKm; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.WMSDBArtifact.WMSDBState; 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@1805: ingo@1805: ingo@1805: public class WMSKmArtifact extends WMSDBArtifact { ingo@1805: ingo@1805: public static final String NAME = "wmskm"; ingo@1805: ingo@1805: ingo@1805: private static final Logger logger = Logger.getLogger(WMSKmArtifact.class); ingo@1805: ingo@1805: ingo@1805: @Override ingo@1805: public void setup( ingo@1805: String identifier, ingo@1805: ArtifactFactory factory, ingo@1805: Object context, ingo@1805: CallMeta callMeta, ingo@1805: Document data) ingo@1805: { ingo@1805: logger.debug("WMSKmArtifact.setup"); ingo@1805: ingo@1805: super.setup(identifier, factory, context, callMeta, data); ingo@1805: } ingo@1805: ingo@1805: ingo@1805: @Override ingo@1805: public String getName() { ingo@1805: return NAME; ingo@1805: } ingo@1805: ingo@1805: ingo@1805: @Override ingo@1805: public State getCurrentState(Object cc) { ingo@1805: State s = new WMSKmState(this); ingo@1805: bjoern@4497: List fs = getFacets(getCurrentStateId()); ingo@1805: ingo@1805: DefaultOutput o = new DefaultOutput( ingo@1805: "floodmap", ingo@1805: "floodmap", ingo@1805: "image/png", ingo@1805: fs, ingo@1805: "map"); ingo@1805: ingo@1805: s.getOutputs().add(o); ingo@1805: ingo@1805: return s; ingo@1805: } ingo@1805: ingo@1805: ingo@1805: ingo@1805: public static class WMSKmState extends WMSDBState implements FacetTypes { ingo@1805: ingo@1805: private static final Logger logger = Logger.getLogger(WMSKmState.class); ingo@1805: ingo@1805: protected Geometry geom; ingo@1805: protected int riverId; ingo@1805: ingo@1805: public WMSKmState(WMSDBArtifact artifact) { ingo@1805: super(artifact); ingo@1805: riverId = 0; ingo@1805: } ingo@1805: ingo@1805: public int getRiverId() { ingo@1805: if (riverId == 0) { ingo@1805: String ids = artifact.getDataAsString("ids"); ingo@1805: ingo@1805: try { sascha@3405: riverId = Integer.parseInt(ids); ingo@1805: } ingo@1805: catch (NumberFormatException nfe) { ingo@1805: logger.error("Cannot parse river id from '" + ids + "'"); ingo@1805: } ingo@1805: } ingo@1805: ingo@1805: return riverId; ingo@1805: } ingo@1805: ingo@1805: @Override ingo@1805: protected String getFacetType() { ingo@1805: return FLOODMAP_KMS; ingo@1805: } ingo@1805: ingo@1805: @Override ingo@1805: protected String getUrl() { ingo@1805: return FLYSUtils.getUserWMSUrl(artifact.identifier()); ingo@1805: } ingo@1805: ingo@1805: @Override ingo@1805: protected String getSrid() { ingo@1805: River river = RiverFactory.getRiver(getRiverId()); ingo@1805: return FLYSUtils.getRiverSrid(river.getName()); ingo@1805: } ingo@1805: ingo@1805: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { ingo@1806: List kms = RiverAxisKm.getRiverAxisKms(getRiverId()); ingo@1806: ingo@1806: Envelope max = null; ingo@1806: ingo@1806: for (RiverAxisKm km: kms) { ingo@1806: Envelope env = km.getGeom().getEnvelopeInternal(); ingo@1806: ingo@1806: if (max == null) { ingo@1806: max = env; ingo@1806: continue; ingo@1806: } ingo@1806: ingo@1806: max.expandToInclude(env); ingo@1806: } ingo@1806: ingo@3918: return max != null && reproject ingo@3301: ? GeometryUtils.transform(max, getSrid()) ingo@3301: : max; ingo@1805: } ingo@1805: ingo@1805: @Override ingo@1805: protected String getFilter() { ingo@1805: return "river_id=" + String.valueOf(getRiverId()); ingo@1805: } ingo@1805: ingo@1805: @Override ingo@1805: protected String getDataString() { ingo@1845: String srid = getSrid(); ingo@1845: ingo@1845: if (FLYSUtils.isUsingOracle()) { ingo@1845: return "geom FROM river_axes_km USING SRID " + srid; ingo@1845: } ingo@1845: else { ingo@1845: return "geom FROM river_axes_km " + ingo@1845: "USING UNIQUE id USING SRID " + srid; ingo@1845: } ingo@1805: } ingo@1805: ingo@1816: @Override ingo@1876: protected String getLabelItem() { ingo@1876: return "km"; ingo@1876: } ingo@1876: ingo@1876: @Override ingo@1816: protected String getGeometryType() { ingo@1816: return "POINT"; ingo@1816: } ingo@1805: } // end of WMSKmState ingo@1805: } ingo@1805: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :