Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/importer/parsers/DA50Parser.java @ 4730:1aca30035932
Initial empty version of DA50Parser.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Fri, 28 Dec 2012 13:34:04 +0100 |
parents | |
children | e2e615109a2e |
comparison
equal
deleted
inserted
replaced
4729:0df1cac6c4b5 | 4730:1aca30035932 |
---|---|
1 package de.intevation.flys.importer.parsers; | |
2 | |
3 import java.util.ArrayList; | |
4 import java.util.HashMap; | |
5 import java.util.Map; | |
6 import java.util.List; | |
7 import java.util.TreeMap; | |
8 | |
9 import java.util.regex.Pattern; | |
10 import java.util.regex.Matcher; | |
11 | |
12 import java.io.File; | |
13 import java.io.IOException; | |
14 | |
15 import org.apache.log4j.Logger; | |
16 | |
17 import de.intevation.flys.importer.XY; | |
18 | |
19 import de.intevation.artifacts.common.utils.FileTools; | |
20 | |
21 | |
22 /** | |
23 * To create cross-sections, generate: Map<double,list<xy>> from files | |
24 * in da66 format. | |
25 */ | |
26 public class DA50Parser extends LineParser implements CrossSectionParser | |
27 { | |
28 /** Private logger. */ | |
29 private static Logger logger = Logger.getLogger(DA50Parser.class); | |
30 | |
31 /** The current line to which add points. */ | |
32 private List<XY> currentLine; | |
33 | |
34 /** Data collected so far, last element will be currentLine. */ | |
35 protected Map<Double, List<XY>> data; | |
36 | |
37 | |
38 /** Trivial constructor. */ | |
39 public DA50Parser() { | |
40 data = new TreeMap<Double, List<XY>>(); | |
41 } | |
42 | |
43 | |
44 /** Get the description of the cross section parsed. */ | |
45 @Override | |
46 public String getDescription() { | |
47 return FileTools.removeExtension(getFileName()); | |
48 } | |
49 | |
50 | |
51 /** Get the year of this cross sections measurement. */ | |
52 @Override | |
53 public Integer getYear() { | |
54 return null; | |
55 } | |
56 | |
57 | |
58 /** | |
59 * Return the data parsed. | |
60 * @return map of stations (km) to list of points. | |
61 */ | |
62 @Override | |
63 public Map<Double, List<XY>> getData() { | |
64 return data; | |
65 } | |
66 | |
67 | |
68 public void parseDA50s(File root, final Callback callback) { | |
69 | |
70 // TODO use the removeExtension/guess description and date. | |
71 FileTools.walkTree(root, new FileTools.FileVisitor() { | |
72 @Override | |
73 public boolean visit(File file) { | |
74 if (file.isFile() && file.canRead() | |
75 && file.getName().toLowerCase().endsWith(".w80") | |
76 && (callback == null || callback.accept(file))) { | |
77 reset(); | |
78 try { | |
79 parse(file); | |
80 logger.info("parsing done"); | |
81 if (callback != null) { | |
82 callback.parsed(DA50Parser.this); | |
83 } | |
84 } | |
85 catch (IOException ioe) { | |
86 logger.error("IOException while parsing file"); | |
87 return false; | |
88 } | |
89 } | |
90 return true; | |
91 } | |
92 }); | |
93 } | |
94 | |
95 | |
96 /** Called before consuming first line of file. */ | |
97 public void reset() { | |
98 data.clear(); | |
99 currentLine = new ArrayList<XY>(); | |
100 } | |
101 | |
102 | |
103 /** | |
104 * Called for each line. Try to extract info from a da66 line. | |
105 */ | |
106 @Override | |
107 protected void handleLine(int lineNum, String line) { | |
108 String pointId = line.substring(0,2); | |
109 String streetId = line.substring(2,9); | |
110 String station = line.substring(9,18); | |
111 String free = line.substring(18,20); | |
112 String gkLRight = line.substring(20,30); | |
113 String gkLHigh = line.substring(30,40); | |
114 String gkRRight = line.substring(40,50); | |
115 String gkRHigh = line.substring(50,60); | |
116 String distance = line.substring(60,70); | |
117 } | |
118 | |
119 | |
120 /** Called when file is fully consumed. */ | |
121 @Override | |
122 protected void finish() { | |
123 logger.info("Parsed " + data.size() + " lines"); | |
124 } | |
125 | |
126 | |
127 /** Parses files given as arguments. */ | |
128 public static void main(String [] args) { | |
129 | |
130 DA50Parser parser = new DA50Parser(); | |
131 | |
132 logger.warn("Start parsing files."); | |
133 for (String arg: args) { | |
134 parser.parseDA50s(new File(arg), null); | |
135 logger.warn("Parsing a file."); | |
136 } | |
137 logger.error("Finished parsing files."); | |
138 } | |
139 } | |
140 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |