ingo@1856: package de.intevation.flys.artifacts; ingo@1856: ingo@1856: import java.util.List; ingo@1856: ingo@1856: import org.w3c.dom.Document; ingo@1856: ingo@1856: import org.apache.log4j.Logger; ingo@1856: ingo@1856: import com.vividsolutions.jts.geom.Envelope; ingo@1856: ingo@1856: import de.intevation.artifacts.ArtifactFactory; ingo@1856: import de.intevation.artifacts.CallMeta; ingo@1856: ingo@1856: import de.intevation.artifactdatabase.state.DefaultOutput; ingo@1856: import de.intevation.artifactdatabase.state.Facet; ingo@1856: import de.intevation.artifactdatabase.state.State; ingo@1856: ingo@1856: import de.intevation.flys.model.Catchment; ingo@1856: import de.intevation.flys.model.River; ingo@1856: ingo@1856: import de.intevation.flys.artifacts.model.FacetTypes; ingo@1856: import de.intevation.flys.artifacts.model.RiverFactory; ingo@1856: import de.intevation.flys.utils.FLYSUtils; ingo@3301: import de.intevation.flys.utils.GeometryUtils; ingo@1856: ingo@1856: ingo@1856: public class WMSCatchmentArtifact extends WMSDBArtifact { ingo@1856: ingo@1856: public static final String NAME = "catchment"; ingo@1856: ingo@1856: ingo@1856: private static final Logger logger = ingo@1856: Logger.getLogger(WMSCatchmentArtifact.class); ingo@1856: ingo@1856: ingo@1856: @Override ingo@1856: public void setup( ingo@1856: String identifier, ingo@1856: ArtifactFactory factory, ingo@1856: Object context, ingo@1856: CallMeta callMeta, ingo@1856: Document data) ingo@1856: { ingo@1856: logger.debug("WMSCatchmentArtifact.setup"); ingo@1856: ingo@1856: super.setup(identifier, factory, context, callMeta, data); ingo@1856: } ingo@1856: ingo@1856: ingo@1856: @Override ingo@1856: public String getName() { ingo@1856: return NAME; ingo@1856: } ingo@1856: ingo@1856: ingo@1856: @Override ingo@1856: public State getCurrentState(Object cc) { ingo@1856: State s = new CatchmentState(this); ingo@1856: ingo@1856: List fs = facets.get(getCurrentStateId()); ingo@1856: ingo@1856: DefaultOutput o = new DefaultOutput( ingo@1856: "floodmap", ingo@1856: "floodmap", ingo@1856: "image/png", ingo@1856: fs, ingo@1856: "map"); ingo@1856: ingo@1856: s.getOutputs().add(o); ingo@1856: ingo@1856: return s; ingo@1856: } ingo@1856: ingo@1856: ingo@1856: public static class CatchmentState extends WMSDBState implements FacetTypes ingo@1856: { ingo@1856: private static final Logger logger = ingo@1856: Logger.getLogger(CatchmentState.class); ingo@1856: ingo@1856: protected int riverId; ingo@1856: ingo@1856: public CatchmentState(WMSDBArtifact artifact) { ingo@1856: super(artifact); ingo@1856: riverId = 0; ingo@1856: } ingo@1856: ingo@1856: public int getRiverId() { ingo@1856: if (riverId == 0) { ingo@2671: String ids = artifact.getDataAsString("ids"); ingo@2671: String[] parts = ids.split(";"); ingo@1856: ingo@1856: try { sascha@3405: riverId = Integer.parseInt(parts[0]); ingo@1856: } ingo@1856: catch (NumberFormatException nfe) { ingo@1856: logger.error("Cannot parse river id from '" + ids + "'"); ingo@1856: } ingo@1856: } ingo@1856: ingo@1856: return riverId; ingo@1856: } ingo@1856: ingo@1856: @Override ingo@1856: protected String getFacetType() { ingo@1856: return FLOODMAP_CATCHMENT; ingo@1856: } ingo@1856: ingo@1856: @Override ingo@1856: protected String getUrl() { ingo@1856: return FLYSUtils.getUserWMSUrl(artifact.identifier()); ingo@1856: } ingo@1856: ingo@1856: @Override ingo@1856: protected String getSrid() { ingo@1856: River river = RiverFactory.getRiver(getRiverId()); ingo@1856: return FLYSUtils.getRiverSrid(river.getName()); ingo@1856: } ingo@1856: ingo@1856: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { ingo@2671: List catchments = ingo@2671: Catchment.getCatchments(getRiverId(), getName()); ingo@1856: ingo@1856: Envelope max = null; ingo@1856: ingo@1856: for (Catchment c: catchments) { ingo@1856: Envelope env = c.getGeom().getEnvelopeInternal(); ingo@1856: ingo@1856: if (max == null) { ingo@1856: max = env; ingo@1856: continue; ingo@1856: } ingo@1856: ingo@1856: max.expandToInclude(env); ingo@1856: } sascha@3305: ingo@3918: return max != null && reproject ingo@3301: ? GeometryUtils.transform(max, getSrid()) ingo@3301: : max; ingo@1856: } ingo@1856: ingo@1856: @Override ingo@1856: protected String getFilter() { ingo@2671: return "river_id=" + String.valueOf(getRiverId()) ingo@2671: + " AND name='" + getName() + "'"; ingo@1856: } ingo@1856: ingo@1856: @Override ingo@1856: protected String getDataString() { ingo@1856: String srid = getSrid(); ingo@1856: ingo@1856: if (FLYSUtils.isUsingOracle()) { ingo@1856: return "geom FROM catchment USING SRID " + srid; ingo@1856: } ingo@1856: else { ingo@1856: return "geom FROM catchment USING UNIQUE id USING SRID " + srid; ingo@1856: } ingo@1856: } ingo@1856: ingo@1856: @Override ingo@1856: protected String getGeometryType() { ingo@1856: return "POLYGON"; ingo@1856: } ingo@1856: } // end of WMSKmState ingo@1856: } ingo@1856: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :