changeset 5312:2c1045a1e3fe

Added new states and transitions to UESK calculation and adjusted states and UI. TODO: Some refactoring and code cleanup.
author Raimund Renkert <rrenkert@intevation.de>
date Thu, 14 Mar 2013 17:25:00 +0100
parents ff9dfc58d0cb
children a1cb9a734cc5
files flys-artifacts/doc/conf/artifacts/winfo.xml flys-artifacts/doc/conf/meta-data.xml flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/ScenarioSelect.java flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java flys-client/src/main/java/de/intevation/flys/client/client/ui/UIProviderFactory.java
diffstat 7 files changed, 429 insertions(+), 202 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/doc/conf/artifacts/winfo.xml	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-artifacts/doc/conf/artifacts/winfo.xml	Thu Mar 14 17:25:00 2013 +0100
@@ -496,12 +496,51 @@
 
         <state id="state.winfo.uesk.scenario" description="state.winfo.uesk.scenario" state="de.intevation.flys.artifacts.states.ScenarioSelect" helpText="help.state.winfo.uesk.scenario">
             <data name="scenario" type="String" />
+        </state>
+
+        <transition transition="de.intevation.flys.artifacts.transitions.ValueCompareTransition">
+            <from state="state.winfo.uesk.scenario"/>
+            <to state="state.winfo.uesk.uesk"/>
+            <condition data="scenario" value="scenario.current" operator="equal"/>
+        </transition>
+
+        <transition transition="de.intevation.flys.artifacts.transitions.ValueCompareTransition">
+            <from state="state.winfo.uesk.scenario"/>
+            <to state="state.winfo.uesk.uesk"/>
+            <condition data="scenario" value="scenario.potentiel" operator="equal"/>
+        </transition>
+
+        <transition transition="de.intevation.flys.artifacts.transitions.ValueCompareTransition">
+            <from state="state.winfo.uesk.scenario"/>
+            <to state="state.winfo.uesk.dc-hws"/>
+            <condition data="scenario" value="scenario.scenario" operator="equal"/>
+        </transition>
+
+        <state id="state.winfo.uesk.dc-hws" description="state.winfo.uesk.dc-hws" state="de.intevation.flys.artifacts.states.HWSDatacageState" helpText="help.state.winfo.uesk.dc-hws">
+            <data name="uesk.hws" type="String" />
+        </state>
+
+        <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
+            <from state="state.winfo.uesk.dc-hws" />
+            <to state="state.winfo.uesk.user-rgd" />
+        </transition>
+
+        <state id="state.winfo.uesk.user-rgd" description="state.winfo.uesk.user-rgd" state="de.intevation.flys.artifacts.states.UserRGDState" helpText="help.state.winfo.uesk.user-rgd">
+            <data name="uesk.user-rgd" type="String" />
+        </state>
+
+        <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
+            <from state="state.winfo.uesk.user-rgd" />
+            <to state="state.winfo.uesk.barriers" />
+        </transition>
+
+        <state id="state.winfo.uesk.barriers" description="state.winfo.uesk.barriers" state="de.intevation.flys.artifacts.states.HWSBarriersState" helpText="help.state.winfo.uesk.barriers">
             <data name="uesk.barriers" type="String" />
         </state>
 
         <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
-            <from state="state.winfo.uesk.scenario"/>
-            <to state="state.winfo.uesk.uesk"/>
+            <from state="state.winfo.uesk.barriers" />
+            <to state="state.winfo.uesk.uesk" />
         </transition>
 
         <state id="state.winfo.uesk.uesk" description="state.winfo.uesk.uesk" state="de.intevation.flys.artifacts.states.FloodMapState" helpText="help.state.winfo.uesk.uesk">
--- a/flys-artifacts/doc/conf/meta-data.xml	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-artifacts/doc/conf/meta-data.xml	Thu Mar 14 17:25:00 2013 +0100
@@ -937,7 +937,7 @@
               </discharge_table_nn>
           </dc:if>
 
-          <dc:if test="dc:contains($artifact-outs, 'floodmap')">
+          <dc:if test="dc:contains($artifact-outs, 'floodmap') or dc:contains($artifact-outs, 'floodmap-hws')">
               <floodmap>
               <dc:choose>
                   <dc:when test="dc:contains($parameters, 'recommended')">
