Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/importer/ImportGauge.java @ 5838:5aa05a7a34b7
Rename modules to more fitting names.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 15:23:37 +0200 |
parents | flys-backend/src/main/java/org/dive4elements/river/importer/ImportGauge.java@18619c1e7c2a |
children | 4dd33b86dc61 |
comparison
equal
deleted
inserted
replaced
5837:d9901a08d0a6 | 5838:5aa05a7a34b7 |
---|---|
1 package org.dive4elements.river.importer; | |
2 | |
3 import java.io.File; | |
4 | |
5 import java.util.ArrayList; | |
6 import java.util.List; | |
7 | |
8 import java.math.BigDecimal; | |
9 | |
10 import org.dive4elements.artifacts.common.utils.FileTools; | |
11 | |
12 import org.dive4elements.river.model.River; | |
13 import org.dive4elements.river.model.Gauge; | |
14 | |
15 import org.hibernate.Session; | |
16 import org.hibernate.Query; | |
17 | |
18 import java.io.IOException; | |
19 | |
20 import org.apache.log4j.Logger; | |
21 | |
22 import org.dive4elements.river.importer.parsers.AtFileParser; | |
23 import org.dive4elements.river.importer.parsers.StaFileParser; | |
24 | |
25 /** Gauge not in DB. */ | |
26 public class ImportGauge | |
27 { | |
28 private static Logger log = Logger.getLogger(ImportGauge.class); | |
29 | |
30 public static final String HISTORICAL_DISCHARGE_TABLES = | |
31 "Histor.Abflusstafeln"; | |
32 | |
33 protected ImportRange range; | |
34 | |
35 protected File staFile; | |
36 protected File atFile; | |
37 | |
38 protected String name; | |
39 protected BigDecimal aeo; | |
40 protected BigDecimal datum; | |
41 protected BigDecimal station; | |
42 protected Long officialNumber; | |
43 | |
44 protected Gauge peer; | |
45 | |
46 protected ImportDischargeTable dischargeTable; | |
47 | |
48 protected List<ImportMainValueType> mainValueTypes; | |
49 protected List<ImportNamedMainValue> namedMainValues; | |
50 protected List<ImportMainValue> mainValues; | |
51 protected List<ImportDischargeTable> historicalDischargeTables; | |
52 | |
53 public ImportGauge() { | |
54 historicalDischargeTables = new ArrayList<ImportDischargeTable>(); | |
55 } | |
56 | |
57 public ImportGauge(ImportRange range, File staFile, File atFile) { | |
58 this(); | |
59 this.range = range; | |
60 this.staFile = staFile; | |
61 this.atFile = atFile; | |
62 } | |
63 | |
64 public void setRange(ImportRange range) { | |
65 this.range = range; | |
66 } | |
67 | |
68 public void setStaFile(File staFile) { | |
69 this.staFile = staFile; | |
70 } | |
71 | |
72 public File getStaFile() { | |
73 return staFile; | |
74 } | |
75 | |
76 public void setAtFile(File atFile) { | |
77 this.atFile = atFile; | |
78 } | |
79 | |
80 public File getAtFile() { | |
81 return atFile; | |
82 } | |
83 | |
84 public BigDecimal getAeo() { | |
85 return aeo; | |
86 } | |
87 | |
88 public void setAeo(BigDecimal aeo) { | |
89 this.aeo = aeo; | |
90 } | |
91 | |
92 public String getName() { | |
93 return name; | |
94 } | |
95 | |
96 public void setName(String name) { | |
97 this.name = name; | |
98 } | |
99 | |
100 public BigDecimal getDatum() { | |
101 return datum; | |
102 } | |
103 | |
104 public void setDatum(BigDecimal datum) { | |
105 this.datum = datum; | |
106 } | |
107 | |
108 public BigDecimal getStation() { | |
109 return station; | |
110 } | |
111 | |
112 public void setStation(BigDecimal station) { | |
113 this.station = station; | |
114 } | |
115 | |
116 public Long getOfficialNumber() { | |
117 return officialNumber; | |
118 } | |
119 | |
120 public void setOfficialNumber(Long officialNumber) { | |
121 this.officialNumber = officialNumber; | |
122 } | |
123 | |
124 public ImportDischargeTable getDischargeTable() { | |
125 return dischargeTable; | |
126 } | |
127 | |
128 public void setDischargeTable(ImportDischargeTable dischargeTable) { | |
129 this.dischargeTable = dischargeTable; | |
130 } | |
131 | |
132 public List<ImportMainValueType> getMainValueTypes() { | |
133 return mainValueTypes; | |
134 } | |
135 | |
136 public void setMainValueTypes(List<ImportMainValueType> mainValueTypes) { | |
137 this.mainValueTypes = mainValueTypes; | |
138 } | |
139 | |
140 public List<ImportNamedMainValue> getNamedMainValues() { | |
141 return namedMainValues; | |
142 } | |
143 | |
144 public void setNamedMainValues(List<ImportNamedMainValue> namedMainValues) { | |
145 this.namedMainValues = namedMainValues; | |
146 } | |
147 | |
148 public List<ImportMainValue> getMainValues() { | |
149 return mainValues; | |
150 } | |
151 | |
152 public void setMainValues(List<ImportMainValue> mainValues) { | |
153 this.mainValues = mainValues; | |
154 } | |
155 | |
156 public void parseDependencies() throws IOException { | |
157 StaFileParser sfp = new StaFileParser(); | |
158 sfp.parse(this); | |
159 | |
160 AtFileParser afp = new AtFileParser(); | |
161 setDischargeTable(afp.parse(getAtFile())); | |
162 parseHistoricalDischargeTables(); | |
163 } | |
164 | |
165 public void parseHistoricalDischargeTables() throws IOException { | |
166 if (Config.INSTANCE.skipHistoricalDischargeTables()) { | |
167 log.info("skip historical discharge tables"); | |
168 return; | |
169 } | |
170 | |
171 log.info("parse historical discharge tables"); | |
172 | |
173 File riverDir = atFile.getParentFile().getParentFile(); | |
174 | |
175 File histDischargeDir = FileTools.repair( | |
176 new File(riverDir, HISTORICAL_DISCHARGE_TABLES)); | |
177 | |
178 if (!histDischargeDir.isDirectory() || !histDischargeDir.canRead()) { | |
179 log.info("cannot find '" + histDischargeDir + "'"); | |
180 return; | |
181 } | |
182 | |
183 histDischargeDir = FileTools.repair( | |
184 new File(histDischargeDir, getName())); | |
185 | |
186 if (!histDischargeDir.isDirectory() || !histDischargeDir.canRead()) { | |
187 log.info("cannot find '" + histDischargeDir + "'"); | |
188 return; | |
189 } | |
190 | |
191 File [] files = histDischargeDir.listFiles(); | |
192 | |
193 if (files == null) { | |
194 log.info("cannot read directory '" + histDischargeDir + "'"); | |
195 return; | |
196 } | |
197 | |
198 for (File file: files) { | |
199 if (!file.isFile() || !file.canRead()) { | |
200 continue; | |
201 } | |
202 String name = file.getName().toLowerCase(); | |
203 if (!name.endsWith(".at")) { | |
204 continue; | |
205 } | |
206 log.info("found at file '" + file.getName() + "'"); | |
207 | |
208 AtFileParser afp = new AtFileParser(); | |
209 historicalDischargeTables.add( | |
210 afp.parse(file, HISTORICAL_DISCHARGE_TABLES + "/", 1)); | |
211 } | |
212 } | |
213 | |
214 public void storeDependencies(River river) { | |
215 | |
216 Gauge gauge = getPeer(river); | |
217 | |
218 log.info("store main value types"); | |
219 for (ImportMainValueType mainValueType: mainValueTypes) { | |
220 mainValueType.getPeer(); | |
221 } | |
222 | |
223 log.info("store named main values"); | |
224 for (ImportNamedMainValue namedMainValue: namedMainValues) { | |
225 namedMainValue.getPeer(); | |
226 } | |
227 | |
228 log.info("store main values"); | |
229 for (ImportMainValue mainValue: mainValues) { | |
230 mainValue.getPeer(river); | |
231 } | |
232 | |
233 storeDischargeTable(gauge); | |
234 storeHistoricalDischargeTable(gauge); | |
235 } | |
236 | |
237 public void storeDischargeTable(Gauge gauge) { | |
238 log.info("store discharge table"); | |
239 dischargeTable.getPeer(gauge); | |
240 dischargeTable.storeDependencies(gauge); | |
241 } | |
242 | |
243 public void storeHistoricalDischargeTable(Gauge gauge) { | |
244 log.info("store historical discharge tables"); | |
245 for (ImportDischargeTable hdt: historicalDischargeTables) { | |
246 hdt.storeDependencies(gauge); | |
247 } | |
248 } | |
249 | |
250 public Gauge getPeer(River river) { | |
251 if (peer == null) { | |
252 Session session = ImporterSession.getInstance().getDatabaseSession(); | |
253 Query query = session.createQuery( | |
254 "from Gauge where name=:name " + | |
255 "and river.id=:river"); | |
256 query.setString("name", name); | |
257 query.setParameter("river", river.getId()); | |
258 List<Gauge> gauges = query.list(); | |
259 if (gauges.isEmpty()) { | |
260 peer = new Gauge( | |
261 name, river, | |
262 station, aeo, datum, | |
263 officialNumber, | |
264 range.getPeer(river)); | |
265 session.save(peer); | |
266 } | |
267 else { | |
268 peer = gauges.get(0); | |
269 } | |
270 } | |
271 return peer; | |
272 } | |
273 } | |
274 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |