annotate flys-backend/src/main/java/de/intevation/flys/importer/PRFParser.java @ 1200:7c88650ff548

PRFParser: Added a callback to be called from parsePRFs() if a PRF was parsed successfully. flys-backend/trunk@2304 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 07 Jul 2011 14:51:08 +0000
parents cc8f770796cb
children 22858e7cca79
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
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
42 public static final double X_EPSILON = 1e-4;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
43
1200
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
44 public interface PRFCallback {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
45 void found(PRFParser parser);
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
46 } // interface PRFParser
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
47
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
48 public static final class XY
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
49 implements Comparable<XY>
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
50 {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
51 protected double x;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
52 protected double y;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
53 protected int index;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
54
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
55 public XY() {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
56 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
57
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
58 public XY(double x, double y, int index) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
59 this.x = x;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
60 this.y = y;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
61 this.index = index;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
62 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
63
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
64 @Override
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
65 public int compareTo(XY other) {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
66 if (x + X_EPSILON < other.x) 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
67 if (x > other.x + X_EPSILON) 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
68 if (index < other.index) 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
69 if (index > other.index) 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
70 return 0;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
71 }
1200
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
72
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
73 public double getX() {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
74 return x;
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
75 }
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
76
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
77 public void setX(double x) {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
78 this.x = x;
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
79 }
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
80
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
81 public double getY() {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
82 return y;
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
83 }
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
84
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
85 public void setY(double y) {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
86 this.y = y;
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
87 }
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
88
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
89 public int getIndex() {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
90 return index;
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
91 }
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
92
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
93 public void setIndex(int index) {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
94 this.index = index;
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
95 }
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
96 } // class XY
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
97
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 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
99
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 protected int deleteChars;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 protected int maxRepetitions;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 protected int firstIntegerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 protected int firstFractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104 protected int secondIntegerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 protected int secondFractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
107 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
108 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
109
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 public DataFormat() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 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
114 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
115 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
116 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
117 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
118 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
119 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
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 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
122 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
123 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
125 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
126 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
127 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
128 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
129 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
130
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
131 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
132
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
133 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
134
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
135
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
136 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
137 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
138 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
139 break;
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
140 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
141 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
142 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
143
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
144 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
145 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
146 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
147
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
148 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
149 try {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
150 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
151 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
152 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
153 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
154 // 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
155 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
156 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
157
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
158 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
159 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
160 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
161
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
162 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
163 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
164 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
165
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
166 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
167 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
168 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
169
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
170 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
171 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
172 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
173
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
174 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
175
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
176 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
177 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
178
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
179 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
180 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
181 } // class DataFormat
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
183 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
184
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185 protected int deleteChars;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
186 protected int integerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
187 protected int fractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
188
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
189 protected double shift;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
190
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191 public KMFormat() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
192 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
193
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194 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
195 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
196 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
197 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
198
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
199 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
200 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
202 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
203
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
204 if (line.length() <= deleteChars) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
205 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
206 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
207
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
208 String kmS =
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
209 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
210
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
211 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
212
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
213 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
214 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
215 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
216
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
217 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
218 ? ((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
219 : km;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
221 } // class KMFormat
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
222
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
223 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
224
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
225 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
226
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
227 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
228
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
229
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 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
231 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
232 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
234 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
235 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
236 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
237
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
238 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
239 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
240 }
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 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
243 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
244 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
245
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
246 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
247 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
248 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
249
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
250 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
251 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
252 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
253
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
254 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
255 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
256 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
257
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
258 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
259 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
260 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
261 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
262 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
263
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
264 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
265 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
266 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
267 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
268 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
269 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
270 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
271 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
272 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
273 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
274
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275 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
276
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277 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
278 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
279 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 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
283
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
284 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
285
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
286 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
287
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
288 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
289 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
290 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
291 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
292 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
293 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
294 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
295
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
296 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
297 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
298 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
299
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
300 LineNumberReader in = null;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
301
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
302 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
303 in =
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
304 new LineNumberReader(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
305 new InputStreamReader(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
306 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
307
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
308 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
309
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
310 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
311 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
312 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
313 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
314
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
315 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
316
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
317 if (!m.matches()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 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
319 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
321
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
322 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
323
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
324 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
325 || (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
326 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
327 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
328 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
329
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
330 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
331 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
332 log.warn("Expected " +
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
333 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
334 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
335 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
336 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
337 catch (NumberFormatException nfe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
338 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
339 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
340 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
341
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
342 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
343 log.warn(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
344 "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
345 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
346 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
347
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
348 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
349
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
350 if (!m.matches()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
351 log.warn(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
352 "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
353 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
354 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
355
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
356 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
357
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
358 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
359 || (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
360 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
361 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
362 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
363
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
364 int lineSkipCount;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
365 try {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
366 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
367 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
368 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
369 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
370 catch (NumberFormatException nfe) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
371 log.warn(
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
372 "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
373 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
374 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
375
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
376 int skip = lineSkipCount;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
377
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
378 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
379 if (skip > 0) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
380 --skip;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
381 continue;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
382 }
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
383 double km;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
384 try {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
385 km = kmFormat.extractKm(line);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
386 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
387 catch (NumberFormatException iae) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
388 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
389 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
390 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
391
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
392 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
393
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
394 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
395
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
396 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
397 //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
398 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
399 data.put(station, kmData);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
400 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
401
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
402 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
403 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
404 skip = lineSkipCount + c;
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
405 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
406 }
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
407
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
408 // 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
409 sortLists();
1196
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 catch (IOException ioe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
412 log.error(ioe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
413 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
414 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
415 finally {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
416 if (in != null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
417 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
418 in.close();
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 catch (IOException ioe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
421 log.error(ioe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
422 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
423 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
424 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
425
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
426 return true;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
427 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
428
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
429 public void reset() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430 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
431 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
432 description = null;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
433 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
434
1200
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
435 public static void parsePRFs(File root, PRFCallback callback) {
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
436
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
437 PRFParser parser = new PRFParser();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
438
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
439 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
440 stack.push(root);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
441
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
442 while (!stack.empty()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
443 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
444 if (file.isDirectory()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
445 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
446 if (files != null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
447 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
448 stack.push(f);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
449 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
450 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
451 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
452 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
453 && 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
454 ) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
455 parser.reset();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
456 boolean success = parser.parse(file);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
457 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
458 if (success && callback != null) {
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
459 callback.found(parser);
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
460 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
461 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
462 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
463 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
464
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
465 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
466
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
467 for (String arg: args) {
1200
7c88650ff548 PRFParser: Added a callback to be called from parsePRFs() if
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1199
diff changeset
468 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
469 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
470 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
471 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
472 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org