Mercurial > dive4elements > river
annotate backend/src/main/java/org/dive4elements/river/importer/parsers/WstParser.java @ 9650:a2a42a6bac6b
Importer (s/u-info) extensions:
outer try/catch for parse and log of line no,
catching parsing exception if not enough value fields,
parsing error and warning log messages with line number,
detecting and rejecting duplicate data series,
better differentiation between error and warning log messages
author | mschaefer |
---|---|
date | Mon, 23 Mar 2020 14:57:03 +0100 |
parents | 5ff8ce9a2e06 |
children |
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; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 import java.io.File; |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
12 import java.io.FileInputStream; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 import java.io.IOException; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 import java.io.InputStreamReader; |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
15 import java.io.LineNumberReader; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
16 import java.math.BigDecimal; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 import java.text.NumberFormat; |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
18 import java.util.ArrayList; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
19 import java.util.Arrays; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
20 import java.util.HashSet; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
21 import java.util.regex.Matcher; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
22 import java.util.regex.Pattern; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 import org.apache.log4j.Logger; |
8187
3bb1c62ad732
Moved package org.dive4elements.river.utils to org.dive4elements.river.backend.utils.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7883
diff
changeset
|
25 import org.dive4elements.river.backend.utils.DateGuesser; |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
26 import org.dive4elements.river.backend.utils.StringUtil; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
27 import org.dive4elements.river.importer.ImportRange; |
5829
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
28 import org.dive4elements.river.importer.ImportTimeInterval; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
29 import org.dive4elements.river.importer.ImportUnit; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
30 import org.dive4elements.river.importer.ImportWst; |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
31 import org.dive4elements.river.importer.ImportWstColumn; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
32 import org.dive4elements.river.importer.ImportWstQRange; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 public class WstParser |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 private static Logger log = Logger.getLogger(WstParser.class); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 public static final String COLUMN_BEZ_TEXT = "column-bez-text"; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 public static final String COLUMN_BEZ_BREITE = "column-bez-breite"; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 public static final String COLUMN_QUELLE = "column-quelle"; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 public static final String COLUMN_DATUM = "column-datum"; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 public static final BigDecimal UNDEFINED_ZERO = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
44 new BigDecimal(0.0); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 public static final BigDecimal MIN_RANGE = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
46 new BigDecimal(-Double.MAX_VALUE); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 public static final BigDecimal MAX_RANGE = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
48 new BigDecimal(Double.MAX_VALUE); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 public static final String ENCODING = "ISO-8859-1"; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 public static final Pattern UNIT_COMMENT = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
53 Pattern.compile("\\*\\s*[kK][mM]\\s+(.+)"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 public static final Pattern UNIT = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
56 Pattern.compile("[^\\[]*\\[([^]]+)\\].*"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 |
6508
b2eab164a441
Backend: WST parser. Detect ranges of years in column-datum
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6506
diff
changeset
|
58 public static final Pattern YEAR_INTERVAL = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
59 Pattern.compile("(\\d{4})\\s*[-/]\\s*(\\d{4})"); |
6508
b2eab164a441
Backend: WST parser. Detect ranges of years in column-datum
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6506
diff
changeset
|
60 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
61 public static final BigDecimal INTERVAL_GAP = new BigDecimal("0.00001"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 protected ImportWst wst; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
65 protected ImportRange lastRange; |
8987 | 66 protected Double lastA; |
67 protected Double lastB; | |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 public WstParser() { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
72 public WstParser(final ImportWst wst) { |
6337
224d7c4b5291
Backend: Create ImportWsts for official lines expicitly. They are going to be somewhat special. Removed some cruft from the WstParser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6328
diff
changeset
|
73 this.wst = wst; |
224d7c4b5291
Backend: Create ImportWsts for official lines expicitly. They are going to be somewhat special. Removed some cruft from the WstParser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6328
diff
changeset
|
74 } |
224d7c4b5291
Backend: Create ImportWsts for official lines expicitly. They are going to be somewhat special. Removed some cruft from the WstParser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6328
diff
changeset
|
75 |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 public ImportWst getWst() { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
77 return this.wst; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
80 public void setWst(final ImportWst wst) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 this.wst = wst; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 |
7339
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
84 public static final class ParseException extends Exception { |
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
85 public ParseException() { |
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
86 } |
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
87 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
88 public ParseException(final String msg) { |
7339
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
89 super(msg); |
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
90 } |
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
91 } // class ParseException |
40e5ad76103c
WST Import: Added parse error exception to WST parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7252
diff
changeset
|
92 |
6727 | 93 /** Returns a new ImportTimeInterval with a date guessed from string. */ |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
94 public static ImportTimeInterval guessDate(final String string) { |
2357
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
95 try { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
96 final Matcher m = YEAR_INTERVAL.matcher(string); |
6508
b2eab164a441
Backend: WST parser. Detect ranges of years in column-datum
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6506
diff
changeset
|
97 if (m.matches()) { |
b2eab164a441
Backend: WST parser. Detect ranges of years in column-datum
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6506
diff
changeset
|
98 return new ImportTimeInterval( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
99 DateGuesser.guessDate(m.group(1)), |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
100 DateGuesser.guessDate(m.group(2))); |
6508
b2eab164a441
Backend: WST parser. Detect ranges of years in column-datum
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6506
diff
changeset
|
101 } |
b2eab164a441
Backend: WST parser. Detect ranges of years in column-datum
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6506
diff
changeset
|
102 |
2357
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
103 return new ImportTimeInterval( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
104 DateGuesser.guessDate(string)); |
2357
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
105 } |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
106 catch (final IllegalArgumentException iae) { |
6028
25d927cb4b25
WstParser: warn if timestamp can not be set, cosmetics.
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
107 log.warn("WST: String '" + string + |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
108 "' could not be interpreted as valid timestamp"); |
2357
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
109 } |
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
110 return null; |
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
111 } |
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
112 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
113 public void parse(final File file) throws IOException, ParseException { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
114 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 log.info("Parsing WST file '" + file + "'"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
116 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
117 if (this.wst == null) { |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
118 this.wst = new ImportWst(file.getName()); |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
119 } |
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
120 else { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
121 this.wst.setDescription(file.getName()); |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
122 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
123 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
124 final LineNumberReader in = |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
125 new LineNumberReader( |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
126 new InputStreamReader( |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
127 new FileInputStream(file), ENCODING)); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
128 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
129 String input; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
130 boolean first = true; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
131 int columnCount = 0; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
132 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
133 String [] lsBezeichner = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 String [] langBezeichner = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
135 int [] colNaWidths = null; |
6504
7664ab97b4c7
Backend: Store source of a wst column if available.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6337
diff
changeset
|
136 String [] quellen = null; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
137 String [] daten = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
138 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
139 BigDecimal [] aktAbfluesse = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
140 BigDecimal [] firstAbfluesse = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
141 |
5544
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
142 BigDecimal minKm = MAX_RANGE; |
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
143 BigDecimal maxKm = MIN_RANGE; |
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
144 BigDecimal kmHist1 = null; |
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
145 BigDecimal kmHist2 = null; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
146 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
147 boolean columnHeaderChecked = false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
148 |
7883
fc8d5b5f2c99
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7488
diff
changeset
|
149 /* Default string for altitude reference |
6819
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
150 * if none is found in WST-file. |
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
151 * Use in case no unit comment is found in file */ |
6809
4ff177f48952
WstParser and Importer doc: More sensible default unit and warn if it is used.
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6730
diff
changeset
|
152 String einheit = "m ü. unbekannte Referenz"; |
6819
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
153 boolean unitFound = false; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
154 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
155 final HashSet<BigDecimal> kms = new HashSet<>(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
156 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
157 while ((input = in.readLine()) != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 String line = input; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 if (first) { // fetch number of columns |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 if ((line = line.trim()).length() == 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
164 columnCount = Integer.parseInt(line); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
165 if (columnCount <= 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
166 throw new NumberFormatException( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
167 "number of columns <= 0"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
168 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
169 log.debug("Number of columns: " + columnCount); |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
170 this.wst.setNumberColumns(columnCount); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 lsBezeichner = new String[columnCount]; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
172 } |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
173 catch (final NumberFormatException nfe) { |
3662
0d27d02b1208
backend: Completed the error messages of the importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2357
diff
changeset
|
174 log.warn("WST: invalid number.", nfe); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
176 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
177 first = false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 line = line.replace(',', '.'); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 |
7374
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
183 // handle Q-lines |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 if (line.startsWith("*\u001f")) { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
185 final BigDecimal [] data = parseLineAsDouble( |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
186 line, columnCount, false, true); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 |
8856 | 188 if (aktAbfluesse != null) { |
189 // add Q-ranges obtained from previous lines | |
5544
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
190 if (kmHist1 != null && kmHist2 != null |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
191 && kmHist1.compareTo(kmHist2) < 0) { |
8856 | 192 // stations descending in file |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
193 final BigDecimal t = minKm; minKm = maxKm; maxKm = t; |
5544
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
194 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 addInterval(minKm, maxKm, aktAbfluesse); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 minKm = MAX_RANGE; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
197 maxKm = MIN_RANGE; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
198 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
199 |
7374
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
200 // obtain Q-values from current line |
7488
1890bd524d27
WST-Parser: revert the assumption of only complete columns.
Tom Gottfried <tom@intevation.de>
parents:
7487
diff
changeset
|
201 aktAbfluesse = new BigDecimal[data.length]; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
202 log.debug("new q range: " + columnCount); |
7488
1890bd524d27
WST-Parser: revert the assumption of only complete columns.
Tom Gottfried <tom@intevation.de>
parents:
7487
diff
changeset
|
203 for (int i = 0; i < data.length; ++i) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
204 if (data[i] != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
205 log.debug(" column: " + data[i]); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
206 aktAbfluesse[i] = data[i]; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
207 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
208 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
209 |
8856 | 210 // remember Q-values from first Q-line |
211 // for header generation | |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
212 if (firstAbfluesse == null) { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
213 firstAbfluesse = aktAbfluesse.clone(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
214 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
215 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
216 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
217 |
7374
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
218 // handle special column identifiers |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
219 if (line.startsWith("*!")) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
220 String spezial = line.substring(2).trim(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
222 if (spezial.length() == 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
223 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
224 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
225 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 if (spezial.startsWith(COLUMN_BEZ_TEXT)) { |
8856 | 227 spezial = spezial.substring( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
228 COLUMN_BEZ_TEXT.length()).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 if (spezial.length() == 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 langBezeichner = StringUtil.splitQuoted(spezial, '"'); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
233 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
234 else if (spezial.startsWith(COLUMN_BEZ_BREITE)) { |
8856 | 235 spezial = spezial.substring( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
236 COLUMN_BEZ_BREITE.length()).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
237 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
238 if (spezial.length() == 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
239 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
240 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
241 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
242 final String[] split = spezial.split("\\s+"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
243 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
244 colNaWidths = new int[split.length]; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
245 for (int i=0; i < split.length; i++) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
246 colNaWidths[i] = Integer.parseInt(split[i]); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
247 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
248 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
249 else if (spezial.startsWith(COLUMN_QUELLE)) { |
8856 | 250 spezial = spezial.substring( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
251 COLUMN_QUELLE.length()).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
252 if (spezial.length() == 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
253 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
254 } |
6504
7664ab97b4c7
Backend: Store source of a wst column if available.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6337
diff
changeset
|
255 quellen = StringUtil.splitQuoted(spezial, '"'); |
7252
c894b7b45c4c
Replaced some tabs by spaces. Guys, please configure your editors not to insert tabs!
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6727
diff
changeset
|
256 log.debug("sources: " + Arrays.toString(quellen)); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
257 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
258 else if (spezial.startsWith(COLUMN_DATUM)) { |
8856 | 259 spezial = spezial.substring( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
260 COLUMN_DATUM.length()).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
261 if (spezial.length() == 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
262 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
263 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
264 daten = StringUtil.splitQuoted(spezial, '"'); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
265 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
266 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
267 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
268 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
269 if (line.length() < 11) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
270 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
271 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
272 |
7374
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
273 // handle comment lines to fetch unit |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
274 if (line.startsWith("*")) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
275 Matcher m = UNIT_COMMENT.matcher(line); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
276 if (m.matches()) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
277 log.debug("unit comment found"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
278 // XXX: This hack is needed because desktop |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
279 // FLYS is broken figuring out the unit |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
280 final String [] units = m.group(1).split("\\s{2,}"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
281 m = UNIT.matcher(units[0]); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
282 einheit = m.matches() ? m.group(1) : units[0]; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
283 log.debug("unit: " + einheit); |
6819
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
284 unitFound = true; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
285 } |
6819
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
286 |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
287 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
288 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
289 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
290 if (firstAbfluesse != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
291 if (!columnHeaderChecked) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
292 int unknownCount = 0; |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
293 final HashSet<String> uniqueColumnNames = |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
294 new HashSet<>(); |
6029
f9c5e1a8032d
WstParser: set column names from specified line also if unspecified line does not exist
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6028
diff
changeset
|
295 if (langBezeichner != null) { |
f9c5e1a8032d
WstParser: set column names from specified line also if unspecified line does not exist
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6028
diff
changeset
|
296 // use column name from '*!column-bez-text'-line |
f9c5e1a8032d
WstParser: set column names from specified line also if unspecified line does not exist
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6028
diff
changeset
|
297 lsBezeichner = StringUtil.fitArray( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
298 langBezeichner, lsBezeichner); |
6029
f9c5e1a8032d
WstParser: set column names from specified line also if unspecified line does not exist
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6028
diff
changeset
|
299 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
300 for (int i = 0; i < lsBezeichner.length; ++i) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
301 if (lsBezeichner[i] == null |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
302 || lsBezeichner[i].length() == 0) { |
6029
f9c5e1a8032d
WstParser: set column names from specified line also if unspecified line does not exist
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6028
diff
changeset
|
303 // generate alternative column names |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
304 final double q = firstAbfluesse.length > i ? |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
305 firstAbfluesse[i].doubleValue() : 0d; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
306 if (q < 0.001) { |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
307 lsBezeichner[i] = |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
308 "<unbekannt #" + unknownCount + ">"; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
309 ++unknownCount; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
310 } |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
311 else { |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
312 lsBezeichner[i] = "Q="+format(q); |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
313 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
314 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
315 String candidate = lsBezeichner[i]; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
316 int collision = 1; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
317 while (!uniqueColumnNames.add(candidate)) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
318 candidate = lsBezeichner[i] + |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
319 " (" + collision + ")"; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
320 ++collision; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
321 } |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
322 final ImportWstColumn iwc = this.wst.getColumn(i); |
2357
2e18e12fac11
Added date guesser for WST columns.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2346
diff
changeset
|
323 iwc.setName(candidate); |
6504
7664ab97b4c7
Backend: Store source of a wst column if available.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6337
diff
changeset
|
324 if (quellen != null && i < quellen.length) { |
7664ab97b4c7
Backend: Store source of a wst column if available.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6337
diff
changeset
|
325 iwc.setSource(quellen[i]); |
7664ab97b4c7
Backend: Store source of a wst column if available.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6337
diff
changeset
|
326 } |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
327 final String potentialDate = |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
328 daten != null && i < daten.length |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
329 ? daten[i] |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
330 : candidate; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
331 iwc.setTimeInterval(guessDate(potentialDate)); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
332 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
333 columnHeaderChecked = true; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
334 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
335 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
336 final BigDecimal [] data = parseLineAsDouble( |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
337 line, columnCount, true, false); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
338 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
339 final BigDecimal kaem = data[0]; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
340 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
341 if (!kms.add(kaem)) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
342 log.warn( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
343 "WST: km " + kaem + |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
344 " (line " + in.getLineNumber() + |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
345 ") found more than once. -> ignored"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
346 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
347 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
348 |
7342
c9b9176b0530
WST-Parser: check consistence of station ordering in file.
Tom Gottfried <tom@intevation.de>
parents:
7341
diff
changeset
|
349 // check consistence of station ordering in file |
7883
fc8d5b5f2c99
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7488
diff
changeset
|
350 if (kmHist2 != null && |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
351 kmHist2.compareTo(kmHist1) != kmHist1.compareTo(kaem) |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
352 ) { |
7883
fc8d5b5f2c99
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7488
diff
changeset
|
353 throw new ParseException("WST: Stations in " + file + |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
354 " near line " + in.getLineNumber() + |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
355 " not ordered. File rejected."); |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
356 } |
7342
c9b9176b0530
WST-Parser: check consistence of station ordering in file.
Tom Gottfried <tom@intevation.de>
parents:
7341
diff
changeset
|
357 |
c9b9176b0530
WST-Parser: check consistence of station ordering in file.
Tom Gottfried <tom@intevation.de>
parents:
7341
diff
changeset
|
358 // remember stations in two previous lines |
5544
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
359 kmHist2 = kmHist1; |
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
360 kmHist1 = kaem; |
5543
732a8bd44650
Wst Parser: Yet another attempt to fix the order of the Q ranges (made by S. Teichmann)
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5542
diff
changeset
|
361 |
7341 | 362 // iteratively determine actual km-range |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
363 if (kaem.compareTo(minKm) < 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
364 minKm = kaem; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
365 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
366 if (kaem.compareTo(maxKm) > 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
367 maxKm = kaem; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
368 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
369 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
370 // extract values |
7488
1890bd524d27
WST-Parser: revert the assumption of only complete columns.
Tom Gottfried <tom@intevation.de>
parents:
7487
diff
changeset
|
371 for (int i = 0; i < data.length - 1; ++i) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
372 addValue(kaem, data[i+1], i); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
373 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
374 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
375 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
376 else { // firstAbfluesse == null |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
377 if (langBezeichner != null) { |
6029
f9c5e1a8032d
WstParser: set column names from specified line also if unspecified line does not exist
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6028
diff
changeset
|
378 // nothing to do |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
379 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
380 else if (colNaWidths != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
381 for (int j = 0, i = 0, N = input.length(); |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
382 j < colNaWidths.length && i < N; |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
383 i += colNaWidths[j++] |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
384 ) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
385 lsBezeichner[j] = input.substring( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
386 i, i+colNaWidths[j]).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
387 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
388 } |
7883
fc8d5b5f2c99
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7488
diff
changeset
|
389 else { // fetch column names from non-comment header line |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
390 // (above first Qs) |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
391 // first column begins at position 8 in line |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
392 for (int i = 8, col = 0; i < input.length(); i += 9) { |
7480
2a2e89c01588
WST-Parser: Improve handling of line-endings.
Tom Gottfried <tom@intevation.de>
parents:
7375
diff
changeset
|
393 // one column header is 9 chars wide |
2a2e89c01588
WST-Parser: Improve handling of line-endings.
Tom Gottfried <tom@intevation.de>
parents:
7375
diff
changeset
|
394 // but the last one may be shorter |
2a2e89c01588
WST-Parser: Improve handling of line-endings.
Tom Gottfried <tom@intevation.de>
parents:
7375
diff
changeset
|
395 if (col < lsBezeichner.length) { |
2a2e89c01588
WST-Parser: Improve handling of line-endings.
Tom Gottfried <tom@intevation.de>
parents:
7375
diff
changeset
|
396 lsBezeichner[col++] = |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
397 input.substring( |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
398 i, |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
399 Math.min(i + 9, input.length()) |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
400 ).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
401 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
402 if (col == lsBezeichner.length) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
403 break; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
404 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
405 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
406 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
407 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
408 |
5542
f3b270e5462e
Wst Parser: Another attempt to fix the order of the Q ranges.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5541
diff
changeset
|
409 } // for all lines in WST file |
2346
f834b411ca57
Added db table, model class and importer stuff for units.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1211
diff
changeset
|
410 |
6819
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
411 if (!unitFound) { |
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
412 log.warn("no unit and height reference found. Using default."); |
1d60614c1059
WstParser: warn only once if no unit comment is found
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6809
diff
changeset
|
413 } |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
414 this.wst.setUnit(new ImportUnit(einheit)); |
5544
12f4d088f088
WST importer: Cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5543
diff
changeset
|
415 |
7883
fc8d5b5f2c99
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7488
diff
changeset
|
416 // add Q-ranges obtained from previous lines |
7374
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
417 // in case there was no further Q-line |
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
418 // but only if there were values following the last Q-line |
82191d111130
WstParser: Do not add Q-range for trailing Q-line.
Tom Gottfried <tom@intevation.de>
parents:
7342
diff
changeset
|
419 if (minKm != MAX_RANGE && maxKm != MIN_RANGE) { |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
420 if (kmHist1 != null && kmHist2 != null |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
421 && kmHist1.compareTo(kmHist2) < 0) { |
8856 | 422 // stations descending in file |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
423 final BigDecimal t = minKm; minKm = maxKm; maxKm = t; |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
424 } |
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
425 addInterval(minKm, maxKm, aktAbfluesse); |
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
426 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
427 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
428 finally { |
6337
224d7c4b5291
Backend: Create ImportWsts for official lines expicitly. They are going to be somewhat special. Removed some cruft from the WstParser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
6328
diff
changeset
|
429 in.close(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
430 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
431 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
432 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
433 protected void addValue(final BigDecimal km, final BigDecimal w, final int index) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
434 if (w != null) { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
435 final ImportWstColumn column = this.wst.getColumn(index); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
436 column.addColumnValue(km, w); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
437 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
438 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
439 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
440 private static final NumberFormat NF = getNumberFormat(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
441 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
442 private static final NumberFormat getNumberFormat() { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
443 final NumberFormat nf = NumberFormat.getInstance(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
444 nf.setMinimumFractionDigits(2); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
445 nf.setMaximumFractionDigits(2); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
446 return nf; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
447 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
448 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
449 protected static String format(final double value) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
450 return NF.format(value); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
451 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
452 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
453 protected void addInterval( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
454 final BigDecimal from, |
8987 | 455 BigDecimal to, |
456 final BigDecimal[] values) { | |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
457 log.debug("addInterval: " + from + " " + to); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
458 |
5795
202a73ce6704
WST-Parser: Avoid trying to set MIN_RANGE when actually no stations are given
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
5558
diff
changeset
|
459 if (values == null || from == MAX_RANGE || from == MIN_RANGE) { |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
460 return; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
461 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
462 |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
463 // expand single-line i.e. 0-lenght Q-range to minimal length |
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
464 if (from == to) { |
8987 | 465 if (this.lastRange != null && this.lastA > this.lastB) { |
466 to = from.subtract(INTERVAL_GAP); | |
467 } | |
468 else { | |
469 to = from.add(INTERVAL_GAP); | |
470 } | |
7375
450582bcad75
Replaced tabs with 4 spaces.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7374
diff
changeset
|
471 } |
7002
0850a4983fcd
Issue1333: expand single-line i.e. 0-lenght Q-range to minimal length.
Tom Gottfried <tom.gottfried@intevation.de>
parents:
6819
diff
changeset
|
472 |
8987 | 473 final ImportRange range = new ImportRange(from, to); |
474 | |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
475 // little workaround to make the q ranges tightly fit. |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
476 // Leave a very small gap to ensure that the range queries |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
477 // still work. |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
478 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
479 if (this.lastRange != null) { |
8987 | 480 if (this.lastA < this.lastB) { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
481 this.lastRange.setB(range.getA().subtract(INTERVAL_GAP)); |
8987 | 482 } |
483 else { // lastA >= lastB | |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
484 this.lastRange.setA(range.getB().add(INTERVAL_GAP)); |
8987 | 485 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
486 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
487 |
8987 | 488 for (int i = 0; i < values.length; ++i) { |
489 final ImportWstColumn column = this.wst.getColumn(i); | |
490 final ImportWstQRange wstQRange = new ImportWstQRange(range, values[i]); | |
491 column.addColumnQRange(wstQRange); | |
492 } | |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
493 |
8987 | 494 this.lastA = from.doubleValue(); |
495 this.lastB = to.doubleValue(); | |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
496 this.lastRange = range; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
497 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
498 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
499 private static final BigDecimal [] parseLineAsDouble( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
500 final String line, |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
501 final int count, |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
502 final boolean bStation, |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
503 final boolean bParseEmptyAsZero |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
504 ) throws ParseException { |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
505 final String [] tokens = parseLine(line, count, bStation); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
506 |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
507 final BigDecimal [] doubles = new BigDecimal[tokens.length]; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
508 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
509 for (int i = 0; i < doubles.length; ++i) { |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
510 final String token = tokens[i].trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
511 if (token.length() != 0) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
512 doubles[i] = new BigDecimal(token); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
513 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
514 else if (bParseEmptyAsZero) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
515 doubles[i] = UNDEFINED_ZERO; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
516 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
517 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
518 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
519 return doubles; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
520 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
521 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
522 private static String [] parseLine( |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
523 final String line, |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
524 final int tokenCount, |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
525 final boolean bParseStation |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
526 ) throws ParseException { |
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
527 final ArrayList<String> strings = new ArrayList<>(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
528 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
529 if (bParseStation) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
530 if (line.length() < 8) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
531 throw new IllegalArgumentException("station too short"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
532 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
533 strings.add(line.substring(0, 8)); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
534 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
535 |
7481
bdb12632c5f5
WST-Parser and doc: reject files with wrong number of columns.
Tom Gottfried <tom@intevation.de>
parents:
7480
diff
changeset
|
536 int pos = 0; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
537 for (int i = 0; i < tokenCount; ++i) { |
7481
bdb12632c5f5
WST-Parser and doc: reject files with wrong number of columns.
Tom Gottfried <tom@intevation.de>
parents:
7480
diff
changeset
|
538 pos += 9; |
bdb12632c5f5
WST-Parser and doc: reject files with wrong number of columns.
Tom Gottfried <tom@intevation.de>
parents:
7480
diff
changeset
|
539 if (pos >= line.length()) { |
7488
1890bd524d27
WST-Parser: revert the assumption of only complete columns.
Tom Gottfried <tom@intevation.de>
parents:
7487
diff
changeset
|
540 break; |
7481
bdb12632c5f5
WST-Parser and doc: reject files with wrong number of columns.
Tom Gottfried <tom@intevation.de>
parents:
7480
diff
changeset
|
541 } |
7883
fc8d5b5f2c99
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7488
diff
changeset
|
542 strings.add(line.substring(pos, |
8976
e541938dd3ab
Range data handled consistently as BigDecimal to minimize the fractional part of a and b
mschaefer
parents:
8856
diff
changeset
|
543 Math.min(pos + 8, line.length()))); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
544 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
545 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
546 return strings.toArray(new String[strings.size()]); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
547 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
548 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
549 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |