ingo@2684: package de.intevation.flys.artifacts; ingo@2684: ingo@2684: import java.util.List; ingo@2684: ingo@2684: import org.w3c.dom.Document; ingo@2684: ingo@2684: import org.apache.log4j.Logger; ingo@2684: ingo@2684: import com.vividsolutions.jts.geom.Envelope; ingo@2684: import com.vividsolutions.jts.geom.Geometry; ingo@2684: ingo@2684: import de.intevation.artifacts.ArtifactFactory; ingo@2684: import de.intevation.artifacts.CallMeta; ingo@2684: ingo@2684: import de.intevation.artifactdatabase.state.Facet; ingo@2684: import de.intevation.artifactdatabase.state.DefaultOutput; ingo@2684: import de.intevation.artifactdatabase.state.State; ingo@2684: ingo@2684: import de.intevation.flys.model.River; ingo@2684: import de.intevation.flys.model.GaugeLocation; ingo@2684: ingo@2684: import de.intevation.flys.artifacts.WMSDBArtifact.WMSDBState; ingo@2684: import de.intevation.flys.artifacts.model.FacetTypes; ingo@2684: import de.intevation.flys.artifacts.model.RiverFactory; ingo@2684: import de.intevation.flys.utils.FLYSUtils; ingo@3301: import de.intevation.flys.utils.GeometryUtils; ingo@2684: ingo@2684: ingo@2684: public class WMSGaugeLocationArtifact extends WMSDBArtifact { ingo@2684: ingo@2684: public static final String NAME = "wmsgaugelocation"; ingo@2684: ingo@2684: ingo@2684: private static final Logger logger = ingo@2684: Logger.getLogger(WMSGaugeLocationArtifact.class); ingo@2684: ingo@2684: ingo@2684: @Override ingo@2684: public void setup( ingo@2684: String identifier, ingo@2684: ArtifactFactory factory, ingo@2684: Object context, ingo@2684: CallMeta callMeta, ingo@2684: Document data) ingo@2684: { ingo@2684: logger.debug("WMSGaugeLocationArtifact.setup"); ingo@2684: ingo@2684: super.setup(identifier, factory, context, callMeta, data); ingo@2684: } ingo@2684: ingo@2684: ingo@2684: @Override ingo@2684: public String getName() { ingo@2684: return NAME; ingo@2684: } ingo@2684: ingo@2684: ingo@2684: @Override ingo@2684: public State getCurrentState(Object cc) { ingo@2684: State s = new WMSGaugeLocationState(this); ingo@2684: ingo@2684: List fs = facets.get(getCurrentStateId()); ingo@2684: ingo@2684: DefaultOutput o = new DefaultOutput( ingo@2684: "floodmap", ingo@2684: "floodmap", ingo@2684: "image/png", ingo@2684: fs, ingo@2684: "map"); ingo@2684: ingo@2684: s.getOutputs().add(o); ingo@2684: ingo@2684: return s; ingo@2684: } ingo@2684: ingo@2684: ingo@2684: ingo@2684: public static class WMSGaugeLocationState extends WMSDBState implements FacetTypes { ingo@2684: ingo@2684: private static final Logger logger = ingo@2684: Logger.getLogger(WMSGaugeLocationState.class); ingo@2684: ingo@2684: protected Geometry geom; ingo@2684: ingo@2684: public WMSGaugeLocationState(WMSDBArtifact artifact) { ingo@2684: super(artifact); ingo@2684: } ingo@2684: ingo@2684: @Override ingo@2684: protected String getFacetType() { ingo@2684: return FLOODMAP_GAUGE_LOCATION; ingo@2684: } ingo@2684: ingo@2684: @Override ingo@2684: protected String getUrl() { ingo@2684: return FLYSUtils.getUserWMSUrl(artifact.identifier()); ingo@2684: } ingo@2684: ingo@2684: @Override ingo@2684: protected String getSrid() { ingo@2684: River river = RiverFactory.getRiver(getRiverId()); ingo@2684: return FLYSUtils.getRiverSrid(river.getName()); ingo@2684: } ingo@2684: ingo@2684: @Override ingo@3918: protected Envelope getExtent(boolean reproject) { ingo@2684: List gauges = ingo@2684: GaugeLocation.getGaugeLocations(getRiverId(), getName()); ingo@2684: ingo@2684: Envelope max = null; ingo@2684: ingo@2684: for (GaugeLocation gauge: gauges) { ingo@2684: Envelope env = gauge.getGeom().getEnvelopeInternal(); ingo@2684: ingo@2684: if (max == null) { ingo@2684: max = env; ingo@2684: continue; ingo@2684: } ingo@2684: ingo@2684: max.expandToInclude(env); ingo@2684: } ingo@2684: ingo@3918: return max != null && reproject ingo@3301: ? GeometryUtils.transform(max, getSrid()) ingo@3301: : max; ingo@2684: } ingo@2684: ingo@2684: @Override ingo@2684: protected String getFilter() { ingo@2684: return "river_id=" + String.valueOf(getRiverId()) + ingo@2684: " and name='" + getName() + "'"; ingo@2684: } ingo@2684: ingo@2684: @Override ingo@2684: protected String getDataString() { ingo@2684: String srid = getSrid(); ingo@2684: ingo@2684: if (FLYSUtils.isUsingOracle()) { ingo@2684: return "geom FROM gauge_location USING SRID " + srid; ingo@2684: } ingo@2684: else { ingo@2684: return "geom FROM gauge_location " + ingo@2684: "USING UNIQUE id USING SRID " + srid; ingo@2684: } ingo@2684: } ingo@2684: ingo@2684: @Override ingo@2684: protected String getGeometryType() { ingo@2684: return "POINT"; ingo@2684: } ingo@2684: } ingo@2684: } ingo@2684: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :