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