# HG changeset patch # User Sascha L. Teichmann # Date 1304677652 0 # Node ID b35c5dc0f8b70d5ad6b3a2ae81a09eeb5a0d6ea2 # Parent 14de9246b3561ea87582de755cc744739fe008b3 Importer: Make import of historical discharge tables work. flys-backend/trunk@1842 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/ChangeLog --- a/flys-backend/ChangeLog Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/ChangeLog Fri May 06 10:27:32 2011 +0000 @@ -1,3 +1,25 @@ +2011-05-05 Sascha L. Teichmann + + Make import of historical discharge tables work. + + * doc/schema/postgresql.sql: Added forgotten column 'description'. + + !!! You have to drop your database !!! + + * src/main/java/de/intevation/flys/importer/ImportDischargeTable.java: + src/main/java/de/intevation/flys/model/DischargeTable.java: + Add the forgotten description property. + + * src/main/java/de/intevation/flys/importer/AtFileParser.java: + Fixed problems with date recognition. + + * src/main/java/de/intevation/flys/importer/ImportGauge.java: + Prefix the description of the historical discharge tables + with "Histor.Abflusstafeln". + + * src/main/java/de/intevation/flys/importer/ImportTimeInterval.java: + Fixed silly programming error. + 2011-05-05 Sascha L. Teichmann * src/main/java/de/intevation/flys/importer/AtFileParser.java: diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/doc/schema/postgresql.sql --- a/flys-backend/doc/schema/postgresql.sql Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/doc/schema/postgresql.sql Fri May 06 10:27:32 2011 +0000 @@ -114,6 +114,7 @@ CREATE TABLE discharge_tables ( id int PRIMARY KEY NOT NULL, gauge_id int NOT NULL REFERENCES gauges(id), + description VARCHAR(256) NOT NULL, kind int NOT NULL DEFAULT 0, time_interval_id int REFERENCES time_intervals(id), diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/src/main/java/de/intevation/flys/importer/AtFileParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/AtFileParser.java Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/AtFileParser.java Fri May 06 10:27:32 2011 +0000 @@ -40,10 +40,15 @@ public ImportDischargeTable parse(File file) throws IOException { - return parse(file, 0); + return parse(file, "", 0); } - public ImportDischargeTable parse(File file, int kind) throws IOException { + public ImportDischargeTable parse( + File file, + String prefix, + int kind + ) + throws IOException { logger.info("parsing AT file: " + file); @@ -53,7 +58,8 @@ boolean beginning = true; - ImportDischargeTable dischargeTable = new ImportDischargeTable(kind); + ImportDischargeTable dischargeTable = + new ImportDischargeTable(kind, prefix + file.getName()); Date from = null; Date to = null; @@ -73,8 +79,8 @@ Matcher m = DATE_LINE.matcher(tmp); if (m.matches()) { - from = guessDate(m.group(1), m.group(2), m.group(3)); - to = guessDate(m.group(4), m.group(5), m.group(6)); + from = guessDate(m.group(2), m.group(3), m.group(4)); + to = guessDate(m.group(5), m.group(6), m.group(7)); if (from == null) { Date t = from; from = to; to = t; } @@ -137,6 +143,9 @@ } if (from != null) { + if (to != null && from.compareTo(to) > 0) { + Date t = from; from = to; to = t; + } logger.info("from: " + from + " to: " + to); ImportTimeInterval interval = new ImportTimeInterval(from, to); dischargeTable.setTimeInterval(interval); @@ -152,6 +161,8 @@ return null; } + logger.debug("day: " + day + " month: " + month + " year: " + year); + int dayI = 15; if (day != null) { try { @@ -188,7 +199,9 @@ } Calendar cal = Calendar.getInstance(); - cal.set(yearI, monthI-1, dayI); + cal.set(yearI, monthI-1, dayI, 12, 0, 0); + long ms = cal.getTimeInMillis(); + cal.setTimeInMillis(ms - ms%1000); return cal.getTime(); } } diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/src/main/java/de/intevation/flys/importer/ImportDischargeTable.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportDischargeTable.java Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportDischargeTable.java Fri May 06 10:27:32 2011 +0000 @@ -10,26 +10,40 @@ import de.intevation.flys.model.Gauge; import de.intevation.flys.model.TimeInterval; +import org.apache.log4j.Logger; + public class ImportDischargeTable { protected DischargeTable peer; - protected Integer kind; + protected String description; + + protected Integer kind; protected List dischargeTableValues; protected ImportTimeInterval timeInterval; public ImportDischargeTable() { - this(0); + this(0, null); } - public ImportDischargeTable(int kind) { - this.kind = kind; + public ImportDischargeTable(int kind, String description) { + this.kind = kind; + this.description = description; dischargeTableValues = new ArrayList(); } + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public void addDischargeTableValue(ImportDischargeTableValue value) { dischargeTableValues.add(value); } @@ -62,14 +76,16 @@ Query query = session.createQuery( "from DischargeTable where " + - "gauge.id=:gauge and kind=:kind and timeInterval=:interval"); - query.setParameter("gauge", gauge.getId()); - query.setParameter("kind", kind); - query.setParameter("interval", ti); + "gauge.id=:gauge and kind=:kind and " + + "description=:description and timeInterval=:interval"); + query.setParameter("gauge", gauge.getId()); + query.setParameter("description", description); + query.setParameter("kind", kind); + query.setParameter("interval", ti); List dischargeTables = query.list(); if (dischargeTables.isEmpty()) { - peer = new DischargeTable(gauge, kind); + peer = new DischargeTable(gauge, description, kind, ti); session.save(peer); } else { diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/src/main/java/de/intevation/flys/importer/ImportGauge.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportGauge.java Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportGauge.java Fri May 06 10:27:32 2011 +0000 @@ -2,6 +2,7 @@ import java.io.File; +import java.util.ArrayList; import java.util.List; import java.math.BigDecimal; @@ -42,11 +43,14 @@ protected List mainValueTypes; protected List namedMainValues; protected List mainValues; + protected List historicalDischargeTables; public ImportGauge() { + historicalDischargeTables = new ArrayList(); } public ImportGauge(ImportRange range, File staFile, File atFile) { + this(); this.range = range; this.staFile = staFile; this.atFile = atFile; @@ -184,7 +188,8 @@ log.info("found at file '" + file.getName() + "'"); AtFileParser afp = new AtFileParser(); - ImportDischargeTable dct = afp.parse(file, 1); + historicalDischargeTables.add( + afp.parse(file, HISTORICAL_DISCHARGE_TABLES + "/", 1)); } } @@ -205,14 +210,20 @@ } storeDischargeTable(gauge); + storeHistoricalDischargeTable(gauge); } - public void storeDischargeTable(Gauge gauge) { dischargeTable.getPeer(gauge); dischargeTable.storeDependencies(gauge); } + public void storeHistoricalDischargeTable(Gauge gauge) { + for (ImportDischargeTable hdt: historicalDischargeTables) { + hdt.storeDependencies(gauge); + } + } + public Gauge getPeer(River river) { if (peer == null) { Session session = Importer.sessionHolder.get(); diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/src/main/java/de/intevation/flys/importer/ImportTimeInterval.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportTimeInterval.java Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportTimeInterval.java Fri May 06 10:27:32 2011 +0000 @@ -8,8 +8,12 @@ import java.util.List; import java.util.Date; +import org.apache.log4j.Logger; + public class ImportTimeInterval { + private static Logger log = Logger.getLogger(ImportTimeInterval.class); + protected Date startTime; protected Date stopTime; @@ -40,7 +44,7 @@ } public TimeInterval getPeer() { - if (peer != null) { + if (peer == null) { Session session = Importer.sessionHolder.get(); Query query = session.createQuery( "from TimeInterval where startTime=:a and stopTime=:b"); diff -r 14de9246b356 -r b35c5dc0f8b7 flys-backend/src/main/java/de/intevation/flys/model/DischargeTable.java --- a/flys-backend/src/main/java/de/intevation/flys/model/DischargeTable.java Thu May 05 15:25:16 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/model/DischargeTable.java Fri May 06 10:27:32 2011 +0000 @@ -22,6 +22,7 @@ { private Integer id; private Gauge gauge; + private String description; private Integer kind; private TimeInterval timeInterval; @@ -32,12 +33,19 @@ } public DischargeTable(Gauge gauge) { - this(gauge, 0); + this(gauge, null, 0, null); } - public DischargeTable(Gauge gauge, Integer kind) { - this.gauge = gauge; - this.kind = kind; + public DischargeTable( + Gauge gauge, + String description, + Integer kind, + TimeInterval timeInterval + ) { + this.gauge = gauge; + this.description = description; + this.kind = kind; + this.timeInterval = timeInterval; } @Id @@ -67,6 +75,15 @@ this.gauge = gauge; } + @Column(name = "description") + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + @Column(name = "kind") public Integer getKind() { return kind;