# HG changeset patch # User Felix Wolfsteller # Date 1361358851 -3600 # Node ID b5e3df1feeb41d6aca114e0d15702b2f645fa2ff # Parent 1c34acb084ee37faf76fb0d7063975ab9dec32cd WaterlevelParser: Add Wst-Converting functionality. diff -r 1c34acb084ee -r b5e3df1feeb4 flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java Wed Feb 20 11:52:52 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java Wed Feb 20 12:14:11 2013 +0100 @@ -2,6 +2,7 @@ import java.io.File; import java.io.IOException; +import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; @@ -16,7 +17,19 @@ import de.intevation.flys.importer.ImportWaterlevelQRange; import de.intevation.flys.importer.ImportWaterlevelValue; +import de.intevation.flys.importer.ImportWstColumn; +import de.intevation.flys.importer.ImportRange; +import de.intevation.flys.importer.ImportWst; +import de.intevation.flys.importer.ImportWstQRange; + +/** + * Parse CSV Waterlevel files. + * As these waterlevels are probably used in fixation analysis + * only, functionality to export them to "fixation"-wsts + * has been added (the ImportWaterlevel*- stuff is actually + * not needed to do so.) + */ public class WaterlevelParser extends LineParser { private static final Logger log = Logger.getLogger(WaterlevelParser.class); @@ -44,6 +57,56 @@ } + /** + * Create ImportWst objects from ImportWaterlevel + * objects. + */ + public List exportWsts() { + List wsts = new ArrayList(); + for(ImportWaterlevel waterlevel: getWaterlevels()) { + String description = waterlevel.getDescription(); + ImportWst wst = new ImportWst(); + wsts.add(wst); + wst.setDescription(description); + // Fixation kind. + wst.setKind(2); + wst.setUnit(waterlevel.getUnit()); + + // Fake WST has but 1 column. + wst.setNumberColumns(1); + ImportWstColumn column = wst.getColumn(0); + column.setDescription(description); + column.setName(description); + column.setPosition(0); + + // Build Q Range. + List qRanges = waterlevel.getQRanges(); + for(ImportWaterlevelQRange range: qRanges) { + List values = range.getValues(); + if (values.size() < 2) { + log.warn ("Not enough values to build valid QRange"); + continue; + } + ImportRange iRange = new ImportRange( + BigDecimal.valueOf(values.get(0).getStation()), + BigDecimal.valueOf(values.get(values.size() -1).getStation())); + column.addColumnQRange( + new ImportWstQRange(iRange, BigDecimal.valueOf(range.getQ()))); + } + + // The other W/KM values. + for(ImportWaterlevelQRange range: qRanges) { + for(ImportWaterlevelValue value: range.getValues()) { + column.addColumnValue(BigDecimal.valueOf(value.getStation()), + BigDecimal.valueOf(value.getW())); + } + } + // TODO Maybe set a timeinterval. + } + return wsts; + } + + public List getWaterlevels() { return waterlevels; }