# HG changeset patch # User Felix Wolfsteller # Date 1348741403 0 # Node ID 26685b846a29c9e0cab019326f9871e417df2dcf # Parent ffb2aac9a5b6c42005af79372ff8526b37cd64a9 Let importer handle gappy single bed height values. flys-backend/trunk@5612 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r ffb2aac9a5b6 -r 26685b846a29 flys-backend/ChangeLog --- a/flys-backend/ChangeLog Thu Sep 27 10:16:49 2012 +0000 +++ b/flys-backend/ChangeLog Thu Sep 27 10:23:23 2012 +0000 @@ -1,3 +1,11 @@ +2012-09-27 Felix Wolfsteller + + * src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java: + Handle csv lines with just the km set ("gaps"). + + * src/main/java/de/intevation/flys/importer/parsers/BedHeightEpochParser.java: + Added TODO, as more changes towards fix for issue863 are necessary. + 2012-09-27 Felix Wolfsteller * src/main/java/de/intevation/flys/importer/parsers/BedHeightParser.java, diff -r ffb2aac9a5b6 -r 26685b846a29 flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightEpochParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightEpochParser.java Thu Sep 27 10:16:49 2012 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightEpochParser.java Thu Sep 27 10:23:23 2012 +0000 @@ -29,6 +29,7 @@ @Override protected void handleDataLine(ImportBedHeight obj, String line) { + // TODO issue863: find gaps in data, analogous to 'single' case. String[] values = line.split(SEPERATOR_CHAR); if (values == null || values.length < 2 || values[0].length() == 0 || values[1].length() == 0) { diff -r ffb2aac9a5b6 -r 26685b846a29 flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java Thu Sep 27 10:16:49 2012 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java Thu Sep 27 10:23:23 2012 +0000 @@ -1,13 +1,9 @@ package de.intevation.flys.importer.parsers; - import java.math.BigDecimal; import java.text.ParseException; - - - import org.apache.log4j.Logger; import de.intevation.flys.importer.ImportBedHeight; @@ -29,19 +25,54 @@ + /** + * Create ImportBedHeightSingleValue from a line of csv file, add + * it to the ImportBedHeight. + */ @Override protected void handleDataLine(ImportBedHeight obj, String line) { String[] values = line.split(SEPERATOR_CHAR); - if (values == null || values.length < 6) { + if (values == null || (values.length != 1 && values.length < 6)) { //log.warn("BSP: Error while parsing data line: '" + line + "'"); return; } + BigDecimal km; + + try { + km = new BigDecimal(nf.parse(values[0]).doubleValue()); + } + catch (ParseException e) { + // We expect a lot of ";;;;;;" lines. + //log.warn("BSP: Error while parsing km of data row.", e); + return; + } + + // Handle gaps like "10,0;;;;;". + if (values.length == 1) { + ImportBedHeightSingleValue value = new ImportBedHeightSingleValue( + (ImportBedHeightSingle) obj, + km, + null, null, null, null, null); + log.debug("Added a gap/null row"); + obj.addValue(value); + return; + } + + // Because we cannot enforce consistency of values with complete data + // via null constraints in the database (as there are "gap" values), + // do this checks manually. + if (values[3].length() == 0 || values[4].length() == 0 + || values[5].length() == 0) { + //log.warn("BSP: Error while parsing data row (manual null constraint violated)."); + return; + } + try { ImportBedHeightSingleValue value = new ImportBedHeightSingleValue( (ImportBedHeightSingle) obj, - new BigDecimal(nf.parse(values[0]).doubleValue()), + km, new BigDecimal(nf.parse(values[1]).doubleValue()), new BigDecimal(nf.parse(values[2]).doubleValue()), new BigDecimal(nf.parse(values[3]).doubleValue()),