# HG changeset patch # User Ingo Weinzierl # Date 1334311057 0 # Node ID 3febaed762b870829f3a05d595d3bfae25ae3371 # Parent bfd6a7ef0ad5ad80bcb258321c4cf7892baa21eb Added new parser (stub) to read MINFO sediment density files; prepared import process to handle those files. flys-backend/trunk@4232 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r bfd6a7ef0ad5 -r 3febaed762b8 flys-backend/ChangeLog --- a/flys-backend/ChangeLog Fri Apr 13 09:52:22 2012 +0000 +++ b/flys-backend/ChangeLog Fri Apr 13 09:57:37 2012 +0000 @@ -1,3 +1,16 @@ +2012-04-13 Ingo Weinzierl + + * src/main/java/de/intevation/flys/importer/parsers/LineParser.java: New. + An abstract parser that might be used to read a file and handle each + line contained in the file seperatly. + + * src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java: + New. Subclasses LineParser. It is able to parse MINFO specific sediment + density files. NOTE: currently just a stub. + + * src/main/java/de/intevation/flys/importer/ImportRiver.java: Prepared to + read MINFO specific sediment density files. + 2012-04-13 Ingo Weinzierl * src/main/java/de/intevation/flys/importer/Config.java: Added a new diff -r bfd6a7ef0ad5 -r 3febaed762b8 flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java Fri Apr 13 09:52:22 2012 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java Fri Apr 13 09:57:37 2012 +0000 @@ -30,6 +30,7 @@ import de.intevation.flys.importer.parsers.AnnotationsParser; import de.intevation.flys.importer.parsers.AnnotationClassifier; import de.intevation.flys.importer.parsers.PegelGltParser; +import de.intevation.flys.importer.parsers.SedimentDensityParser; import de.intevation.flys.importer.parsers.WstParser; import org.hibernate.Session; @@ -67,6 +68,8 @@ public static final String BED_HEIGHT_EPOCH_DIR = "Epochen"; + public static final String SEDIMENT_DENSITY_DIR = "Sedimentdichte"; + protected String name; @@ -96,6 +99,8 @@ protected List bedHeightEpochs; + protected List sedimentDensities; + protected ImportWst wst; protected ImportUnit wstUnit; @@ -105,13 +110,14 @@ protected River peer; public ImportRiver() { - hyks = new ArrayList(); - crossSections = new ArrayList(); - extraWsts = new ArrayList(); - fixations = new ArrayList(); - officialLines = new ArrayList(); - floodWater = new ArrayList(); - floodProtection = new ArrayList(); + hyks = new ArrayList(); + crossSections = new ArrayList(); + extraWsts = new ArrayList(); + fixations = new ArrayList(); + officialLines = new ArrayList(); + floodWater = new ArrayList(); + floodProtection = new ArrayList(); + sedimentDensities = new ArrayList(); } public ImportRiver( @@ -176,6 +182,7 @@ parseFloodWater(); parseFloodProtection(); parseBedHeight(); + parseSedimentDensity(); } public void parseFloodProtection() throws IOException { @@ -247,6 +254,36 @@ } + protected void parseSedimentDensity() throws IOException { + log.debug("Parse sediment density"); + + if (Config.INSTANCE.skipSedimentDensity()) { + log.info("skip parsing sediment density."); + return; + } + + File minfoDir = getMinfoDir(); + File sediment = new File(minfoDir, SEDIMENT_DENSITY_DIR); + + File[] files = sediment.listFiles(); + + if (files == null) { + log.warn("Cannot parse directory '" + sediment + "'"); + return; + } + + SedimentDensityParser parser = new SedimentDensityParser(); + + for (File file: files) { + parser.parse(file); + } + + sedimentDensities = parser.getSedimentDensities(); + + log.info("Parsed " + sedimentDensities.size() + " sediment densities."); + } + + protected void parseBedHeightSingles(File dir) throws IOException { log.debug("Parse bed height singles"); @@ -612,6 +649,7 @@ storeFloodWater(); storeFloodProtection(); storeBedHeight(); + storeSedimentDensity(); } public void storeWstUnit() { @@ -774,6 +812,14 @@ } } + public void storeSedimentDensity() { + if (!Config.INSTANCE.skipSedimentDensity()) { + log.info("store sediment density"); + + // TODO + } + } + public void storeAnnotations() { if (!Config.INSTANCE.skipAnnotations()) { River river = getPeer(); diff -r bfd6a7ef0ad5 -r 3febaed762b8 flys-backend/src/main/java/de/intevation/flys/importer/parsers/LineParser.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/LineParser.java Fri Apr 13 09:57:37 2012 +0000 @@ -0,0 +1,93 @@ +package de.intevation.flys.importer.parsers; + +import java.io.File; + +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +import java.io.IOException; +import java.io.LineNumberReader; +import java.io.FileInputStream; +import java.io.InputStreamReader; + +import org.apache.log4j.Logger; + + +public abstract class LineParser { + + private static final Logger log = Logger.getLogger(LineParser.class); + + 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 = ";"; + + + protected abstract void handleLine(String line); + + protected abstract void reset(); + + protected abstract void finish(); + + + /** + * This method reads each line of file. At the beginning, + * reset() is called; afterwars for each line handleLine() is + * called; at the end finish is called. + * + * @param file The file which should be parsed. + */ + public void parse(File file) throws IOException { + log.info("Parsing file '" + file + "'"); + + reset(); + + 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; + } + + handleLine(line); + } + } + finally { + if (in != null) { + in.close(); + } + } + + finish(); + } + + + protected static String stripMetaLine(String line) { + String tmp = line.substring(1, line.length()); + + if (tmp.startsWith(" ")) { + return tmp.substring(1, tmp.length()); + } + else { + return tmp; + } + } + + + public static Date getDateFromYear(int year) { + Calendar cal = Calendar.getInstance(); + cal.set(year, 0, 1); + + return cal.getTime(); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r bfd6a7ef0ad5 -r 3febaed762b8 flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java Fri Apr 13 09:57:37 2012 +0000 @@ -0,0 +1,51 @@ +package de.intevation.flys.importer.parsers; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import de.intevation.flys.importer.ImportSedimentDensity; + + +public class SedimentDensityParser extends LineParser { + + private static final Logger log = + Logger.getLogger(SedimentDensityParser.class); + + + protected List sedimentDensities; + + protected ImportSedimentDensity current; + + + public SedimentDensityParser() { + sedimentDensities = new ArrayList(); + } + + + @Override + protected void reset() { + current = new ImportSedimentDensity(); + } + + + @Override + protected void finish() { + if (current != null) { + sedimentDensities.add(current); + } + } + + + @Override + protected void handleLine(String line) { + log.debug("handle line: '" + line + "'"); + } + + + public List getSedimentDensities() { + return sedimentDensities; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :