Mercurial > dive4elements > river
diff backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java @ 9655:1f57381b3bb5
Importer (s/u-info) extensions: uniform formatting of from-to series names,
warning instead of cancelling in case of missing tkh column values,
detecting, logging and skipping columns with wrong unit
author | mschaefer |
---|---|
date | Mon, 23 Mar 2020 15:16:35 +0100 |
parents | ac41551a8e4d |
children |
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java Mon Mar 23 15:10:09 2020 +0100 +++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhParser.java Mon Mar 23 15:16:35 2020 +0100 @@ -12,7 +12,6 @@ import java.io.File; import java.io.FileInputStream; -import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.text.DateFormat; @@ -26,6 +25,7 @@ import org.apache.log4j.Logger; import org.dive4elements.river.importer.Config; import org.dive4elements.river.importer.ImportRiver; +import org.dive4elements.river.importer.ImporterSession; import org.dive4elements.river.importer.common.AbstractParser; import org.dive4elements.river.importer.common.ParsingState; import org.dive4elements.river.importer.sinfo.importitem.TkhColumnSeriesImport; @@ -34,6 +34,7 @@ import org.dive4elements.river.model.sinfo.Tkh; import org.dive4elements.river.model.sinfo.TkhColumn; import org.dive4elements.river.model.sinfo.TkhValue; +import org.hibernate.Session; /** * Reads and parses the header of a TKH file and handles the parse and store of the columns @@ -131,7 +132,7 @@ } @Override - public void parse() throws IOException { + public void parse() throws Exception { getLog().info("Start parsing:;'" + this.rootRelativePath + "'"); // this.seriesHeader = createSeriesImport(this.importPath.getName().replaceAll("\\.csv", "")); this.metaPatternsMatched.clear(); @@ -143,7 +144,7 @@ this.in = new LineNumberReader(new InputStreamReader(new FileInputStream(this.importPath), ENCODING)); } catch (final Exception e) { - logError("Could not open (" + e.getMessage() + ")"); + logError("Could not open (%s)", e.getMessage()); this.headerParsingState = ParsingState.STOP; } this.currentLine = null; @@ -155,6 +156,8 @@ if (this.currentLine.isEmpty()) continue; handleMetaLine(); + if (this.headerParsingState == ParsingState.DONE) + checkMetaData(); } } finally { @@ -194,12 +197,12 @@ day = dateFormat.parse(m.group(1)); } catch (final Exception e) { - logError("Invalid date in line " + this.in.getLineNumber()); + logLineWarning("Invalid date"); } this.metaPatternsMatched.add(META_DATUM); this.tkhGroup.setDay(day); if (day == null) - logWarning("No date specified"); + logLineWarning("No date specified"); return true; } return false; @@ -241,11 +244,24 @@ if (m.matches()) this.colParsers.add(new TkhColumnParser(this.importPath, this.rootRelativePath, this.river, this.tkhGroup, i, m.group(7).trim())); else - logWarning("No title found in column " + i + ", skipped"); + logLineWarning("Invalid title in column %d (%s)", i + 1, this.columnTitles.get(i)); } return true; } + /** + * Checks the existence of the active series in the database + */ + @Override + protected boolean checkSeriesExistsAlready() { + if (!checkRiverExists()) + return false; + final Session session = ImporterSession.getInstance().getDatabaseSession(); + final List<Tkh> rows = this.tkhGroup.querySeriesItem(session, this.river.getPeer()); + return !rows.isEmpty(); + } + + @Override public void store() { if (this.headerParsingState != ParsingState.STOP) { @@ -254,7 +270,7 @@ colParser.store(); } else - logWarning("Severe parsing errors, not storing series '" + this.tkhGroup.getFilename() + "'"); + logWarning("Severe parsing errors, not storing series '%s'", this.tkhGroup.getFilename()); } @Override