diff backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/SelectedAdditionalParser.java @ 8988:ae76f618d990

Checks added for missing import directory
author mschaefer
date Sun, 08 Apr 2018 18:09:32 +0200
parents bf8a9df86f32
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/SelectedAdditionalParser.java	Sun Apr 08 18:08:35 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/SelectedAdditionalParser.java	Sun Apr 08 18:09:32 2018 +0200
@@ -17,6 +17,7 @@
 import java.io.LineNumberReader;
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import org.apache.log4j.Logger;
@@ -43,9 +44,7 @@
 
     private static final Logger log = Logger.getLogger(SelectedAdditionalParser.class);
 
-    private static final String IMPORT_Q_FILENAME = "Mit_Abflussdaten.txt";
-
-    private static final String IMPORT_W_FILENAME = "Ohne_Abflussdaten.txt";
+    private static final String IMPORT_FILENAME = "Zus_Laengsschnitte.txt";
 
     private enum SelectionType {
         WITH_Q("Q", "with discharge"), //
@@ -66,6 +65,13 @@
         public String getLogText() {
             return this.logText;
         }
+
+        public static SelectionType parse(final String path) {
+            if (path.toLowerCase().endsWith(".wst"))
+                return WITH_Q;
+            else
+                return WITHOUT_Q;
+        }
     }
 
     private final File importPath;
@@ -74,19 +80,16 @@
 
     private final ImportRiver river;
 
-    private final SelectionType selectionType;
-
-    private final List<String> links;
+    private final HashMap<String, SelectionType> links;
 
 
     /***** CONSTRUCTORS *****/
 
-    public SelectedAdditionalParser(final File importPath, final File rootRelativePath, final ImportRiver river, final SelectionType selectionType) {
+    public SelectedAdditionalParser(final File importPath, final File rootRelativePath, final ImportRiver river) {
         this.importPath = importPath;
         this.rootRelativePath = rootRelativePath;
         this.river = river;
-        this.selectionType = selectionType;
-        this.links = new ArrayList<>();
+        this.links = new HashMap<>();
     }
 
 
@@ -104,10 +107,9 @@
      */
     public static List<SelectedAdditionalParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) {
         final List<SelectedAdditionalParser> parsers = new ArrayList<>();
-        parsers.add(new SelectedAdditionalParser(new File(importDir, IMPORT_Q_FILENAME), new File(relativeDir, IMPORT_Q_FILENAME),
-                river, SelectionType.WITH_Q));
-        parsers.add(new SelectedAdditionalParser(new File(importDir, IMPORT_W_FILENAME), new File(relativeDir, IMPORT_W_FILENAME),
-                river, SelectionType.WITHOUT_Q));
+        final File importFile = new File(importDir, IMPORT_FILENAME);
+        if (importFile.exists())
+            parsers.add(new SelectedAdditionalParser(importFile, new File(relativeDir, IMPORT_FILENAME), river));
         return parsers;
     }
 
@@ -123,8 +125,8 @@
                 line = in.readLine();
                 if (line == null)
                     break;
-                if (!line.trim().isEmpty() && !line.trim().startsWith(AbstractParser.START_META_CHAR))
-                    this.links.add(line.trim());
+                if (!line.trim().isEmpty() && !line.trim().startsWith(AbstractParser.START_META_CHAR) && !this.links.containsKey(line.trim()))
+                    this.links.put(line.trim(), SelectionType.parse(line.trim()));
             }
             log.info("Number of file links found: " + this.links.size());
         }
@@ -138,17 +140,16 @@
     public void store() {
         final Session session = ImporterSession.getInstance().getDatabaseSession();
         final SQLQuery reset = session.createSQLQuery("UPDATE wsts SET sinfo_selection = NULL WHERE (river_id=:river_id) AND (kind=1)"
-                + " AND (sinfo_selection=:seltype)");
+                + " AND (sinfo_selection IS NOT NULL)");
         reset.setParameter("river_id", this.river.getPeer().getId());
-        reset.setParameter("seltype", this.selectionType.getKey());
         reset.executeUpdate();
         final Query query = session.createQuery("FROM Wst WHERE (river=:river) AND (kind=1) AND (lower(description) LIKE :path)");
         query.setParameter("river", this.river.getPeer());
         int count = 0;
-        for (final String wstfile : this.links) {
-            count += updateWst(session, query, this.river.getPeer(), wstfile, this.selectionType);
+        for (final String wstfile : this.links.keySet()) {
+            count += updateWst(session, query, this.river.getPeer(), wstfile, this.links.get(wstfile));
         }
-        log.info("Updated " + count + " wsts for selected additionals " + this.selectionType.getLogText());
+        log.info("Updated " + count + " wsts for selected additionals");
     }
 
     private int updateWst(final Session session, final Query query, final River river, final String path, final SelectionType selectionType) {

http://dive4elements.wald.intevation.org