annotate flys-backend/src/main/java/de/intevation/flys/importer/parsers/DA66Parser.java @ 4681:aa718770308e

Less than sceleton for DA66-CrossSection parser added.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Fri, 14 Dec 2012 10:49:58 +0100
parents
children 70842db72ee4
rev   line source
4681
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.importer.parsers;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
2
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
3 import java.util.ArrayList;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
4 import java.util.HashMap;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
5 import java.util.Map;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
6 import java.util.List;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
7 import java.util.TreeMap;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
8
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
9 import java.util.regex.Pattern;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
10 import java.util.regex.Matcher;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
11
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
12 import java.io.File;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
13 import java.io.IOException;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
14
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
15 import org.apache.log4j.Logger;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
16
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
17 import de.intevation.flys.importer.XY;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
18
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
19 import de.intevation.artifacts.common.utils.FileTools;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
20
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
21
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
22 /**
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
23 * To create cross-sections, generate: Map<double,list<xy>> from files
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
24 * in da66 format.
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
25 */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
26 public class DA66Parser extends LineParser
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
27 {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
28 /** Private logger. */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
29 private static Logger logger = Logger.getLogger(DA66Parser.class);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
30
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
31 // TODO: Most of the Point/y/z group matches are optional!
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
32 public static final Pattern LINE_PATTERN =
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
33 Pattern.compile("^([0-9 -]{2})" + // Type
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
34 "([0-9 -]{5})" + // unset
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
35 "([0-9 -]{2})" + // id
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
36 "([0-9 -]{9})" + // station
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
37 "([0-9 -]{2})" + // running number
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
38 "([0-9 -]{1})" + // point id
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
39 /*
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
40 Would be great if we could express the pattern as this:
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
41 ([0-9 -]{1})([0-9 -JKMLMNOPQR]{7})([0-9 -]{7})+
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
42 */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
43 "([0-9 -JKMLMNOPQR]{7})" + // y
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
44 "([0-9 -]{7})" + // z
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
45 "([0-9 -]{1})" + // point id
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
46 "([0-9 -JKMLMNOPQR]{7})" + // y
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
47 "([0-9 -]{7})" + // z
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
48 "([0-9 -]{1})" + // point id
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
49 "([0-9 -JKMLMNOPQR]{7})" + // y
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
50 "([0-9 -]{7})" + // z
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
51 "([0-9 -]{1})" + // point id
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
52 "([0-9 -JKMLMNOPQR]{7})" + // y
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
53 "([0-9 -]{7})" // z
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
54 );
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
55 //Pattern.compile("^([0-9 -]{2})");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
56
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
57 private static enum Type {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
58 DATE ( 0),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
59 HEKTOSTONE_LEFT ( 1), //grm. "Standlinie"
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
60 HEKTOSTONE_RIGHT ( 2),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
61 CHANNEL_LEFT ( 3), //grm. "Fahrrinne"
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
62 CHANNEL_RIGHT ( 4),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
63 CHANNEL_2_LEFT ( 5),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
64 CHANNEL_2_RIGHT ( 6),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
65 GIW_1972 ( 7),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
66 GROIN_DIST_LEFT ( 8), //grm. "Buhnenkopfabstand links"
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
67 GROIN_HEIGHT_LEFT ( 9),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
68 GROIN_SLOPE_LEFT (10),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
69 GROIN_DIST_RIGHT (11),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
70 GROIN_HEIGHT_RIGHT (12),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
71 GROIN_SLOPE_RIGHT (13),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
72 STRIKE_LEFT (14), //grm. "Streichlinie links"
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
73 AXIS (15),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
74 STRIKE_RIGHT (16),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
75 GROIN_BACK_SLOPE_LEFT (17), //grm. "Buhnenrueckenneigung"
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
76 GROIN_BACK_SLOPE_RIGHT (18),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
77 GIW_1932 (19),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
78 GIW_1982 (20),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
79 STAND_ISLAND_1 (21),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
80 STAND_ISLAND_2 (22),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
81 STAND_ISLAND_3 (23),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
82 STAND_ISLAND_4 (24),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
83 UNSPECIFIED_1 (25),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
84 UNSPECIFIED_2 (26),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
85 HHW (27),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
86 OLD_PROFILE_NULL (28),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
87 AW_1978 (29),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
88 SIGN_LEFT (30),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
89 SIGN_RIGHT (31),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
90 DIST_SIGNAL_CHANNEL_LEFT (32),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
91 DIST_SIGNAL_CHANNEL_RIGHT(33),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
92 UNSPECIFIED_3 (34),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
93 UNSPECIFIED_4 (35),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
94 UNSPECIFIED_5 (36),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
95 UNSPECIFIED_6 (37),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
96 SHORE_LEFT (38),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
97 SHORE_RIGHT (39),
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
98 UNSPECIFIED_7 (40);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
99
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
100 private final int id;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
101 Type(int id) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
102 this.id = id;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
103 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
104 public int getId() {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
105 return id;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
106 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
107 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
108
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
109 /** Available types. */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
110 private static HashMap<Integer, Type> typeMap;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
111
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
112 /** Types we can deal with. */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
113 private static List<Type> implementedTypes;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
114
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
115 static {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
116 typeMap = new HashMap<Integer, Type>();
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
117 for (Type t: Type.values()) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
118 typeMap.put(new Integer(t.getId()), t);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
119 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
120 implementedTypes = new ArrayList<Type>();
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
121 //implementedTypes.add(..);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
122 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
123
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
124 public interface Callback {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
125 boolean da60Accept(File file);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
126 void da60Parsed(DA66Parser parser);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
127 } // interface Parser
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
128
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
129 protected Map<Double, List<XY>> data;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
130
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
131
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
132 public DA66Parser() {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
133 data = new TreeMap<Double, List<XY>>();
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
134 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
135
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
136 public Map<Double, List<XY>> getData() {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
137 return data;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
138 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
139
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
140 public void setData(Map<Double, List<XY>> data) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
141 this.data = data;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
142 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
143
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
144 private static final String removeExtension(String name) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
145 int index = name.lastIndexOf('.');
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
146 return index == -1
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
147 ? name
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
148 : name.substring(0, index);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
149 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
150
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
151 public void reset() {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
152 data.clear();
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
153 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
154
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
155 public void parseDA66s(File root, final Callback callback) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
156
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
157 FileTools.walkTree(root, new FileTools.FileVisitor() {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
158 @Override
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
159 public boolean visit(File file) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
160 if (file.isFile() && file.canRead()
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
161 && file.getName().toLowerCase().endsWith(".d66")
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
162 && (callback == null || callback.da60Accept(file))) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
163 reset();
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
164 try {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
165 parse(file);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
166 logger.info("parsing done");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
167 if (callback != null) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
168 callback.da60Parsed(DA66Parser.this);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
169 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
170 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
171 catch (IOException ioe) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
172 logger.error("IOException while parsing file");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
173 return false;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
174 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
175 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
176 return true;
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
177 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
178 });
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
179 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
180
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
181 // LineParser
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
182 @Override
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
183 protected void finish() {}
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
184
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
185 /** Called for each line. Try to extract info from a da66 line. */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
186 @Override
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
187 protected void handleLine(int lineNum, String line) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
188 if (line.substring(0,2).equals("00")) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
189 logger.warn("Hit a 00");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
190 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
191 else if (line.substring(0,2).equals("66")) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
192 String station = line.substring(10,18);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
193 logger.info(station);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
194 Matcher m = LINE_PATTERN.matcher(line);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
195 if(m.find())
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
196 logger.warn("Group1: " + m.group(1));
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
197 else
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
198 logger.warn("no match in " + line);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
199 //logger.warn("Hit a 66");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
200 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
201 else if (line.substring(0,2).equals("88"))
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
202 logger.warn("Hit a 88");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
203 else
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
204 logger.error("Do not know how to treat da66 line.");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
205 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
206
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
207
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
208 /** Parses files given as arguments. */
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
209 public static void main(String [] args) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
210
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
211 DA66Parser parser = new DA66Parser();
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
212
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
213 logger.warn("Start Parsing files.");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
214 for (String arg: args) {
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
215 parser.parseDA66s(new File(arg), null);
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
216 logger.warn("Parsing a file.");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
217 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
218 logger.error("Stopped Parsing files.");
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
219 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
220 }
aa718770308e Less than sceleton for DA66-CrossSection parser added.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
221 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org