ingo@942: package de.intevation.flys.artifacts.states; ingo@942: ingo@942: import java.util.List; ingo@958: import java.util.Map; ingo@942: ingo@1052: import com.vividsolutions.jts.geom.Geometry; ingo@1052: ingo@942: import org.apache.log4j.Logger; ingo@942: ingo@958: import de.intevation.artifacts.CallContext; ingo@942: import de.intevation.artifacts.CallMeta; ingo@942: ingo@1052: import de.intevation.artifacts.common.utils.Config; ingo@1052: ingo@942: import de.intevation.artifactdatabase.state.Facet; ingo@942: ingo@1052: import de.intevation.flys.model.RiverAxis; ingo@1052: ingo@942: import de.intevation.flys.artifacts.FLYSArtifact; ingo@958: import de.intevation.flys.artifacts.context.FLYSContext; ingo@942: import de.intevation.flys.artifacts.model.WMSLayerFacet; ingo@954: import de.intevation.flys.artifacts.resources.Resources; ingo@942: import de.intevation.flys.artifacts.states.DefaultState.ComputeType; ingo@1052: import de.intevation.flys.utils.GeometryUtils; ingo@942: ingo@942: ingo@942: public class RiverAxisState extends OutputState { ingo@942: ingo@954: public static final String I18N_DESCRIPTION = "floodmap.riveraxis"; ingo@954: ingo@958: public static final String WMS_LAYER_NAME = "riveraxis"; ingo@958: ingo@1052: public static final String XPATH_RIVER_PROJECTION = ingo@1058: "/artifact-database/floodmap/river[@name='%RIVER%']/srid/@value"; ingo@1052: ingo@954: ingo@942: private static final Logger logger = Logger.getLogger(RiverAxisState.class); ingo@942: ingo@958: ingo@942: @Override ingo@942: public Object computeInit( ingo@942: FLYSArtifact artifact, ingo@942: String hash, ingo@958: Object context, ingo@942: CallMeta meta, ingo@942: List facets ingo@942: ) { ingo@942: logger.debug("RiverAxisState.computeInit()"); ingo@942: ingo@958: FLYSContext flysContext = null; ingo@958: ingo@958: if (context instanceof FLYSContext) { ingo@958: flysContext = (FLYSContext) context; ingo@958: } ingo@958: else { ingo@958: flysContext = (FLYSContext) ((CallContext) context).globalContext(); ingo@958: } ingo@958: ingo@958: Map wms = (Map) ingo@958: flysContext.get(FLYSContext.RIVER_WMS); ingo@958: ingo@958: String river = artifact.getDataAsString("river"); ingo@958: ingo@958: if(river == null || river.length() == 0) { ingo@958: logger.warn("No river found in the current parameterization."); ingo@958: return null; ingo@958: } ingo@958: ingo@958: String url = wms.get(river); ingo@958: ingo@954: // TODO Add config for background layer ingo@942: WMSLayerFacet facet = new WMSLayerFacet( ingo@942: 0, ingo@942: FLOODMAP_RIVERAXIS, ingo@954: Resources.getMsg(meta, I18N_DESCRIPTION, I18N_DESCRIPTION), ingo@942: ComputeType.INIT, ingo@942: getID(), hash, ingo@958: url); ingo@942: ingo@958: facet.addLayer(WMS_LAYER_NAME); ingo@942: ingo@1052: RiverAxis axis = RiverAxis.getRiverAxis(river); ingo@1052: if (axis != null) { ingo@1052: // TODO Take the correct EPSG into account. Maybe, we need to ingo@1052: // reproject the geometry. ingo@1052: Geometry geom = axis.getGeom().getBoundary(); ingo@1052: String bounds = GeometryUtils.jtsBoundsToOLBounds(geom); ingo@1052: ingo@1052: logger.debug("River '" + river + "' bounds: " + bounds); ingo@1052: ingo@1052: facet.setExtent(bounds); ingo@1052: } ingo@1052: ingo@1052: String xpath = XPATH_RIVER_PROJECTION.replace("%RIVER%", river); ingo@1052: String srid = Config.getStringXPath(xpath); ingo@1052: facet.setSrid(srid); ingo@954: ingo@942: facets.add(facet); ingo@942: ingo@942: return null; ingo@942: } ingo@942: } ingo@942: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :