annotate backend/src/main/java/org/dive4elements/river/importer/parsers/WaterlevelDifferencesParser.java @ 6291:33ccce4a3aae

WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 12 Jun 2013 11:52:19 +0200
parents db7d0600d39d
children 6cdafb6feee1
rev   line source
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5992
4c3ccf2b0304 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5992
4c3ccf2b0304 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
6 * documentation coming with Dive4Elements River for details.
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5829
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
9 package org.dive4elements.river.importer.parsers;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 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
12 import java.io.IOException;
5229
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
13 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
14 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
15 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
16 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
17 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
18 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
19 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
20
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21 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
22
6291
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
23 import org.dive4elements.river.importer.ImportTimeInterval;
5829
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
24 import org.dive4elements.river.importer.ImportUnit;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
5829
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
26 import org.dive4elements.river.importer.ImportWst;
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
27 import org.dive4elements.river.importer.ImportWstColumn;
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28
5229
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
29
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
30 /**
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
31 * Parse WaterlevelDifferences CSV file.
016616df35dc WaterlevelDifferencesParser: In analogy to WaterlevelParser, allow model
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 4193
diff changeset
32 */
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 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
34
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35 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
36 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
37
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38 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
39 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
40
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41 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
42 Pattern.compile("^Einheit: \\[(.*)\\].*");
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43
6287
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
44 public static final Pattern YEARS_IN_COLUMN =
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
45 Pattern.compile(".*(\\d{4})-(\\d{4})$");
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
46
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
47 /** List of parsed differences as ImportWst s. */
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
48 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
49
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
50 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
51
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
52 /** The currently processed dataset. */
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
53 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
54
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 public WaterlevelDifferencesParser() {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
57 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
58 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
61 /** Get the differences as wst parsed so far. */
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
62 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
63 return differences;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65
5234
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
66
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
67 /**
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
68 * Parse a csv waterleveldifferenceparser and create a ImportWst object
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
69 * from it.
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
70 */
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 @Override
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72 public void parse(File file) throws IOException {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
73 current = new ImportWst(file.getName());
6282
62dca91ca229 Switch wst-kind of waterlevel/-differences (7 and 6).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5992
diff changeset
74 current.setKind(6);
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76 super.parse(file);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
77 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79
5234
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
80 /** 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
81 @Override
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
82 protected void reset() {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
83 }
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 @Override
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 protected void finish() {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
88 if (columns != null && current != null) {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
89 // TODO figure out if its needed, as the columns
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
90 // are registered at their construction time.
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
91 for (ImportWstColumn col: columns) {
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
92 // 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
93 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
95 differences.add(current);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
96 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98 current = null;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
99 columns = null;
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
5234
d1e24f26dee0 WaterlevelDifferencesParser: Doc and cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5233
diff changeset
102
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
103 @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
104 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
105 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
106 handleMetaLine(stripMetaLine(line));
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
107 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
108 else {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
109 handleDataLine(line);
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
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
113
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114 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
115 if (handleMetaUnit(meta)) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 return;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 else {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 handleMetaColumnNames(meta);
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 }
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 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
125 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
126
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127 if (m.matches()) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
128 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
129 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
130
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131 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
132
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
133 return true;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134 }
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 return false;
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
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 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
141 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
142 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
143
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 if (m.matches()) {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 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
146 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
147
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
148 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
149
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150 initColumns(cols);
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
151
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152 return true;
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
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155 return false;
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
156 }
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
6286
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6282
diff changeset
159 /** Setup column structures with name, description and time interval. */
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
160 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
161 current.setNumberColumns(cols.length);
731030b69c7e Fix Waterlevel*-Parser to correctly register the wst-columns.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5247
diff changeset
162 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
163
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
164 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
165 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
166
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 log.debug("Create new column '" + name + "'");
6290
db7d0600d39d Minor refac.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6287
diff changeset
168 ImportWstColumn column = current.getColumn(i);
db7d0600d39d Minor refac.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6287
diff changeset
169 column.setName(name);
db7d0600d39d Minor refac.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6287
diff changeset
170 column.setDescription(name);
6287
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
171
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
172 Matcher m = YEARS_IN_COLUMN.matcher(name);
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
173
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
174 if (m.matches()) {
6291
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
175 int startYear = Integer.parseInt(m.group(1));
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
176 int endYear = Integer.parseInt(m.group(2));
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
177 ImportTimeInterval time = new ImportTimeInterval(
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
178 getStartDateFromYear(startYear),
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
179 getEndDateFromYear(endYear)
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
180 );
33ccce4a3aae WaterlevelDifferencesParser: issue1354/1, set timeintervals from waterdiff-csvs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6290
diff changeset
181 column.setTimeInterval(time);
6287
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
182 } else {
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
183 log.debug("No time interval in column header found: " + name);
8d9e9b1ded7d Waterl.Diff.Parser issue1354: Extract years from name, to later set timeintervals.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6286
diff changeset
184 }
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185 }
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
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
188
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189 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
190 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
191
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
192 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
193 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
194 return;
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 try {
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
198 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
199
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
200 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
201 int idx = i+1;
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
202
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
203 if (idx >= cols.length) {
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
204 log.warn("Insufficient column numbers: " + line);
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
205 continue;
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
206 }
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
207
aed7aba93718 Improved logging and stabilized minfo import.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2850
diff changeset
208 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
209
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
210 try {
5233
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
211 columns[i].addColumnValue(
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
212 new BigDecimal(station),
37ff7c030ec9 WaterlevelDifferencesParser: Create ImportWsts directly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 5230
diff changeset
213 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
214 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
215 catch (ParseException pe) {
5490
b3dd14fc13a6 Parsers: do not call warnings error
Tom Gottfried <tom.gottfried@intevation.de>
parents: 5264
diff changeset
216 log.warn("Could not parse value: '" + value + "'");
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
217 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
218 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
219 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
220 catch (ParseException pe) {
5490
b3dd14fc13a6 Parsers: do not call warnings error
Tom Gottfried <tom.gottfried@intevation.de>
parents: 5264
diff changeset
221 log.warn("Could not parse station: '" + line + "'");
2850
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
222 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
223 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
224 }
a1402c16152f Added a parser and importer classes used to import waterlevel differences.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
225 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org