annotate flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelDifferencesParser.java @ 5264:731030b69c7e

Fix Waterlevel*-Parser to correctly register the wst-columns.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 13 Mar 2013 10:06:26 +0100
parents 93d4145d5740
children b3dd14fc13a6
rev   line source
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.importer.parsers;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
3 import java.io.File;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 import java.io.IOException;
5229
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
5 import java.math.BigDecimal;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 import java.text.NumberFormat;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 import java.text.ParseException;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import java.util.ArrayList;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9 import java.util.List;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10 import java.util.regex.Matcher;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import java.util.regex.Pattern;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import org.apache.log4j.Logger;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15 import de.intevation.flys.importer.ImportUnit;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16
5229
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
17 import de.intevation.flys.importer.ImportWst;
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
18 import de.intevation.flys.importer.ImportWstColumn;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
19
5229
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
20
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
21 /**
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
22 * Parse WaterlevelDifferences CSV file.
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
23 */
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 public class WaterlevelDifferencesParser extends LineParser {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 private static final Logger log =
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27 Logger.getLogger(WaterlevelDifferencesParser.class);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 private static final NumberFormat nf =
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 NumberFormat.getInstance(DEFAULT_LOCALE);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 public static final Pattern META_UNIT =
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 Pattern.compile("^Einheit: \\[(.*)\\].*");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
35 /** List of parsed differences as ImportWst s. */
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
36 private List<ImportWst> differences;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
38 private ImportWstColumn[] columns;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
40 /** The currently processed dataset. */
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
41 private ImportWst current;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 public WaterlevelDifferencesParser() {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
45 differences = new ArrayList<ImportWst>();
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
49 /** Get the differences as wst parsed so far. */
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
50 public List<ImportWst> getDifferences() {
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51 return differences;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53
5234
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
54
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
55 /**
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
56 * Parse a csv waterleveldifferenceparser and create a ImportWst object
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
57 * from it.
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
58 */
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 @Override
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60 public void parse(File file) throws IOException {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
61 current = new ImportWst(file.getName());
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
62 current.setKind(7);
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64 super.parse(file);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67
5234
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
68 /** No rewind implemented. */
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69 @Override
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70 protected void reset() {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74 @Override
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75 protected void finish() {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76 if (columns != null && current != null) {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
77 // TODO figure out if its needed, as the columns
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
78 // are registered at their construction time.
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
79 for (ImportWstColumn col: columns) {
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
80 // TODO place a current.addColumn(col); here?
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
82
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
83 differences.add(current);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
84 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
85
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
86 current = null;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 columns = null;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
88 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89
5234
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
90
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 @Override
4193
f63b39799d2d Adapted DB schema (added relation measurement_station); improved importer to read files from filesystem with measurement stations.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 3940
diff changeset
92 protected void handleLine(int lineNum, String line) {
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
93 if (line.startsWith(START_META_CHAR)) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94 handleMetaLine(stripMetaLine(line));
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
95 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
96 else {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97 handleDataLine(line);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
99 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
100
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
101
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102 private void handleMetaLine(String meta) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
103 if (handleMetaUnit(meta)) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
104 return;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
105 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
106 else {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
107 handleMetaColumnNames(meta);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
108 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
109 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
110
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112 private boolean handleMetaUnit(String meta) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
113 Matcher m = META_UNIT.matcher(meta);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 if (m.matches()) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 String unit = m.group(1);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 log.debug("Found unit: '" + unit + "'");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 current.setUnit(new ImportUnit(unit));
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121 return true;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
123
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
124 return false;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
125 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
126
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
128 private boolean handleMetaColumnNames(String meta) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
129 Pattern META_COLUMN_NAMES = Pattern.compile("Fluss-km;(.*)");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 Matcher m = META_COLUMN_NAMES.matcher(meta);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
132 if (m.matches()) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
133 String colStr = m.group(1);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134 String[] cols = colStr.split(SEPERATOR_CHAR);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
135
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
136 log.debug("Found " + cols.length + " columns.");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
137
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
138 initColumns(cols);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
139
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 return true;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 return false;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
147 private void initColumns(String[] cols) {
5264
731030b69c7e Fix Waterlevel*-Parser to correctly register the wst-columns.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5247
diff changeset
148 current.setNumberColumns(cols.length);
731030b69c7e Fix Waterlevel*-Parser to correctly register the wst-columns.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5247
diff changeset
149 columns = current.getColumns().toArray(new ImportWstColumn[cols.length]);
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151 for (int i = 0; i < cols.length; i++) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 String name = cols[i].replace("\"", "");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
153
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 log.debug("Create new column '" + name + "'");
5264
731030b69c7e Fix Waterlevel*-Parser to correctly register the wst-columns.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5247
diff changeset
155 current.getColumn(i).setName(name);
731030b69c7e Fix Waterlevel*-Parser to correctly register the wst-columns.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5247
diff changeset
156 current.getColumn(i).setDescription(name);
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
157 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
159
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
160
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
161 private void handleDataLine(String line) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
162 String[] cols = line.split(SEPERATOR_CHAR);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
163
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
164 if (cols == null || cols.length < 2) {
5230
fb7d43ba8147 WaterlevelDifferencesParser: Cosmetics and fix misleading debug output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5229
diff changeset
165 log.warn("skip invalid waterlevel-diff line: '" + line + "'");
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
166 return;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
168
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
169 try {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 Double station = nf.parse(cols[0]).doubleValue();
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
171
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
172 for (int i = 0; i < columns.length; i++) {
3940
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
173 int idx = i+1;
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
174
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
175 if (idx >= cols.length) {
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
176 log.warn("Insufficient column numbers: " + line);
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
177 continue;
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
178 }
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
179
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
180 String value = cols[idx];
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
182 try {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
183 columns[i].addColumnValue(
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
184 new BigDecimal(station),
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
185 new BigDecimal(nf.parse(value).doubleValue()));
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
187 catch (ParseException pe) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
188 log.warn("Error while parsing value: '" + value + "'");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
190 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
191 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
192 catch (ParseException pe) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
193 log.warn("Error while parsing station: '" + line + "'");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
194 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
195 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
196 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
197 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org