Mercurial > dive4elements > river
changeset 8059:bde5f5ec7c72
SCHEMA CHANGE and Importer: get time intervals of SQ-relations from metalines in sediment load files.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 18 Jul 2014 18:01:49 +0200 |
parents | fbe3ba5a480e |
children | 25feef564d09 |
files | backend/doc/schema/oracle-minfo.sql backend/doc/schema/postgresql-minfo.sql backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLS.java backend/src/main/java/org/dive4elements/river/importer/parsers/AbstractSedimentLoadParser.java backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadLSParser.java backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadParser.java backend/src/main/java/org/dive4elements/river/model/SedimentLoad.java backend/src/main/java/org/dive4elements/river/model/SedimentLoadLS.java |
diffstat | 9 files changed, 102 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/backend/doc/schema/oracle-minfo.sql Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/doc/schema/oracle-minfo.sql Fri Jul 18 18:01:49 2014 +0200 @@ -275,6 +275,7 @@ grain_fraction_id NUMBER(38,0), unit_id NUMBER(38,0) NOT NULL, time_interval_id NUMBER(38,0) NOT NULL, + sq_time_interval_id NUMBER(38,0), description VARCHAR(256), kind NUMBER(38,0), PRIMARY KEY (id), @@ -282,7 +283,9 @@ CONSTRAINT fk_sy_kind_id FOREIGN KEY (kind) REFERENCES sediment_yield_kinds(id), CONSTRAINT fk_sy_grain_fraction_id FOREIGN KEY (grain_fraction_id) REFERENCES grain_fraction(id), CONSTRAINT fk_sy_unit_id FOREIGN KEY (unit_id) REFERENCES units(id), - CONSTRAINT fk_sy_time_interval_id FOREIGN KEY (time_interval_id) REFERENCES time_intervals(id) + CONSTRAINT fk_sy_time_interval_id FOREIGN KEY (time_interval_id) REFERENCES time_intervals(id), + CONSTRAINT fk_sy_sq_time_interval_id FOREIGN KEY (sq_time_interval_id) + REFERENCES time_intervals(id) );
--- a/backend/doc/schema/postgresql-minfo.sql Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/doc/schema/postgresql-minfo.sql Fri Jul 18 18:01:49 2014 +0200 @@ -275,6 +275,7 @@ grain_fraction_id int, unit_id int NOT NULL, time_interval_id int NOT NULL, + sq_time_interval_id int, description VARCHAR(256), kind int, PRIMARY KEY (id), @@ -282,7 +283,9 @@ CONSTRAINT fk_sy_kind_id FOREIGN KEY (kind) REFERENCES sediment_yield_kinds(id), CONSTRAINT fk_sy_grain_fraction_id FOREIGN KEY (grain_fraction_id) REFERENCES grain_fraction(id), CONSTRAINT fk_sy_unit_id FOREIGN KEY (unit_id) REFERENCES units(id), - CONSTRAINT fk_sy_time_interval_id FOREIGN KEY (time_interval_id) REFERENCES time_intervals(id) + CONSTRAINT fk_sy_time_interval_id FOREIGN KEY (time_interval_id) REFERENCES time_intervals(id), + CONSTRAINT fk_sy_sq_time_interval_id FOREIGN KEY (sq_time_interval_id) + REFERENCES time_intervals(id) );
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java Fri Jul 18 18:01:49 2014 +0200 @@ -29,13 +29,15 @@ public ImportSedimentLoad ( ImportGrainFraction grainFraction, ImportTimeInterval timeInterval, + ImportTimeInterval sqTimeInterval, String description, Integer kind ) { - this.grainFraction = grainFraction; - this.timeInterval = timeInterval; - this.description = description; - this.kind = kind; + this.grainFraction = grainFraction; + this.timeInterval = timeInterval; + this.sqTimeInterval = sqTimeInterval; + this.description = description; + this.kind = kind; this.values = new ArrayList<ImportSedimentLoadValue>(); }
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLS.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoadLS.java Fri Jul 18 18:01:49 2014 +0200 @@ -33,6 +33,8 @@ private ImportTimeInterval timeInterval; + private ImportTimeInterval sqTimeInterval; + private String description; private Integer kind; @@ -50,6 +52,10 @@ this.timeInterval = timeInterval; } + public void setSQTimeInterval(ImportTimeInterval sqTimeInterval) { + this.sqTimeInterval = sqTimeInterval; + } + public void setUnit(ImportUnit unit) { this.unit = unit; } @@ -92,6 +98,9 @@ Unit u = unit != null ? unit.getPeer() : null; TimeInterval ti = timeInterval != null ? timeInterval.getPeer() : null; + TimeInterval sqti = sqTimeInterval != null + ? sqTimeInterval.getPeer() + : null; if (ti == null || u == null) { log.warn("Skip invalid SedimentLoadLS: time interval or unit null!"); @@ -101,23 +110,34 @@ if (peer == null) { Session session = ImporterSession.getInstance() .getDatabaseSession(); + + String sqtquery = sqTimeInterval == null ? + "sq_time_interval_id is null" : + "sqTimeInterval = :sqTimeInterval"; Query query = session.createQuery("from SedimentLoadLS where " + " river=:river and " - + " grainFraction=:grainFraction and " + " unit=:unit and " + + " grainFraction=:grainFraction and " + + " unit=:unit and " + " timeInterval=:timeInterval and " - + " description=:description"); + + " description=:description and " + + " kind = :kind and " + + sqtquery); query.setParameter("river", river); query.setParameter("grainFraction", gf); query.setParameter("unit", u); query.setParameter("timeInterval", ti); + if (sqti != null) { + query.setParameter("sqTimeInterval", sqti); + } query.setParameter("description", description); + query.setParameter("kind", kind); List<SedimentLoadLS> loads = query.list(); if (loads.isEmpty()) { log.debug("create new SedimentLoadLS"); - peer = new SedimentLoadLS(river, u, ti, gf, description); + peer = new SedimentLoadLS(river, u, ti, sqti, gf, description); peer.setKind(this.kind); session.save(peer); }
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/AbstractSedimentLoadParser.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/AbstractSedimentLoadParser.java Fri Jul 18 18:01:49 2014 +0200 @@ -52,6 +52,9 @@ public static final Pattern META_FRACTION_NAME = Pattern.compile("^Fraktionsname: (.*)"); + public static final Pattern META_SQ_TIMEINTERVAL = + Pattern.compile("^S-Q-Beziehung: (.*)"); + public static final Pattern META_COLUMN_NAMES = Pattern.compile("^Fluss-km.*"); @@ -71,6 +74,8 @@ protected ImportGrainFraction grainFraction; + protected ImportTimeInterval sqTimeInterval; + protected String description; protected String[] columnNames; @@ -164,6 +169,41 @@ } + public boolean handleMetaSQTimeInterval(String line) { + Matcher m = META_SQ_TIMEINTERVAL.matcher(line); + + if (m.matches()) { + String interval = m.group(1); + + try { + Matcher a = TIMEINTERVAL_EPOCH.matcher(interval); + if (a.matches()) { + int yearA = nf.parse(a.group(1)).intValue(); + int yearB = nf.parse(a.group(2)).intValue(); + + sqTimeInterval = new ImportTimeInterval( + DateUtil.getStartDateFromYear(yearA), + DateUtil.getEndDateFromYear(yearB) + ); + } + else { + log.warn("ASLP: Unknown SQ-time string: '" + interval + + "'. Ignored."); + } + } + catch (ParseException pe) { + log.error("ASLP: Could not parse SQ-time string: '" + + interval + "'. Ignored.", pe); + } + + return true; + + } + + return false; + } + + public boolean handleColumnNames(String line) throws LineParserException { Matcher m = META_COLUMN_NAMES.matcher(line);
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadLSParser.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadLSParser.java Fri Jul 18 18:01:49 2014 +0200 @@ -83,6 +83,9 @@ if (handleMetaFractionName(line)) { return; } + if (handleMetaSQTimeInterval(line)) { + return; + } if (handleColumnNames(line)) { return; } @@ -147,6 +150,7 @@ for (int i = 0, n = columnNames.length; i < n-2; i++) { current[i] = new ImportSedimentLoadLS(this.description); current[i].setTimeInterval(getTimeInterval(columnNames[i+1])); + current[i].setSQTimeInterval(sqTimeInterval); current[i].setUnit(unit); current[i].setGrainFraction(grainFraction); current[i].setKind(kind);
--- a/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadParser.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadParser.java Fri Jul 18 18:01:49 2014 +0200 @@ -88,6 +88,9 @@ if (handleMetaFractionName(line)) { return; } + if (handleMetaSQTimeInterval(line)) { + return; + } if (handleColumnNames(line)) { return; } @@ -184,6 +187,7 @@ current[i] = new ImportSedimentLoad( grainFraction, getTimeInterval(columnNames[i+1]), + sqTimeInterval, description, kind); }
--- a/backend/src/main/java/org/dive4elements/river/model/SedimentLoad.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/SedimentLoad.java Fri Jul 18 18:01:49 2014 +0200 @@ -96,11 +96,11 @@ @OneToOne @JoinColumn(name = "sq_time_interval_id") - public TimeInterval getSQTimeInterval() { + public TimeInterval getSqTimeInterval() { return sqTimeInterval; } - public void setSQTimeInterval(TimeInterval sqTimeInterval) { + public void setSqTimeInterval(TimeInterval sqTimeInterval) { this.sqTimeInterval = sqTimeInterval; }
--- a/backend/src/main/java/org/dive4elements/river/model/SedimentLoadLS.java Fri Jul 18 17:43:27 2014 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/SedimentLoadLS.java Fri Jul 18 18:01:49 2014 +0200 @@ -40,6 +40,8 @@ private TimeInterval timeInterval; + private TimeInterval sqTimeInterval; + private String description; private List<SedimentLoadLSValue> values; @@ -75,12 +77,14 @@ River river, Unit unit, TimeInterval timeInterval, + TimeInterval sqTimeInterval, GrainFraction grainFraction, String description ) { this(river, unit, timeInterval, grainFraction); - this.description = description; + this.sqTimeInterval = sqTimeInterval; + this.description = description; } @Id @@ -140,6 +144,16 @@ this.timeInterval = timeInterval; } + @OneToOne + @JoinColumn(name = "sq_time_interval_id") + public TimeInterval getSqTimeInterval() { + return sqTimeInterval; + } + + public void setSqTimeInterval(TimeInterval sqTimeInterval) { + this.sqTimeInterval = sqTimeInterval; + } + @Column(name = "description") public String getDescription() { return description;