diff flys-backend/src/main/java/org/dive4elements/river/importer/parsers/LineParser.java @ 5828:dfb26b03b179

Moved directories to org.dive4elements.river
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 11:53:11 +0200
parents flys-backend/src/main/java/de/intevation/flys/importer/parsers/LineParser.java@53fcc0d5a03e
children 18619c1e7c2a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-backend/src/main/java/org/dive4elements/river/importer/parsers/LineParser.java	Thu Apr 25 11:53:11 2013 +0200
@@ -0,0 +1,139 @@
+package de.intevation.flys.importer.parsers;
+
+import java.io.File;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+
+import org.apache.log4j.Logger;
+
+
+/**
+ * Base-Class for prasers for line-based file formats.
+ * Calls reset(), then read line by line, calling handleLine() for each,
+ * then calls finish().
+ */
+public abstract class LineParser {
+
+    /** Private logger. */
+    private static final Logger log = Logger.getLogger(LineParser.class);
+
+    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  = ";";
+
+
+    protected abstract void handleLine(int lineNum, String line);
+
+    protected abstract void reset();
+
+    protected abstract void finish();
+
+    /** Name of file parsed. */
+    protected String fileName;
+
+    protected File inputFile;
+
+
+    /**
+     * This method reads each line of <i>file</i>. At the beginning,
+     * <i>reset()</i> is called; afterwards for each line <i>handleLine()</i> is
+     * called; at the end <i>finish</i> is called.
+     *
+     * @param file The file which should be parsed.
+     */
+    public void parse(File file) throws IOException {
+        log.info("Parsing file '" + file + "'");
+
+        inputFile = file;
+
+        fileName = file.getName();
+
+        reset();
+
+        LineNumberReader in = null;
+        try {
+            in =
+                new LineNumberReader(
+                new InputStreamReader(
+                new FileInputStream(file), ENCODING));
+
+            String line    = null;
+            int    lineNum = 1;
+            while ((line = in.readLine()) != null) {
+                if ((line = line.trim()).length() == 0) {
+                    lineNum++;
+                    continue;
+                }
+
+                handleLine(lineNum++, line);
+            }
+        }
+        finally {
+            if (in != null) {
+                in.close();
+            }
+        }
+
+        finish();
+    }
+
+
+    /** Returns the name of the file parsed. */
+    protected String getFileName() {
+        return fileName;
+    }
+
+    /** Returns the file currently parsed. */
+    protected File getInputFile() {
+        return inputFile;
+    }
+
+
+    protected static String stripMetaLine(String line) {
+        String tmp = line.substring(1, line.length());
+
+        if (tmp.startsWith(" ")) {
+            return tmp.substring(1, tmp.length());
+        }
+        else {
+            return tmp;
+        }
+    }
+
+    public static double getDouble(String doubleString) throws ParseException {
+        NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE);
+        Number value = nf.parse(doubleString);
+
+        return value.doubleValue();
+    }
+
+    public static Date getDate(String dateString) throws ParseException {
+        DateFormat df = SimpleDateFormat.getDateInstance(
+            SimpleDateFormat.MEDIUM, DEFAULT_LOCALE);
+
+        return df.parse(dateString);
+    }
+
+
+    public static Date getDateFromYear(int year) {
+        Calendar cal = Calendar.getInstance();
+        cal.set(year, 0, 1);
+
+        return cal.getTime();
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org