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 :

http://dive4elements.wald.intevation.org