Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java @ 5049:b5e3df1feeb4
WaterlevelParser: Add Wst-Converting functionality.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 20 Feb 2013 12:14:11 +0100 |
parents | 255898799ed9 |
children | fb5771196c82 |
comparison
equal
deleted
inserted
replaced
5048:1c34acb084ee | 5049:b5e3df1feeb4 |
---|---|
1 package de.intevation.flys.importer.parsers; | 1 package de.intevation.flys.importer.parsers; |
2 | 2 |
3 import java.io.File; | 3 import java.io.File; |
4 import java.io.IOException; | 4 import java.io.IOException; |
5 import java.math.BigDecimal; | |
5 import java.text.NumberFormat; | 6 import java.text.NumberFormat; |
6 import java.text.ParseException; | 7 import java.text.ParseException; |
7 import java.util.ArrayList; | 8 import java.util.ArrayList; |
8 import java.util.List; | 9 import java.util.List; |
9 import java.util.regex.Matcher; | 10 import java.util.regex.Matcher; |
14 import de.intevation.flys.importer.ImportUnit; | 15 import de.intevation.flys.importer.ImportUnit; |
15 import de.intevation.flys.importer.ImportWaterlevel; | 16 import de.intevation.flys.importer.ImportWaterlevel; |
16 import de.intevation.flys.importer.ImportWaterlevelQRange; | 17 import de.intevation.flys.importer.ImportWaterlevelQRange; |
17 import de.intevation.flys.importer.ImportWaterlevelValue; | 18 import de.intevation.flys.importer.ImportWaterlevelValue; |
18 | 19 |
19 | 20 import de.intevation.flys.importer.ImportWstColumn; |
21 import de.intevation.flys.importer.ImportRange; | |
22 import de.intevation.flys.importer.ImportWst; | |
23 import de.intevation.flys.importer.ImportWstQRange; | |
24 | |
25 | |
26 /** | |
27 * Parse CSV Waterlevel files. | |
28 * As these waterlevels are probably used in fixation analysis | |
29 * only, functionality to export them to "fixation"-wsts | |
30 * has been added (the ImportWaterlevel*- stuff is actually | |
31 * not needed to do so.) | |
32 */ | |
20 public class WaterlevelParser extends LineParser { | 33 public class WaterlevelParser extends LineParser { |
21 | 34 |
22 private static final Logger log = Logger.getLogger(WaterlevelParser.class); | 35 private static final Logger log = Logger.getLogger(WaterlevelParser.class); |
23 | 36 |
24 private static final NumberFormat nf = | 37 private static final NumberFormat nf = |
39 private String currentDescription; | 52 private String currentDescription; |
40 | 53 |
41 | 54 |
42 public WaterlevelParser() { | 55 public WaterlevelParser() { |
43 waterlevels = new ArrayList<ImportWaterlevel>(); | 56 waterlevels = new ArrayList<ImportWaterlevel>(); |
57 } | |
58 | |
59 | |
60 /** | |
61 * Create ImportWst objects from ImportWaterlevel | |
62 * objects. | |
63 */ | |
64 public List<ImportWst> exportWsts() { | |
65 List<ImportWst> wsts = new ArrayList<ImportWst>(); | |
66 for(ImportWaterlevel waterlevel: getWaterlevels()) { | |
67 String description = waterlevel.getDescription(); | |
68 ImportWst wst = new ImportWst(); | |
69 wsts.add(wst); | |
70 wst.setDescription(description); | |
71 // Fixation kind. | |
72 wst.setKind(2); | |
73 wst.setUnit(waterlevel.getUnit()); | |
74 | |
75 // Fake WST has but 1 column. | |
76 wst.setNumberColumns(1); | |
77 ImportWstColumn column = wst.getColumn(0); | |
78 column.setDescription(description); | |
79 column.setName(description); | |
80 column.setPosition(0); | |
81 | |
82 // Build Q Range. | |
83 List<ImportWaterlevelQRange> qRanges = waterlevel.getQRanges(); | |
84 for(ImportWaterlevelQRange range: qRanges) { | |
85 List<ImportWaterlevelValue> values = range.getValues(); | |
86 if (values.size() < 2) { | |
87 log.warn ("Not enough values to build valid QRange"); | |
88 continue; | |
89 } | |
90 ImportRange iRange = new ImportRange( | |
91 BigDecimal.valueOf(values.get(0).getStation()), | |
92 BigDecimal.valueOf(values.get(values.size() -1).getStation())); | |
93 column.addColumnQRange( | |
94 new ImportWstQRange(iRange, BigDecimal.valueOf(range.getQ()))); | |
95 } | |
96 | |
97 // The other W/KM values. | |
98 for(ImportWaterlevelQRange range: qRanges) { | |
99 for(ImportWaterlevelValue value: range.getValues()) { | |
100 column.addColumnValue(BigDecimal.valueOf(value.getStation()), | |
101 BigDecimal.valueOf(value.getW())); | |
102 } | |
103 } | |
104 // TODO Maybe set a timeinterval. | |
105 } | |
106 return wsts; | |
44 } | 107 } |
45 | 108 |
46 | 109 |
47 public List<ImportWaterlevel> getWaterlevels() { | 110 public List<ImportWaterlevel> getWaterlevels() { |
48 return waterlevels; | 111 return waterlevels; |