annotate flys-backend/src/main/java/de/intevation/flys/importer/PRFParser.java @ 1199:cc8f770796cb

PRFParser: Extract the year of sounding and description from file names. flys-backend/trunk@2302 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 07 Jul 2011 14:41:52 +0000
parents 661a9304f2f5
children 7c88650ff548
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
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
44 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
45 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
46 {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
47 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
48 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
49 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
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 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
52 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
53
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
54 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
55 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
56 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
57 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
58 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
59
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
60 @Override
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
61 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
62 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
63 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
64 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
65 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
66 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
67 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
68 } // 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
69
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 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
71
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 protected int deleteChars;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 protected int maxRepetitions;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 protected int firstIntegerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 protected int firstFractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 protected int secondIntegerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 protected int secondFractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
79 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
80 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
81
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 public DataFormat() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 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
86 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
87 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
88 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
89 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
90 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
91 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
92
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
93 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
94 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
95 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
97 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
98 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
99 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
100 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
101 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
102
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
103 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
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 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
106
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
107
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
108 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
109 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
110 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
111 break;
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 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
114 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
115
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
116 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
117 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
118 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
119
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
120 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
121 try {
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
122 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
123 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
124 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
125 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
126 // 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
127 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
128 }
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 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
131 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
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
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
134 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
135 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
136 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
137
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 (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
139 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
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
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
142 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
143 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
144 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
145
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
146 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
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 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
149 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
150
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
151 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
152 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153 } // class DataFormat
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 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
156
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157 protected int deleteChars;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 protected int integerPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 protected int fractionPlaces;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
161 protected double shift;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
162
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 public KMFormat() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166 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
167 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
168 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
169 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
170
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
171 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
172 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
174 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
175
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
176 if (line.length() <= deleteChars) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
177 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
178 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
179
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
180 String kmS =
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
181 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
182
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
183 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
184
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
185 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
186 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
187 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
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 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
190 ? ((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
191 : km;
1196
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 } // class KMFormat
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
194
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
195 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
196
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
197 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
198
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
199 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
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
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 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
203 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
204 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
206 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
207 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
208 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
209
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
210 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
211 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
212 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
213
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
214 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
215 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
216 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
217
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
218 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
219 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
220 }
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 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
223 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
224 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
225
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
226 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
227 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
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
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
230 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
231 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
232 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
233 }
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
234 }
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
235
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
236 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
237 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
238 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
239 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
240 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
241 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
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 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
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
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
247 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
248
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249 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
250 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
251 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 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
255
1199
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
256 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
257
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
258 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
259
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
260 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
261 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
262 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
263 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
264 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
265 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
266 }
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
267
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 != null) {
cc8f770796cb PRFParser: Extract the year of sounding and description from file names.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1198
diff changeset
269 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
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
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
272 LineNumberReader in = null;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
273
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
274 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
275 in =
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 new LineNumberReader(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
277 new InputStreamReader(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
278 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
279
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
280 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
281
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 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
283 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
284 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
285 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
286
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
287 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
288
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
289 if (!m.matches()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
290 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
291 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
292 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
293
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
294 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
295
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
296 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
297 || (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
298 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
299 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
300 }
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 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
304 log.warn("Expected " +
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
305 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
306 return false;
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 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
309 catch (NumberFormatException nfe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
310 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
311 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
312 }
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 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
315 log.warn(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
316 "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
317 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
318 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
319
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
320 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
321
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
322 if (!m.matches()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
323 log.warn(
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
324 "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
325 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
326 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
327
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
328 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
329
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
330 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
331 || (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
332 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
333 return false;
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
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
336 int lineSkipCount;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
337 try {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
338 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
339 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
340 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
341 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
342 catch (NumberFormatException nfe) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
343 log.warn(
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
344 "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
345 return false;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
346 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
347
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
348 int skip = lineSkipCount;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
349
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
350 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
351 if (skip > 0) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
352 --skip;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
353 continue;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
354 }
1197
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
355 double km;
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
356 try {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
357 km = kmFormat.extractKm(line);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
358 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
359 catch (NumberFormatException iae) {
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
360 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
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 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
365
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
366 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
367
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
368 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
369 //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
370 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
371 data.put(station, kmData);
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
372 }
ce3dacc6ea92 PRFParser: extract km from lines. TODO: extract data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1196
diff changeset
373
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
374 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
375 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
376 skip = lineSkipCount + c;
1197
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 }
1198
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
379
661a9304f2f5 PRFParser: Extracted the data. All BfG PRFs are parsed correctly, now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1197
diff changeset
380 // 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
381 sortLists();
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
382 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
383 catch (IOException ioe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
384 log.error(ioe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
385 return false;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
386 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
387 finally {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
388 if (in != null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
389 try {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
390 in.close();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
391 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
392 catch (IOException ioe) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
393 log.error(ioe);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
394 }
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 return true;
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
399 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
400
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
401 public void reset() {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
402 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
403 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
404 description = null;
1196
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
405 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
406
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
407 public static void parsePRFs(File root) {
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 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
410
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
411 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
412 stack.push(root);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
413
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
414 while (!stack.empty()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
415 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
416 if (file.isDirectory()) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
417 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
418 if (files != null) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
419 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
420 stack.push(f);
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
421 }
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 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
425 && 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
426 ) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
427 parser.reset();
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
428 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
429 log.info("parsing " + (success ? "succeeded" : "failed"));
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
430 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
431 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
432 }
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 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
435
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
436 for (String arg: args) {
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
437 parsePRFs(new File(arg));
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 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
440 }
46127af605ba Added parser for PRF files. TODO: Extract data and km.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
441 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org