diff backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java @ 9655:1f57381b3bb5

Importer (s/u-info) extensions: uniform formatting of from-to series names, warning instead of cancelling in case of missing tkh column values, detecting, logging and skipping columns with wrong unit
author mschaefer
date Mon, 23 Mar 2020 15:16:35 +0100
parents ac41551a8e4d
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java	Mon Mar 23 15:10:09 2020 +0100
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java	Mon Mar 23 15:16:35 2020 +0100
@@ -12,7 +12,6 @@
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.text.DateFormat;
@@ -26,6 +25,7 @@
 import org.apache.log4j.Logger;
 import org.dive4elements.river.importer.Config;
 import org.dive4elements.river.importer.ImportRiver;
+import org.dive4elements.river.importer.ImporterSession;
 import org.dive4elements.river.importer.common.AbstractParser;
 import org.dive4elements.river.importer.common.ParsingState;
 import org.dive4elements.river.importer.sinfo.importitem.TkhColumnSeriesImport;
@@ -34,6 +34,7 @@
 import org.dive4elements.river.model.sinfo.Tkh;
 import org.dive4elements.river.model.sinfo.TkhColumn;
 import org.dive4elements.river.model.sinfo.TkhValue;
+import org.hibernate.Session;
 
 /**
  * Reads and parses the header of a TKH file and handles the parse and store of the columns
@@ -131,7 +132,7 @@
     }
 
     @Override
-    public void parse() throws IOException {
+    public void parse() throws Exception {
         getLog().info("Start parsing:;'" + this.rootRelativePath + "'");
         // this.seriesHeader = createSeriesImport(this.importPath.getName().replaceAll("\\.csv", ""));
         this.metaPatternsMatched.clear();
@@ -143,7 +144,7 @@
                 this.in = new LineNumberReader(new InputStreamReader(new FileInputStream(this.importPath), ENCODING));
             }
             catch (final Exception e) {
-                logError("Could not open (" + e.getMessage() + ")");
+                logError("Could not open (%s)", e.getMessage());
                 this.headerParsingState = ParsingState.STOP;
             }
             this.currentLine = null;
@@ -155,6 +156,8 @@
                 if (this.currentLine.isEmpty())
                     continue;
                 handleMetaLine();
+                if (this.headerParsingState == ParsingState.DONE)
+                    checkMetaData();
             }
         }
         finally {
@@ -194,12 +197,12 @@
                     day = dateFormat.parse(m.group(1));
             }
             catch (final Exception e) {
-                logError("Invalid date in line " + this.in.getLineNumber());
+                logLineWarning("Invalid date");
             }
             this.metaPatternsMatched.add(META_DATUM);
             this.tkhGroup.setDay(day);
             if (day == null)
-                logWarning("No date specified");
+                logLineWarning("No date specified");
             return true;
         }
         return false;
@@ -241,11 +244,24 @@
             if (m.matches())
                 this.colParsers.add(new TkhColumnParser(this.importPath, this.rootRelativePath, this.river, this.tkhGroup, i, m.group(7).trim()));
             else
-                logWarning("No title found in column " + i + ", skipped");
+                logLineWarning("Invalid title in column %d (%s)", i + 1, this.columnTitles.get(i));
         }
         return true;
     }
 
+    /**
+     * Checks the existence of the active series in the database
+     */
+    @Override
+    protected boolean checkSeriesExistsAlready() {
+        if (!checkRiverExists())
+            return false;
+        final Session session = ImporterSession.getInstance().getDatabaseSession();
+        final List<Tkh> rows = this.tkhGroup.querySeriesItem(session, this.river.getPeer());
+        return !rows.isEmpty();
+    }
+
+
     @Override
     public void store() {
         if (this.headerParsingState != ParsingState.STOP) {
@@ -254,7 +270,7 @@
                 colParser.store();
         }
         else
-            logWarning("Severe parsing errors, not storing series '" + this.tkhGroup.getFilename() + "'");
+            logWarning("Severe parsing errors, not storing series '%s'", this.tkhGroup.getFilename());
     }
 
     @Override

http://dive4elements.wald.intevation.org