Mercurial > dive4elements > river
diff flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java @ 4524:be9e28cff0c4
Parse and store year in sediment densities.
* Year is parsed ('guessed') from description column in .csv file.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 14 Nov 2012 17:24:55 +0100 |
parents | f63b39799d2d |
children | 3694d8f48e16 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java Wed Nov 14 17:19:54 2012 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java Wed Nov 14 17:24:55 2012 +0100 @@ -5,10 +5,13 @@ import java.math.BigDecimal; +import java.text.DateFormat; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,6 +22,7 @@ import de.intevation.flys.importer.ImportSedimentDensity; import de.intevation.flys.importer.ImportSedimentDensityValue; import de.intevation.flys.importer.ImportUnit; +import de.intevation.flys.utils.DateGuesser; public class SedimentDensityParser extends LineParser { @@ -26,6 +30,7 @@ private static final Logger log = Logger.getLogger(SedimentDensityParser.class); + private int densitsyColumn = 1; public static final NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE); @@ -36,7 +41,6 @@ public static final Pattern META_DEPTH = Pattern.compile("^Tiefe: (\\w++)-(\\w++)( (\\w++))?.*"); - protected List<ImportSedimentDensity> sedimentDensities; protected ImportSedimentDensity current; @@ -89,12 +93,27 @@ else if (handleMetaDepth(line)) { return; } + else if (handleMetaColumns(line)) { + return; + } else { log.warn("Unknown meta line: '" + line + "'"); } } + private boolean handleMetaColumns(String line) { + String[] columns = line.split(";"); + for (int i = 0; i < columns.length; i++) { + if (columns[i].contains("Sedimentdichte")) { + this.densitsyColumn = i; + return true; + } + } + return false; + } + + protected boolean handleMetaUnit(String line) { Matcher m = META_UNIT.matcher(line); @@ -151,19 +170,42 @@ return; } + BigDecimal km; + BigDecimal density; try { - BigDecimal km = new BigDecimal(nf.parse(vals[0]).doubleValue()); - BigDecimal density = new BigDecimal(nf.parse(vals[1]).doubleValue()); + km = new BigDecimal(nf.parse(vals[0]).doubleValue()); + density = new BigDecimal(nf.parse(vals[this.densitsyColumn]).doubleValue()); - current.addValue(new ImportSedimentDensityValue( - km, - density, - vals[2]) - ); } catch (ParseException pe) { log.warn("Error while parsing numbers in '" + line + "'"); + return; } + + BigDecimal year = null; + try { + year = + new BigDecimal(nf.parse(vals[vals.length - 1]).doubleValue()); + } + catch(ParseException pe) { + try { + Date d = DateGuesser.guessDate(vals[vals.length - 1]); + Calendar c = Calendar.getInstance(); + c.setTime(d); + year = new BigDecimal(c.get(Calendar.YEAR)); + } + catch (IllegalArgumentException iae) { + log.warn("Error while parsing date in '" + line + "'"); + return; + } + } + + current.addValue(new ImportSedimentDensityValue( + km, + density, + year, + vals[vals.length - 1]) + ); }