@@ -946,6 +946,10 @@
                   <dc:when test="dc:contains($parameters, 'dem')">
                     <dc:call-macro name="flood-map-dem"/>
                   </dc:when>
+                  <dc:when test="dc:contains($parameters, 'hws')">
+                    <dc:call-macro name="flood-map-hws-lines" />
+                    <dc:call-macro name="flood-map-hws-points" />
+                  </dc:when>
                   <dc:otherwise>
                     <dc:call-macro name="flood-map-complete"/>
                   </dc:otherwise>
@@ -993,6 +997,138 @@
                   </dc:context>
                 </dems>
               </dc:macro>
+              <dc:macro name="flood-map-hws-lines">
+                <dc:context>
+                  <dc:statement>
+                    SELECT DISTINCT
+                           name AS hws_name,
+                           official AS hws_official,
+                           kind_id AS hws_kind
+                    FROM hws_lines
+                    WHERE river_id = ${river_id}
+                  </dc:statement>
+                  <lines>
+                    <official>
+                      <Durchlass>
+                        <dc:elements filter="$hws_kind=1 and $hws_official=1">
+                            <hws>
+                              <dc:attribute name="factory" value="hwsfactory"/>
+                              <dc:attribute name="name" value="${hws_name}"/>
+                            </hws>
+                        </dc:elements>
+                      </Durchlass>
+                      <Damm>
+                        <dc:elements filter="$hws_kind=2 and $hws_official=1">
+                            <hws>
+                              <dc:attribute name="factory" value="hwsfactory"/>
+                              <dc:attribute name="name" value="${hws_name}"/>
+                            </hws>
+                        </dc:elements>
+                      </Damm>
+                      <Graben>
+                        <dc:elements filter="$hws_kind=3 and $hws_official=1">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Graben>
+                    </official>
+                    <inofficial>
+                      <Durchlass>
+                        <dc:elements filter="$hws_kind=1 and $hws_official=0">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Durchlass>
+                      <Damn>
+                        <dc:elements filter="$hws_kind=2 and $hws_official=0">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Damn>
+                      <Graben>
+                        <dc:elements filter="$hws_kind=3 and $hws_official=0">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Graben>
+                    </inofficial>
+                  </lines>
+                </dc:context>
+              </dc:macro>
+              <dc:macro name="flood-map-hws-points">
+                <dc:context>
+                  <dc:statement>
+                    SELECT DISTINCT
+                           name AS hws_points_name,
+                           official AS hws_points_official,
+                           kind_id AS hws_points_kind
+                    FROM hws_points
+                    WHERE river_id = ${river_id}
+                  </dc:statement>
+                  <points>
+                    <official>
+                      <Durchlass>
+                        <dc:elements filter="$hws_points_kind=1 and $hws_points_official=1">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_points_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Durchlass>
+                      <Damm>
+                        <dc:elements filter="$hws_points_kind=2 and $hws_points_official=1">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_points_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Damm>
+                      <Graben>
+                        <dc:elements filter="$hws_kind=3 and $hws_official=1">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_points_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Graben>
+                    </official>
+                    <inofficial>
+                      <Durchlass>
+                        <dc:elements filter="$hws_points_kind=1 and $hws_points_official=0">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_points_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Durchlass>
+                      <Damm>
+                        <dc:elements filter="$hws_points_kind=2 and $hws_points_official=0">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_points_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Damm>
+                      <Graben>
+                        <dc:elements filter="$hws_points_kind=3 and $hws_points_official=0">
+                          <hws>
+                            <dc:attribute name="factory" value="hwsfactory"/>
+                            <dc:attribute name="name" value="${hws_points_name}"/>
+                          </hws>
+                        </dc:elements>
+                      </Graben>
+                    </inofficial>
+                  </points>
+                </dc:context>
+              </dc:macro>
               <dc:macro name="flood-map-km">
                 <dc:context>
                   <dc:statement>
@@ -1988,6 +2124,36 @@
           </fix_vollmer_wq_curve>
         </dc:macro>
 
+        <dc:macro name="floodmap-hws-user">
+                  <dc:context>
+                    <dc:statement>
+                      SELECT id AS out_id
+                      FROM outs
+                      WHERE artifact_id = ${a_id} AND name = 'floodmap'
+                    </dc:statement>
+                    <dc:elements>
+                      <dc:context>
+                        <dc:statement>
+                          SELECT name AS facet_name, num as facet_num, description AS facet_description
+                          FROM facets
+                          WHERE out_id = ${out_id} and name = 'floodmap.usershape'
+                          ORDER BY num ASC, name DESC
+                        </dc:statement>
+                        <own-hws>
+                          <dc:elements>
+                            <dc:element name="${facet_name}">
+                              <dc:attribute name="description" value="${facet_description}"/>
+                              <dc:attribute name="ids"         value="${facet_num}"/>
+                              <dc:attribute name="factory"     value="winfo"/>
+                              <dc:attribute name="artifact-id" value="${a_gid}"/>
+                              <dc:attribute name="out"         value="floodmap"/>
+                            </dc:element>
+                          </dc:elements>
+                        </own-hws>
+                      </dc:context>
+                    </dc:elements>
+                  </dc:context>
+        </dc:macro>
         <dc:if test="dc:contains($artifact-outs, 'longitudinal_section') or (dc:contains($artifact-outs, 'discharge_longitudinal_section') or (dc:contains($artifact-outs, 'w_differences')))">
           <dc:call-macro name="longitudinal"/>
         </dc:if>
@@ -2030,7 +2196,9 @@
         <dc:if test="dc:contains($artifact-outs, 'bedheight_middle')">
           <dc:call-macro name="bed-height"/>
         </dc:if>
-
+        <dc:if test="dc:contains($artifact-outs, 'floodmap-hws')">
+          <dc:call-macro name="floodmap-hws-user"/>
+        </dc:if>
       </dc:context>
   </dc:call-macro>
 
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java	Thu Mar 14 17:25:00 2013 +0100
@@ -43,8 +43,11 @@
 import de.intevation.flys.artifacts.model.CalculationMessage;
 import de.intevation.flys.artifacts.model.CalculationResult;
 import de.intevation.flys.artifacts.model.FacetTypes;
+import de.intevation.flys.artifacts.model.LayerInfo;
 import de.intevation.flys.artifacts.model.WQKms;
-
+import de.intevation.flys.artifacts.model.map.HWS;
+import de.intevation.flys.artifacts.model.map.HWSContainer;
+import de.intevation.flys.artifacts.model.map.HWSFactory;
 import de.intevation.flys.artifacts.model.map.WMSLayerFacet;
 import de.intevation.flys.artifacts.model.map.WSPLGENCalculation;
 import de.intevation.flys.artifacts.model.map.WSPLGENJob;
@@ -68,6 +71,26 @@
 import de.intevation.flys.wsplgen.JobObserver;
 import de.intevation.flys.wsplgen.Scheduler;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.naming.Context;
+
+import org.apache.log4j.Logger;
+import org.apache.velocity.Template;
+import org.geotools.feature.FeatureCollection;
+import org.geotools.feature.FeatureCollections;
+import org.geotools.feature.simple.SimpleFeatureBuilder;
+import org.hibernate.HibernateException;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.simple.SimpleFeatureType;
+
+
 public class FloodMapState
 extends      DefaultState
 implements   FacetTypes
@@ -102,6 +125,13 @@
 
     public static final int WSPLGEN_DEFAULT_OUTPUT = 0;
 
