annotate flys-backend/src/main/java/de/intevation/flys/importer/PRFParser.java @ 1208:2b57edd94735

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

http://dive4elements.wald.intevation.org