Mercurial > dive4elements > river
annotate backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.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 | 75bd347147ad |
rev | line source |
---|---|
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
2 * Software engineering by |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
3 * Björnsen Beratende Ingenieure GmbH |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
5 * |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
6 * This file is Free Software under the GNU AGPL (>=v3) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
8 * documentation coming with Dive4Elements River for details. |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
9 */ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
10 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
11 package org.dive4elements.river.importer.sinfo.parsers; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
12 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
13 import java.io.File; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
14 import java.util.ArrayList; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
15 import java.util.HashMap; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
16 import java.util.List; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
17 import java.util.regex.Matcher; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
18 import java.util.regex.Pattern; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
19 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
20 import org.apache.log4j.Logger; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
21 import org.dive4elements.river.importer.Config; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
22 import org.dive4elements.river.importer.ImportAnnotationType; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
23 import org.dive4elements.river.importer.ImportAttribute; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
24 import org.dive4elements.river.importer.ImportRiver; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
25 import org.dive4elements.river.importer.common.AbstractParser; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
26 import org.dive4elements.river.importer.common.ParsingState; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
27 import org.dive4elements.river.importer.sinfo.importitem.InfrastructureKmLineImport; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
28 import org.dive4elements.river.importer.sinfo.importitem.InfrastructureSeriesImport; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
29 import org.dive4elements.river.model.sinfo.Infrastructure; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
30 import org.dive4elements.river.model.sinfo.InfrastructureValue; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
31 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
32 /** |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
33 * Reads and parses an infrastructure file |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
34 * |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
35 * @author Matthias Schäfer |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
36 * |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
37 */ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
38 public class InfrastructureParser extends AbstractParser<Infrastructure, InfrastructureValue, InfrastructureKmLineImport, InfrastructureSeriesImport> { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
39 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
40 /***** FIELDS *****/ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
41 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
42 private static final Logger log = Logger.getLogger(InfrastructureParser.class); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
43 |
9636
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
44 private static final Pattern META_GROUP = Pattern.compile("^#\\sInfrastruktur:\\s*([^;]*).*", Pattern.CASE_INSENSITIVE); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
45 |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
46 private static final Pattern META_TYPE = Pattern.compile("^#\\sTyp\\/Bezeichnung:\\s*([^;]*).*", Pattern.CASE_INSENSITIVE); |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
47 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
48 private static final Pattern META_PROVIDER = Pattern.compile("^#\\sDatenherkunft:\\s*([^;]*).*", Pattern.CASE_INSENSITIVE); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
49 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
50 private static final Pattern META_EVALUATOR = Pattern.compile("^#\\sAuswerter:\\s*([^;]*).*", Pattern.CASE_INSENSITIVE); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
51 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
52 private static final Pattern META_YEAR = Pattern.compile("^#\\sStand:\\s*([12]\\d\\d\\d).*", Pattern.CASE_INSENSITIVE); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
53 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
54 private static final Pattern HEIGHT_COLUMNTITLE = Pattern.compile("((H.he)|(Hoehe))\\s*\\[(.*)\\].*", Pattern.CASE_INSENSITIVE); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
55 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
56 private static final Pattern BANK_COLUMNTITLE = Pattern.compile("Uferseite.*", Pattern.CASE_INSENSITIVE); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
57 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
58 private static final String DB_BANK_LEFT = "links"; // TODO: improve database design to make this secure |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
59 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
60 private static final String DB_BANK_RIGHT = "rechts"; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
61 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
62 private static final String DB_BANK_NULL = ""; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
63 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
64 private int heightColIndex; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
65 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
66 private int bankColIndex; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
67 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
68 private final HashMap<String, ImportAttribute> bankAttributes; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
69 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
70 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
71 /***** CONSTRUCTORS *****/ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
72 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
73 public InfrastructureParser(final File importPath, final File rootRelativePath, final ImportRiver river) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
74 super(importPath, rootRelativePath, river); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
75 this.heightColIndex = -1; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
76 this.bankColIndex = -1; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
77 this.bankAttributes = new HashMap<>(); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
78 this.bankAttributes.put("links", new ImportAttribute(DB_BANK_LEFT)); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
79 this.bankAttributes.put("rechts", new ImportAttribute(DB_BANK_RIGHT)); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
80 this.bankAttributes.put("", new ImportAttribute(DB_BANK_NULL)); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
81 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
82 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
83 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
84 /***** METHODS *****/ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
85 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
86 @Override |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
87 protected Logger getLog() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
88 return log; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
89 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
90 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
91 /** |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
92 * Whether this import type shall be skipped |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
93 */ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
94 public static boolean shallSkip() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
95 return Config.INSTANCE.skipSInfoInfrastructure(); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
96 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
97 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
98 /** |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
99 * Creates a list of parsers for all infrastructure import files in a directory |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
100 */ |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
101 public static List<InfrastructureParser> createParsers(final File importDir, final File relativeDir, final ImportRiver river) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
102 final List<InfrastructureParser> parsers = new ArrayList<>(); |
8988 | 103 if (importDir.exists()) |
104 for (final File file : listFiles(importDir, ".csv")) | |
105 parsers.add(new InfrastructureParser(file, new File(relativeDir, file.getName()), river)); | |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
106 return parsers; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
107 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
108 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
109 @Override |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
110 protected InfrastructureSeriesImport createSeriesImport(final String filename) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
111 return new InfrastructureSeriesImport(filename); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
112 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
113 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
114 @Override |
9011 | 115 protected KmMode kmMode() { |
9056
ddebd4c2fe93
Corrected station parsing for infrastructure import
mschaefer
parents:
9011
diff
changeset
|
116 return KmMode.DUPLICATES; |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
117 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
118 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
119 @Override |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
120 protected boolean handleMetaOther() { |
9636
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
121 if (handleMetaGroup()) |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
122 return true; |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
123 else if (handleMetaType()) |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
124 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
125 else if (handleMetaProvider()) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
126 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
127 else if (handleMetaEvaluator()) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
128 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
129 else if (handleMetaYear()) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
130 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
131 else |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
132 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
133 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
134 |
9636
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
135 private boolean handleMetaGroup() { |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
136 final Matcher m = META_GROUP.matcher(this.currentLine); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
137 if (m.matches()) { |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
138 this.metaPatternsMatched.add(META_GROUP); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
139 if (this.river.getAnnotationClassifier() != null) { |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
140 final ImportAnnotationType group = this.river.getAnnotationClassifier().classifyDescription(m.group(1).trim(), |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
141 this.river.getAnnotationClassifier().getDefaultType()); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
142 this.seriesHeader.setGroup(group); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
143 log.info(String.format("Group name in file: '%s', will be assigned to database name '%s'", m.group(1).trim(), group.getName())); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
144 } |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
145 else { |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
146 log.error("No annotation types file configured, cannot process group '" + m.group(1).trim() + "'"); |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
147 this.headerParsingState = ParsingState.STOP; |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
148 } |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
149 return true; |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
150 } |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
151 return false; |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
152 } |
ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
mschaefer
parents:
9056
diff
changeset
|
153 |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
154 private boolean handleMetaType() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
155 final Matcher m = META_TYPE.matcher(this.currentLine); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
156 if (m.matches()) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
157 this.metaPatternsMatched.add(META_TYPE); |
8988 | 158 if (this.river.getAnnotationClassifier() != null) { |
159 final ImportAnnotationType type = this.river.getAnnotationClassifier().classifyDescription(m.group(1).trim(), | |
160 this.river.getAnnotationClassifier().getDefaultType()); | |
161 this.seriesHeader.setType(type); | |
162 log.info(String.format("Type name in file: '%s', will be assigned to database name '%s'", m.group(1).trim(), type.getName())); | |
163 } | |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
164 else { |
8988 | 165 log.error("No annotation types file configured, cannot process type '" + m.group(1).trim() + "'"); |
166 this.headerParsingState = ParsingState.STOP; | |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
167 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
168 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
169 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
170 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
171 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
172 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
173 private boolean handleMetaProvider() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
174 final Matcher m = META_PROVIDER.matcher(this.currentLine); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
175 if (m.matches()) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
176 this.metaPatternsMatched.add(META_PROVIDER); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
177 this.seriesHeader.setProvider(parseMetaInfo(m.group(1).trim())); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
178 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
179 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
180 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
181 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
182 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
183 private boolean handleMetaEvaluator() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
184 final Matcher m = META_EVALUATOR.matcher(this.currentLine); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
185 if (m.matches()) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
186 this.metaPatternsMatched.add(META_EVALUATOR); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
187 this.seriesHeader.setEvaluation_by(parseMetaInfo(m.group(1).trim())); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
188 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
189 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
190 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
191 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
192 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
193 private boolean handleMetaYear() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
194 final Matcher m = META_YEAR.matcher(this.currentLine); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
195 if (m.matches()) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
196 this.metaPatternsMatched.add(META_YEAR); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
197 this.seriesHeader.setYear(Integer.parseInt(m.group(1))); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
198 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
199 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
200 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
201 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
202 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
203 @Override |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
204 protected boolean handleMetaColumnTitles() { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
205 if (super.handleMetaColumnTitles()) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
206 for (int i = 1; i <= this.columnTitles.size() - 1; i++) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
207 if (HEIGHT_COLUMNTITLE.matcher(this.columnTitles.get(i)).matches()) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
208 this.heightColIndex = i; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
209 else if (BANK_COLUMNTITLE.matcher(this.columnTitles.get(i)).matches()) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
210 this.bankColIndex = i; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
211 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
212 if (this.bankColIndex < 0) |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
213 logWarning("Column of river side value could not be identified, missing column title 'Uferseite'"); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
214 if (this.heightColIndex < 0) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
215 logError("Column of height values could not be identified, missing column title 'Höhe...'"); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
216 this.headerParsingState = ParsingState.STOP; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
217 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
218 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
219 return true; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
220 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
221 else |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
222 return false; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
223 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
224 |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
225 @Override |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
226 protected InfrastructureKmLineImport createKmLineImport(final Double km, final String[] values) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
227 if (parseDoubleWithNull(values[this.heightColIndex]) == null) { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
228 logError("Invalid height value in line " + this.in.getLineNumber()); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
229 return null; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
230 } |
9056
ddebd4c2fe93
Corrected station parsing for infrastructure import
mschaefer
parents:
9011
diff
changeset
|
231 if ((this.bankColIndex >= 0) && this.bankAttributes.containsKey(values[this.bankColIndex].trim().toLowerCase())) { |
ddebd4c2fe93
Corrected station parsing for infrastructure import
mschaefer
parents:
9011
diff
changeset
|
232 final InfrastructureKmLineImport kmLine = new InfrastructureKmLineImport(km, parseDoubleWithNull(values[this.heightColIndex]).doubleValue(), |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
233 this.bankAttributes.get(values[this.bankColIndex].trim().toLowerCase())); |
9056
ddebd4c2fe93
Corrected station parsing for infrastructure import
mschaefer
parents:
9011
diff
changeset
|
234 logTrace("createKmLineImport(" + km.toString() + ") => " + kmLine.getStation()); |
ddebd4c2fe93
Corrected station parsing for infrastructure import
mschaefer
parents:
9011
diff
changeset
|
235 return kmLine; |
ddebd4c2fe93
Corrected station parsing for infrastructure import
mschaefer
parents:
9011
diff
changeset
|
236 } |
8971
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
237 else { |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
238 logError("Invalid bank value in line " + this.in.getLineNumber()); |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
239 return null; |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
240 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
241 } |
50416a0df385
Importer for the Schifffahrt (S-INFO) and Oekologie (U-INFO) files
mschaefer
parents:
diff
changeset
|
242 } |