annotate flys-backend/src/main/java/de/intevation/flys/importer/PRFParser.java @ 1204:22858e7cca79

Integrated PRF parsing into importer. Needs testing! flys-backend/trunk@2309 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 07 Jul 2011 22:25:38 +0000
parents 7c88650ff548
children c7370734b872
rev   line source
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.importer;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import java.util.Map;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 import java.util.Stack;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import java.util.TreeMap;
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
6 import java.util.List;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
7 import java.util.ArrayList;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
8 import java.util.Collections;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 import java.util.regex.Pattern;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import java.util.regex.Matcher;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import java.io.File;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 import java.io.InputStreamReader;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import java.io.LineNumberReader;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import java.io.FileInputStream;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import java.io.IOException;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 import org.apache.log4j.Logger;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 public class PRFParser
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 private static Logger log = Logger.getLogger(PRFParser.class);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 public static final String ENCODING =
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 System.getProperty("flys.backend.prf.encoding", "ISO-8859-1");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public static final Pattern DATA_PATTERN =
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 Pattern.compile(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 "\\((\\d+)x\\s*,\\s*(\\d+)\\(" +
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 "\\s*f(\\d+)\\.(\\d+)\\s*,\\s*f(\\d+)\\.(\\d+)\\s*\\)?\\)?");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 public static final Pattern KM_PATTERN =
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 Pattern.compile("\\((\\d+)x\\s*,\\s*f(\\d+)\\.(\\d+)\\s*\\)?");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
36 public static final Pattern YEAR_PATTERN =
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
37 Pattern.compile("(\\d{4})");
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
38
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
39 public static final int MIN_YEAR = 1800;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
40 public static final int MAX_YEAR = 2100;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
41
1204
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
42 public interface Callback {
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
43 void prfParsed(PRFParser parser);
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
44 } // interface Parser
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
45
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 public static class DataFormat {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 protected int deleteChars;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 protected int maxRepetitions;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 protected int firstIntegerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 protected int firstFractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 protected int secondIntegerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 protected int secondFractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
55 protected double firstShift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
56 protected double secondShift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
57
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 public DataFormat() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 public DataFormat(Matcher m) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 deleteChars = Integer.parseInt(m.group(1));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 maxRepetitions = Integer.parseInt(m.group(2));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 firstIntegerPlaces = Integer.parseInt(m.group(3));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 firstFractionPlaces = Integer.parseInt(m.group(4));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 secondIntegerPlaces = Integer.parseInt(m.group(5));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 secondFractionPlaces = Integer.parseInt(m.group(6));
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
68
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
69 firstShift = Math.pow(10, firstFractionPlaces);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
70 secondShift = Math.pow(10, secondFractionPlaces);
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
73 public int extractData(String line, List<XY> kmData) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
74 int L = line.length();
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
75 if (L <= deleteChars) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
76 return -1;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
77 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
78
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
79 int pos = deleteChars;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
80
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
81 boolean debug = log.isDebugEnabled();
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
82
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
83
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
84 int rep = 0;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
85 for (;rep < maxRepetitions; ++rep) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
86 if (pos >= L || pos + firstIntegerPlaces >= L) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
87 break;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
88 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
89 String first = line.substring(
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
90 pos, pos + firstIntegerPlaces);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
91
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
92 String second = line.substring(
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
93 pos + firstIntegerPlaces,
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
94 Math.min(L, pos+firstIntegerPlaces+secondIntegerPlaces));
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
95
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
96 double x, y;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
97 try {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
98 x = Double.parseDouble(first);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
99 y = Double.parseDouble(second);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
100 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
101 catch (NumberFormatException nfe) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
102 // broken line -> substract from dataset skip
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
103 return -1;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
104 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
105
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
106 if (first.indexOf('.') < 0) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
107 x /= firstShift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
108 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
109
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
110 if (firstFractionPlaces > 0) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
111 x = (int)(x*firstShift)/firstShift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
112 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
113
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
114 if (second.indexOf('.') < 0) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
115 y /= secondShift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
116 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
117
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
118 if (secondFractionPlaces > 0) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
119 y = (int)(y*secondShift)/secondShift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
120 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
121
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
122 kmData.add(new XY(x, y, kmData.size()));
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
123
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
124 pos += firstIntegerPlaces + secondIntegerPlaces;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
125 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
126
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
127 return rep == maxRepetitions ? 1 : 0;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 } // class DataFormat
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 public static class KMFormat {
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
132
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 protected int deleteChars;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 protected int integerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 protected int fractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
137 protected double shift;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
138
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 public KMFormat() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 public KMFormat(Matcher m) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 deleteChars = Integer.parseInt(m.group(1));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 integerPlaces = Integer.parseInt(m.group(2));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 fractionPlaces = Integer.parseInt(m.group(3));
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
146
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
147 shift = Math.pow(10, fractionPlaces);
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
150 public double extractKm(String line) throws NumberFormatException {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
151
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
152 if (line.length() <= deleteChars) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
153 throw new NumberFormatException("line too short");
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
154 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
155
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
156 String kmS =
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
157 line.substring(deleteChars, deleteChars+integerPlaces);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
158
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
159 double km = Double.parseDouble(kmS.trim());
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
160
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
161 if (kmS.indexOf('.') < 0) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
162 km /= shift;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
163 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
164
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
165 return fractionPlaces > 0
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
166 ? ((int)(km*shift))/shift
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
167 : km;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
168 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
169 } // class KMFormat
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
171 protected Map<Double, List<XY>> data;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
173 protected Integer year;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
174
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
175 protected String description;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
176
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
177
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178 public PRFParser() {
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
179 data = new TreeMap<Double, List<XY>>();
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
182 public Integer getYear() {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
183 return year;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
184 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
185
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
186 public void setYear(Integer year) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
187 this.year = year;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
188 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
189
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
190 public String getDescription() {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
191 return description;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
192 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
193
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
194 public void setDescription(String description) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
195 this.description = description;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
196 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
197
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
198 public Map<Double, List<XY>> getData() {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
199 return data;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
200 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
201
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
202 public void setData(Map<Double, List<XY>> data) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
203 this.data = data;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
204 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
205
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
206 protected void sortLists() {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
207 for (List<XY> xy: data.values()) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
208 Collections.sort(xy);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
209 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
210 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
212 public static final Integer findYear(String s) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
213 Matcher m = YEAR_PATTERN.matcher(s);
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
214 while (m.find()) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
215 int year = Integer.parseInt(m.group(1));
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
216 if (year >= MIN_YEAR && year <= MAX_YEAR) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
217 return Integer.valueOf(year);
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
218 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
219 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
220 return null;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
221 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
222
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
223 public boolean parse(File file) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
225 if (!(file.isFile() && file.canRead())) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
226 log.warn("cannot open file '" + file + "'");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 log.info("parsing PRF file: '" + file + "'");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
232 description = file.getName();
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
233
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
234 year = findYear(file.getName());
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
235
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
236 if (year == null) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
237 File parent = file.getParentFile();
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
238 if (parent != null) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
239 description = parent.getName() + "/" + description;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
240 year = findYear(parent.getName());
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
241 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
242 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
243
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
244 if (year != null) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
245 log.info("year of sounding: " + year);
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
246 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
247
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248 LineNumberReader in = null;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 in =
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252 new LineNumberReader(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 new InputStreamReader(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 new FileInputStream(file), ENCODING));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 String line = in.readLine();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
257
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
258 if (line == null || (line = line.trim()).length() == 0) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
259 log.warn("file is empty.");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
260 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
262
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
263 Matcher m = DATA_PATTERN.matcher(line);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
264
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
265 if (!m.matches()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
266 log.warn("First line does not look like a PRF data pattern.");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
267 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
268 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
269
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
270 DataFormat dataFormat = new DataFormat(m);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
271
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
272 if ((line = in.readLine()) == null
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
273 || (line = line.trim()).length() == 0) {
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
274 log.warn("premature EOF. Expected integer in line 2");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
278 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
279 if (Integer.parseInt(line) != dataFormat.maxRepetitions) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280 log.warn("Expected " +
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 dataFormat.maxRepetitions + " in line 2");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
283 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
284 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
285 catch (NumberFormatException nfe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
286 log.warn("invalid integer in line 2", nfe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
287 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
288 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 if ((line = in.readLine()) == null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291 log.warn(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
292 "premature EOF. Expected pattern for km extraction");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
293 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
295
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
296 m = KM_PATTERN.matcher(line);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
297
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
298 if (!m.matches()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
299 log.warn(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
300 "line 4 does not look like a PRF km extraction pattern.");
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
301 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
304 KMFormat kmFormat = new KMFormat(m);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
305
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
306 if ((line = in.readLine()) == null
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
307 || (line = line.trim()).length() == 0) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
308 log.warn("premature EOF. Expected skip row count.");
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
309 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
310 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
311
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
312 int lineSkipCount;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
313 try {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
314 if ((lineSkipCount = Integer.parseInt(line)) < 0) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
315 throw new IllegalArgumentException(lineSkipCount + " < 0");
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
316 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
317 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
318 catch (NumberFormatException nfe) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
319 log.warn(
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
320 "line 5 is not an positive integer.");
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
321 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
322 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
323
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
324 int skip = lineSkipCount;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
325
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
326 while ((line = in.readLine()) != null) {
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
327 if (skip > 0) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
328 --skip;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329 continue;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 }
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
331 double km;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
332 try {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
333 km = kmFormat.extractKm(line);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
334 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
335 catch (NumberFormatException iae) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
336 log.warn("cannot extract km in line + " + in.getLineNumber());
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
337 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
338 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
339
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
340 Double station = Double.valueOf(km);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
341
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
342 List<XY> kmData = data.get(station);
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
343
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
344 if (kmData == null) {
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
345 //log.debug("found new km: " + station);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
346 kmData = new ArrayList<XY>();
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
347 data.put(station, kmData);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
348 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
349
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
350 int c = dataFormat.extractData(line, kmData);
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
351 if (c < 1) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
352 skip = lineSkipCount + c;
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
353 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
354 }
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
355
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
356 // sort all the lists by x and index
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
357 sortLists();
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
358 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
359 catch (IOException ioe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
360 log.error(ioe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
361 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
362 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
363 finally {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
364 if (in != null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
365 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
366 in.close();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
367 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
368 catch (IOException ioe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
369 log.error(ioe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
370 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
371 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
372 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
373
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
374 return true;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
375 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
376
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
377 public void reset() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
378 data.clear();
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
379 year = null;
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
380 description = null;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
381 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
382
1204
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
383 public void parsePRFs(File root, Callback callback) {
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
384
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
385 Stack<File> stack = new Stack<File>();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
386 stack.push(root);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
387
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
388 while (!stack.empty()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
389 File file = stack.pop();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
390 if (file.isDirectory()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
391 File [] files = file.listFiles();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
392 if (files != null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
393 for (File f: files) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
394 stack.push(f);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
395 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
396 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
397 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
398 else if (file.isFile()
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
399 && file.getName().toLowerCase().endsWith(".prf")
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
400 ) {
1204
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
401 reset();
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
402 boolean success = parse(file);
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
403 log.info("parsing " + (success ? "succeeded" : "failed"));
1200
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
404 if (success && callback != null) {
1204
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
405 callback.prfParsed(this);
1200
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
406 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
407 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
408 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
409 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
410
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
411 public static void main(String [] args) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
412
1204
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
413 PRFParser parser = new PRFParser();
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
414
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
415 for (String arg: args) {
1204
22858e7cca79 Integrated PRF parsing into importer. Needs testing!
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1200
diff changeset
416 parser.parsePRFs(new File(arg), null);
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
417 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
418 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
419 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
420 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org