Mercurial > dive4elements > river
annotate backend/src/main/java/org/dive4elements/river/importer/parsers/StaFileParser.java @ 5844:4dd33b86dc61
Added header to river backend.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 26 Apr 2013 08:25:41 +0200 |
parents | 5aa05a7a34b7 |
children | 24f9c5146384 |
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 * |
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
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 |
4dd33b86dc61
Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
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 |
5176
6553c8e364db
import gauge number by default (made by S. Teichmann)
Tom Gottfried <tom@intevation.de>
parents:
3660
diff
changeset
|
45 public static final boolean NOT_PARSE_GAUGE_NUMBERS = |
6553c8e364db
import gauge number by default (made by S. Teichmann)
Tom Gottfried <tom@intevation.de>
parents:
3660
diff
changeset
|
46 Boolean.getBoolean("flys.backend.sta.not.parse.gauge.numbers"); |
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
|
47 |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 public static final Pattern QWTD_ = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 Pattern.compile("\\s*([^\\s]+)\\s+([^\\s]+)\\s+([" + |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 Pattern.quote(TYPES) + "]).*"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
52 public static final class NameAndTimeInterval { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
53 private String name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
54 private ImportTimeInterval timeInterval; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
55 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
56 public NameAndTimeInterval(String name) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
57 this(name, null); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
58 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
59 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
60 public NameAndTimeInterval(String name, ImportTimeInterval timeInterval) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
61 this.name = name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
62 this.timeInterval = timeInterval; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
63 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
64 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
65 public String getName() { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
66 return name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
67 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
68 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
69 public ImportTimeInterval getTimeInterval() { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
70 return timeInterval; |
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 } // class NameAndTimeInterval |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
73 |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 public StaFileParser() { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 public boolean parse(ImportGauge gauge) throws IOException { |
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 File file = gauge.getStaFile(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 log.info("parsing STA file: " + file); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 LineNumberReader in = null; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 in = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
85 new LineNumberReader( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 new InputStreamReader( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 new FileInputStream(file), ENCODING)); |
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 String line = in.readLine(); |
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 if (line == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
92 log.warn("STA file is empty."); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
95 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
96 if (line.length() < 37) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
97 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
|
98 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 } |
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
|
100 |
5691
dc2daadbdd0c
StaFileParser: use correct substring for gauge name
Tom Gottfried <tom@intevation.de>
parents:
5632
diff
changeset
|
101 String gaugeName = line.substring(16, 28).trim(); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 |
2371
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
103 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
|
104 |
5176
6553c8e364db
import gauge number by default (made by S. Teichmann)
Tom Gottfried <tom@intevation.de>
parents:
3660
diff
changeset
|
105 if (!NOT_PARSE_GAUGE_NUMBERS) { |
5632
33aa0d152f54
StaFileParser: take correct substring for gauge number
Tom Gottfried <tom.gottfried@intevation.de>
parents:
5176
diff
changeset
|
106 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
|
107 |
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
|
108 try { |
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
|
109 gaugeNumber = Long.parseLong(gaugeNumberString); |
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
|
110 } |
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
|
111 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
112 log.warn("STA: '" + gaugeNumberString + |
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
|
113 "' is not a valid long number."); |
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
|
114 } |
2371
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
115 } |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
116 |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
117 gauge.setName(gaugeName); |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
118 gauge.setOfficialNumber(gaugeNumber); |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
119 |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
120 if (log.isDebugEnabled()) { |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
121 log.debug( |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
122 "name/number: '" + gaugeName + "' '" + gaugeNumber + "'"); |
fe89d6cf55fb
Added support for official gauge numbers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1211
diff
changeset
|
123 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
124 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
125 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
|
126 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
127 if (values.length < 2) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
128 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
|
129 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
130 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
131 gauge.setAeo(new BigDecimal(values[0].replace(",", "."))); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
132 gauge.setDatum(new BigDecimal(values[1].replace(",", "."))); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
133 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
135 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
|
136 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
137 } |
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 line = in.readLine(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
140 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
141 if (line == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
142 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
|
143 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
144 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
145 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
146 if (line.length() < 36) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
147 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
|
148 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
149 } |
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 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
152 gauge.setStation( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
153 new BigDecimal(line.substring(29, 36).trim())); |
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 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
156 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
|
157 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
158 } |
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 // overread the next six lines |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
161 for (int i = 0; i < 6; ++i) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
162 if ((line = in.readLine()) == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
163 log.warn("STA file is too short"); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
164 return false; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
165 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
166 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
167 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
168 HashMap<String, ImportMainValueType> types = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
169 new HashMap<String, ImportMainValueType>(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
170 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
171 ArrayList<ImportNamedMainValue> namedMainValues = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
172 new ArrayList<ImportNamedMainValue>(); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
173 |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
174 ArrayList<ImportMainValue> mainValues = |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 new ArrayList<ImportMainValue>(); |
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 while ((line = in.readLine()) != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 Matcher m = QWTD_.matcher(line); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 if (m.matches()) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 BigDecimal value; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 try { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 value = new BigDecimal(m.group(2).replace(",", ".")); |
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 catch (NumberFormatException nfe) { |
3660
976ead36192d
backend: Mention backend warnings in importer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2377
diff
changeset
|
185 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
|
186 + in.getLineNumber()); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 continue; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 String typeString = m.group(3); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 log.debug("\t type: " + typeString); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 ImportMainValueType type = types.get(typeString); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 if (type == null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
193 type = new ImportMainValueType(typeString); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
194 types.put(typeString, type); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 String name = m.group(1); |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
197 NameAndTimeInterval nat = parseName(name); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
198 ImportNamedMainValue namedMainValue = |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
199 new ImportNamedMainValue(type, nat.getName()); |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
200 namedMainValues.add(namedMainValue); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
201 |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
202 ImportMainValue mainValue = new ImportMainValue( |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
203 gauge, |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
204 namedMainValue, |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
205 value, |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
206 nat.getTimeInterval()); |
1211
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 mainValues.add(mainValue); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
209 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
210 else { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
211 // TODO: treat as a comment |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
212 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
213 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
214 gauge.setMainValueTypes( |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
215 new ArrayList<ImportMainValueType>(types.values())); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
216 gauge.setNamedMainValues(namedMainValues); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
217 gauge.setMainValues(mainValues); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
218 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
219 finally { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
220 if (in != null) { |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 in.close(); |
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 log.info("finished parsing STA file: " + file); |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
225 return true; |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 } |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
227 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
228 protected NameAndTimeInterval parseName(String name) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
229 List<String> result = new ArrayList<String>(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
230 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
231 unbracket(name, 0, result); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
232 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
233 int length = result.size(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
234 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
235 if (length < 1) { // Should not happen. |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
236 return new NameAndTimeInterval(name); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
237 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
238 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
239 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
|
240 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
|
241 } |
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 if (length == 2) { // e.g. W(1994) or W(1994 - 1999) |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
244 String type = result.get(0).trim(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
245 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
246 ImportTimeInterval timeInterval = getTimeInterval( |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
247 result.get(1).trim()); |
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 (timeInterval == null) { // No date at all. |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
250 type = name; |
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 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
253 return new NameAndTimeInterval(type, timeInterval); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
254 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
255 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
256 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
|
257 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
258 String type = |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
259 result.get(0).trim() + "(" + |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
260 result.get(1).trim() + ")"; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
261 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
262 ImportTimeInterval timeInterval = getTimeInterval( |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
263 result.get(2).trim()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
264 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
265 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
|
266 type = name; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
267 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
268 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
269 return new NameAndTimeInterval(type, timeInterval); |
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 |
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
|
272 // 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
|
273 |
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
|
274 return new NameAndTimeInterval(name); |
5735
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 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
277 private static ImportTimeInterval getTimeInterval(String datePart) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
278 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
279 int minus = datePart.indexOf('-'); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
280 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
281 if (minus < 0) { // '-' not found |
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 Date date = null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
284 try { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
285 date = DateGuesser.guessDate(datePart); |
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 catch (IllegalArgumentException iae) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
288 log.warn("STA: Invalid date '" + datePart + "'"); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
289 return null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
290 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
291 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
292 return new ImportTimeInterval(date); |
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 // Found '-' so we have <from> - <to> |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
296 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
|
297 String endPart = datePart.substring(minus).trim(); |
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 Date startDate = null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
300 Date endDate = null; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
301 |
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 startDate = DateGuesser.guessDate(startPart); |
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 start date '" + startPart + "'"); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
307 } |
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 try { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
310 endDate = DateGuesser.guessDate(endPart); |
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 catch (IllegalArgumentException iae) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
313 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
|
314 } |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
315 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
316 if (startDate == null) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
317 log.warn("STA: Need start date."); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
318 return 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 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
321 return new ImportTimeInterval(startDate, endDate); |
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 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
324 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
|
325 StringBuilder sb = new StringBuilder(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
326 int length = s.length(); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
327 while (index < length) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
328 char c = s.charAt(index); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
329 switch (c) { |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
330 case '(': |
5738
54077c9c9305
Backend: Fix Stack overflow.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5737
diff
changeset
|
331 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
|
332 break; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
333 case ')': |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
334 result.add(0, sb.toString()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
335 return index+1; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
336 default: |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
337 sb.append(c); |
5737
ce002608992d
Backend: Forget to increment index.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5736
diff
changeset
|
338 ++index; |
5735
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
339 } |
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 result.add(0, sb.toString()); |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
342 |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
343 return index; |
c75be5205a69
Backend: Parse time intervals for main values.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5691
diff
changeset
|
344 } |
1211
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
345 } |
f08fe480092c
Moved file parsers to separate package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
346 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |