# HG changeset patch # User mschaefer # Date 1584974257 -3600 # Node ID 75bd347147ade9d5485000f3e8420685f32f22a6 # Parent d86c7cb68b41c2d694d894cd23d346ebf8d6eaa6 Importer (s/u-info) extensions: infrastructures: detecting, logging, cancelling in case of wrong column titles, detecting, logging and skipping lines with duplicate km+bank diff -r d86c7cb68b41 -r 75bd347147ad backend/src/main/java/org/dive4elements/river/importer/sinfo/importitem/InfrastructureKmLineImport.java --- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/importitem/InfrastructureKmLineImport.java Mon Mar 23 15:33:40 2020 +0100 +++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/importitem/InfrastructureKmLineImport.java Mon Mar 23 15:37:37 2020 +0100 @@ -49,6 +49,10 @@ this.height = height; } + public ImportAttribute getBankAttribute() { + return this.bankAttribute; + } + @Override protected InfrastructureValue queryValueItem(final Session session, final Infrastructure parent) { final Query query = session.createQuery("FROM InfrastructureValue WHERE (infrastructure=:parent) AND (attribute=:bank)" diff -r d86c7cb68b41 -r 75bd347147ad backend/src/main/java/org/dive4elements/river/importer/sinfo/importitem/InfrastructureSeriesImport.java --- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/importitem/InfrastructureSeriesImport.java Mon Mar 23 15:33:40 2020 +0100 +++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/importitem/InfrastructureSeriesImport.java Mon Mar 23 15:37:37 2020 +0100 @@ -79,17 +79,27 @@ } @Override - public List querySeriesItem(final Session session, final River river) { + public List querySeriesItem(final Session session, final River river, final boolean doQueryParent) { final Query query = session.createQuery("FROM Infrastructure WHERE river=:river AND lower(filename)=:filename"); query.setParameter("river", river); query.setParameter("filename", this.filename.toLowerCase()); return query.list(); } - @Override public Infrastructure createSeriesItem(final River river) { return new Infrastructure(river, this.filename, this.kmrange_info, this.notes, this.type.getPeer(), this.group.getPeer(), this.year, this.provider, this.evaluation_by); } + + @Override + public boolean addValue(final InfrastructureKmLineImport value) { + for (final InfrastructureKmLineImport item : this.values) { + if (item.getStation() != value.getStation()) + continue; + if (item.getBankAttribute() == value.getBankAttribute()) + return false; + } + return super.addValue(value); + } } \ No newline at end of file diff -r d86c7cb68b41 -r 75bd347147ad backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.java Mon Mar 23 15:33:40 2020 +0100 +++ b/backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/InfrastructureParser.java Mon Mar 23 15:37:37 2020 +0100 @@ -202,41 +202,39 @@ @Override protected boolean handleMetaColumnTitles() { - if (super.handleMetaColumnTitles()) { - for (int i = 1; i <= this.columnTitles.size() - 1; i++) { - if (HEIGHT_COLUMNTITLE.matcher(this.columnTitles.get(i)).matches()) - this.heightColIndex = i; - else if (BANK_COLUMNTITLE.matcher(this.columnTitles.get(i)).matches()) - this.bankColIndex = i; - } - if (this.bankColIndex < 0) - logWarning("Column of river side value could not be identified, missing column title 'Uferseite'"); - if (this.heightColIndex < 0) { - logError("Column of height values could not be identified, missing column title 'Höhe...'"); - this.headerParsingState = ParsingState.STOP; - return false; - } - return true; + if (!super.handleMetaColumnTitles()) + return false; + for (int i = 1; i <= this.columnTitles.size() - 1; i++) { + if (HEIGHT_COLUMNTITLE.matcher(this.columnTitles.get(i)).matches()) + this.heightColIndex = i; + else if (BANK_COLUMNTITLE.matcher(this.columnTitles.get(i)).matches()) + this.bankColIndex = i; } - else - return false; + if (this.bankColIndex < 0) { + logLineError("Column of river side value could not be identified, missing column title 'Uferseite'"); + this.headerParsingState = ParsingState.STOP; + } + if (this.heightColIndex < 0) { + logLineError("Column of height values could not be identified, missing column title 'Höhe...'"); + this.headerParsingState = ParsingState.STOP; + } + return true; } @Override protected InfrastructureKmLineImport createKmLineImport(final Double km, final String[] values) { - if (parseDoubleWithNull(values[this.heightColIndex]) == null) { - logError("Invalid height value in line " + this.in.getLineNumber()); + final Number height = parseDoubleCheckNull(values, this.heightColIndex); + if ((height == null) || Double.isNaN(height.doubleValue())) { + logLineError(INVALID_VALUE_ERROR_FORMAT, "height"); return null; } - if ((this.bankColIndex >= 0) && this.bankAttributes.containsKey(values[this.bankColIndex].trim().toLowerCase())) { - final InfrastructureKmLineImport kmLine = new InfrastructureKmLineImport(km, parseDoubleWithNull(values[this.heightColIndex]).doubleValue(), - this.bankAttributes.get(values[this.bankColIndex].trim().toLowerCase())); - logTrace("createKmLineImport(" + km.toString() + ") => " + kmLine.getStation()); - return kmLine; - } - else { - logError("Invalid bank value in line " + this.in.getLineNumber()); + final String bank = ((this.bankColIndex >= 0) && (values.length - 1 >= this.bankColIndex)) ? values[this.bankColIndex].trim().toLowerCase() : null; + if ((bank == null) || !this.bankAttributes.containsKey(bank)) { + logLineError("Invalid or missing bank value"); return null; } + final InfrastructureKmLineImport kmLine = new InfrastructureKmLineImport(km, height.doubleValue(), this.bankAttributes.get(bank)); + logTrace("createKmLineImport(" + km.toString() + ") => " + kmLine.getStation()); + return kmLine; } }