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 :

http://dive4elements.wald.intevation.org