Mercurial > dive4elements > river
annotate backend/src/main/java/org/dive4elements/river/importer/parsers/StaFileParser.java @ 6290:db7d0600d39d
Minor refac.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 12 Jun 2013 11:51:25 +0200 |
parents | ec54bb4fe407 |
children | 53d08f33d094 |
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:
5955
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:
5955
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; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 import java.io.IOException; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 import java.io.LineNumberReader; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 import java.io.FileInputStream; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 import java.io.InputStreamReader; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 import java.math.BigDecimal; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 import java.util.regex.Pattern; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 import java.util.regex.Matcher; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
22 import java.util.Date; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 import java.util.HashMap; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 import java.util.ArrayList; |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
25 import java.util.List; |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 import org.apache.log4j.Logger; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 |
5829
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
29 import org.dive4elements.river.importer.ImportMainValueType; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
30 import org.dive4elements.river.importer.ImportMainValue; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
31 import org.dive4elements.river.importer.ImportNamedMainValue; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
32 import org.dive4elements.river.importer.ImportGauge; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
33 import org.dive4elements.river.importer.ImportTimeInterval; |
18619c1e7c2a
Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5828
diff
changeset
|
34 import org.dive4elements.river.utils.DateGuesser; |
1211
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 public class StaFileParser |
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 private static Logger log = Logger.getLogger(StaFileParser.class); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 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
|
41 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 public static final String TYPES = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 System.getProperty("flys.backend.main.value.types", "QWTD"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 public static final Pattern QWTD_ = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 Pattern.compile("\\s*([^\\s]+)\\s+([^\\s]+)\\s+([" + |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 Pattern.quote(TYPES) + "]).*"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
49 // TODO: To be extented. |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
50 private static final Pattern MAIN_VALUE = Pattern.compile( |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
51 "^(HQ|MHW|GLQ|NMQ|HQEXT)(\\d*)$"); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
52 |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
53 private static boolean isMainValue(String s) { |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
54 s = s.replace(" ", "").toUpperCase(); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
55 return MAIN_VALUE.matcher(s).matches(); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
56 } |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
57 |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
58 |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
59 public static final class NameAndTimeInterval { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
60 private String name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
61 private ImportTimeInterval timeInterval; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
62 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
63 public NameAndTimeInterval(String name) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
64 this(name, null); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
65 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
66 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
67 public NameAndTimeInterval(String name, ImportTimeInterval timeInterval) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
68 this.name = name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
69 this.timeInterval = timeInterval; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
70 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
71 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
72 public String getName() { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
73 return name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
74 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
75 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
76 public ImportTimeInterval getTimeInterval() { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
77 return timeInterval; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
78 } |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
79 |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
80 @Override |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
81 public String toString() { |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
82 return "name: " + name + " time interval: " + timeInterval; |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
83 } |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
84 } // class NameAndTimeInterval |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
85 |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 public StaFileParser() { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
88 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
89 public boolean parse(ImportGauge gauge) throws IOException { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
90 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
91 File file = gauge.getStaFile(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
92 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 log.info("parsing STA file: " + file); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 LineNumberReader in = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
95 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 in = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
97 new LineNumberReader( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
98 new InputStreamReader( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 new FileInputStream(file), ENCODING)); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
101 String line = in.readLine(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
103 if (line == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 log.warn("STA file is empty."); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
105 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
106 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 if (line.length() < 37) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
109 log.warn("First line in STA file is too short."); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
111 } |
2377
d183ae164cfc
Make parsing of official numbers out of STA files being enabled with new system property.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2371
diff
changeset
|
112 |
5954
f944cc25484c
STA parser: Spaces after gauge name given in spec are sometimes used for gauge name, so parse them
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5902
diff
changeset
|
113 String gaugeName = line.substring(16, 35).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
114 |
2371
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
115 Long gaugeNumber = null; |
2377
d183ae164cfc
Make parsing of official numbers out of STA files being enabled with new system property.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2371
diff
changeset
|
116 |
6004
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
117 String gaugeNumberString = line.substring(8, 16).trim(); |
2377
d183ae164cfc
Make parsing of official numbers out of STA files being enabled with new system property.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2371
diff
changeset
|
118 |
6004
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
119 try { |
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
120 gaugeNumber = Long.parseLong(gaugeNumberString); |
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
121 } |
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
122 catch (NumberFormatException nfe) { |
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
123 log.warn("STA: gauge number '" + gaugeNumberString + |
ec54bb4fe407
Importer: use gauge official number as identifier, not name
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5992
diff
changeset
|
124 "' is not a valid long number."); |
2371
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
125 } |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
126 |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
127 gauge.setName(gaugeName); |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
128 gauge.setOfficialNumber(gaugeNumber); |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
129 |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
130 if (log.isDebugEnabled()) { |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
131 log.debug( |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
132 "name/number: '" + gaugeName + "' '" + gaugeNumber + "'"); |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
133 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
135 String [] values = line.substring(38).trim().split("\\s+", 2); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
136 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
137 if (values.length < 2) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
138 log.warn("STA: Not enough columns for aeo and datum."); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
139 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
140 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
141 gauge.setAeo(new BigDecimal(values[0].replace(",", "."))); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
142 gauge.setDatum(new BigDecimal(values[1].replace(",", "."))); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
143 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
144 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
145 log.warn("STA: cannot parse aeo or datum."); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
146 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
147 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
148 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
149 line = in.readLine(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
150 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
151 if (line == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
152 log.warn("STA file has not enough lines"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
153 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
154 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
155 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
156 if (line.length() < 36) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
157 log.warn("STA: second line is too short"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
159 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
160 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 gauge.setStation( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 new BigDecimal(line.substring(29, 36).trim())); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
164 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
165 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
166 log.warn("STA: parsing of the datum of the gauge failed"); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
167 return false; |
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 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
170 // overread the next six lines |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 for (int i = 0; i < 6; ++i) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
172 if ((line = in.readLine()) == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
173 log.warn("STA file is too short"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
174 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 } |
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 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 HashMap<String, ImportMainValueType> types = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 new HashMap<String, ImportMainValueType>(); |
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 ArrayList<ImportNamedMainValue> namedMainValues = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 new ArrayList<ImportNamedMainValue>(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 ArrayList<ImportMainValue> mainValues = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 new ArrayList<ImportMainValue>(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 while ((line = in.readLine()) != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 Matcher m = QWTD_.matcher(line); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 if (m.matches()) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 BigDecimal value; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 value = new BigDecimal(m.group(2).replace(",", ".")); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
193 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
194 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
195 log.warn("STA: value not parseable in line " |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 + in.getLineNumber()); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
197 continue; |
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 String typeString = m.group(3); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
200 log.debug("\t type: " + typeString); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
201 ImportMainValueType type = types.get(typeString); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
202 if (type == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
203 type = new ImportMainValueType(typeString); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
204 types.put(typeString, type); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
205 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
206 String name = m.group(1); |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
207 NameAndTimeInterval nat = parseName(name); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
208 ImportNamedMainValue namedMainValue = |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
209 new ImportNamedMainValue(type, nat.getName()); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
210 namedMainValues.add(namedMainValue); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
211 |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
212 ImportMainValue mainValue = new ImportMainValue( |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
213 gauge, |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
214 namedMainValue, |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
215 value, |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
216 nat.getTimeInterval()); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
217 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
218 mainValues.add(mainValue); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
219 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
220 else { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 // TODO: treat as a comment |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
222 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
223 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
224 gauge.setMainValueTypes( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
225 new ArrayList<ImportMainValueType>(types.values())); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 gauge.setNamedMainValues(namedMainValues); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
227 gauge.setMainValues(mainValues); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
228 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 finally { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 if (in != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 in.close(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 } |
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 log.info("finished parsing STA file: " + file); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
235 return true; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 } |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
237 |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
238 protected static NameAndTimeInterval parseName(String name) { |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
239 List<String> result = new ArrayList<String>(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
240 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
241 unbracket(name, 0, result); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
242 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
243 int length = result.size(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
244 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
245 if (length < 1) { // Should not happen. |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
246 return new NameAndTimeInterval(name); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
247 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
248 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
249 if (length == 1) { // No date at all -> use first part. |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
250 return new NameAndTimeInterval(result.get(0).trim()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
251 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
252 |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
253 if (length == 2) { // e.g. HQ(1994) or HQ(1994 - 1999) |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
254 |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
255 String type = result.get(0).trim(); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
256 ImportTimeInterval timeInterval = null; |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
257 |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
258 String datePart = result.get(1).trim(); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
259 if (isMainValue(datePart)) { // e.g. W(HQ100) |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
260 type += "(" + datePart + ")"; |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
261 timeInterval = null; |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
262 } |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
263 else { |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
264 timeInterval = getTimeInterval(result.get(1).trim()); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
265 |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
266 if (timeInterval == null) { // No date at all. |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
267 type = name; |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
268 } |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
269 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
270 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
271 return new NameAndTimeInterval(type, timeInterval); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
272 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
273 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
274 if (length == 3) { // e.g W(Q(1994)) or W(Q(1994 - 1999)) |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
275 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
276 String type = |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
277 result.get(0).trim() + "(" + |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
278 result.get(1).trim() + ")"; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
279 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
280 ImportTimeInterval timeInterval = getTimeInterval( |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
281 result.get(2).trim()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
282 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
283 if (timeInterval == null) { // No date at all. |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
284 type = name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
285 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
286 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
287 return new NameAndTimeInterval(type, timeInterval); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
288 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
289 |
5736
ab4419948655
Backend: Forgot to handle the unlikely case that there are more than 2 nested brackets in main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5735
diff
changeset
|
290 // more than 3 elements return unmodified. |
ab4419948655
Backend: Forgot to handle the unlikely case that there are more than 2 nested brackets in main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5735
diff
changeset
|
291 |
ab4419948655
Backend: Forgot to handle the unlikely case that there are more than 2 nested brackets in main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5735
diff
changeset
|
292 return new NameAndTimeInterval(name); |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
293 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
294 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
295 private static ImportTimeInterval getTimeInterval(String datePart) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
296 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
297 int minus = datePart.indexOf('-'); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
298 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
299 if (minus < 0) { // '-' not found |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
300 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
301 Date date = null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
302 try { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
303 date = DateGuesser.guessDate(datePart); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
304 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
305 catch (IllegalArgumentException iae) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
306 log.warn("STA: Invalid date '" + datePart + "'"); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
307 return null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
308 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
309 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
310 return new ImportTimeInterval(date); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
311 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
312 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
313 // Found '-' so we have <from> - <to> |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
314 String startPart = datePart.substring(0, minus).trim(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
315 String endPart = datePart.substring(minus).trim(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
316 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
317 Date startDate = null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
318 Date endDate = null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
319 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
320 try { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
321 startDate = DateGuesser.guessDate(startPart); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
322 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
323 catch (IllegalArgumentException iae) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
324 log.warn("STA: Invalid start date '" + startPart + "'"); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
325 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
326 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
327 try { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
328 endDate = DateGuesser.guessDate(endPart); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
329 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
330 catch (IllegalArgumentException iae) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
331 log.warn("STA: Invalid end date '" + endPart + "'"); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
332 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
333 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
334 if (startDate == null) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
335 log.warn("STA: Need start date."); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
336 return null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
337 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
338 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
339 return new ImportTimeInterval(startDate, endDate); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
340 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
341 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
342 private static int unbracket(String s, int index, List<String> result) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
343 StringBuilder sb = new StringBuilder(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
344 int length = s.length(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
345 while (index < length) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
346 char c = s.charAt(index); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
347 switch (c) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
348 case '(': |
5738
54077c9c9305
Backend: Fix Stack overflow.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5737
diff
changeset
|
349 index = unbracket(s, index+1, result); |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
350 break; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
351 case ')': |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
352 result.add(0, sb.toString()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
353 return index+1; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
354 default: |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
355 sb.append(c); |
5737
ce002608992d
Backend: Forget to increment index.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5736
diff
changeset
|
356 ++index; |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
357 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
358 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
359 result.add(0, sb.toString()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
360 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
361 return index; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
362 } |
5902
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
363 |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
364 /* |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
365 public static void main(String [] args) { |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
366 for (String arg: args) { |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
367 NameAndTimeInterval nti = parseName(arg); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
368 System.out.println(arg + " -> " + nti); |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
369 } |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
370 } |
24f9c5146384
Backend: Fixed recognition of main values in STA parser.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5844
diff
changeset
|
371 */ |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
372 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
373 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |