ingo@942: package de.intevation.flys.artifacts;
ingo@942: 
ingo@942: import java.util.List;
ingo@942: 
ingo@1075: import org.w3c.dom.Document;
ingo@1075: 
ingo@942: import org.apache.log4j.Logger;
ingo@942: 
ingo@1832: import com.vividsolutions.jts.geom.Envelope;
ingo@1832: import com.vividsolutions.jts.geom.Geometry;
ingo@1832: 
ingo@1075: import de.intevation.artifacts.ArtifactFactory;
ingo@952: import de.intevation.artifacts.CallMeta;
ingo@942: 
ingo@1832: import de.intevation.artifactdatabase.state.DefaultOutput;
ingo@942: import de.intevation.artifactdatabase.state.Facet;
ingo@1832: import de.intevation.artifactdatabase.state.State;
ingo@942: 
ingo@1075: import de.intevation.flys.model.River;
ingo@1075: 
ingo@1832: import de.intevation.flys.artifacts.model.FacetTypes;
ingo@1075: import de.intevation.flys.artifacts.model.RiverFactory;
ingo@1832: import de.intevation.flys.artifacts.resources.Resources;
ingo@1832: import de.intevation.flys.utils.FLYSUtils;
ingo@1832: import de.intevation.flys.utils.GeometryUtils;
ingo@942: 
ingo@942: 
ingo@1832: public class RiverAxisArtifact extends WMSDBArtifact {
ingo@942: 
ingo@942:     public static final String NAME = "riveraxis";
ingo@942: 
ingo@942: 
ingo@942:     private static final Logger logger =
ingo@942:         Logger.getLogger(RiverAxisArtifact.class);
ingo@942: 
ingo@942: 
ingo@942:     @Override
ingo@1075:     public void setup(
ingo@1075:         String          identifier,
ingo@1075:         ArtifactFactory factory,
ingo@1075:         Object          context,
ingo@1075:         CallMeta        callMeta,
ingo@1075:         Document        data)
ingo@1075:     {
ingo@1075:         logger.debug("RiverAxisArtifact.setup");
ingo@942: 
ingo@1075:         super.setup(identifier, factory, context, callMeta, data);
ingo@942:     }
ingo@1075: 
ingo@1075: 
ingo@1075:     @Override
ingo@1832:     public String getName() {
ingo@1832:         return NAME;
ingo@1832:     }
ingo@1832: 
ingo@1832: 
ingo@1832:     @Override
ingo@1832:     public State getCurrentState(Object cc) {
ingo@1832:         State s = new RiverAxisState(this);
ingo@1832: 
ingo@1832:         List<Facet> fs = facets.get(getCurrentStateId());
ingo@1832: 
ingo@1832:         DefaultOutput o = new DefaultOutput(
ingo@1832:             "floodmap",
ingo@1832:             "floodmap",
ingo@1832:             "image/png",
ingo@1832:             fs,
ingo@1832:             "map");
ingo@1832: 
ingo@1832:         s.getOutputs().add(o);
ingo@1832: 
ingo@1832:         return s;
ingo@1832:     }
ingo@1832: 
ingo@1832: 
ingo@1832:     public static class RiverAxisState extends WMSDBState implements FacetTypes
ingo@1075:     {
ingo@1832:         private static final Logger logger =
ingo@1832:             Logger.getLogger(RiverAxisState.class);
ingo@1832: 
ingo@1832:         protected Geometry geom;
ingo@1832:         protected int      riverId;
ingo@1832: 
raimund@2082:         public RiverAxisState(){}
raimund@2082: 
raimund@2089:         public RiverAxisState(FLYSArtifact artifact) {
ingo@1832:             super(artifact);
ingo@1832:             riverId = 0;
ingo@1832:         }
ingo@1832: 
ingo@1832:         public int getRiverId() {
ingo@1832:             if (riverId == 0) {
ingo@1832:                 String ids = artifact.getDataAsString("ids");
ingo@1832: 
ingo@1832:                 try {
ingo@1832:                     riverId = Integer.valueOf(ids);
ingo@1832:                 }
ingo@1832:                 catch (NumberFormatException nfe) {
ingo@1832:                     logger.error("Cannot parse river id from '" + ids + "'");
ingo@1832:                 }
ingo@1832:             }
ingo@1832: 
ingo@1832:             return riverId;
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getFacetType() {
ingo@1832:             return FLOODMAP_RIVERAXIS;
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getTitle(CallMeta meta) {
ingo@1832:             return Resources.getMsg(
ingo@1832:                 meta,
ingo@1832:                 FLOODMAP_RIVERAXIS,
ingo@1832:                 FLOODMAP_RIVERAXIS);
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getUrl() {
ingo@1832:             return FLYSUtils.getUserWMSUrl(artifact.identifier());
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getSrid() {
ingo@1832:             River river = RiverFactory.getRiver(getRiverId());
ingo@1832:             return FLYSUtils.getRiverSrid(river.getName());
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected Envelope getExtent() {
ingo@1832:             River river = RiverFactory.getRiver(getRiverId());
ingo@1832:             return GeometryUtils.getRiverBoundary(river.getName());
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getFilter() {
ingo@1832:             return "river_id=" + String.valueOf(getRiverId());
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getDataString() {
ingo@1845:             String srid = getSrid();
ingo@1845: 
ingo@1845:             if (FLYSUtils.isUsingOracle()) {
ingo@1845:                 return "geom FROM river_axes USING SRID " + srid;
ingo@1845:             }
ingo@1845:             else {
ingo@1845:                 return "geom FROM river_axes USING UNIQUE id USING SRID " + srid;
ingo@1845:             }
ingo@1832:         }
ingo@1832: 
ingo@1832:         @Override
ingo@1832:         protected String getGeometryType() {
ingo@1832:             return "LINE";
ingo@1832:         }
ingo@1832:     } // end of WMSKmState
ingo@942: }
ingo@942: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :