changeset 9012:abe069eb180c

Import of vegetation zones added
author mschaefer
date Wed, 18 Apr 2018 07:43:55 +0200
parents a44200bf0547
children 1fec0a06d833
files backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java backend/src/main/java/org/dive4elements/river/importer/Config.java backend/src/main/java/org/dive4elements/river/importer/common/AbstractParser.java backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/BedMobilityParser.java backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/CollisionParser.java backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DailyDischargeParser.java backend/src/main/java/org/dive4elements/river/importer/uinfo/UInfoImporter.java
diffstat 7 files changed, 57 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java	Wed Apr 18 07:43:55 2018 +0200
@@ -108,6 +108,9 @@
 import org.dive4elements.river.model.uinfo.Salix;
 import org.dive4elements.river.model.uinfo.SalixRank;
 import org.dive4elements.river.model.uinfo.SalixValue;
+import org.dive4elements.river.model.uinfo.Vegetation;
+import org.dive4elements.river.model.uinfo.VegetationType;
+import org.dive4elements.river.model.uinfo.VegetationZone;
 
 public class FLYSCredentials
 extends      Credentials
@@ -267,7 +270,10 @@
             FlowDepthColumn.class,
             FlowDepthValue.class,
             DepthEvolution.class,
-            DepthEvolutionValue.class
+            DepthEvolutionValue.class,
+            Vegetation.class,
+            VegetationZone.class,
+            VegetationType.class
     };
 
     public FLYSCredentials() {
--- a/backend/src/main/java/org/dive4elements/river/importer/Config.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/Config.java	Wed Apr 18 07:43:55 2018 +0200
@@ -134,7 +134,8 @@
     }
 
     private enum UInfoSkip {
-        SALIX("salix");
+        SALIX("salix"), //
+        VEGETATION("vegetation");
 
         private final String name;
 
@@ -335,5 +336,9 @@
     public boolean skipUInfoSalix() {
         return UInfoSkip.SALIX.getFlag();
     }
+
+    public boolean skipUInfoVegetation() {
+        return UInfoSkip.VEGETATION.getFlag();
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/backend/src/main/java/org/dive4elements/river/importer/common/AbstractParser.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/common/AbstractParser.java	Wed Apr 18 07:43:55 2018 +0200
@@ -82,6 +82,13 @@
     }
 
     /**
+     * How the km column and its content are expected
+     */
+    protected enum KmMode {
+        NONE, UNIQUE, DUPLICATES
+    }
+
+    /**
      * Path of the file or directory to import from
      */
     protected final File importPath;
@@ -382,25 +389,30 @@
         return false;
     }
 
-    private void handleDataLine() {
+    /**
+     * Parses a values line and adds the values record
+     */
+    protected void handleDataLine() {
         final String[] values = this.currentLine.split(SEPARATOR_CHAR, 0);
         // Skip import line without data or only km
         if (values.length < 2)
             return;
-        Double km;
-        try {
-            km = Double.valueOf(parseDouble(values[0]).doubleValue());
-            if (kmMustBeUnique()) {
-                if (this.kmExists.contains(km)) {
-                    logWarning("Ignoring duplicate station '" + values[0] + "' in line " + this.in.getLineNumber());
-                    return;
+        Double km = Double.NaN;
+        if (kmMode() != KmMode.NONE) {
+            try {
+                km = Double.valueOf(parseDouble(values[0]).doubleValue());
+                if (kmMode() == KmMode.UNIQUE) {
+                    if (this.kmExists.contains(km)) {
+                        logWarning("Ignoring duplicate station '" + values[0] + "' in line " + this.in.getLineNumber());
+                        return;
+                    }
+                    this.kmExists.add(km);
                 }
-                this.kmExists.add(km);
             }
-        }
-        catch (final Exception e) {
-            logError("Not parseable km in line " + this.in.getLineNumber() + ": " + e.getMessage());
-            return;
+            catch (final Exception e) {
+                logError("Not parseable km in line " + this.in.getLineNumber() + ": " + e.getMessage());
+                return;
+            }
         }
         final KMLINE value = createKmLineImport(km, values);
         if (value != null)
@@ -408,10 +420,10 @@
     }
 
     /**
-     * Whether {@link handleDataLine} shall check for and reject km duplicates
+     * How {@link handleDataLine} shall handle the km column (if any)
      */
-    protected boolean kmMustBeUnique() {
-        return true;
+    protected KmMode kmMode() {
+        return KmMode.UNIQUE;
     }
 
     /**
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/BedMobilityParser.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/BedMobilityParser.java	Wed Apr 18 07:43:55 2018 +0200
@@ -37,7 +37,7 @@
 
     private static final String MOBILE_KEYWORD = "mobil";
 
-    private static final String IMPORT_FILENAME = "Einteilung der Gewässersohle.csv";
+    private static final String IMPORT_FILENAME = "Einteilung_der_Gewaessersohle.csv";
 
 
     /***** CONSTRUCTORS *****/
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/CollisionParser.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/CollisionParser.java	Wed Apr 18 07:43:55 2018 +0200
@@ -113,8 +113,8 @@
     }
 
     @Override
-    protected boolean kmMustBeUnique() {
-        return false;
+    protected KmMode kmMode() {
+        return KmMode.DUPLICATES;
     }
 
     @Override
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DailyDischargeParser.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/DailyDischargeParser.java	Wed Apr 18 07:43:55 2018 +0200
@@ -93,8 +93,8 @@
     }
 
     @Override
-    protected boolean kmMustBeUnique() {
-        return false;
+    protected KmMode kmMode() {
+        return KmMode.NONE;
     }
 
     @Override
--- a/backend/src/main/java/org/dive4elements/river/importer/uinfo/UInfoImporter.java	Wed Apr 18 07:43:04 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/uinfo/UInfoImporter.java	Wed Apr 18 07:43:55 2018 +0200
@@ -19,9 +19,10 @@
 import org.dive4elements.river.importer.ImportRiver;
 import org.dive4elements.river.importer.common.ImportParser;
 import org.dive4elements.river.importer.uinfo.parsers.SalixParser;
+import org.dive4elements.river.importer.uinfo.parsers.VegetationParser;
 
 /**
- * Import all S-INFO files of a river from its import directory and subdirectories<br />
+ * Import all U-INFO files of a river from its import directory and subdirectories<br />
  * <br />
  * Requires river and its gauges to exist in the database already
  *
@@ -38,7 +39,8 @@
 
     private enum UInfoDirName {
         BASICS("Basisdaten"), //
-        SALIX("Salix-Linie" + File.separator + "Salix-Linie");
+        SALIX("Salix-Linie" + File.separator + "Salix-Linie"), //
+        VEGETATION("Vegetationszonen");
 
         private final String dirname;
 
@@ -91,6 +93,13 @@
         else {
             log.info("Salix: skipped");
         }
+        if (!VegetationParser.shallSkip()) {
+            if (!this.parsers.addAll(VegetationParser.createParsers(UInfoDirName.VEGETATION.buildPath(this.rootDir), UInfoDirName.VEGETATION.getFile(), river)))
+                log.info("Vegetation: no files found");
+        }
+        else {
+            log.info("Vegetation: skipped");
+        }
     }
 
     /**

http://dive4elements.wald.intevation.org