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;

http://dive4elements.wald.intevation.org