diff backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java @ 8557:29ab66ce06aa

Abstract parser for bed heights is obsolete.
author "Tom Gottfried <tom@intevation.de>"
date Mon, 16 Feb 2015 09:50:39 +0100
parents d115d0ed6624
children 6d8d7425a6b5
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java	Mon Feb 16 09:35:06 2015 +0100
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java	Mon Feb 16 09:50:39 2015 +0100
@@ -32,6 +32,7 @@
 import org.apache.log4j.Logger;
 
 import org.dive4elements.river.importer.ImportBedHeightSingle;
+import org.dive4elements.river.importer.ImportBedHeightSingleValue;
 import org.dive4elements.river.importer.ImportBedHeightType;
 import org.dive4elements.river.importer.ImportElevationModel;
 import org.dive4elements.river.importer.ImportLocationSystem;
@@ -43,7 +44,7 @@
 import org.dive4elements.river.backend.utils.EpsilonComparator;
 import org.dive4elements.river.backend.utils.DateUtil;
 
-public abstract class BedHeightParser {
+public class BedHeightParser {
 
     private static final Logger log =
         Logger.getLogger(BedHeightParser.class);
@@ -92,13 +93,10 @@
     protected List<ImportBedHeightSingle> bedHeights;
 
 
-    protected abstract ImportBedHeightSingle newImportBedHeight(String description);
+    protected ImportBedHeightSingle newImportBedHeight(String description) {
+        return new ImportBedHeightSingle(description);
+    }
 
-    /** Handle a line of file that contains data (in contrast to comments, meta). */
-    protected abstract void handleDataLine(
-        ImportBedHeightSingle importBedHeight,
-        String          line
-    );
 
     protected TreeSet<Double> kmExists;
 
@@ -414,5 +412,94 @@
 
         return false;
     }
+
+    protected void handleDataLine(ImportBedHeightSingle obj, String line) {
+        String[] values = line.split(SEPERATOR_CHAR, -1);
+
+        if (values == null) {
+            log.warn("BSP: Error while parsing data line: '" + line + "'");
+            return;
+        }
+
+        Double km;
+
+        try {
+            km = new Double(nf.parse(values[0]).doubleValue());
+
+            Double key = Double.valueOf(km);
+
+            if (kmExists.contains(key)) {
+                log.warn("duplicate station '" + km + "': -> ignored");
+                return;
+            }
+
+            kmExists.add(key);
+        }
+        catch (ParseException e) {
+            // We expect a lot of ";;;;;;" lines.
+            return;
+        }
+
+        // Handle gaps like "10,0;;;;;".
+        if (values.length <= 2) {
+            // Do not import line without useful data
+            if (values.length < 2) {
+                return;
+            }
+            if (values[1].length() == 0) {
+                return;
+            }
+        }
+
+        Double height = null;
+        if (values[1].length() > 0) {
+            try {
+                height = new Double(nf.parse(values[1]).doubleValue());
+            }
+            catch (ParseException e) {
+                log.warn("BSP: unparseable height " + values[1]);
+            }
+        }
+
+        Double uncertainty = null;
+        if (values[2].length() > 0) {
+            try {
+                uncertainty = new Double(nf.parse(values[2]).doubleValue());
+            }
+            catch (ParseException e) {
+                log.warn("BSP: unparseable uncertainty value " + values[2]);
+            }
+        }
+
+        Double dataGap = null;
+        if (values[3].length() > 0) {
+            try {
+                dataGap = new Double(nf.parse(values[3]).doubleValue());
+            }
+            catch (ParseException e) {
+                log.warn("BSP: unparseable data gap " + values[3]);
+            }
+        }
+
+        Double soundingWidth = null;
+        if (values[4].length() > 0) {
+            try {
+                soundingWidth = new Double(nf.parse(values[4]).doubleValue());
+            }
+            catch (ParseException e) {
+                log.warn("BSP: unparseable sounding width " + values[4]);
+            }
+        }
+
+        ImportBedHeightSingleValue value = new ImportBedHeightSingleValue(
+            (ImportBedHeightSingle) obj,
+            km,
+            height,
+            uncertainty,
+            dataGap,
+            soundingWidth);
+
+        obj.addValue(value);
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org