+    private static final String HWS_LINES_SHAPE = "hws-lines.shp";
+
+    private static final String I18N_HWS_POINTS = "floodmap.hws.points";
+    private static final String I18N_HWS_LINES = "floodmap.hws.lines";
+    private static final String HWS_LINES = "hws-lines";
+    private static final String HWS_POINT_SHAPE = "hws-points.shp";
+    private static final String HWS_POINTS = "hws-points";
 
     /**
      * @param orig
@@ -305,6 +335,7 @@
         WSPLGENCalculation calculation
     ) {
         logger.debug("FloodMapState.prepareWSPLGENJob");
+        String scenario = artifact.getDataAsString("scenario");
 
         WSPLGENJob job = new WSPLGENJob(
             artifact,
@@ -320,15 +351,20 @@
         setDelta(artifact, job);
         setGel(artifact, job);
         setDist(artifact, job);
-        setLine(artifact, facetCreator, artifactDir, job);
-        setUserShape(artifact, facetCreator, artifactDir, job);
         setAxis(artifact, artifactDir, job);
         setPro(artifact, artifactDir, job);
         setDgm(artifact, job, context);
         setArea(artifact, artifactDir, job);
         setOutFile(artifact, job);
         setWsp(artifact, context, artifactDir, job);    // WSP
-
+        if (scenario.equals("scenario.current")) {
+            setOfficialHWS(artifact, facetCreator, artifactDir, job);
+        }
+        else if (scenario.equals("scenario.scenario")) {
+            setAdditionalHWS(artifact, facetCreator, artifactDir, job);
+            setLine(artifact, facetCreator, artifactDir, job);
+            setUserShape(artifact, facetCreator, artifactDir, job);
+        }
         // TODO
         // setWspTag(artifact, job);
 
@@ -348,6 +384,106 @@
     }
 
 
+    private void setAdditionalHWS(
+        FLYSArtifact artifact,
+        FacetCreator facetCreator,
+        File dir,
+        WSPLGENJob job) {
+        File line = new File(dir, HWS_LINES_SHAPE);
+        boolean lines = line.exists();
+        logger.debug("shp file exists: " + lines);
+        if (lines) {
+            job.addLin(dir + "/" + HWS_LINES_SHAPE);
+            facetCreator.createShapeFacet(I18N_HWS_LINES,
+                MapfileGenerator.MS_LAYER_PREFIX + HWS_LINES,
+                FLOODMAP_LINES, 2);
+        }
+        File point = new File(dir, HWS_POINT_SHAPE);
+        boolean points = point.exists();
+        logger.debug("shp file exists: " + points);
+        if (points) {
+            facetCreator.createShapeFacet(I18N_HWS_POINTS,
+                MapfileGenerator.MS_LAYER_PREFIX + HWS_POINTS,
+                FLOODMAP_FIXPOINTS, 3);
+        }
+    }
+
+
+    private void setOfficialHWS(
+        FLYSArtifact artifact,
+        FacetCreator facetCreator,
+        File artifactDir,
+        WSPLGENJob job) {
+        String river = artifact.getDataAsString("river");
+
+        HWSContainer hwsLines = HWSFactory.getHWSLines(river);
+        List<HWS> selectedLines = hwsLines.getOfficialHWS();
+
+        FeatureCollection collectionLines = FeatureCollections.newCollection();
+        SimpleFeatureType lineType = null;
+        for (HWS h : selectedLines) {
+            lineType = h.getFeatureType();
+            collectionLines.add(h.getFeature());
+        }
+        boolean successLines = false;
+        if (lineType != null && collectionLines.size() > 0) {
+            File shapeLines = new File(artifactDir, HWS_LINES_SHAPE);
+            successLines = GeometryUtils.writeShapefile(
+                shapeLines, lineType, collectionLines);
+        }
+       if (successLines) {
+            createMapfile(
+                artifact,
+                artifactDir,
+                MapfileGenerator.MS_LAYER_PREFIX + "hws-lines",
+                HWS_LINES_SHAPE,
+                "LINE",
+                "31467",
+                "hws");
+            job.addLin(artifactDir + "/" + HWS_LINES_SHAPE);
+            facetCreator.createShapeFacet(I18N_HWS_LINES,
+                MapfileGenerator.MS_LAYER_PREFIX + HWS_LINES,
+                FLOODMAP_HWS,2);
+        }
+    }
+
+
+    private void createMapfile(
+        FLYSArtifact artifact,
+        File artifactDir,
+        String name,
+        String hwsShapefile,
+        String type,
+        String srid,
+        String group
+    ) {
+        LayerInfo info = new LayerInfo();
+        info.setName(name + artifact.identifier());
+        info.setType(type);
+        info.setDirectory(artifact.identifier());
+        info.setTitle(name);
+        info.setData(hwsShapefile);
+        info.setSrid(srid);
+        info.setGroupTitle(group);
+        MapfileGenerator generator = new ArtifactMapfileGenerator();
+        Template tpl = generator.getTemplateByName(MapfileGenerator.SHP_LAYER_TEMPLATE);
+        try {
+            File layer = new File(artifactDir.getCanonicalPath() + "/" + name);
+            generator.writeLayer(info, layer, tpl);
+            List<String> layers = new ArrayList<String>();
+            layers.add(layer.getAbsolutePath());
+            generator.generate();
+        }
+        catch(FileNotFoundException fnfe) {
+            logger.warn("Could not find mapfile for hws layer");
+        }
+        catch (Exception ioe) {
+            logger.warn("Could not create mapfile for hws layer");
+            logger.warn(Arrays.toString(ioe.getStackTrace()));
+        }
+    }
+
+
     protected void setOut(FLYSArtifact artifact, WSPLGENJob job) {
         job.setOut(WSPLGEN_DEFAULT_OUTPUT);
     }
@@ -464,6 +600,14 @@
             logger.debug(
                 "Successfully created barrier line shapefile. " +
                 "Write shapefile path into WSPLGEN job.");
+            createMapfile(
+                artifact,
+                dir,
+                MapfileGenerator.MS_LAYER_PREFIX + "barriers-lines",
+                WSPLGEN_BARRIERS_LINES,
+                "LINE",
+                srid,
+                "barriers");
 
             if (scenario.equals(WSPLGENJob.GEL_NOSPERRE)) {
                 logger.debug("WSPLGEN will not use barrier features.");
@@ -478,10 +622,19 @@
             GeometryUtils.buildFeatureType("polygons", srs, Polygon.class, obj),
             fcs[1]);
 
+
         if (p) {
             logger.debug(
                 "Successfully created barrier polygon shapefile. " +
                 "Write shapefile path into WSPLGEN job.");
+            createMapfile(
+                artifact,
+                dir,
+                MapfileGenerator.MS_LAYER_PREFIX + "barriers-poly",
+                shapePolys.getAbsolutePath(),
+                "POLYGON",
+                srid,
+                "barriers");
 
             if (scenario.equals(WSPLGENJob.GEL_NOSPERRE)) {
                 logger.debug("WSPLGEN will not use barrier features.");
@@ -503,22 +656,15 @@
         File         dir,
         WSPLGENJob   job
     ) {
-        File archive = new File(dir, WSPLGEN_USER_ZIP);
+        File archive = new File(dir, WSPLGEN_USER_SHAPE);
         boolean exists = archive.exists();
-        logger.debug("Zip file exists: " + exists);
+        logger.debug("shp file exists: " + exists);
         if (exists) {
-            try {
-                File tmpDir = new File(dir, "usr_tmp");
-                FileTools.extractArchive(archive, tmpDir);
-                moveFiles(tmpDir, dir);
-            }
-            catch (IOException ioe) {
-                logger.warn("Zip archive " + dir + "/" + WSPLGEN_USER_ZIP + " could not be extracted.");
-                return;
-            }
-
             job.addLin(dir + "/" + WSPLGEN_USER_SHAPE);
-            facetCreator.createUserShapeFacet();
+            facetCreator.createShapeFacet(FacetCreator.I18N_USERSHAPE,
+                MapfileGenerator.MS_LAYER_PREFIX + "user-rgd",
+                FLOODMAP_USERSHAPE,
+                4);
         }
     }
 
@@ -883,41 +1029,6 @@
     }
 
 
-    protected void moveFiles(File source, final File target)
-    throws IOException
-    {
-        if (!source.exists()) {
-            return;
-        }
-        if (!target.exists()) {
-            target.mkdir();
-        }
-        FileTools.walkTree(source, new FileTools.FileVisitor() {
-            @Override
-            public boolean visit(File file) {
-                if (!file.isDirectory()) {
-                    String name = file.getName();
-                    String suffix = "";
-                    int pos = name.lastIndexOf('.');
-                    if (pos > 0 && pos < name.length() - 1) {
-                        suffix = name.substring(pos + 1);
-                    }
-                    else {
-                        return true;
-                    }
-                    try {
-                        FileTools.copyFile(file, new File(target, WSPLGEN_USER_FILENAME + "." + suffix));
-                    }
-                    catch (IOException ioe) {
-                        logger.warn ("Error while copying file " + file.getName());
-                        return true;
-                    }
-                }
-                return true;
-            }
-        });
 
-        FileTools.deleteRecursive(source);
-    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/ScenarioSelect.java	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/ScenarioSelect.java	Thu Mar 14 17:25:00 2013 +0100
@@ -26,7 +26,6 @@
 
 
     public static final String FIELD_MODE     = "scenario";
-    public static final String FIELD_BARRIERS = "uesk.barriers";
 
     public static final String SCENARIO_CURRENT   = "scenario.current";
     public static final String SCENARIO_POTENTIEL = "scenario.potentiel";
@@ -38,30 +37,11 @@
         SCENARIO_SCENRAIO };
 
 
-
     @Override
     protected String getUIProvider() {
-        return "map_digitize";
+        return "";
     }
 
-
-    @Override
-    protected void appendStaticData(
-        FLYSArtifact   flys,
-        CallContext    cc,
-        ElementCreator creator,
-        Element        ui,
-        String         name
-    ) {
-        if (name != null && name.equals(FIELD_BARRIERS)) {
-            return;
-        }
-        else {
-            super.appendStaticData(flys, cc, creator, ui, name);
-        }
-    }
-
-
     @Override
     protected Element[] createItems(
         XMLUtils.ElementCreator cr,
--- a/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java	Thu Mar 14 17:25:00 2013 +0100
@@ -159,8 +159,11 @@
             hash,
             getUrl());
 
-        barriers.addLayer(
-            MapfileGenerator.MS_BARRIERS_PREFIX + artifact.identifier());
+        barriers.addLayer(MapfileGenerator.MS_LAYER_PREFIX +
+            MapfileGenerator.MS_BARRIERS_PREFIX + "lines" + artifact.identifier());
+        barriers.addLayer( MapfileGenerator.MS_LAYER_PREFIX +
+            MapfileGenerator.MS_BARRIERS_PREFIX + "poly" + artifact.identifier());
+ 
         barriers.setSrid(getSrid());
         barriers.setExtent(getBounds());
 
@@ -168,13 +171,17 @@
     }
 
 
-    public void createUserShapeFacet() {
+    public void createShapeFacet(
+        String desc,
+        String layer,
+        String type,
+        int ndx) {
         WMSLayerFacet shape = new WMSLayerFacet(
             1,
-            FLOODMAP_USERSHAPE,
+            type,
             Resources.getMsg(
                 cc.getMeta(),
-                I18N_USERSHAPE,
+                desc,
                 I18N_USERSHAPE_DEFAULT),
             ComputeType.ADVANCE,
             stateId,
@@ -182,7 +189,7 @@
             getUrl());
 
         shape.addLayer(
-            MapfileGenerator.MS_USERSHAPE_PREFIX + artifact.identifier());
+            layer + artifact.identifier());
         shape.setSrid(getSrid());
         shape.setExtent(getBounds());
 
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java	Thu Mar 14 17:25:00 2013 +0100
@@ -1,22 +1,21 @@
 package de.intevation.flys.client.client.ui;
 
+import java.util.List;
+
+import org.gwtopenmaps.openlayers.client.Map;
+import org.gwtopenmaps.openlayers.client.control.Attribution;
+import org.gwtopenmaps.openlayers.client.layer.WMS;
+import org.gwtopenmaps.openlayers.client.layer.WMSOptions;
+import org.gwtopenmaps.openlayers.client.layer.WMSParams;
+
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import com.smartgwt.client.types.Encoding;
 import com.smartgwt.client.types.VerticalAlignment;
 import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.Button;
 import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.HTMLPane;
 import com.smartgwt.client.widgets.Label;
-import com.smartgwt.client.widgets.events.ClickEvent;
-import com.smartgwt.client.widgets.events.ClickHandler;
 import com.smartgwt.client.widgets.events.VisibilityChangedEvent;
 import com.smartgwt.client.widgets.events.VisibilityChangedHandler;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.fields.SelectItem;
-import com.smartgwt.client.widgets.form.fields.UploadItem;
 import com.smartgwt.client.widgets.layout.VLayout;
 import com.smartgwt.client.widgets.tab.events.TabSelectedEvent;
 import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
@@ -35,17 +34,6 @@
 import de.intevation.flys.client.shared.model.DefaultDataItem;
 import de.intevation.flys.client.shared.model.MapInfo;
 
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import org.gwtopenmaps.openlayers.client.Map;
-import org.gwtopenmaps.openlayers.client.control.Attribution;
-import org.gwtopenmaps.openlayers.client.feature.VectorFeature;
-import org.gwtopenmaps.openlayers.client.format.GeoJSON;
-import org.gwtopenmaps.openlayers.client.layer.WMS;
-import org.gwtopenmaps.openlayers.client.layer.WMSOptions;
-import org.gwtopenmaps.openlayers.client.layer.WMSParams;
-
 
 public class DigitizePanel
 extends SelectProvider
@@ -71,37 +59,17 @@
     @Override
     public Canvas create(DataList list) {
         List<Data> data = list.getAll();
-
         helperContainer.addVisibilityChangedHandler(this);
 
-        Data barriers = null;
-        for (int i = data.size()-1; i >= 0; i--) {
-            Data d = data.get(i);
-            if (d.getLabel().equals(UESK_BARRIERS)) {
-                barriers = d;
-                data.remove(d);
-            }
-        }
-
         DataList clone = (DataList) list.clone();
         List<Data> all = clone.getAll();
         all.remove(UESK_BARRIERS);
 
-        Canvas selectBox = super.create(clone);
+        Canvas widget = createWidget(list);
 
         final Config cfg    = Config.getInstance();
         final String locale = cfg.getLocale();
 
-        DataItem[] obj = barriers.getItems();
-
-        final String[] geojson = new String[1];
-        for (DataItem item: obj) {
-            if (item.getLabel().equals(UESK_BARRIERS)) {
-                geojson[0] = item.getStringValue();
-                break;
-            }
-        }
-
         String river = getDataValue("state.winfo.river", "river");
         mapInfo.getMapInfo(locale, river, new AsyncCallback<MapInfo>() {
             @Override
@@ -114,11 +82,11 @@
 
             @Override
             public void onSuccess(MapInfo info) {
-                createMapWidget(info, geojson[0]);
+                createMapWidget(info);
             }
         });
 
-        return selectBox;
+        return widget;
     }
 
 
@@ -137,10 +105,6 @@
         layout.setAlign(VerticalAlignment.TOP);
         layout.setHeight(25);
 
-        LinkedHashMap<String, String> initial = new LinkedHashMap<String, String>();
-
-        form = new DynamicForm();
-
         int size = data.size();
 
         for (int i = 0; i < size; i++) {
@@ -151,74 +115,10 @@
             label.setHeight(20);
             label.setWidth(400);
 
-            SelectItem combobox = new SelectItem(d.getLabel());
-            combobox.setWidth(250);
-
-            LinkedHashMap<String, String> it = new LinkedHashMap<String, String>();
-
-            boolean  defaultSet = false;
-            boolean  first      = true;
-
-            DataItem def      = d.getDefault();
-            String   defValue = def != null ? def.getStringValue() : null;
-
-            if (defValue != null && defValue.length() > 0) {
-                initial.put(d.getLabel(), def.getStringValue());
-                defaultSet = true;
-            }
-
-            for (DataItem item: d.getItems()) {
-                if (!defaultSet && first) {
-                    initial.put(d.getLabel(), item.getStringValue());
-                    first = false;
-                }
-
-                it.put(item.getStringValue(), item.getLabel());
-            }
-
-            label.setWidth(50);
-            combobox.setValueMap(it);
-            combobox.setShowTitle(false);
-            form.setItems(combobox);
-
-            HTMLPane uploadTargetFrame = new HTMLPane();
-            uploadTargetFrame.setWidth("200px");
-            uploadTargetFrame.setHeight("50px");
-            uploadTargetFrame.setContents(
-                    "<iframe id='uploadTarget' name='uploadTarget' scrolling='no' width=200 height=50 style='border: 0px'></iframe>");
-            uploadTargetFrame.setBorder("0px");
-            uploadTargetFrame.setScrollbarSize(0);
-
-            final DynamicForm uploadForm = new DynamicForm();
-            uploadForm.setAction("flys/fileupload?uuid=" + artifact.getUuid());
-            uploadForm.setTarget("uploadTarget");
-            uploadForm.setEncoding(Encoding.MULTIPART);
-            Label uploadLabel = new Label(MSG.shape_file_upload());
-            uploadLabel.setHeight(20);
-            UploadItem uploadItem = new UploadItem();
-            uploadItem.setShowTitle(false);
-            uploadForm.setFields(uploadItem);
-            Button submit = new Button(MSG.upload_file());
-            submit.addClickHandler(new ClickHandler() {
-                @Override
-                public void onClick(ClickEvent e) {
-                    uploadForm.submitForm();
-                }
-            });
-
             layout.addMember(label);
-            layout.addMember(form);
-            layout.addMember(uploadLabel);
-            layout.addMember(uploadForm);
-            layout.addMember(submit);
             layout.addMember(getNextButton());
-
-            layout.setMembersMargin(10);
-            layout.addMember(uploadTargetFrame);
         }
 
-        form.setValues(initial);
-
         layout.setAlign(VerticalAlignment.TOP);
 
         return layout;
@@ -227,14 +127,12 @@
 
     @Override
     protected Data[] getData() {
-        Data[] data  = super.getData();
-        Data[] total = new Data[2];
+        Data[] total = new Data[1];
 
         if (floodMap != null) {
             DataItem item = new DefaultDataItem(
                 UESK_BARRIERS, UESK_BARRIERS, floodMap.getFeaturesAsGeoJSON());
-            total[0] = data[0];
-            total[1] = new DefaultData(
+            total[0] = new DefaultData(
                 UESK_BARRIERS, null, null, new DataItem[] { item });
         }
         else {
@@ -246,7 +144,7 @@
     }
 
 
-    public void createMapWidget(MapInfo mapInfo, String geojson) {
+    public void createMapWidget(MapInfo mapInfo) {
         mapPanel = new MapPanel(mapInfo, true);
 
         floodMap = mapPanel.getFloodMap();
@@ -266,9 +164,25 @@
         map.addLayer(back);
         map.addLayer(axis);
 
-        if (geojson != null && geojson.length() > 0) {
-            VectorFeature[] features = new GeoJSON().read(geojson);
-            floodMap.getBarrierLayer().addFeatures(features);
+        String hws = getDataValue("state.winfo.uesk.dc-hws", "uesk.hws");
+        if (hws != null && hws.length() > 0) {
+            WMS hwsLayer = getLayer(
+            //TODO: Use Mapinfo to get hws layer infos.
+                mapInfo.getWmsUrl().replace("river", "user"),
+                "ms_layer-hws-lines" + artifact.getUuid(),
+                mapInfo.getProjection(),
+                false);
+            map.addLayer(hwsLayer);
+        }
+        String userRgd = getDataValue("state.winfo.uesk.user-rgd", "uesk.user-rgd");
+        if (userRgd != null && userRgd.length() > 0) {
+            WMS userLayer = getLayer(
+            //TODO: Use Mapinfo to get hws layer infos.
+                mapInfo.getWmsUrl().replace("river", "user"),
+                "ms_layer-user-rgd" + artifact.getUuid(),
+                mapInfo.getProjection(),
+                false);
+            map.addLayer(userLayer);
         }
         map.addControl(new Attribution());
         map.zoomToMaxExtent();
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/UIProviderFactory.java	Thu Mar 14 17:21:00 2013 +0100
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/UIProviderFactory.java	Thu Mar 14 17:25:00 2013 +0100
@@ -1,5 +1,7 @@
 package de.intevation.flys.client.client.ui;
 
+import com.google.gwt.core.client.GWT;
+
 import de.intevation.flys.client.client.ui.fixation.FixEventSelect;
 import de.intevation.flys.client.client.ui.fixation.FixFunctionSelect;
 import de.intevation.flys.client.client.ui.fixation.FixGaugeSelectPanel;
@@ -174,6 +176,12 @@
         else if (uiProvider.equals("minfo.sedimentload_offepoch_select")) {
             return new SedLoadOffEpochPanel();
         }
+        else if (uiProvider.equals("hws_datacage_panel")) {
+            return new HWSDatacagePanel(user);
+        }
+        else if (uiProvider.equals("user_rgd_panel")) {
+            return new UserRGDProvider();
+        }
         else {
             //GWT.log("Picked default provider.");
             return new SelectProvider();

http://dive4elements.wald.intevation.org