aheinecke@5552: package de.intevation.flys.artifacts; aheinecke@5552: aheinecke@5552: import java.util.List; aheinecke@5552: aheinecke@5552: import org.w3c.dom.Document; aheinecke@5552: aheinecke@5552: import org.apache.log4j.Logger; aheinecke@5552: aheinecke@5552: import com.vividsolutions.jts.geom.Envelope; aheinecke@5552: aheinecke@5552: import de.intevation.artifacts.ArtifactFactory; aheinecke@5552: import de.intevation.artifacts.CallMeta; aheinecke@5552: aheinecke@5552: import de.intevation.artifactdatabase.state.DefaultOutput; aheinecke@5552: import de.intevation.artifactdatabase.state.Facet; aheinecke@5552: import de.intevation.artifactdatabase.state.State; aheinecke@5552: aheinecke@5552: import de.intevation.flys.model.River; aheinecke@5552: import de.intevation.flys.model.Floodmark; aheinecke@5552: aheinecke@5552: import de.intevation.flys.artifacts.model.FacetTypes; aheinecke@5552: import de.intevation.flys.artifacts.model.RiverFactory; aheinecke@5552: import de.intevation.flys.utils.FLYSUtils; aheinecke@5552: import de.intevation.flys.utils.GeometryUtils; aheinecke@5552: aheinecke@5552: aheinecke@5552: public class WMSFloodmarksArtifact extends WMSDBArtifact { aheinecke@5552: aheinecke@5552: public static final String NAME = "floodmarks"; aheinecke@5552: aheinecke@5552: aheinecke@5552: private static final Logger logger = aheinecke@5552: Logger.getLogger(WMSFloodmarksArtifact.class); aheinecke@5552: aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: public void setup( aheinecke@5552: String identifier, aheinecke@5552: ArtifactFactory factory, aheinecke@5552: Object context, aheinecke@5552: CallMeta callMeta, aheinecke@5552: Document data) aheinecke@5552: { aheinecke@5552: logger.debug("WMSFloodmarksArtifact.setup"); aheinecke@5552: aheinecke@5552: super.setup(identifier, factory, context, callMeta, data); aheinecke@5552: } aheinecke@5552: aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: public String getName() { aheinecke@5552: return NAME; aheinecke@5552: } aheinecke@5552: aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: public State getCurrentState(Object cc) { aheinecke@5552: State s = new FloodmarksState(this); aheinecke@5552: aheinecke@5552: List fs = getFacets(getCurrentStateId()); aheinecke@5552: aheinecke@5552: DefaultOutput o = new DefaultOutput( aheinecke@5552: "floodmap", aheinecke@5552: "floodmap", aheinecke@5552: "image/png", aheinecke@5552: fs, aheinecke@5552: "map"); aheinecke@5552: aheinecke@5552: s.getOutputs().add(o); aheinecke@5552: aheinecke@5552: return s; aheinecke@5552: } aheinecke@5552: aheinecke@5552: aheinecke@5552: public static class FloodmarksState extends WMSDBState implements FacetTypes aheinecke@5552: { aheinecke@5552: private static final Logger logger = aheinecke@5552: Logger.getLogger(FloodmarksState.class); aheinecke@5552: aheinecke@5552: protected int riverId; aheinecke@5552: aheinecke@5552: public FloodmarksState(WMSDBArtifact artifact) { aheinecke@5552: super(artifact); aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected String getFacetType() { aheinecke@5552: return FLOODMAP_FLOODMARKS; aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected String getUrl() { aheinecke@5552: return FLYSUtils.getUserWMSUrl(artifact.identifier()); aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected String getSrid() { aheinecke@5552: River river = RiverFactory.getRiver(getRiverId()); aheinecke@5552: return FLYSUtils.getRiverSrid(river.getName()); aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected Envelope getExtent(boolean reproject) { aheinecke@5552: String year = getIdPart(2); aheinecke@5552: List floodmarks; aheinecke@5552: if (year != null) { aheinecke@5552: floodmarks = Floodmark.getFloodmarks(getRiverId(), aheinecke@5552: Integer.parseInt(year)); aheinecke@5552: } else { aheinecke@5552: floodmarks = Floodmark.getFloodmarks(getRiverId()); aheinecke@5552: } aheinecke@5552: aheinecke@5552: Envelope max = null; aheinecke@5552: aheinecke@5552: for (Floodmark f: floodmarks) { aheinecke@5552: Envelope env = f.getGeom().getEnvelopeInternal(); aheinecke@5552: aheinecke@5552: if (max == null) { aheinecke@5552: max = env; aheinecke@5552: continue; aheinecke@5552: } aheinecke@5552: aheinecke@5552: max.expandToInclude(env); aheinecke@5552: } aheinecke@5552: aheinecke@5552: return max != null && reproject aheinecke@5552: ? GeometryUtils.transform(max, getSrid()) aheinecke@5552: : max; aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected String getFilter() { aheinecke@5552: String year = getIdPart(2); aheinecke@5552: if (year != null) { aheinecke@5552: return "river_id=" + String.valueOf(getRiverId()) + aheinecke@5552: " AND year=" + getIdPart(2); aheinecke@5552: } aheinecke@5552: return "river_id=" + String.valueOf(getRiverId()); aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected String getDataString() { aheinecke@5552: String srid = getSrid(); aheinecke@5552: aheinecke@5552: if (FLYSUtils.isUsingOracle()) { aheinecke@5552: return "geom FROM flood_marks USING SRID " + srid; aheinecke@5552: } aheinecke@5552: else { aheinecke@5552: return "geom FROM flood_marks USING UNIQUE id USING SRID " + srid; aheinecke@5552: } aheinecke@5552: } aheinecke@5552: aheinecke@5552: @Override aheinecke@5552: protected String getGeometryType() { aheinecke@5552: return "POINT"; aheinecke@5552: } aheinecke@5552: } // end of WMSKmState aheinecke@5552: } aheinecke@5552: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :