Mercurial > dive4elements > river
diff flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java @ 2811:8926571e47fb
Finished importing MINFO bed heights (single and epoch).
flys-backend/trunk@4225 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 13 Apr 2012 07:24:55 +0000 |
parents | f283212966e8 |
children | 0d27d02b1208 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java Thu Apr 12 12:50:49 2012 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BedHeightSingleParser.java Fri Apr 13 07:24:55 2012 +0000 @@ -1,343 +1,36 @@ package de.intevation.flys.importer.parsers; -import java.io.File; import java.math.BigDecimal; -import java.text.NumberFormat; import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.io.IOException; -import java.io.LineNumberReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; import org.apache.log4j.Logger; +import de.intevation.flys.importer.ImportBedHeight; import de.intevation.flys.importer.ImportBedHeightSingle; import de.intevation.flys.importer.ImportBedHeightSingleValue; -import de.intevation.flys.importer.ImportBedHeightType; -import de.intevation.flys.importer.ImportElevationModel; -import de.intevation.flys.importer.ImportLocationSystem; -import de.intevation.flys.importer.ImportRange; -import de.intevation.flys.importer.ImportUnit; -import de.intevation.flys.model.BedHeightType; -public class BedHeightSingleParser { - - public static final String ENCODING = "ISO-8859-1"; - - public static final Locale DEFAULT_LOCALE = Locale.GERMAN; - - public static final String START_META_CHAR = "#"; - public static final String SEPERATOR_CHAR = ";"; - - public static final Pattern META_YEAR = - Pattern.compile("^Jahr: (\\d*).*"); - - public static final Pattern META_TYPE = - Pattern.compile("^Aufnahmeart: (.*).*"); - - public static final Pattern META_LOCATION_SYSTEM = - Pattern.compile("^Lagesystem: (.*).*"); - - public static final Pattern META_CUR_ELEVATION_SYSTEM = - Pattern.compile("^H.hensystem:\\s(\\w++) (.* )??\\[(.*)\\].*"); - - public static final Pattern META_OLD_ELEVATION_SYSTEM = - Pattern.compile("^urspr.ngliches H.hensystem:\\s(\\w++) (.* )??\\[(.*)\\].*"); - - public static final Pattern META_SOUNDING_WIDTH = - Pattern.compile("^ausgewertete Peilbreite: (\\d*).*"); - - public static final Pattern META_RANGE = - Pattern.compile("^Strecke:\\D*(\\d++.\\d*)-(\\d++.\\d*).*"); - - public static final Pattern META_EVALUATION_BY = - Pattern.compile("^Auswerter: (.*).*"); - - public static final Pattern META_COMMENTS = - Pattern.compile("^Weitere Bemerkungen: (.*).*"); +public class BedHeightSingleParser extends BedHeightParser { private static final Logger log = Logger.getLogger(BedHeightSingleParser.class); - protected static NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE); - - - protected List<ImportBedHeightSingle> bedHeights; - - - public BedHeightSingleParser() { - bedHeights = new ArrayList<ImportBedHeightSingle>(); - } - - - public List<ImportBedHeightSingle> getBedHeights() { - return bedHeights; - } - - - public void parse(File file) throws IOException { - log.info("Parsing bed height single file '" + file + "'"); - - ImportBedHeightSingle obj = new ImportBedHeightSingle(file.getName()); - - LineNumberReader in = null; - try { - in = - new LineNumberReader( - new InputStreamReader( - new FileInputStream(file), ENCODING)); - - String line = null; - while ((line = in.readLine()) != null) { - if ((line = line.trim()).length() == 0) { - continue; - } - - if (line.startsWith(START_META_CHAR)) { - handleMetaLine(obj, line); - } - else { - handleDataLine(obj, line); - } - } - - log.info("File contained " + obj.getValues().size() + " values."); - bedHeights.add(obj); - } - finally { - if (in != null) { - in.close(); - } - } - } - - - protected void handleMetaLine(ImportBedHeightSingle obj, String line) { - String meta = stripMetaLine(line); - if (handleMetaYear(obj, meta)) { - return; - } - else if (handleMetaSoundingWidth(obj, meta)) { - return; - } - else if (handleMetaComment(obj, meta)) { - return; - } - else if (handleMetaEvaluationBy(obj, meta)) { - return; - } - else if (handleMetaRange(obj, meta)) { - return; - } - else if (handleMetaType(obj, meta)) { - return; - } - else if (handleMetaLocationSystem(obj, meta)) { - return; - } - else if (handleMetaCurElevationModel(obj, meta)) { - return; - } - else if (handleMetaOldElevationModel(obj, meta)) { - return; - } - else { - log.warn("Meta line did not match any known type: " + line); - } - } - - - protected boolean handleMetaYear(ImportBedHeightSingle obj, String line) { - Matcher m = META_YEAR.matcher(line); - - if (m.matches()) { - String tmp = m.group(1); - - try { - obj.setYear(Integer.valueOf(tmp)); - return true; - } - catch (NumberFormatException e) { - log.warn("Error while parsing year!", e); - } - } - - return false; - } - - - protected boolean handleMetaSoundingWidth(ImportBedHeightSingle obj, String line) { - Matcher m = META_SOUNDING_WIDTH.matcher(line); - - if (m.matches()) { - String tmp = m.group(1); - - try { - obj.setSoundingWidth(Integer.valueOf(tmp)); - return true; - } - catch (NumberFormatException e) { - log.warn("Error while parsing sounding width!", e); - } - } - - return false; + @Override + protected ImportBedHeight newImportBedHeight(String description) { + return new ImportBedHeightSingle(description); } - protected boolean handleMetaComment(ImportBedHeightSingle obj, String line) { - Matcher m = META_COMMENTS.matcher(line); - - if (m.matches()) { - String tmp = m.group(1); - - obj.setDescription(tmp); - - return true; - } - - return false; - } - - - protected boolean handleMetaEvaluationBy( - ImportBedHeightSingle obj, - String line - ) { - Matcher m = META_EVALUATION_BY.matcher(line); - - if (m.matches()) { - String tmp = m.group(1); - tmp = tmp.replace(";", ""); - - obj.setEvaluationBy(tmp); - - return true; - } - - return false; - } - - - protected boolean handleMetaRange(ImportBedHeightSingle obj, String line) { - Matcher m = META_RANGE.matcher(line); - - if (m.matches() && m.groupCount() >= 2) { - String a = m.group(1).replace(";", ""); - String b = m.group(2).replace(";", ""); - - try { - BigDecimal lower = new BigDecimal(nf.parse(a).doubleValue()); - BigDecimal upper = new BigDecimal(nf.parse(b).doubleValue()); - - obj.setRange(new ImportRange(lower, upper)); - - return true; - } - catch (ParseException e) { - log.warn("Error while parsing range!", e); - } - } - - return false; - } - - - protected boolean handleMetaType(ImportBedHeightSingle obj, String line) { - Matcher m = META_TYPE.matcher(line); - - if (m.matches()) { - String tmp = m.group(1).replace(";", ""); - - obj.setType(new ImportBedHeightType( - BedHeightType.getBedHeightName(tmp), - tmp)); - return true; - } - - return false; - } - - - protected boolean handleMetaLocationSystem( - ImportBedHeightSingle obj, - String line - ) { - Matcher m = META_LOCATION_SYSTEM.matcher(line); - - if (m.matches()) { - String tmp = m.group(1).replace(";", ""); - - obj.setLocationSystem(new ImportLocationSystem(tmp, tmp)); - - return true; - } - - return false; - } - - - protected boolean handleMetaCurElevationModel( - ImportBedHeightSingle obj, - String line - ) { - Matcher m = META_CUR_ELEVATION_SYSTEM.matcher(line); - - if (m.matches()) { - String name = m.group(1); - String num = m.group(2); - String unit = m.group(3); - - obj.setCurElevationModel(new ImportElevationModel( - name + " " + num, - new ImportUnit(unit) - )); - - return true; - } - - return false; - } - - - protected boolean handleMetaOldElevationModel( - ImportBedHeightSingle obj, - String line - ) { - Matcher m = META_OLD_ELEVATION_SYSTEM.matcher(line); - - if (m.matches()) { - String name = m.group(1); - String num = m.group(2); - String unit = m.group(3); - - obj.setOldElevationModel(new ImportElevationModel( - name + " " + num, - new ImportUnit(unit) - )); - - return true; - } - - return false; - } - - - protected void handleDataLine(ImportBedHeightSingle obj, String line) { + @Override + protected void handleDataLine(ImportBedHeight obj, String line) { String[] values = line.split(SEPERATOR_CHAR); if (values == null || values.length < 6) { @@ -345,10 +38,9 @@ return; } - try { ImportBedHeightSingleValue value = new ImportBedHeightSingleValue( - obj, + (ImportBedHeightSingle) obj, new BigDecimal(nf.parse(values[0]).doubleValue()), new BigDecimal(nf.parse(values[1]).doubleValue()), new BigDecimal(nf.parse(values[2]).doubleValue()), @@ -363,17 +55,5 @@ log.warn("Error while parsing data row.", e); } } - - - protected static String stripMetaLine(String line) { - String tmp = line.substring(1, line.length()-1); - - if (tmp.startsWith(" ")) { - return tmp.substring(1, tmp.length()-1); - } - else { - return tmp; - } - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :