diff backend/src/main/java/org/dive4elements/river/importer/parsers/StaFileParser.java @ 6366:cc21c197d204 double-precision

merged changes from default into double-precision branch
author Tom Gottfried <tom.gottfried@intevation.de>
date Tue, 18 Jun 2013 16:05:10 +0200
parents b58a71a5720c
children 82b8bfb47260
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/StaFileParser.java	Mon Jun 17 17:16:25 2013 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/StaFileParser.java	Tue Jun 18 16:05:10 2013 +0200
@@ -19,10 +19,8 @@
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 
-import java.util.Date;
 import java.util.HashMap;
 import java.util.ArrayList;
-import java.util.List;
 
 import org.apache.log4j.Logger;
 
@@ -30,8 +28,6 @@
 import org.dive4elements.river.importer.ImportMainValue;
 import org.dive4elements.river.importer.ImportNamedMainValue;
 import org.dive4elements.river.importer.ImportGauge;
-import org.dive4elements.river.importer.ImportTimeInterval;
-import org.dive4elements.river.utils.DateGuesser;
 
 public class StaFileParser
 {
@@ -46,42 +42,6 @@
         Pattern.compile("\\s*([^\\s]+)\\s+([^\\s]+)\\s+([" +
             Pattern.quote(TYPES) + "]).*");
 
-    // TODO: To be extented.
-    private static final Pattern MAIN_VALUE = Pattern.compile(
-        "^(HQ|MHW|GLQ|NMQ|HQEXT)(\\d*)$");
-
-    private static boolean isMainValue(String s) {
-        s = s.replace(" ", "").toUpperCase();
-        return MAIN_VALUE.matcher(s).matches();
-    }
-
-
-    public static final class NameAndTimeInterval {
-        private String             name;
-        private ImportTimeInterval timeInterval;
-
-        public NameAndTimeInterval(String name) {
-            this(name, null);
-        }
-
-        public NameAndTimeInterval(String name, ImportTimeInterval timeInterval) {
-            this.name         = name;
-            this.timeInterval = timeInterval;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public ImportTimeInterval getTimeInterval() {
-            return timeInterval;
-        }
-
-        @Override
-        public String toString() {
-            return "name: " + name + " time interval: " + timeInterval;
-        }
-    } // class NameAndTimeInterval
 
     public StaFileParser() {
     }
@@ -91,13 +51,12 @@
         File file = gauge.getStaFile();
 
         log.info("parsing STA file: " + file);
-        LineNumberReader in = null;
+        LineNumberReader in =
+            new LineNumberReader(
+            new InputStreamReader(
+            new FileInputStream(file), ENCODING));
+
         try {
-            in =
-                new LineNumberReader(
-                new InputStreamReader(
-                new FileInputStream(file), ENCODING));
-
             String line = in.readLine();
 
             if (line == null) {
@@ -204,7 +163,8 @@
                         types.put(typeString, type);
                     }
                     String name = m.group(1);
-                    NameAndTimeInterval nat = parseName(name);
+                    NameAndTimeInterval nat =
+                        NameAndTimeInterval.parseName(name);
                     ImportNamedMainValue namedMainValue =
                         new ImportNamedMainValue(type, nat.getName());
                     namedMainValues.add(namedMainValue);
@@ -227,147 +187,11 @@
             gauge.setMainValues(mainValues);
         }
         finally {
-            if (in != null) {
-                in.close();
-            }
+            in.close();
         }
         log.info("finished parsing STA file: " + file);
         return true;
     }
 
-    protected static NameAndTimeInterval parseName(String name) {
-        List<String> result = new ArrayList<String>();
-
-        unbracket(name, 0, result);
-
-        int length = result.size();
-
-        if (length < 1) { // Should not happen.
-            return new NameAndTimeInterval(name);
-        }
-
-        if (length == 1) { // No date at all -> use first part.
-            return new NameAndTimeInterval(result.get(0).trim());
-        }
-
-        if (length == 2) { // e.g. HQ(1994) or HQ(1994 - 1999)
-
-            String type = result.get(0).trim();
-            ImportTimeInterval timeInterval = null;
-
-            String datePart = result.get(1).trim();
-            if (isMainValue(datePart)) { // e.g. W(HQ100)
-                type += "(" + datePart + ")";
-                timeInterval = null;
-            }
-            else {
-                timeInterval = getTimeInterval(result.get(1).trim());
-
-                if (timeInterval == null) { // No date at all.
-                    type = name;
-                }
-            }
-
-            return new NameAndTimeInterval(type, timeInterval);
-        }
-
-        if (length == 3) { // e.g W(Q(1994)) or W(Q(1994 - 1999))
-
-            String type =
-                result.get(0).trim() + "(" +
-                result.get(1).trim() + ")";
-
-            ImportTimeInterval timeInterval = getTimeInterval(
-                result.get(2).trim());
-
-            if (timeInterval == null) { // No date at all.
-                type = name;
-            }
-
-            return new NameAndTimeInterval(type, timeInterval);
-        }
-
-        // more than 3 elements return unmodified.
-
-        return new NameAndTimeInterval(name);
-    }
-
-    private static ImportTimeInterval getTimeInterval(String datePart) {
-
-        int minus = datePart.indexOf('-');
-
-        if (minus < 0) { // '-' not found
-
-            Date date = null;
-            try {
-                date = DateGuesser.guessDate(datePart);
-            }
-            catch (IllegalArgumentException iae) {
-                log.warn("STA: Invalid date '" + datePart + "'");
-                return null;
-            }
-
-            return new ImportTimeInterval(date);
-        }
-
-        // Found '-' so we have <from> - <to>
-        String startPart = datePart.substring(0, minus).trim();
-        String endPart   = datePart.substring(minus).trim();
-
-        Date startDate = null;
-        Date endDate   = null;
-
-        try {
-            startDate = DateGuesser.guessDate(startPart);
-        }
-        catch (IllegalArgumentException iae) {
-            log.warn("STA: Invalid start date '" + startPart + "'");
-        }
-
-        try {
-            endDate = DateGuesser.guessDate(endPart);
-        }
-        catch (IllegalArgumentException iae) {
-            log.warn("STA: Invalid end date '" + endPart + "'");
-        }
-
-        if (startDate == null) {
-            log.warn("STA: Need start date.");
-            return null;
-        }
-
-        return new ImportTimeInterval(startDate, endDate);
-    }
-
-    private static int unbracket(String s, int index, List<String> result) {
-        StringBuilder sb = new StringBuilder();
-        int length = s.length();
-        while (index < length) {
-            char c = s.charAt(index);
-            switch (c) {
-                case '(':
-                    index = unbracket(s, index+1, result);
-                    break;
-                case ')':
-                    result.add(0, sb.toString());
-                    return index+1;
-                default:
-                    sb.append(c);
-                    ++index;
-            }
-        }
-        result.add(0, sb.toString());
-
-        return index;
-    }
-
-    /*
-    public static void main(String [] args) {
-        for (String arg: args) {
-            NameAndTimeInterval nti = parseName(arg);
-            System.out.println(arg + " -> " + nti);
-        }
-    }
-    */
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org