diff flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java @ 1206:c7370734b872

Prevent parsing and storing PRF duplicates. flys-backend/trunk@2315 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 11 Jul 2011 09:31:52 +0000
parents 22858e7cca79
children f08fe480092c
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java	Fri Jul 08 09:45:48 2011 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java	Mon Jul 11 09:31:52 2011 +0000
@@ -4,6 +4,8 @@
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Calendar;
@@ -16,12 +18,12 @@
 import de.intevation.flys.model.River;
 
 import de.intevation.flys.utils.FileTools;
+import de.intevation.flys.utils.FileTools.HashedFile;
 
 import org.hibernate.Session;
 import org.hibernate.Query;
 
 public class ImportRiver
-implements   PRFParser.Callback
 {
     private static Logger log = Logger.getLogger(ImportRiver.class);
 
@@ -362,7 +364,44 @@
             .getParentFile()  // Basisdaten
             .getParentFile()  // Hydrologie
             .getParentFile(); // <river>
-        parser.parsePRFs(riverDir, this);
+
+        parser.parsePRFs(riverDir, new PRFParser.Callback() {
+
+            Set<HashedFile> prfs = new HashSet<HashedFile>();
+
+            @Override
+            public boolean prfAccept(File file) {
+                HashedFile hf = new HashedFile(file);
+                boolean success = prfs.add(hf);
+                if (!success) {
+                    log.warn("PRF file '" + file + "' seems to be a duplicate.");
+                }
+                return success;
+            }
+
+            @Override
+            public void prfParsed(PRFParser parser) {
+                log.debug("callback from PRF parser");
+
+                String  description = parser.getDescription();
+                Integer year        = parser.getYear();
+                ImportTimeInterval ti = year != null
+                    ? new ImportTimeInterval(yearToDate(year))
+                    : null;
+
+                List<ImportCrossSectionLine> lines =
+                    new ArrayList<ImportCrossSectionLine>();
+
+                for (Map.Entry<Double, List<XY>> entry: parser.getData().entrySet()) {
+                    BigDecimal km     = new BigDecimal(entry.getKey());
+                    List<XY>   points = entry.getValue();
+                    lines.add(new ImportCrossSectionLine(km, points));
+                }
+
+                crossSections.add(new ImportCrossSection(
+                    ImportRiver.this, description, ti, lines));
+            }
+        });
     }
 
     public static Date yearToDate(int year) {
@@ -373,29 +412,6 @@
         return cal.getTime();
     }
 
-    @Override
-    public void prfParsed(PRFParser parser) {
-        log.debug("callback from PRF parser");
-
-        String  description = parser.getDescription();
-        Integer year        = parser.getYear();
-        ImportTimeInterval ti = year != null
-            ? new ImportTimeInterval(yearToDate(year))
-            : null;
-
-        List<ImportCrossSectionLine> lines =
-            new ArrayList<ImportCrossSectionLine>();
-
-        for (Map.Entry<Double, List<XY>> entry: parser.getData().entrySet()) {
-            BigDecimal km     = new BigDecimal(entry.getKey());
-            List<XY>   points = entry.getValue();
-            lines.add(new ImportCrossSectionLine(km, points));
-        }
-
-        crossSections.add(new ImportCrossSection(
-            this, description, ti, lines));
-    }
-
     public void storeDependencies() {
         storeAnnotations();
         storeCrossSections();

http://dive4elements.wald.intevation.org