Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightParser.java @ 8557:29ab66ce06aa
Abstract parser for bed heights is obsolete.
author | "Tom Gottfried <tom@intevation.de>" |
---|---|
date | Mon, 16 Feb 2015 09:50:39 +0100 |
parents | d115d0ed6624 |
children | 6d8d7425a6b5 |
comparison
equal
deleted
inserted
replaced
8556:d115d0ed6624 | 8557:29ab66ce06aa |
---|---|
30 import java.io.InputStreamReader; | 30 import java.io.InputStreamReader; |
31 | 31 |
32 import org.apache.log4j.Logger; | 32 import org.apache.log4j.Logger; |
33 | 33 |
34 import org.dive4elements.river.importer.ImportBedHeightSingle; | 34 import org.dive4elements.river.importer.ImportBedHeightSingle; |
35 import org.dive4elements.river.importer.ImportBedHeightSingleValue; | |
35 import org.dive4elements.river.importer.ImportBedHeightType; | 36 import org.dive4elements.river.importer.ImportBedHeightType; |
36 import org.dive4elements.river.importer.ImportElevationModel; | 37 import org.dive4elements.river.importer.ImportElevationModel; |
37 import org.dive4elements.river.importer.ImportLocationSystem; | 38 import org.dive4elements.river.importer.ImportLocationSystem; |
38 import org.dive4elements.river.importer.ImportRange; | 39 import org.dive4elements.river.importer.ImportRange; |
39 import org.dive4elements.river.importer.ImportTimeInterval; | 40 import org.dive4elements.river.importer.ImportTimeInterval; |
41 import org.dive4elements.river.model.BedHeightType; | 42 import org.dive4elements.river.model.BedHeightType; |
42 import org.dive4elements.river.importer.ImporterSession; | 43 import org.dive4elements.river.importer.ImporterSession; |
43 import org.dive4elements.river.backend.utils.EpsilonComparator; | 44 import org.dive4elements.river.backend.utils.EpsilonComparator; |
44 import org.dive4elements.river.backend.utils.DateUtil; | 45 import org.dive4elements.river.backend.utils.DateUtil; |
45 | 46 |
46 public abstract class BedHeightParser { | 47 public class BedHeightParser { |
47 | 48 |
48 private static final Logger log = | 49 private static final Logger log = |
49 Logger.getLogger(BedHeightParser.class); | 50 Logger.getLogger(BedHeightParser.class); |
50 | 51 |
51 public static final String ENCODING = "ISO-8859-1"; | 52 public static final String ENCODING = "ISO-8859-1"; |
90 | 91 |
91 | 92 |
92 protected List<ImportBedHeightSingle> bedHeights; | 93 protected List<ImportBedHeightSingle> bedHeights; |
93 | 94 |
94 | 95 |
95 protected abstract ImportBedHeightSingle newImportBedHeight(String description); | 96 protected ImportBedHeightSingle newImportBedHeight(String description) { |
96 | 97 return new ImportBedHeightSingle(description); |
97 /** Handle a line of file that contains data (in contrast to comments, meta). */ | 98 } |
98 protected abstract void handleDataLine( | 99 |
99 ImportBedHeightSingle importBedHeight, | |
100 String line | |
101 ); | |
102 | 100 |
103 protected TreeSet<Double> kmExists; | 101 protected TreeSet<Double> kmExists; |
104 | 102 |
105 public BedHeightParser() { | 103 public BedHeightParser() { |
106 bedHeights = new ArrayList<ImportBedHeightSingle>(); | 104 bedHeights = new ArrayList<ImportBedHeightSingle>(); |
412 return true; | 410 return true; |
413 } | 411 } |
414 | 412 |
415 return false; | 413 return false; |
416 } | 414 } |
415 | |
416 protected void handleDataLine(ImportBedHeightSingle obj, String line) { | |
417 String[] values = line.split(SEPERATOR_CHAR, -1); | |
418 | |
419 if (values == null) { | |
420 log.warn("BSP: Error while parsing data line: '" + line + "'"); | |
421 return; | |
422 } | |
423 | |
424 Double km; | |
425 | |
426 try { | |
427 km = new Double(nf.parse(values[0]).doubleValue()); | |
428 | |
429 Double key = Double.valueOf(km); | |
430 | |
431 if (kmExists.contains(key)) { | |
432 log.warn("duplicate station '" + km + "': -> ignored"); | |
433 return; | |
434 } | |
435 | |
436 kmExists.add(key); | |
437 } | |
438 catch (ParseException e) { | |
439 // We expect a lot of ";;;;;;" lines. | |
440 return; | |
441 } | |
442 | |
443 // Handle gaps like "10,0;;;;;". | |
444 if (values.length <= 2) { | |
445 // Do not import line without useful data | |
446 if (values.length < 2) { | |
447 return; | |
448 } | |
449 if (values[1].length() == 0) { | |
450 return; | |
451 } | |
452 } | |
453 | |
454 Double height = null; | |
455 if (values[1].length() > 0) { | |
456 try { | |
457 height = new Double(nf.parse(values[1]).doubleValue()); | |
458 } | |
459 catch (ParseException e) { | |
460 log.warn("BSP: unparseable height " + values[1]); | |
461 } | |
462 } | |
463 | |
464 Double uncertainty = null; | |
465 if (values[2].length() > 0) { | |
466 try { | |
467 uncertainty = new Double(nf.parse(values[2]).doubleValue()); | |
468 } | |
469 catch (ParseException e) { | |
470 log.warn("BSP: unparseable uncertainty value " + values[2]); | |
471 } | |
472 } | |
473 | |
474 Double dataGap = null; | |
475 if (values[3].length() > 0) { | |
476 try { | |
477 dataGap = new Double(nf.parse(values[3]).doubleValue()); | |
478 } | |
479 catch (ParseException e) { | |
480 log.warn("BSP: unparseable data gap " + values[3]); | |
481 } | |
482 } | |
483 | |
484 Double soundingWidth = null; | |
485 if (values[4].length() > 0) { | |
486 try { | |
487 soundingWidth = new Double(nf.parse(values[4]).doubleValue()); | |
488 } | |
489 catch (ParseException e) { | |
490 log.warn("BSP: unparseable sounding width " + values[4]); | |
491 } | |
492 } | |
493 | |
494 ImportBedHeightSingleValue value = new ImportBedHeightSingleValue( | |
495 (ImportBedHeightSingle) obj, | |
496 km, | |
497 height, | |
498 uncertainty, | |
499 dataGap, | |
500 soundingWidth); | |
501 | |
502 obj.addValue(value); | |
503 } | |
417 } | 504 } |
418 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 505 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |