diff flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java @ 2811:8926571e47fb

Finished importing MINFO bed heights (single and epoch). flys-backend/trunk@4225 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 13 Apr 2012 07:24:55 +0000
parents f283212966e8
children 0d27d02b1208
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java	Thu Apr 12 12:50:49 2012 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java	Fri Apr 13 07:24:55 2012 +0000
@@ -1,343 +1,36 @@
 package de.intevation.flys.importer.parsers;
 
-import java.io.File;
 
 import java.math.BigDecimal;
 
-import java.text.NumberFormat;
 import java.text.ParseException;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
 
 import org.apache.log4j.Logger;
 
+import de.intevation.flys.importer.ImportBedHeight;
 import de.intevation.flys.importer.ImportBedHeightSingle;
 import de.intevation.flys.importer.ImportBedHeightSingleValue;
-import de.intevation.flys.importer.ImportBedHeightType;
-import de.intevation.flys.importer.ImportElevationModel;
-import de.intevation.flys.importer.ImportLocationSystem;
-import de.intevation.flys.importer.ImportRange;
-import de.intevation.flys.importer.ImportUnit;
-import de.intevation.flys.model.BedHeightType;
 
 
-public class BedHeightSingleParser {
-
-    public static final String ENCODING = "ISO-8859-1";
-
-    public static final Locale DEFAULT_LOCALE = Locale.GERMAN;
-
-    public static final String START_META_CHAR = "#";
-    public static final String SEPERATOR_CHAR  = ";";
-
-    public static final Pattern META_YEAR =
-        Pattern.compile("^Jahr: (\\d*).*");
-
-    public static final Pattern META_TYPE =
-        Pattern.compile("^Aufnahmeart: (.*).*");
-
-    public static final Pattern META_LOCATION_SYSTEM =
-        Pattern.compile("^Lagesystem: (.*).*");
-
-    public static final Pattern META_CUR_ELEVATION_SYSTEM =
-        Pattern.compile("^H.hensystem:\\s(\\w++) (.* )??\\[(.*)\\].*");
-
-    public static final Pattern META_OLD_ELEVATION_SYSTEM =
-        Pattern.compile("^urspr.ngliches H.hensystem:\\s(\\w++) (.* )??\\[(.*)\\].*");
-
-    public static final Pattern META_SOUNDING_WIDTH =
-        Pattern.compile("^ausgewertete Peilbreite: (\\d*).*");
-
-    public static final Pattern META_RANGE =
-        Pattern.compile("^Strecke:\\D*(\\d++.\\d*)-(\\d++.\\d*).*");
-
-    public static final Pattern META_EVALUATION_BY =
-        Pattern.compile("^Auswerter: (.*).*");
-
-    public static final Pattern META_COMMENTS =
-        Pattern.compile("^Weitere Bemerkungen: (.*).*");
+public class BedHeightSingleParser extends BedHeightParser {
 
     private static final Logger log =
         Logger.getLogger(BedHeightSingleParser.class);
 
 
-    protected static NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE);
-
-
-    protected List<ImportBedHeightSingle> bedHeights;
-
-
-    public BedHeightSingleParser() {
-        bedHeights = new ArrayList<ImportBedHeightSingle>();
-    }
-
-
-    public List<ImportBedHeightSingle> getBedHeights() {
-        return bedHeights;
-    }
-
-
-    public void parse(File file) throws IOException {
-        log.info("Parsing bed height single file '" + file + "'");
-
-        ImportBedHeightSingle obj = new ImportBedHeightSingle(file.getName());
-
-        LineNumberReader in = null;
-        try {
-            in =
-                new LineNumberReader(
-                new InputStreamReader(
-                new FileInputStream(file), ENCODING));
-
-            String line = null;
-            while ((line = in.readLine()) != null) {
-                if ((line = line.trim()).length() == 0) {
-                    continue;
-                }
-
-                if (line.startsWith(START_META_CHAR)) {
-                    handleMetaLine(obj, line);
-                }
-                else {
-                    handleDataLine(obj, line);
-                }
-            }
-
-            log.info("File contained " + obj.getValues().size() + " values.");
-            bedHeights.add(obj);
-        }
-        finally {
-            if (in != null) {
-                in.close();
-            }
-        }
-    }
-
-
-    protected void handleMetaLine(ImportBedHeightSingle obj, String line) {
-        String meta = stripMetaLine(line);
 
-        if (handleMetaYear(obj, meta)) {
-            return;
-        }
-        else if (handleMetaSoundingWidth(obj, meta)) {
-            return;
-        }
-        else if (handleMetaComment(obj, meta)) {
-            return;
-        }
-        else if (handleMetaEvaluationBy(obj, meta)) {
-            return;
-        }
-        else if (handleMetaRange(obj, meta)) {
-            return;
-        }
-        else if (handleMetaType(obj, meta)) {
-            return;
-        }
-        else if (handleMetaLocationSystem(obj, meta)) {
-            return;
-        }
-        else if (handleMetaCurElevationModel(obj, meta)) {
-            return;
-        }
-        else if (handleMetaOldElevationModel(obj, meta)) {
-            return;
-        }
-        else {
-            log.warn("Meta line did not match any known type: " + line);
-        }
-    }
-
-
-    protected boolean handleMetaYear(ImportBedHeightSingle obj, String line) {
-        Matcher m = META_YEAR.matcher(line);
-
-        if (m.matches()) {
-            String tmp = m.group(1);
-
-            try {
-                obj.setYear(Integer.valueOf(tmp));
-                return true;
-            }
-            catch (NumberFormatException e) {
-                log.warn("Error while parsing year!", e);
-            }
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaSoundingWidth(ImportBedHeightSingle obj, String line) {
-        Matcher m = META_SOUNDING_WIDTH.matcher(line);
-
-        if (m.matches()) {
-            String tmp = m.group(1);
-
-            try {
-                obj.setSoundingWidth(Integer.valueOf(tmp));
-                return true;
-            }
-            catch (NumberFormatException e) {
-                log.warn("Error while parsing sounding width!", e);
-            }
-        }
-
-        return false;
+    @Override
+    protected ImportBedHeight newImportBedHeight(String description) {
+        return new ImportBedHeightSingle(description);
     }
 
 
-    protected boolean handleMetaComment(ImportBedHeightSingle obj, String line) {
-        Matcher m = META_COMMENTS.matcher(line);
-
-        if (m.matches()) {
-            String tmp = m.group(1);
-
-            obj.setDescription(tmp);
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaEvaluationBy(
-        ImportBedHeightSingle obj,
-        String                line
-    ) {
-        Matcher m = META_EVALUATION_BY.matcher(line);
-
-        if (m.matches()) {
-            String tmp = m.group(1);
-            tmp = tmp.replace(";", "");
-
-            obj.setEvaluationBy(tmp);
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaRange(ImportBedHeightSingle obj, String line) {
-        Matcher m = META_RANGE.matcher(line);
-
-        if (m.matches() && m.groupCount() >= 2) {
-            String a = m.group(1).replace(";", "");
-            String b = m.group(2).replace(";", "");
-
-            try {
-                BigDecimal lower = new BigDecimal(nf.parse(a).doubleValue());
-                BigDecimal upper = new BigDecimal(nf.parse(b).doubleValue());
-
-                obj.setRange(new ImportRange(lower, upper));
-
-                return true;
-            }
-            catch (ParseException e) {
-                log.warn("Error while parsing range!", e);
-            }
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaType(ImportBedHeightSingle obj, String line) {
-        Matcher m = META_TYPE.matcher(line);
-
-        if (m.matches()) {
-            String tmp = m.group(1).replace(";", "");
-
-            obj.setType(new ImportBedHeightType(
-                BedHeightType.getBedHeightName(tmp),
-                tmp));
 
-            return true;
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaLocationSystem(
-        ImportBedHeightSingle obj,
-        String                line
-    ) {
-        Matcher m = META_LOCATION_SYSTEM.matcher(line);
-
-        if (m.matches()) {
-            String tmp = m.group(1).replace(";", "");
-
-            obj.setLocationSystem(new ImportLocationSystem(tmp, tmp));
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaCurElevationModel(
-        ImportBedHeightSingle obj,
-        String                line
-    ) {
-        Matcher m = META_CUR_ELEVATION_SYSTEM.matcher(line);
-
-        if (m.matches()) {
-            String name = m.group(1);
-            String num  = m.group(2);
-            String unit = m.group(3);
-
-            obj.setCurElevationModel(new ImportElevationModel(
-                name + " " + num,
-                new ImportUnit(unit)
-            ));
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-    protected boolean handleMetaOldElevationModel(
-        ImportBedHeightSingle obj,
-        String                line
-    ) {
-        Matcher m = META_OLD_ELEVATION_SYSTEM.matcher(line);
-
-        if (m.matches()) {
-            String name = m.group(1);
-            String num  = m.group(2);
-            String unit = m.group(3);
-
-            obj.setOldElevationModel(new ImportElevationModel(
-                name + " " + num,
-                new ImportUnit(unit)
-            ));
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-    protected void handleDataLine(ImportBedHeightSingle obj, String line) {
+    @Override
+    protected void handleDataLine(ImportBedHeight obj, String line) {
         String[] values = line.split(SEPERATOR_CHAR);
 
         if (values == null || values.length < 6) {
@@ -345,10 +38,9 @@
             return;
         }
 
-
         try {
             ImportBedHeightSingleValue value = new ImportBedHeightSingleValue(
-                obj,
+                (ImportBedHeightSingle) obj,
                 new BigDecimal(nf.parse(values[0]).doubleValue()),
                 new BigDecimal(nf.parse(values[1]).doubleValue()),
                 new BigDecimal(nf.parse(values[2]).doubleValue()),
@@ -363,17 +55,5 @@
             log.warn("Error while parsing data row.", e);
         }
     }
-
-
-    protected static String stripMetaLine(String line) {
-        String tmp = line.substring(1, line.length()-1);
-
-        if (tmp.startsWith(" ")) {
-            return tmp.substring(1, tmp.length()-1);
-        }
-        else {
-            return tmp;
-        }
-    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org