# HG changeset patch # User Christian Lins # Date 1361789734 -3600 # Node ID 2b24073e80d9f0bc23a04fb46df2d72689a4d787 # Parent cbfdd737600946da1378b985b767cbeee6b69073# Parent b87e504f916e46d7b1d7d04b5f25dfea483df05a Merge with default branch diff -r cbfdd7376009 -r 2b24073e80d9 flys-artifacts/doc/conf/artifacts/fixanalysis.xml --- a/flys-artifacts/doc/conf/artifacts/fixanalysis.xml Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-artifacts/doc/conf/artifacts/fixanalysis.xml Mon Feb 25 11:55:34 2013 +0100 @@ -304,6 +304,11 @@ + + + + + diff -r cbfdd7376009 -r 2b24073e80d9 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Mon Feb 25 11:55:34 2013 +0100 @@ -409,8 +409,9 @@ File dir, WSPLGENJob job ) { + String river = artifact.getDataAsString("river"); String geoJSON = artifact.getDataAsString("uesk.barriers"); - String srid = FLYSUtils.getRiverSrid(artifact); + String srid = FLYSUtils.getRiverDGMSrid(river); String srs = "EPSG:" + srid; if (geoJSON == null || geoJSON.length() == 0) { @@ -712,7 +713,7 @@ } String river = artifact.getDataAsString("river"); - String srid = FLYSUtils.getRiverSrid(artifact); + String srid = FLYSUtils.getRiverDGMSrid(river); String srs = "EPSG:" + srid; Floodplain plain = Floodplain.getFloodplain(river); diff -r cbfdd7376009 -r 2b24073e80d9 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixRealizingCompute.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixRealizingCompute.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixRealizingCompute.java Mon Feb 25 11:55:34 2013 +0100 @@ -130,6 +130,9 @@ new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); } + facets.add( + new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id)); + facets.add(new FixWQCurveFacet( 0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE))); diff -r cbfdd7376009 -r 2b24073e80d9 flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java --- a/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Mon Feb 25 11:55:34 2013 +0100 @@ -376,7 +376,7 @@ AttributeParser parser = new AttributeParser(oldAttrs); CollectionAttribute cAttr = parser.getCollectionAttribute(); - Output output = cAttr.getOutput(name); + Output output = cAttr.getOutput(name); Settings settings = null; if (output != null) { settings = output.getSettings(); diff -r cbfdd7376009 -r 2b24073e80d9 flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixATExport.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixATExport.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixATExport.java Mon Feb 25 11:55:34 2013 +0100 @@ -15,6 +15,7 @@ import de.intevation.flys.artifacts.model.Parameters; import de.intevation.flys.artifacts.model.fixings.FixAnalysisResult; +import de.intevation.flys.artifacts.model.fixings.FixResult; import de.intevation.flys.exports.AbstractExporter; @@ -46,8 +47,8 @@ if (data instanceof CalculationResult) { CalculationResult cr = (CalculationResult)data; Object resData = cr.getData(); - if (resData instanceof FixAnalysisResult) { - this.parameters = ((FixAnalysisResult)resData).getParameters(); + if (resData instanceof FixResult) { + this.parameters = ((FixResult)resData).getParameters(); } } else { diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/contrib/run_hydr_morph.sh --- a/flys-backend/contrib/run_hydr_morph.sh Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/contrib/run_hydr_morph.sh Mon Feb 25 11:55:34 2013 +0100 @@ -24,30 +24,31 @@ IMPORTER_MAINVALUE_TYPES=QWTD IMPORTER_ANNOTATION_TYPES="conf/annotation-types.xml" -IMPORTER_SKIP_GAUGES=false -IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES=false IMPORTER_SKIP_ANNOTATIONS=false -IMPORTER_SKIP_WST=false -IMPORTER_SKIP_PRFS=false +IMPORTER_SKIP_BWASTR=false IMPORTER_SKIP_DA50S=false IMPORTER_SKIP_DA66S=false -IMPORTER_SKIP_W80S=false -IMPORTER_SKIP_HYKS=false IMPORTER_SKIP_EXTRA_WST=false IMPORTER_SKIP_FIXATIONS=false -IMPORTER_SKIP_OFFICIAL_LINES=false IMPORTER_SKIP_FLOOD_WATER=false IMPORTER_SKIP_FLOOD_PROTECTION=false +IMPORTER_SKIP_GAUGES=false +IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES=false +IMPORTER_SKIP_HYKS=false +IMPORTER_SKIP_OFFICIAL_LINES=false +IMPORTER_SKIP_PRFS=false +IMPORTER_SKIP_W80S=false +IMPORTER_SKIP_WST=false IMPORTER_SKIP_BED_HEIGHT_SINGLE=false IMPORTER_SKIP_BED_HEIGHT_EPOCH=false -IMPORTER_SKIP_SEDIMENT_DENSITY=false +IMPORTER_SKIP_FLOW_VELOCITY=false IMPORTER_SKIP_MORPHOLOGICAL_WIDTH=false -IMPORTER_SKIP_FLOW_VELOCITY=false +IMPORTER_SKIP_SEDIMENT_DENSITY=false IMPORTER_SKIP_SEDIMENT_YIELD=false +IMPORTER_SKIP_SQ_RELATION=false IMPORTER_SKIP_WATERLEVELS=false IMPORTER_SKIP_WATERLEVEL_DIFFERENCES=false -IMPORTER_SKIP_SQ_RELATION=false ##################################################################### #MIN_MEMORY="8192m" @@ -80,29 +81,30 @@ -Dflys.backend.main.value.types=$IMPORTER_MAINVALUE_TYPES \ -Dflys.backend.importer.annotation.types=$IMPORTER_ANNOTATION_TYPES \ -Dflys.backend.importer.dry.run=$IMPORTER_DRY_RUN \ - -Dflys.backend.importer.skip.historical.discharge.tables=$IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES \ - -Dflys.backend.importer.skip.gauges=$IMPORTER_SKIP_GAUGES \ -Dflys.backend.importer.skip.annotations=$IMPORTER_SKIP_ANNOTATIONS \ - -Dflys.backend.importer.skip.prfs=$IMPORTER_SKIP_PRFS \ - -Dflys.backend.importer.skip.w80s=$IMPORTER_SKIP_W80S \ + -Dflys.backend.importer.skip.bed.height.single=$IMPORTER_SKIP_BED_HEIGHT_SINGLE \ + -Dflys.backend.importer.skip.bed.height.epoch=$IMPORTER_SKIP_BED_HEIGHT_EPOCH \ + -Dflys.backend.importer.skip.bwastr=$IMPORTER_SKIP_BWASTR \ -Dflys.backend.importer.skip.da50s=$IMPORTER_SKIP_DA50S \ -Dflys.backend.importer.skip.da66s=$IMPORTER_SKIP_DA66S \ - -Dflys.backend.importer.skip.hyks=$IMPORTER_SKIP_HYKS \ - -Dflys.backend.importer.skip.wst=$IMPORTER_SKIP_WST \ -Dflys.backend.importer.skip.extra.wsts=$IMPORTER_SKIP_EXTRA_WST \ -Dflys.backend.importer.skip.fixations=$IMPORTER_SKIP_FIXATIONS \ - -Dflys.backend.importer.skip.official.lines=$IMPORTER_SKIP_OFFICIAL_LINES \ -Dflys.backend.importer.skip.flood.water=$IMPORTER_SKIP_FLOOD_WATER \ -Dflys.backend.importer.skip.flood.protection=$IMPORTER_SKIP_FLOOD_PROTECTION \ - -Dflys.backend.importer.skip.bed.height.single=$IMPORTER_SKIP_BED_HEIGHT_SINGLE \ - -Dflys.backend.importer.skip.bed.height.epoch=$IMPORTER_SKIP_BED_HEIGHT_EPOCH \ + -Dflys.backend.importer.skip.flow.velocity=$IMPORTER_SKIP_FLOW_VELOCITY \ + -Dflys.backend.importer.skip.gauges=$IMPORTER_SKIP_GAUGES \ + -Dflys.backend.importer.skip.historical.discharge.tables=$IMPORTER_SKIP_HISTORICAL_DISCHARGE_GAUGES \ + -Dflys.backend.importer.skip.hyks=$IMPORTER_SKIP_HYKS \ + -Dflys.backend.importer.skip.morphological.width=$IMPORTER_SKIP_MORPHOLOGICAL_WIDTH \ + -Dflys.backend.importer.skip.official.lines=$IMPORTER_SKIP_OFFICIAL_LINES \ + -Dflys.backend.importer.skip.prfs=$IMPORTER_SKIP_PRFS \ -Dflys.backend.importer.skip.sediment.density=$IMPORTER_SKIP_SEDIMENT_DENSITY \ - -Dflys.backend.importer.skip.morphological.width=$IMPORTER_SKIP_MORPHOLOGICAL_WIDTH \ - -Dflys.backend.importer.skip.flow.velocity=$IMPORTER_SKIP_FLOW_VELOCITY \ -Dflys.backend.importer.skip.sediment.yield=$IMPORTER_SKIP_SEDIMENT_YIELD \ + -Dflys.backend.importer.skip.sq.relation=$IMPORTER_SKIP_SQ_RELATION \ + -Dflys.backend.importer.skip.w80s=$IMPORTER_SKIP_W80S \ -Dflys.backend.importer.skip.waterlevels=$IMPORTER_SKIP_WATERLEVELS \ -Dflys.backend.importer.skip.waterlevel.differences=$IMPORTER_SKIP_WATERLEVEL_DIFFERENCES \ - -Dflys.backend.importer.skip.sq.relation=$IMPORTER_SKIP_SQ_RELATION \ + -Dflys.backend.importer.skip.wst=$IMPORTER_SKIP_WST \ -Dflys.backend.user=$BACKEND_USER \ -Dflys.backend.password=$BACKEND_PASS \ -Dflys.backend.url=$BACKEND_URL \ diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/doc/README.txt --- a/flys-backend/doc/README.txt Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/doc/README.txt Mon Feb 25 11:55:34 2013 +0100 @@ -18,8 +18,9 @@ System-Properties gesteuert werden. Diese werden im Allgemeinen in der Form -Dkey=value angegeben. -Will man z.B. mit dem Importer nur in simulierierten Import -durchführen, dann kann dies über die Angabe von +Will man z.B. mit dem Importer nur einen simulierten Import +durchführen (also nicht in die Datenbank geschrieben werden), +dann kann dies über die Angabe von '-Dflys.backend.importer.dry.run=true' erfolgen. !!! Der Import geht wie Desktop-FLYS davon aus, dass die Dateien diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/doc/documentation/de/importer-hydr-morph.tex --- a/flys-backend/doc/documentation/de/importer-hydr-morph.tex Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/doc/documentation/de/importer-hydr-morph.tex Mon Feb 25 11:55:34 2013 +0100 @@ -32,7 +32,7 @@ \end{lstlisting} Auf gleiche Weise können dem Importer sämtliche Optionen zur Konfiguration -beim Start mitgegeben werden. Im folgenden werden die möglichen System-Properties und +beim Start mitgegeben werden. Im Folgenden werden die möglichen System-Properties und ihre Auswirkung auf den Import genauer beschrieben. In den Kapiteln \ref{configuration} und \ref{start-hydr} wird zur Einfachheit jedoch ein Shellskript verwendet, das eine Standardkonfiguration vorgibt und den Importer @@ -53,6 +53,12 @@ festgelegt, anhand derer die Klassifikation während des Import-Vorgangs vorgenommen wird. Details hierzu befinden sich im Kapitel \ref{annotation-types}. +\subsubsection{Bundeswasserstraßen-IDs} +Der Import und die Zuweisung der Bundeswasserstraßen-IDs kann mit +\textbf{-Dflys.backend.importer.skip.bwastr=true} unterbunden werden. +Beim Import wird davon ausgegangen dass sich die Datei \textbf{BWASTR\_ID.csv} +neben der oder den zu importierenden gew-Dateien befindet. + \subsubsection{Pegel, Stammdaten (*.glt, *.sta-Dateien)} Der Import von Pegel- und Stammdaten kann mit \textbf{'-Dflys.backend.importer.skip.gauges=true'} unterdrückt werden. Die .glt-Datei, die neben der .wst-Datei liegt, wird zuerst @@ -65,7 +71,7 @@ unterdrückt werden. Diese Flagge wird nur ausgewertet, wenn überhaupt Pegel-Daten (siehe oben) importiert werden. -Mittels \textbf{-Dflys.backend.sta.parse.gauge.numbers=true'} wird versucht, die +Mittels \textbf{-Dflys.backend.sta.parse.gauge.numbers=true} wird versucht, die offiziellen Pegelnummern aus den Stammdaten zu extrahieren. \textbf{Dies ist mit Vorsicht zu behandeln, denn die meisten STA-Dateien enthalten invalide Pegelnummern.} @@ -100,6 +106,13 @@ eines Längen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate ausgeschlossen. +\subsubsection{Profilspuren (*.w80-Dateien)} +Der Import von W80-Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.w80s=true} +unterdrückt werden. Es werden rekursiv alle *.w80-Dateien aus \textit{../../..} +relativ zur gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe +eines Längen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate +ausgeschlossen. + \subsubsection{Hydraulische Kennzahlen (*.hyk)} Der Import von hydraulischen Kennzahlen kann mit \textbf{-Dflys.backend.importer.skip.hyks=true} unterdrückt werden. Es werden rekursiv alle *.hyk-Dateien aus \textit{../../..} relativ zur diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/doc/documentation/de/importer-manual.tex --- a/flys-backend/doc/documentation/de/importer-manual.tex Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/doc/documentation/de/importer-manual.tex Mon Feb 25 11:55:34 2013 +0100 @@ -19,6 +19,8 @@ \usepackage{listings} \usepackage[hyperindex=true, bookmarks=true, breaklinks=true, colorlinks=true, linkcolor=red,bookmarksopen]{hyperref} +% German Silbentrennung +\usepackage[ngerman]{babel} %---------------------------------------------- % Document DATE and VERSION diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/doc/documentation/de/overview.tex --- a/flys-backend/doc/documentation/de/overview.tex Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/doc/documentation/de/overview.tex Mon Feb 25 11:55:34 2013 +0100 @@ -2,7 +2,7 @@ Diese Dokumentation beschreibt die von Intevation entwickelten Werkzeuge zum Importieren der hydrologischen, morphologischen und geodätischen Daten der BfG. -Die im folgenden\\ beschriebenen Werkzeuge zum Importieren der fachlichen und +Die im Folgenden\\ beschriebenen Werkzeuge zum Importieren der fachlichen und geodätischen Daten sind speziell auf das Verzeichnissystem der BfG ausgerichtet. Dabei wird angenommen, dass sich das Verzeichnis eines Gewässers auf oberster Ebene in drei Unterverzeichnisse aufgliedert: @@ -22,10 +22,11 @@ \subsubsection{Entpacken des Datenimporters} Damit die Software performant und korrekt ausgeführt werden kann, ist es -erforderlich, dass sie auf dem selben System installiert und ausgeführt wird, -wie auch die Datenbank installiert ist. Sollten Sie das Paket nicht auf dem +erforderlich, dass sie auf dem selben System wie die Datenbank installiert +und ausgeführt wird. +Sollten Sie das Paket nicht auf dem Zielsystem selbst heruntergeladen haben, sind ggf. weitere Werkzeuge notwendig. -Im Fall, dass das Sie von einem Windows System auf das Zielsystem zugreifen +Wenn Sie von einem Windows System auf das Zielsystem zugreifen wollen, können Sie beispielsweise folgende Werkzeuge verwenden: \begin{itemize} @@ -91,7 +92,7 @@ Zum Einspielen dieser Schemata setzen Sie folgende Befehle auf der Kommandozeile ab. Beachten Sie, dass $sqlplus$ im Pfad liegen muss, und der Linux-Nutzer -dies Kommando ausführen können muss. Außerdem sind $benutzername$ und $passwort$ +dieses Kommando ausführen können muss. Außerdem sind $benutzername$ und $passwort$ entsprechend Ihres Datenbank-Zugangs anzupassen. \begin{lstlisting} diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/Config.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/Config.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/Config.java Mon Feb 25 11:55:34 2013 +0100 @@ -17,6 +17,9 @@ public static final String SKIP_GAUGES = "flys.backend.importer.skip.gauges"; + public static final String SKIP_BWASTR = + "flys.backend.importer.skip.bwastr"; + public static final String SKIP_HISTORICAL_DISCHARGE_TABLES = "flys.backend.importer.skip.historical.discharge.tables"; @@ -119,6 +122,10 @@ return getFlag(SKIP_HISTORICAL_DISCHARGE_TABLES); } + public boolean skipBWASTR() { + return getFlag(SKIP_BWASTR); + } + public boolean skipAnnotations() { return getFlag(SKIP_ANNOTATIONS); } diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/ImportCrossSectionLine.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportCrossSectionLine.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportCrossSectionLine.java Mon Feb 25 11:55:34 2013 +0100 @@ -25,9 +25,9 @@ } }; - protected Double km; + protected Double km; protected ImportCrossSection crossSection; - protected List points; + protected List points; protected CrossSectionLine peer; diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java Mon Feb 25 11:55:34 2013 +0100 @@ -46,6 +46,7 @@ /** Import all river-related data (files) that can be found. */ public class ImportRiver { + /** Private logger. */ private static Logger log = Logger.getLogger(ImportRiver.class); public static final String PEGEL_GLT = "PEGEL.GLT"; @@ -105,9 +106,11 @@ protected String name; - protected File wstFile; + protected Long officialNumber; - protected File bbInfoFile; + protected File wstFile; + + protected File bbInfoFile; protected List gauges; @@ -155,6 +158,7 @@ protected AnnotationClassifier annotationClassifier; + /** Database-mapped River instance. */ protected River peer; @@ -233,6 +237,14 @@ this.name = name; } + public Long getOfficialNumber() { + return this.officialNumber; + } + + public void setOfficialNumber(Long officialNumber) { + this.officialNumber = officialNumber; + } + public File getWstFile() { return wstFile; } @@ -329,6 +341,13 @@ } } + public void storeOfficialNumber() { + if (Config.INSTANCE.skipBWASTR()) { + log.info("skip storing official number."); + return; + } + getPeer().setOfficialNumber(officialNumber); + } public void parseBedHeight() throws IOException { File minfoDir = getMinfoDir(); @@ -541,7 +560,12 @@ parser.parse(file); } - waterlevels = parser.getWaterlevels(); + // The parsed ImportWaterlevels are converted to + // 'fixation'-wsts now. + for(ImportWst iw: parser.exportWsts()) { + //iw.setDescription("CSV" + iw.getDescription()); + fixations.add(iw); + } } protected void parseMeasurementStations() throws IOException { @@ -1058,6 +1082,7 @@ storeWaterlevelDifferences(); storeMeasurementStations(); storeSQRelations(); + storeOfficialNumber(); } public void storeWstUnit() { @@ -1097,8 +1122,8 @@ } public void storeFixations() { - if (!Config.INSTANCE.skipFixations()) { - log.info("store fixation wsts"); + if (!Config.INSTANCE.skipFixations() || !Config.INSTANCE.skipWaterlevels()) { + log.info("store fixation wsts and/or csvs"); River river = getPeer(); for (ImportWst wst: fixations) { log.debug("name: " + wst.getDescription()); @@ -1435,13 +1460,19 @@ Session session = ImporterSession.getInstance().getDatabaseSession(); Query query = session.createQuery("from River where name=:name"); - Unit u = wstUnit.getPeer(); + Unit u = null; + if (wstUnit != null) { + u = wstUnit.getPeer(); + } query.setString("name", name); List rivers = query.list(); if (rivers.isEmpty()) { log.info("Store new river '" + name + "'"); peer = new River(name, u); + if (!Config.INSTANCE.skipBWASTR()) { + peer.setOfficialNumber(officialNumber); + } session.save(peer); } else { diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevel.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevel.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevel.java Mon Feb 25 11:55:34 2013 +0100 @@ -31,14 +31,26 @@ this.description = description; } + public String getDescription() { + return this.description; + } + public void setUnit(ImportUnit unit) { this.unit = unit; } + public ImportUnit getUnit() { + return this.unit; + } + public void addValue(ImportWaterlevelQRange qRange) { this.qRanges.add(qRange); } + public List getQRanges() { + return this.qRanges; + } + public void storeDependencies(River river) { log.info("store dependencies"); diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelQRange.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelQRange.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelQRange.java Mon Feb 25 11:55:34 2013 +0100 @@ -18,7 +18,6 @@ private static final Logger log = Logger.getLogger(ImportWaterlevelQRange.class); - private Double q; private List values; @@ -35,6 +34,13 @@ this.values.add(value); } + public Double getQ() { + return this.q; + } + + public List getValues() { + return values; + } public void storeDependencies(Waterlevel waterlevel) { log.info("store dependencies"); diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelValue.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelValue.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportWaterlevelValue.java Mon Feb 25 11:55:34 2013 +0100 @@ -29,6 +29,15 @@ } + public Double getStation() { + return this.station; + } + + + public Double getW() { + return this.w; + } + public WaterlevelValue getPeer(WaterlevelQRange qRange) { if (peer == null) { Session session = ImporterSession.getInstance().getDatabaseSession(); diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/Importer.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/Importer.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/Importer.java Mon Feb 25 11:55:34 2013 +0100 @@ -2,13 +2,16 @@ import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.importer.parsers.AnnotationClassifier; +import de.intevation.flys.importer.parsers.BundesWasserStrassenParser; import de.intevation.flys.importer.parsers.InfoGewParser; -import de.intevation.flys.importer.parsers.AnnotationClassifier; import java.io.File; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.sql.SQLException; @@ -19,12 +22,16 @@ import org.w3c.dom.Document; +import de.intevation.flys.utils.StringUtil; -/** Data Importer. */ +/** Data Importer. Further processing happens per-river. */ public class Importer { + /** Private logger. */ private static Logger log = Logger.getLogger(Importer.class); + private static String BWASTR_ID_CSV_FILE = "BWASTR_ID.csv"; + protected List rivers; public Importer() { @@ -42,6 +49,7 @@ this.rivers = rivers; } + /** Write rivers and their dependencies/dependants to db. */ public void writeRivers() { log.debug("write rivers started"); @@ -121,10 +129,16 @@ log.info("Start parsing rivers..."); + File bwastrFile = null; + for (String gew: args) { log.info("parsing info gew file: " + gew); + File gewFile = new File(gew); + if (bwastrFile == null) { + bwastrFile = new File(gewFile.getParentFile(), BWASTR_ID_CSV_FILE); + } try { - infoGewParser.parse(new File(gew)); + infoGewParser.parse(gewFile); } catch (IOException ioe) { log.error("error while parsing gew: " + gew); @@ -134,14 +148,45 @@ String gew = Config.INSTANCE.getInfoGewFile(); if (gew != null && gew.length() > 0) { log.info("parsing info gew file: " + gew); + File gewFile = new File(gew); + if (bwastrFile == null) { + bwastrFile = new File(gewFile.getParentFile(), BWASTR_ID_CSV_FILE); + } try { - infoGewParser.parse(new File(gew)); + infoGewParser.parse(gewFile); } catch (IOException ioe) { log.error("error while parsing gew: " + gew); } } + // Look for official numbers. + BundesWasserStrassenParser bwastrIdParser = + new BundesWasserStrassenParser(); + + // Read bwastFile (river-dir + BWASTR_ID_CSV_FILE). + if (!Config.INSTANCE.skipBWASTR()) { + try{ + bwastrIdParser.parse(bwastrFile); + HashMap map = bwastrIdParser.getMap(); + + // Now link rivers with official numbers. + for(ImportRiver river: infoGewParser.getRivers()) { + for(Map.Entry entry: map.entrySet()) { + if (StringUtil.containsIgnoreCase(entry.getKey(), river.getName())) { + river.setOfficialNumber(entry.getValue()); + log.debug(river.getName() + " is mapped to bwastr " + entry.getValue()); + } + } + } + } catch (IOException ioe) { + log.warn("BWASTR-file could not be loaded."); + } + } + else { + log.debug("skip reading BWASTR_ID.csv"); + } + if (!Config.INSTANCE.dryRun()) { new Importer(infoGewParser.getRivers()).writeToDatabase(); } diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/parsers/BundesWasserStrassenParser.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/BundesWasserStrassenParser.java Mon Feb 25 11:55:34 2013 +0100 @@ -0,0 +1,85 @@ +package de.intevation.flys.importer.parsers; + +import java.math.BigDecimal; + +import java.text.NumberFormat; +import java.text.ParseException; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.log4j.Logger; + +import de.intevation.flys.importer.ImportMorphWidth; +import de.intevation.flys.importer.ImportMorphWidthValue; +import de.intevation.flys.importer.ImportUnit; + +/** Parse CSV file that contains official numbers for rivers. */ +public class BundesWasserStrassenParser extends LineParser { + + /** Private logger. */ + private static final Logger logger = + Logger.getLogger(BundesWasserStrassenParser.class); + + /** Map from rivernames to Official numbers. */ + private HashMap numberMap; + + + public BundesWasserStrassenParser() { + numberMap = new HashMap(); + } + + + /** No need to reset. */ + @Override + protected void reset() { + } + + + /** No action needed on eof. */ + @Override + protected void finish() { + } + + + /** Handle a line of the bwastr-id file. */ + @Override + protected void handleLine(int lineNum, String line) { + String[] vals = line.split(","); + if (vals.length != 2) { + logger.warn("Invalid bwastr-id line:\n" + line); + return; + } + try{ + String name = unwrap(vals[0].toLowerCase()); + String numberStr = unwrap(vals[1]); + Long number = Long.valueOf(numberStr); + numberMap.put(name, number); + } + catch (NumberFormatException e) { + logger.warn("Invalid number in bwastr-id line:\n" + line); + } + } + + + /** Get river->official number mapping. */ + public HashMap getMap() { + return numberMap; + } + + + /** Remove leading and trailing quotes. */ + protected String unwrap(String input) { + if (input.startsWith("\"")) { + input = input.substring(1); + } + if (input.endsWith("\"")) { + input = input.substring(0, input.length() - 1); + } + return input; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/parsers/InfoGewParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/InfoGewParser.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/InfoGewParser.java Mon Feb 25 11:55:34 2013 +0100 @@ -57,7 +57,7 @@ return f.replace("\\", "/").replace("/", File.separator); } - /* Handle a gew, wst, or bb_info file. */ + /** Handle a gew, wst, or bb_info file. */ public void parse(File file) throws IOException { LineNumberReader in = null; diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/parsers/MorphologicalWidthParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/MorphologicalWidthParser.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/MorphologicalWidthParser.java Mon Feb 25 11:55:34 2013 +0100 @@ -22,14 +22,11 @@ private static final Logger log = Logger.getLogger(MorphologicalWidthParser.class); - public static final NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE); - public static final Pattern META_UNIT = Pattern.compile("^Einheit: \\[(.*)\\].*"); - protected List morphWidths; protected ImportMorphWidth current; diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java Mon Feb 25 11:55:34 2013 +0100 @@ -2,6 +2,7 @@ import java.io.File; import java.io.IOException; +import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; @@ -16,7 +17,19 @@ import de.intevation.flys.importer.ImportWaterlevelQRange; import de.intevation.flys.importer.ImportWaterlevelValue; +import de.intevation.flys.importer.ImportWstColumn; +import de.intevation.flys.importer.ImportRange; +import de.intevation.flys.importer.ImportWst; +import de.intevation.flys.importer.ImportWstQRange; + +/** + * Parse CSV Waterlevel files. + * As these waterlevels are probably used in fixation analysis + * only, functionality to export them to "fixation"-wsts + * has been added (the ImportWaterlevel*- stuff is actually + * not needed to do so.) + */ public class WaterlevelParser extends LineParser { private static final Logger log = Logger.getLogger(WaterlevelParser.class); @@ -30,7 +43,6 @@ public static final Pattern META_UNIT = Pattern.compile("^Einheit: \\[(.*)\\].*"); - private List waterlevels; private ImportWaterlevel current; @@ -45,6 +57,56 @@ } + /** + * Create ImportWst objects from ImportWaterlevel + * objects. + */ + public List exportWsts() { + List wsts = new ArrayList(); + for(ImportWaterlevel waterlevel: getWaterlevels()) { + String description = waterlevel.getDescription(); + ImportWst wst = new ImportWst(); + wsts.add(wst); + wst.setDescription(description); + // Fixation kind. + wst.setKind(2); + wst.setUnit(waterlevel.getUnit()); + + // Fake WST has but 1 column. + wst.setNumberColumns(1); + ImportWstColumn column = wst.getColumn(0); + column.setDescription(description); + column.setName(description); + column.setPosition(0); + + // Build Q Range. + List qRanges = waterlevel.getQRanges(); + for(ImportWaterlevelQRange range: qRanges) { + List values = range.getValues(); + if (values.size() < 2) { + log.warn ("Not enough values to build valid QRange"); + continue; + } + ImportRange iRange = new ImportRange( + BigDecimal.valueOf(values.get(0).getStation()), + BigDecimal.valueOf(values.get(values.size() -1).getStation())); + column.addColumnQRange( + new ImportWstQRange(iRange, BigDecimal.valueOf(range.getQ()))); + } + + // The other W/KM values. + for(ImportWaterlevelQRange range: qRanges) { + for(ImportWaterlevelValue value: range.getValues()) { + column.addColumnValue(BigDecimal.valueOf(value.getStation()), + BigDecimal.valueOf(value.getW())); + } + } + // TODO Maybe set a timeinterval. + } + return wsts; + } + + public List getWaterlevels() { return waterlevels; } diff -r cbfdd7376009 -r 2b24073e80d9 flys-backend/src/main/java/de/intevation/flys/utils/StringUtil.java --- a/flys-backend/src/main/java/de/intevation/flys/utils/StringUtil.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-backend/src/main/java/de/intevation/flys/utils/StringUtil.java Mon Feb 25 11:55:34 2013 +0100 @@ -819,5 +819,11 @@ testQuote(); testStringArray2D(); } + + /** Check for occurence of needle in hay, converting both to lowercase + * to be ignorant of cases. */ + public static boolean containsIgnoreCase(String hay, String needle) { + return hay.toLowerCase().contains(needle.toLowerCase()); + } } // end of file diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java Mon Feb 25 11:55:34 2013 +0100 @@ -446,11 +446,11 @@ double km = (gauge.getKmEnd() + gauge.getKmStart())/2d; mainValueView.addItem(new WQAutoTabSet(gauge.getRiverName(), new double[] {km, km})); - mainValueView.setWidth(1010); - mainValueView.setHeight(700); + mainValueView.setWidth(450); + mainValueView.setHeight(600); - mainValueView.setMaximized(true); - + mainValueView.setMaximized(false); + mainValueView.centerInPage(); mainValueView.setCanDragReposition(true); mainValueView.setCanDragResize(true); mainValueView.setShowMaximizeButton(true); diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java Mon Feb 25 11:55:34 2013 +0100 @@ -1048,6 +1048,8 @@ String areatransparency(); + String attribution(); + // Manual Points editor String addpoints(); diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties Mon Feb 25 11:55:34 2013 +0100 @@ -543,6 +543,7 @@ wsplgen_cat3 = Fill Color 2.0 <= DIFF < 3 wsplgen_cat4 = Fill Color 3.0 <= DIFF < 4 wsplgen_cat5 = Fill Color 4.0 <= DIFF +attribution = ©Intevation GmbH 2012
Data ©OpenStreetMap # Manual Points Editor addpoints = Add points diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties Mon Feb 25 11:55:34 2013 +0100 @@ -402,6 +402,7 @@ requireDGM = Sie m\u00fcssen ein DGM ausw\u00e4hlen. upload_file = hochladen shape_file_upload = Shapedatei hochladen +attribution = ©Intevation GmbH 2012
Data ©OpenStreetMap # data cage waterlevels = Wasserst\u00e4nde diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties Mon Feb 25 11:55:34 2013 +0100 @@ -402,6 +402,7 @@ requireDGM = You need to choose a DEM. upload_file = upload shape_file_upload = Upload shapefile +attribution = ©Intevation GmbH 2012
Data ©OpenStreetMap # data cage waterlevels = Waterlevels diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/DigitizePanel.java Mon Feb 25 11:55:34 2013 +0100 @@ -39,6 +39,7 @@ import java.util.List; import org.gwtopenmaps.openlayers.client.Map; +import org.gwtopenmaps.openlayers.client.control.Attribution; import org.gwtopenmaps.openlayers.client.feature.VectorFeature; import org.gwtopenmaps.openlayers.client.format.GeoJSON; import org.gwtopenmaps.openlayers.client.layer.WMS; @@ -269,7 +270,7 @@ VectorFeature[] features = new GeoJSON().read(geojson); floodMap.getBarrierLayer().addFeatures(features); } - + map.addControl(new Attribution()); map.zoomToMaxExtent(); } @@ -285,7 +286,9 @@ opts.setSingleTile(true); opts.setRatio(1); opts.setBuffer(0); - + if (layers.equals("OSM-WMS-Dienst")) { + opts.setAttribution(MSG.attribution()); + } WMS wms = new WMS(layers, url, params, opts); wms.setIsVisible(true); wms.setIsBaseLayer(x); diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java Mon Feb 25 11:55:34 2013 +0100 @@ -113,6 +113,7 @@ baseUrl + MSG.downloadCSV(), moduleUrl + "export" + "?uuid=" + chartTab.getCollection().identifier() + + "&name=" + chartTab.getMode().getName() + "&mode=" + chartTab.getMode().getName() + "_at_export" + "&type=at" + "&server=" + config.getServerUrl() + diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java Mon Feb 25 11:55:34 2013 +0100 @@ -6,6 +6,7 @@ import org.gwtopenmaps.openlayers.client.MapOptions; import org.gwtopenmaps.openlayers.client.MapWidget; import org.gwtopenmaps.openlayers.client.Style; +import org.gwtopenmaps.openlayers.client.control.Attribution; import org.gwtopenmaps.openlayers.client.control.ScaleLine; import org.gwtopenmaps.openlayers.client.control.ScaleLineOptions; import org.gwtopenmaps.openlayers.client.event.VectorFeatureAddedListener; @@ -56,6 +57,7 @@ Integer.toString(height), opts); map = mapWidget.getMap(); + map.addControl(new Attribution()); } diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java Mon Feb 25 11:55:34 2013 +0100 @@ -454,7 +454,6 @@ if (url == null || layers == null) { return null; } - this.wmsUrls.put(name, url); WMSParams params = new WMSParams(); @@ -466,7 +465,9 @@ opts.setProjection("EPSG:" + getSrid()); opts.setSingleTile(true); opts.setRatio(1); - + if (layers.equals("OSM-WMS-Dienst")) { + opts.setAttribution(MSG.attribution()); + } WMS wms = new WMS(layers, url, params, opts); wms.setIsVisible(at.getActive() == 1); wms.setIsBaseLayer(false); diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/java/de/intevation/flys/client/client/ui/stationinfo/GaugeInfoPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/stationinfo/GaugeInfoPanel.java Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/stationinfo/GaugeInfoPanel.java Mon Feb 25 11:55:34 2013 +0100 @@ -5,7 +5,7 @@ import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.Grid; +import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.Label; @@ -24,43 +24,64 @@ public GaugeInfoPanel(GaugeInfo gauge, FLYS flys) { this.flys = flys; setStyleName("gaugeinfopanel"); - setWidth100(); - - Grid grid = new Grid(5, 2); NumberFormat nf = NumberFormat.getDecimalFormat(); + VLayout grid = new VLayout(); + HLayout line1 = new HLayout(); + Double minw = gauge.getMinW(); Double maxw = gauge.getMaxW(); if (minw != null && maxw != null) { - grid.setText(0, 0, MSG.wq_value_q()); - grid.setText(0, 1, nf.format(minw) + - " - " + nf.format(maxw)); + Label key = new Label(MSG.wq_value_q()); + Label value = new Label(nf.format(minw) + + " - " + nf.format(maxw)); + key.setWidth(150); + line1.addMember(key); + line1.addMember(value); } + HLayout line2 = new HLayout(); Double minq = gauge.getMinQ(); Double maxq = gauge.getMaxQ(); if (minq != null && maxq != null) { - grid.setText(1, 0, MSG.wq_value_w()); - grid.setText(1, 1, nf.format(minq) + + Label key = new Label(MSG.wq_value_w()); + Label value = new Label( nf.format(minq) + " - " + nf.format(maxq)); + key.setWidth(150); + line2.addMember(key); + line2.addMember(value); } + HLayout line3 = new HLayout(); Double aeo = gauge.getAeo(); if (aeo != null) { - grid.setText(2, 0, "AEO [km²]"); - grid.setText(2, 1, nf.format(aeo)); + Label key = new Label("AEO [km²]"); + Label value = new Label(nf.format(aeo)); + key.setWidth(150); + line3.addMember(key); + line3.addMember(value); } + HLayout line4 = new HLayout(); Double datum = gauge.getDatum(); if (datum != null) { - grid.setText(3, 0, MSG.gauge_zero() + " [" + + Label key = new Label(MSG.gauge_zero() + " [" + gauge.getWstUnit() + "]"); - grid.setText(3, 1, nf.format(datum)); + Label value = new Label(nf.format(datum)); + key.setWidth(150); + line4.addMember(key); + line4.addMember(value); } - grid.setWidget(4,0, new GaugeMainValueAnchor(flys, gauge)); + HLayout line5 = new HLayout(); + line5.addMember(new GaugeMainValueAnchor(flys, gauge)); + grid.addMember(line1); + grid.addMember(line2); + grid.addMember(line3); + grid.addMember(line4); + grid.addMember(line5); addMember(grid); } diff -r cbfdd7376009 -r 2b24073e80d9 flys-client/src/main/webapp/FLYS.css --- a/flys-client/src/main/webapp/FLYS.css Mon Feb 25 11:51:17 2013 +0100 +++ b/flys-client/src/main/webapp/FLYS.css Mon Feb 25 11:55:34 2013 +0100 @@ -235,3 +235,8 @@ color: #a9c9e6; margin-left: 10px; } + +.olControlAttribution { + bottom: 1em !important; + font-size: 12px !important; +}