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: 
bjoern@4497:         List<Facet> fs = getFacets(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<GaugeLocation> 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 :