# HG changeset patch # User Sascha L. Teichmann # Date 1366534019 -7200 # Node ID e95427ed80e5dbdba737afe8ea67fb66817156a9 # Parent 1126b9e00378a158630cbac4729d98770c4c8a69# Parent 300c0270c5763a7cd8d564090d9488ecc04c0107 Merged diff -r 1126b9e00378 -r e95427ed80e5 .hgtags --- a/.hgtags Sun Apr 21 10:46:06 2013 +0200 +++ b/.hgtags Sun Apr 21 10:46:59 2013 +0200 @@ -41,3 +41,5 @@ 2fa6da26a1421932608ab8c71ef51f260ad77acd 2.9.16 3e8f7b4bdf20f2f96edaab593dfaaefe2add46f5 2.9.17 8128622e4b2893d91a30bdd52f7e426f6098ba0c 2.9.18 +c4162d8378a1333f891b584228c9d00b0e367401 2.9.19 +280093510e1d726e034244275a6098f873b7bc9a 3.0.0 diff -r 1126b9e00378 -r e95427ed80e5 contrib/make_flys_release/bin/run.sh --- a/contrib/make_flys_release/bin/run.sh Sun Apr 21 10:46:06 2013 +0200 +++ b/contrib/make_flys_release/bin/run.sh Sun Apr 21 10:46:59 2013 +0200 @@ -12,7 +12,7 @@ export CLASSPATH -exec java -Xmx256m \ +exec java -Xmx1024m \ -server \ -Djava.awt.headless=true \ -Dflys.datacage.recommendations.development=false \ diff -r 1126b9e00378 -r e95427ed80e5 contrib/make_flys_release/make_release.sh --- a/contrib/make_flys_release/make_release.sh Sun Apr 21 10:46:06 2013 +0200 +++ b/contrib/make_flys_release/make_release.sh Sun Apr 21 10:46:59 2013 +0200 @@ -65,7 +65,7 @@ # --seddb-pass Sediment db password. Default: $SEDDBPASS # --seddb-back Sediment db backend. Default: $SEDDBBACK TOMCAT_PORT=${TOMCAT_PORT:-8282} -MAPSERVER_URL=${MAPSERVER_URL:-flys-devel.intevation.de} +MAPSERVER_URL=${MAPSERVER_URL:-http://flys-devel.intevation.de} WIKI_URL=${WIKI_URL:-https://flys-intern.intevation.de/Flys-3.0} # Prefix to FreeSans.ttf FONT_PATH=${FONT_PATH:-/opt/flys} @@ -187,6 +187,11 @@ echo "[INFO]: Preparing configuration of web client" echo "[INFO]: Tomcat Port: $TOMCAT_PORT" echo "[INFO]: Artifact Port: $ARTIFACT_PORT" + +#Needs to be done before the tomcat replacement below +sed -i -e "s@http://localhost:8888/flys/mapfish-print@https://localhost/flys-${VERSION}/flys/mapfish-print@g" \ + $FLYS_SOURCE_DIR/flys/flys-client/src/main/webapp/WEB-INF/web.xml + sed -i -e "s@http://localhost:8181@http://localhost:$ARTIFACT_PORT@g" \ -e "s@http://localhost:8888@http://localhost:$TOMCAT_PORT@g" \ $FLYS_SOURCE_DIR/flys/flys-client/src/main/webapp/WEB-INF/web.xml @@ -194,12 +199,13 @@ sed -i -e "s@/tmp/flys-client.log@${LOG_DIR}/client-${VERSION}.log@g" \ $FLYS_SOURCE_DIR/flys/flys-client/src/main/webapp/WEB-INF/log4j.properties -find $FLYS_SOURCE_DIR/flys/flys-artifacts/src/main/resources/ -name messages\*.properties | \ - xargs sed -i "s@https://flys-intern.intevation.de/Flys-3.0@${WIKI_URL}@g"; - +# XXX: Are they really used at runtime? find $FLYS_SOURCE_DIR/flys/ -name \*.properties -o -name \*.xsl | \ xargs sed -i "s@https://flys-intern.intevation.de@${WIKI_URL}@g"; +sed -i -e "s@/usr/share/fonts/truetype/freefont@${FONT_PATH}@g" \ + $FLYS_SOURCE_DIR/flys/flys-client/src/main/webapp/WEB-INF/config.yaml + if [ ! -f $FLYS_SOURCE_DIR/OpenLayers-2.11.tar.gz ]; then echo "INFO: download OpenLayers-2.11 for client" cd $FLYS_SOURCE_DIR @@ -264,10 +270,10 @@ sed -i "s/8181/$ARTIFACT_PORT/g" \ $WORK_DIR/server/conf/rest-server.xml -sed -i -e "s@http://example.com/@http://${MAPSERVER_URL}/@g" \ +sed -i -e "s@http://example.com/@${MAPSERVER_URL}/@g" \ $WORK_DIR/server/conf/floodmap.xml -sed -i -e "s@http://example.com/@http://${MAPSERVER_URL}/@g" \ +sed -i -e "s@http://example.com/@${MAPSERVER_URL}/@g" \ $WORK_DIR/server/conf/rivermap.xml sed -i -e "s@/usr/share/fonts/truetype/freefont@${FONT_PATH}@g" \ @@ -284,6 +290,7 @@ > $WORK_DIR/server/conf/log4j.properties sed -i -e "s@/path/to/rivers/@${DGM_PATH}@g" \ + -e "s@http://example.com@${WIKI_URL}@g" \ $WORK_DIR/server/conf/conf.xml cat > $WORK_DIR/server/conf/seddb-db.xml << EOF diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/artifacts/fixanalysis.xml --- a/flys-artifacts/doc/conf/artifacts/fixanalysis.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/artifacts/fixanalysis.xml Sun Apr 21 10:46:59 2013 +0200 @@ -284,6 +284,7 @@ + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/artifacts/minfo.xml --- a/flys-artifacts/doc/conf/artifacts/minfo.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/artifacts/minfo.xml Sun Apr 21 10:46:59 2013 +0200 @@ -179,6 +179,17 @@ + + + + + + + + + + + @@ -225,6 +236,19 @@ + + + + + + + + + + + + + @@ -240,6 +264,19 @@ + + + + + + + + + + + + + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/conf.xml Sun Apr 21 10:46:59 2013 +0200 @@ -128,6 +128,9 @@ de.intevation.artifactdatabase.DefaultArtifactFactory + de.intevation.artifactdatabase.DefaultArtifactFactory + + + /path/to/rivers/ + + + http://example.com diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/floodmap.xml --- a/flys-artifacts/doc/conf/floodmap.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/floodmap.xml Sun Apr 21 10:46:59 2013 +0200 @@ -36,28 +36,28 @@ - - - - - - - + - + - + + + + + + + - + - + - + @@ -72,16 +72,16 @@ - + - + - + - + @@ -90,10 +90,10 @@ - + - + @@ -114,22 +114,22 @@ - + - + - + - + - + - + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/meta-data.xml --- a/flys-artifacts/doc/conf/meta-data.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/meta-data.xml Sun Apr 21 10:46:59 2013 +0200 @@ -161,7 +161,7 @@ FROM wsts WHERE kind = 1 AND river_id = ${river_id} - + @@ -383,7 +383,7 @@ FROM wsts WHERE kind = 4 AND river_id = ${river_id} - + @@ -410,7 +410,8 @@ FROM wsts WHERE kind = 4 AND river_id = ${river_id} - + + - @@ -612,7 +613,7 @@ - + SELECT id AS width_id @@ -635,7 +636,7 @@ - + @@ -673,6 +674,7 @@ + @@ -768,6 +770,20 @@ + + + + + + + + + + + + + @@ -792,13 +808,6 @@ - - - @@ -1216,6 +1225,22 @@ + + + SELECT DISTINCT + b.name AS name + FROM hydr_boundaries_poly b + WHERE b.river_id = ${river_id} + AND b.kind = 1 + AND b.sobek IS NULL + AND b.sectie is NULL + + + + + @@ -1779,9 +1804,14 @@ - - + + + + + + + @@ -1795,12 +1825,6 @@ - - - - - @@ -1904,7 +1928,7 @@ - + @@ -2219,6 +2243,47 @@ + + + + + + + + SELECT id AS out_id + FROM outs + WHERE artifact_id = ${a_id} AND name = 'fix_deltawt_curve' + + + + + SELECT name AS facet_name, num AS facet_num, description AS facet_description + FROM facets + WHERE out_id = ${out_id} and ( + name LIKE 'fix_sector_average_dwt%' OR + name LIKE 'fix_deviation_dwt%') + ORDER BY num ASC, name DESC + + + + + + + + + + + + + + + + + + + + + @@ -2420,50 +2485,6 @@ - MINFO bedheight difference - - - - - - - - - - SELECT a.gid AS aid, - f.id AS fid, - f.name AS facet_name, - f.num AS facet_num, - f.description AS facet_description - FROM outs AS o, facets AS f, artifacts AS a - WHERE ( - f.name = 'fix_sector_average_ls_0' OR - f.name = 'fix_sector_average_ls_1' OR - f.name = 'fix_sector_average_ls_2' OR - f.name = 'fix_sector_average_ls_3' OR - f.name = 'fix_analysis_events_ls' OR - f.name = 'fix_reference_events_ls' - ) AND f.out_id = o.id AND o.artifact_id = ${a_id} AND a.id = ${a_id} - - - - - - - - - - - - - - - - - - - - MINFO bedheight middle @@ -2884,6 +2905,99 @@ + + + + + + + + SELECT ou.id AS oid + FROM outs AS ou, artifacts AS ar + WHERE + ar.state = 'state.fix.vollmer.compute' AND + ou.name = 'longitudinal_section' + + + + + + SELECT a.gid AS aid, + f.id AS fid, + f.name AS facet_name, + f.num AS facet_num, + f.description AS facet_description + FROM outs AS o, facets AS f, artifacts AS a + WHERE f.name = 'longitudinal_section.w' AND + f.out_id = o.id AND + o.artifact_id = ${a_id} AND + a.id = ${a_id} + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT id AS oid + FROM outs AS o + WHERE + o.artifact_id = ${a_id} AND + o.name = 'discharge_longitudinal_section' + + + + + + SELECT a.gid AS aid, + f.id AS fid, + f.name AS facet_name, + f.num AS facet_num, + f.description AS facet_description + FROM outs AS o, facets AS f, artifacts AS a + WHERE f.name = 'discharge_longitudinal_section.w' AND + f.out_id = o.id AND + o.artifact_id = ${a_id} AND + a.id = ${a_id} + + + + + + + + + + + + + + + + + + + @@ -2921,11 +3035,9 @@ - - - - + + @@ -2946,6 +3058,14 @@ + + + + + + + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/rivermap.xml --- a/flys-artifacts/doc/conf/rivermap.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/rivermap.xml Sun Apr 21 10:46:59 2013 +0200 @@ -32,24 +32,24 @@ - + - + - + - + - + - + - + - + @@ -62,14 +62,14 @@ - + - + - + - + @@ -77,9 +77,9 @@ - + - + @@ -97,19 +97,19 @@ - + - + - + - + - + - + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/themes.xml --- a/flys-artifacts/doc/conf/themes.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/themes.xml Sun Apr 21 10:46:59 2013 +0200 @@ -273,6 +273,7 @@ + @@ -344,7 +345,7 @@ - + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/doc/conf/themes/default/longitudinal-section.xml --- a/flys-artifacts/doc/conf/themes/default/longitudinal-section.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/doc/conf/themes/default/longitudinal-section.xml Sun Apr 21 10:46:59 2013 +0200 @@ -829,6 +829,16 @@ + + + + + + + + + @@ -934,7 +944,7 @@ display="Beschriftung anzeigen" default="false" hints="h" /> - + diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticMorphWidthArtifact.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticMorphWidthArtifact.java Sun Apr 21 10:46:59 2013 +0200 @@ -0,0 +1,110 @@ +package de.intevation.flys.artifacts; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.w3c.dom.Document; + +import de.intevation.artifactdatabase.state.DefaultOutput; +import de.intevation.artifactdatabase.state.Facet; +import de.intevation.artifactdatabase.state.FacetActivity; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.artifacts.model.minfo.BedHeightFacet; +import de.intevation.flys.artifacts.model.minfo.BedHeightFactory; +import de.intevation.flys.artifacts.model.minfo.MorphologicWidthFacet; +import de.intevation.flys.artifacts.resources.Resources; +import de.intevation.flys.artifacts.states.StaticState; + +public class StaticMorphWidthArtifact +extends AbstractStaticStateArtifact +{ + /** The logger for this class. */ + private static Logger logger = + Logger.getLogger(StaticMorphWidthArtifact.class); + + private static final String NAME = "morph-width"; + private static final String STATIC_FACET_NAME = "morph-width"; + + static { + // TODO: Move to configuration. + FacetActivity.Registry.getInstance() + .register(NAME, FacetActivity.INACTIVE); + } + + public static final String STATIC_STATE_NAME = + "state.morph-width.static"; + + /** + * Trivial Constructor. + */ + public StaticMorphWidthArtifact() { + } + + @Override + public String getName() { + return NAME; + } + + /** + * Gets called from factory, to set things up. + */ + @Override + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta callMeta, + Document data) + { + logger.debug("setup"); + + if (logger.isDebugEnabled()) { + logger.debug(XMLUtils.toString(data)); + } + + String code = getDatacageIDValue(data); + + if (code != null) { + Facet facet = new MorphologicWidthFacet( + STATIC_FACET_NAME, + Resources.getMsg( + callMeta, + "facet.morphologic.width", + "morphologische Breite")); + addStringData("width_id", code); + ArrayList facets = new ArrayList(1); + facets.add(facet); + + addFacets(STATIC_STATE_NAME, facets); + } + super.setup(identifier, factory, context, callMeta, data); + } + + @Override + protected void initStaticState() { + + logger.debug("initStaticState " + getName() + " " + identifier()); + + StaticState state = new StaticState(STATIC_STATE_NAME); + DefaultOutput output = new DefaultOutput( + "general", + "general", + "image/png", + "chart"); + + List facets = getFacets(STATIC_STATE_NAME); + output.addFacets(facets); + state.addOutput(output); + + setStaticState(state); + } + + @Override + protected void initialize(Artifact artifact, Object context, CallMeta meta) { + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/RangeAccess.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/RangeAccess.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/RangeAccess.java Sun Apr 21 10:46:59 2013 +0200 @@ -78,6 +78,13 @@ winfo.getReferenceEndKms()[0] }; } + else if (winfo.getReferenceStartKm() != null) { + return new double[] + { + winfo.getReferenceStartKm().doubleValue(), + winfo.getReferenceStartKm().doubleValue() + }; + } } return null; } diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/MovingAverage.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/MovingAverage.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/math/MovingAverage.java Sun Apr 21 10:46:59 2013 +0200 @@ -64,3 +64,4 @@ return map; } } +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Sun Apr 21 10:46:59 2013 +0200 @@ -103,6 +103,9 @@ return false; } + public static boolean SEDIMENT_LOAD(String type) { + return type.startsWith("sedimentload"); + } public static boolean SEDIMENT_LOAD_NO_FLOAT(String type) { return type.startsWith("sedimentload") && !type.contains("susp"); } @@ -286,6 +289,7 @@ String BED_DIFFERENCE_EPOCH_HEIGHT2 = "bedheight_difference.epoch.height2"; String BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED = "bedheight_difference.epoch.height1.filtered"; String BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED = "bedheight_difference.epoch.height2.filtered"; + String MORPHOLOGIC_WIDTH = "morph-width"; String SEDIMENT_LOAD_COARSE = "sedimentload.coarse"; String SEDIMENT_LOAD_SAND = "sedimentload.sand"; @@ -340,6 +344,8 @@ String FIX_ANALYSIS_EVENTS_LS = "fix_analysis_events_ls"; String FIX_ANALYSIS_EVENTS_WQ = "fix_analysis_events_wq"; + String FIX_EVENTS = "fix_events_wqkms"; + String FIX_REFERENCE_EVENTS_DWT = "fix_reference_events_dwt"; String FIX_REFERENCE_EVENTS_LS = "fix_reference_events_ls"; String FIX_REFERENCE_EVENTS_WQ = "fix_reference_events_wq"; diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsOverview.java Sun Apr 21 10:46:59 2013 +0200 @@ -39,6 +39,7 @@ "WHERE" + " name = :name"; + /** All kind-2 wsts from given river. */ public static final String SQL_FIXINGS = "SELECT" + " id AS wst_id," + @@ -47,6 +48,7 @@ "WHERE" + " river_id = :river_id AND kind = 2"; + /** All columns from given wst. */ public static final String SQL_FIXING_COLUMNS = "SELECT" + " wc.id AS wst_column_id," + @@ -327,6 +329,11 @@ } } + /** + * @param allColumns[out] Columns will be put here. + * @param range can be null. + * @param filter filter to apply. + */ public void addAllColumns( List allColumns, Range range, @@ -562,6 +569,7 @@ } } // class IdFilter + /** Accept Fixing columns whose id is in id list. */ public static class IdsFilter implements Fixing.Filter { protected int [] columnIds; diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/StaticMorphoWidthCacheKey.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/StaticMorphoWidthCacheKey.java Sun Apr 21 10:46:59 2013 +0200 @@ -0,0 +1,29 @@ +package de.intevation.flys.artifacts.model; + + +public class StaticMorphoWidthCacheKey +{ + public static final String CACHE_NAME = "morpho-width-table-static"; + + private int width_id; + + public StaticMorphoWidthCacheKey( + int width_id + ) { + this.width_id = width_id; + } + + @Override + public int hashCode() { + return (String.valueOf(width_id)).hashCode(); + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof StaticMorphoWidthCacheKey)) { + return false; + } + StaticMorphoWidthCacheKey o = (StaticMorphoWidthCacheKey) other; + return this.width_id == o.width_id; + } +} diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKmsFactory.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKmsFactory.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKmsFactory.java Sun Apr 21 10:46:59 2013 +0200 @@ -29,11 +29,15 @@ "SELECT position, w, q FROM wst_value_table " + "WHERE wst_id = :wst_id AND column_pos = :column_pos"; + /** Get wst_id and position from wst_columns. */ + public static final String SQL_SELECT_COLUMN = + "SELECT wst_id, position FROM wst_columns WHERE id = :column_id"; + /** Query to get name for wst_id and column_pos. */ public static final String SQL_SELECT_NAME = "SELECT name " + "FROM wst_columns "+ - "WHERE wst_id = :wst_id AND position = :column_pos"; + "WHERE id = :column_id"; /** Hidden constructor, use static methods instead. */ @@ -42,16 +46,16 @@ /** - * Get WKms for given column and wst_id, caring about the cache. + * Get WKms for given column (pos) and wst_id, caring about the cache. */ - public static WQKms getWQKms(int column, int wst_id) { + public static WQKms getWQKms(int columnPos, int wst_id) { log.debug("WQKmsFactory.getWQKms"); Cache cache = CacheFactory.getCache(StaticWQKmsCacheKey.CACHE_NAME); StaticWQKmsCacheKey cacheKey; if (cache != null) { - cacheKey = new StaticWQKmsCacheKey(wst_id, column); + cacheKey = new StaticWQKmsCacheKey(wst_id, columnPos); Element element = cache.get(cacheKey); if (element != null) { log.debug("Got static wst values from cache"); @@ -62,7 +66,41 @@ cacheKey = null; } - WQKms values = getWQKmsUncached(column, wst_id); + WQKms values = getWQKmsUncached(columnPos, wst_id); + + if (values != null && cacheKey != null) { + log.debug("Store static wst values in cache."); + Element element = new Element(cacheKey, values); + cache.put(element); + } + return values; + } + + /** + * Get WKms for given column (id), caring about the cache. + */ + public static WQKms getWQKmsCID(int columnID) { + log.debug("WQKmsFactory.getWQKms"); + Cache cache = CacheFactory.getCache(StaticWQKmsCacheKey.CACHE_NAME); + + StaticWQKmsCacheKey cacheKey; + + if (cache != null) { + cacheKey = new StaticWQKmsCacheKey(-columnID, -columnID); + Element element = cache.get(cacheKey); + if (element != null) { + log.debug("Got static wst values from cache"); + return (WQKms)element.getValue(); + } + } + else { + cacheKey = null; + } + + int[] cInfo = getColumn(columnID); + if (cInfo == null) return null; + WQKms values = getWQKmsUncached(cInfo[1], cInfo[0]); + if (values != null && cacheKey != null) { log.debug("Store static wst values in cache."); @@ -106,5 +144,56 @@ return wqkms; } + + + /** + * Get WQKms from db. + * @param columnID the columns database id value + * @param wst_id database id of the wst + * @return respective WQKms. + */ + public static int[] getColumn(int columnID) { + + if (log.isDebugEnabled()) { + log.debug("WQKmsFactory.getColumn, columnID " + + columnID); + } + + Session session = SessionHolder.HOLDER.get(); + + SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_COLUMN) + .addScalar("wst_id", StandardBasicTypes.INTEGER) + .addScalar("position", StandardBasicTypes.INTEGER); + sqlQuery.setInteger("column_id", columnID); + + List results = sqlQuery.list(); + + for (int i = 0, N = results.size(); i < N; i++) { + Object[] row = results.get(i); + return new int[] {(Integer)row[0], (Integer)row[1]}; + } + + return null; + } + + + /** Get name for a WKms. */ + public static String getWQKmsName(int columnID) { + log.debug("WQKmsFactory.getWQKmsName c/" + columnID); + + String name = null; + Session session = SessionHolder.HOLDER.get(); + + SQLQuery nameQuery = session.createSQLQuery(SQL_SELECT_NAME) + .addScalar("name", StandardBasicTypes.STRING); + nameQuery.setInteger("column_id", columnID); + + List names = nameQuery.list(); + if (names.size() >= 1) { + name = names.get(0); + } + + return name; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Sun Apr 21 10:46:59 2013 +0200 @@ -237,6 +237,10 @@ return sb.toString(); } + + /** Create filter to accept only the chosen events. + * This factored out out to be overwritten. + */ protected Filter createFilter() { return new IdsFilter(events); } @@ -267,6 +271,7 @@ return columns; } + // Fit a function to the given points from fixation. protected FitResult doFitting( FixingsOverview overview, ColumnCache cc, diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixEventFacet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixEventFacet.java Sun Apr 21 10:46:59 2013 +0200 @@ -0,0 +1,62 @@ +package de.intevation.flys.artifacts.model.fixings; + +import org.apache.log4j.Logger; + +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.CallContext; + +import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.model.DataFacet; +import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WQKmsFactory; +import de.intevation.flys.artifacts.access.FixRealizingAccess; + +import de.intevation.flys.artifacts.states.DefaultState.ComputeType; + + +/** + * Facet to show W|Q|km Values. + */ +public class FixEventFacet +extends DataFacet +implements FacetTypes { + + /** House logger. */ + private static Logger logger = Logger.getLogger(FixEventFacet.class); + + + public FixEventFacet(int index, String name, String description) { + super(index, name, description, ComputeType.FEED, null, null); + } + + + /** + * Returns the data this facet requires. + * + * @param artifact the owner artifact. + * @param context the CallContext (ignored). + * + * @return the data. + */ + @Override + public Object getData(Artifact artifact, CallContext context) { + logger.debug("FixEventFacet.getData"); + + FixRealizingAccess access = new FixRealizingAccess((FLYSArtifact) artifact, context); + int wstColID = access.getEvents()[index]; + return WQKmsFactory.getWQKmsCID(wstColID); + } + + + /** + * Create a deep copy of this Facet. + * @return a deep copy. + */ + @Override + public FixEventFacet deepCopy() { + FixEventFacet copy = new FixEventFacet(index, name, description); + copy.set(this); + return copy; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidth.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidth.java Sun Apr 21 10:46:59 2013 +0200 @@ -0,0 +1,50 @@ +package de.intevation.flys.artifacts.model.minfo; + +import java.util.HashMap; +import java.util.Map; + +import de.intevation.flys.jfree.DoubleBounds; + + +public class MorphologicWidth +{ + + private Map pairs; + + + public MorphologicWidth() { + pairs = new HashMap(); + } + + public void add(double station, double width) { + this.pairs.put(station, width); + } + + public Map getAll() { + return this.pairs; + } + + public double[][] getAsArray() { + double [][] array = new double[2][pairs.size()]; + Double[] kms = pairs.keySet().toArray(new Double[pairs.size()]); + Double[] width = pairs.values().toArray(new Double[pairs.size()]); + int realIndex = 0; + for (int i = 0; i < kms.length; i++) { + if (kms[i] == null || width[i] == null) { + continue; + } + array[0][realIndex] = kms[i]; + array[1][realIndex] = width[i]; + realIndex++; + } + return array; + } + + + public Double getWidth(double station) { + if (this.pairs.containsKey(station)) { + return this.pairs.get(station); + } + return null; + } +} diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidthFacet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidthFacet.java Sun Apr 21 10:46:59 2013 +0200 @@ -0,0 +1,54 @@ +package de.intevation.flys.artifacts.model.minfo; + +import org.apache.log4j.Logger; + +import de.intevation.artifactdatabase.state.Facet; +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.CallContext; +import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.model.DataFacet; +import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.states.DefaultState.ComputeType; + + +public class MorphologicWidthFacet +extends DataFacet +implements FacetTypes +{ + private static Logger logger = Logger.getLogger(SedimentLoadFacet.class); + + + public MorphologicWidthFacet() { + } + + public MorphologicWidthFacet(String facetName, String description) { + super(facetName, description); + } + + public MorphologicWidthFacet(int idx, String name, String description, + ComputeType type, String stateId, String hash) { + super(idx, name, description, type, hash, stateId); + } + + public Object getData(Artifact artifact, CallContext context) { + + FLYSArtifact flys = (FLYSArtifact) artifact; + String width_id = flys.getDataAsString("width_id"); + + MorphologicWidth width = + MorphologicWidthFactory.getWidth(Integer.valueOf(width_id)); + + return width; + } + + /** Copy deeply. */ + @Override + public Facet deepCopy() { + MorphologicWidthFacet copy = new MorphologicWidthFacet(); + copy.set(this); + copy.type = type; + copy.hash = hash; + copy.stateId = stateId; + return copy; + } +} diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidthFactory.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidthFactory.java Sun Apr 21 10:46:59 2013 +0200 @@ -0,0 +1,87 @@ +package de.intevation.flys.artifacts.model.minfo; + +import java.util.List; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.Element; + +import org.apache.log4j.Logger; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.type.StandardBasicTypes; + +import de.intevation.flys.artifacts.cache.CacheFactory; +import de.intevation.flys.artifacts.model.StaticMorphoWidthCacheKey; +import de.intevation.flys.backend.SessionHolder; + + +public class MorphologicWidthFactory +{ + /** Private logger to use here. */ + private static Logger log = Logger.getLogger(MorphologicWidthFactory.class); + + public static final String SQL_SELECT = + "SELECT mwv.station AS station, mwv.width AS width " + + " FROM morphologic_width mw" + + " JOIN morphologic_width_values mwv on mwv.morphologic_width_id = mw.id" + + " WHERE mw.id = :width_id"; + + private MorphologicWidthFactory() { + } + + + /** + * Get WKms for given column and wst_id, caring about the cache. + */ + public static MorphologicWidth getWidth(int width_id) { + log.debug("MorphologicWidthFactory.getWidth"); + Cache cache = CacheFactory.getCache(StaticMorphoWidthCacheKey.CACHE_NAME); + + StaticMorphoWidthCacheKey cacheKey; + + if (cache != null) { + cacheKey = new StaticMorphoWidthCacheKey(width_id); + Element element = cache.get(cacheKey); + if (element != null) { + log.debug("Got static bedheight values from cache"); + return (MorphologicWidth)element.getValue(); + } + } + else { + cacheKey = null; + } + + MorphologicWidth values = getWidthUncached(width_id); + + if (values != null && cacheKey != null) { + log.debug("Store static morphologic width values in cache."); + Element element = new Element(cacheKey, values); + cache.put(element); + } + return values; + } + + private static MorphologicWidth getWidthUncached(int width_id) { + if (log.isDebugEnabled()) { + log.debug("MorphologicWidthFactory.getWidthUncached"); + } + + Session session = SessionHolder.HOLDER.get(); + SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT) + .addScalar("station", StandardBasicTypes.DOUBLE) + .addScalar("width", StandardBasicTypes.DOUBLE); + sqlQuery.setInteger("width_id", width_id); + List results = sqlQuery.list(); + + MorphologicWidth widths = new MorphologicWidth(); + for (int i = 0; i < results.size(); i++) { + Object[] row = results.get(i); + log.debug("got station: " + (Double)row[0]); + widths.add( + (Double) row[0], + (Double) row[1]); + } + return widths; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensity.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensity.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensity.java Sun Apr 21 10:46:59 2013 +0200 @@ -78,7 +78,7 @@ } } } - return -1d; + return 1.8d; } private double getDensityAtKm( diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensityFactory.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensityFactory.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensityFactory.java Sun Apr 21 10:46:59 2013 +0200 @@ -81,7 +81,9 @@ results = sqlQuery.list(); SedimentDensity density = new SedimentDensity(); for (Object[] row : results) { - density.addDensity((Double)row[0], (Double)row[1], (Integer)row[2]); + if (row[0] != null && row[1] != null && row[2] != null) { + density.addDensity((Double)row[0], (Double)row[1], (Integer)row[2]); + } } density.cleanUp(); diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoad.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoad.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoad.java Sun Apr 21 10:46:59 2013 +0200 @@ -223,3 +223,4 @@ return false; } } +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadCalculation.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadCalculation.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadCalculation.java Sun Apr 21 10:46:59 2013 +0200 @@ -115,7 +115,7 @@ private SedimentLoadResult calculateEpoch(int i) { List epochLoads = new ArrayList(); for (int j = epoch[i][0]; j < epoch[i][1]; j++) { - epochLoads.add(SedimentLoadFactory.getLoadwithData( + epochLoads.add(SedimentLoadFactory.getLoadWithData( this.river, this.yearEpoch, this.kmLow, @@ -207,7 +207,7 @@ } private SedimentLoadResult calculateOffEpoch(int i) { - SedimentLoad load = SedimentLoadFactory.getLoadwithData( + SedimentLoad load = SedimentLoadFactory.getLoadWithData( this.river, this.yearEpoch, kmLow, @@ -234,7 +234,7 @@ } private SedimentLoadResult calculateYear(int y) { - SedimentLoad load = SedimentLoadFactory.getLoadwithData( + SedimentLoad load = SedimentLoadFactory.getLoadWithData( this.river, this.yearEpoch, this.kmLow, @@ -256,22 +256,29 @@ private SedimentLoad calculateTotalLoad(SedimentLoad load, int year) { logger.debug("calculateTotalLoad"); + boolean problemThisYear = false; if (!load.hasCoarse()) { - addProblem(year, "missing.fraction.coarse"); + addProblem("missing.fraction.coarse", Integer.toString(year)); + problemThisYear = true; } if (!load.hasFineMiddle()) { - addProblem(year, "missing.fraction.fine_middle"); + addProblem("missing.fraction.fine_middle", Integer.toString(year)); + problemThisYear = true; } if (!load.hasSand()) { - addProblem(year, "missing.fraction.sand"); + addProblem("missing.fraction.sand", Integer.toString(year)); + problemThisYear = true; } if (!load.hasSuspSand()) { - addProblem(year, "missing.fraction.susp_sand"); + addProblem("missing.fraction.susp_sand", Integer.toString(year)); + problemThisYear = true; } if (!load.hasSuspSediment()) { - addProblem(year, "missing.fraction.susp_sediment"); + addProblem("missing.fraction.susp_sediment", Integer.toString(year)); + problemThisYear = true; } - if (hasProblems()) { + if (problemThisYear) { + logger.warn("Some problem, not calculating total load."); return load; } for(double km : load.getKms()) { diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFacet.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFacet.java Sun Apr 21 10:46:59 2013 +0200 @@ -3,7 +3,12 @@ import org.apache.log4j.Logger; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.Map; +import java.util.TreeMap; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifacts.Artifact; @@ -54,6 +59,7 @@ return null; } + List sortedStarts = new ArrayList(); // Filter stations according to type. List stations = new ArrayList(); for (MeasurementStation station: allStations) { @@ -61,43 +67,72 @@ continue; } if (FacetTypes.IS.SEDIMENT_LOAD_NO_FLOAT(this.getName()) - && station.getMeasurementType().equals("Geschiebe")) + && station.getMeasurementType().equals("Geschiebe")) { stations.add(station); + sortedStarts.add(station.getStation()); + } else if (!FacetTypes.IS.SEDIMENT_LOAD_NO_FLOAT(this.getName()) - && station.getMeasurementType().equals("Schwebstoff")) + && station.getMeasurementType().equals("Schwebstoff")) { stations.add(station); + sortedStarts.add(station.getStation()); + } } + Collections.sort(sortedStarts); // Access data according to type. double[][] sd = getLoadData(result); + // Sort by km. + TreeMap sortData = new TreeMap(); + double[] km = sd[0]; double[] load = sd[1]; + for (int i = 0 ; i < km.length; i++) { + sortData.put(km[i], load[i]); + } + double[][] values = new double[2][]; - values[0] = new double[km.length*2]; - values[1] = new double[km.length*2]; + values[0] = new double[km.length*3]; + values[1] = new double[km.length*3]; + + List kmWithoutStation = new ArrayList(); // Find station via its station (km). - // TODO what to do with gaps in measurement stations. - for (int i = 0; i < km.length; i++) { + // TODO use a binarySearch instead of linear absdiff approach + int i = 0; + for (Map.Entry entry: sortData.entrySet()) { boolean matchFound = false; + // For now, ignore overlaps like (B> next A) for (MeasurementStation station: stations) { - if (Math.abs(station.getStation() - km[i]) < EPSILON) { - values[0][i*2] = station.getRange().getA().doubleValue(); - values[1][i*2] = load[i]; - values[0][i*2+1] = station.getRange().getB().doubleValue(); - values[1][i*2+1] = load[i]; + if (Math.abs(station.getStation() - entry.getKey()) < EPSILON || + station.getRange().containsTolerant(entry.getKey())) { + // TODO: In rare cases, two matches can be found. + values[0][i*3] = station.getRange().getA().doubleValue() + EPSILON; + values[1][i*3] = entry.getValue(); + values[0][i*3+1] = station.getRange().getB().doubleValue() - EPSILON; + values[1][i*3+1] = entry.getValue(); + values[0][i*3+2] = station.getRange().getB().doubleValue(); + values[1][i*3+2] = entry.getValue(); matchFound = true; } } - // For now, add point if no matching measurement station found. + // Store points without match for later assessment. if (!matchFound) { - values[0][i*2] = km[i]; - values[1][i*2] = load[i]; - logger.debug("No measurement station for km " + km[i]); + logger.warn("measurement without station ("+entry.getKey()+")!"); + } + i++; + } + + for (int x = 0; x < values[0].length-1; x++) { + // Introduce gaps where no data in measurement station. + if (Math.abs(values[0][x+1] - values[0][x]) > 3*EPSILON + && values[1][x+1] != values[1][x]) { + values[0][x] = Double.NaN; + values[1][x] = Double.NaN; } } + return values; } diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFactory.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFactory.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentLoadFactory.java Sun Apr 21 10:46:59 2013 +0200 @@ -18,7 +18,7 @@ import de.intevation.flys.artifacts.model.StaticSedimentLoadCacheKey; import de.intevation.flys.backend.SessionHolder; - +/** Pull Sediment Loads out of db. */ public class SedimentLoadFactory { /** Private logger to use here. */ @@ -130,7 +130,7 @@ return values; } - public static SedimentLoad getLoadwithData( + public static SedimentLoad getLoadWithData( String river, String type, double startKm, @@ -337,9 +337,7 @@ return new SedimentLoad(); } - /** - * - */ + protected static void getValues ( String fraction, SQLQuery query, @@ -375,3 +373,4 @@ } } } +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 1126b9e00378 -r e95427ed80e5 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 Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/fixation/FixRealizingCompute.java Sun Apr 21 10:46:59 2013 +0200 @@ -16,9 +16,11 @@ import de.intevation.flys.artifacts.model.ReportFacet; import de.intevation.flys.artifacts.model.WQCKms; import de.intevation.flys.artifacts.model.WQKms; +import de.intevation.flys.artifacts.model.WQKmsFactory; import de.intevation.flys.artifacts.model.fixings.FixOutlierFacet; import de.intevation.flys.artifacts.model.fixings.FixRealizingCalculation; import de.intevation.flys.artifacts.model.fixings.FixRealizingResult; +import de.intevation.flys.artifacts.model.fixings.FixEventFacet; import de.intevation.flys.artifacts.model.fixings.FixReferenceEventsFacet; import de.intevation.flys.artifacts.model.fixings.FixWQCurveFacet; import de.intevation.flys.artifacts.model.fixings.FixWaterlevelFacet; @@ -122,6 +124,13 @@ } } + // Add one facet per event. + int i = 0; + for (int event: access.getEvents()) { + facets.add(new FixEventFacet(i, FIX_EVENTS, WQKmsFactory.getWQKmsName(event))); + i++; + } + if (wqkms.length > 0) { facets.add( new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); @@ -137,7 +146,9 @@ new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id)); facets.add(new FixWQCurveFacet( - 0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE))); + 0, + Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " (" + + access.getFunction() + ")")); facets.add(new FixReferenceEventsFacet( 0, diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/SedimentLoadYearSelect.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/SedimentLoadYearSelect.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/SedimentLoadYearSelect.java Sun Apr 21 10:46:59 2013 +0200 @@ -2,9 +2,15 @@ import org.apache.log4j.Logger; +import de.intevation.artifacts.Artifact; + +import de.intevation.flys.artifacts.FLYSArtifact; + +import de.intevation.flys.artifacts.access.SedimentLoadAccess; import de.intevation.flys.artifacts.states.DefaultState; +/** State in which to fetch years for sedminent load calculation. */ public class SedimentLoadYearSelect extends DefaultState { @@ -18,9 +24,25 @@ public SedimentLoadYearSelect() { } + + /** Year Select Widget. */ @Override protected String getUIProvider() { return "minfo.sedimentload_year_select"; } + + @Override + public boolean validate(Artifact artifact) + throws IllegalArgumentException + { + SedimentLoadAccess access = new SedimentLoadAccess((FLYSArtifact) artifact, null); + + // Second year should be later than first. + if (access.getPeriod() != null && access.getPeriod()[1] < access.getPeriod()[0]) + throw new IllegalArgumentException("error_years_wrong"); + + return true; + } } +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -2,6 +2,7 @@ import com.vividsolutions.jts.geom.Envelope; +import de.intevation.artifactdatabase.data.StateData; import de.intevation.artifactdatabase.state.ArtifactAndFacet; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Settings; @@ -15,6 +16,7 @@ import de.intevation.flys.artifacts.model.map.WMSDBLayerFacet; import de.intevation.flys.artifacts.model.map.WMSLayerFacet; import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet; +import de.intevation.flys.artifacts.states.WaterlevelGroundDifferences; import de.intevation.flys.collections.FLYSArtifactCollection; import de.intevation.flys.utils.ArtifactMapfileGenerator; import de.intevation.flys.utils.GeometryUtils; @@ -134,11 +136,24 @@ ) { try { if(wms instanceof WSPLGENLayerFacet) { + // Retrieve waterlevel ground differences from artifact + StateData dFrom = flys.getData(WaterlevelGroundDifferences.LOWER_FIELD); + StateData dTo = flys.getData(WaterlevelGroundDifferences.UPPER_FIELD); + StateData dStep = flys.getData(WaterlevelGroundDifferences.DIFF_FIELD); + + String fromStr = dFrom != null ? (String) dFrom.getValue() : null; + String toStr = dTo != null ? (String) dTo.getValue() : null; + String stepStr = dStep != null ? (String) dStep.getValue() : null; + + float from = Float.parseFloat(fromStr); + float to = Float.parseFloat(toStr); + float step = Float.parseFloat(stepStr); + ArtifactMapfileGenerator mfg = new ArtifactMapfileGenerator(); mfg.createUeskLayer( flys, (WSPLGENLayerFacet) wms, - ThemeUtil.createDynamicMapserverStyle(attr), + ThemeUtil.createDynamicMapserverStyle(attr, from, to, step), context); } else { diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/MiddleBedHeightGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/MiddleBedHeightGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/MiddleBedHeightGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -120,7 +120,13 @@ label = getHAxisLabel(); } else if (index == YAXIS.W.idx) { - label = msg(I18N_W_YAXIS_LABEL, I18N_W_YAXIS_LABEL_DEFAULT); + FLYSArtifact flys = (FLYSArtifact) master; + String unit = FLYSUtils.getRiver(flys).getWstUnit().getName(); + + label = msg( + I18N_W_YAXIS_LABEL, + I18N_W_YAXIS_LABEL_DEFAULT, + new Object[] { unit }); } else if (index == YAXIS.P.idx) { label = msg(I18N_P_YAXIS_LABEL, I18N_P_YAXIS_LABEL_DEFAULT); @@ -166,7 +172,10 @@ Processor woutp = new WOutProcessor(); Processor bedp = new BedheightProcessor(); - + WOutProcessor processor = new WOutProcessor(); + if (processor.canHandle(name)) { + processor.doOut(this, artifactAndFacet, attr, visible, YAXIS.W.idx); + } if (name.equals(MIDDLE_BED_HEIGHT_SINGLE) || name.equals(MIDDLE_BED_HEIGHT_EPOCH)) { doHeightOut( (MiddleBedHeightData) artifactAndFacet.getData(context), diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -19,6 +19,7 @@ import org.jfree.chart.annotations.XYTextAnnotation; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.ValueAxis; +import org.jfree.chart.axis.LogarithmicAxis; import org.jfree.chart.plot.Marker; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; @@ -214,7 +215,8 @@ false); XYPlot plot = (XYPlot) chart.getPlot(); - plot.setDomainAxis(createXAxis(getXAxisLabel())); + ValueAxis axis = createXAxis(getXAxisLabel()); + plot.setDomainAxis(axis); chart.setBackgroundPaint(Color.WHITE); plot.setBackgroundPaint(Color.WHITE); @@ -236,7 +238,14 @@ localizeAxes(plot); adjustAxes(plot); - autoZoom(plot); + if (!(axis instanceof LogarithmicAxis)) { + // XXX: + // The auto zoom without a range tries + // to include 0 in a logarithmic axis + // which triggers a bug in jfreechart that causes + // the values to be drawn carthesian + autoZoom(plot); + } //debugAxis(plot); diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -83,6 +83,8 @@ public static final String I18N_YAXIS_LABEL_DEFAULT = "W [NN + m]"; + public static final double EPSILON = 0.001d; + public static enum YAXIS { W(0), Q(1); @@ -130,6 +132,9 @@ else if(QSECTOR.equals(name)) { doQSectorOut(aaf, doc, visible); } + else if(FIX_EVENTS.equals(name)) { + doEventsOut(aaf, doc, visible); + } else if(/*STATIC_WKMS_INTERPOL.equals(name) ||*/ STATIC_WKMS_MARKS.equals(name) || STATIC_WKMS.equals(name) || @@ -245,6 +250,35 @@ } + private void addPointFromWQKms(WQKms wqkms, + String title, + Document theme, + boolean visible + ) { + XYSeries series = new StyledXYSeries(title, theme); + Double ckm = (Double) context.getContextValue(CURRENT_KM); + if (wqkms == null || wqkms.getKms().length == 0 || ckm == null) { + logger.info("addPointFromWQKms: No event data to show."); + return; + } + double[] kms = wqkms.getKms(); + for (int i = 0 ; i< kms.length; i++) { + if (Math.abs(kms[i] - ckm) <= EPSILON) { + series.add(wqkms.getQ(i), wqkms.getW(i)); + addAxisSeries(series, YAXIS.W.idx, visible); + return; + } + } + } + + protected void doEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { + logger.debug("doEventsOut"); + // Find W/Q at km. + addPointFromWQKms((WQKms) aaf.getData(context), + aaf.getFacetDescription(), doc, visible); + } + + protected void doWQCurveOut(ArtifactAndFacet aaf, Document doc, boolean visible) { logger.debug("doWQCurveOut"); @@ -435,14 +469,14 @@ ) { logger.debug("FixWQCurveGenerator: doWQOut"); if (wqkms instanceof WQKms) { - WQKms data = (WQKms) wqkms; + // TODO As in doEventsOut, the value-searching should + // be delivered by the facet already (instead of in the Generator). + logger.debug("FixWQCurveGenerator: doWQOut: WQKms"); - XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), theme); - StyledSeriesBuilder.addPointsQW(series, data); - - addAxisSeries(series, YAXIS.W.idx, visible); + addPointFromWQKms((WQKms) aaf.getData(context), aaf.getFacetDescription(), theme, visible); } else { + logger.debug("FixWQCurveGenerator: doWQOut: double[][]"); double [][] data = (double [][]) wqkms; XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), theme); diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedDifferenceEpochGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedDifferenceEpochGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedDifferenceEpochGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -9,15 +9,18 @@ import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.access.FlowVelocityAccess; import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WKms; import de.intevation.flys.artifacts.model.minfo.BedDiffEpochResult; import de.intevation.flys.exports.StyledSeriesBuilder; import de.intevation.flys.exports.fixings.FixChartGenerator; import de.intevation.flys.exports.process.KMIndexProcessor; import de.intevation.flys.exports.process.Processor; +import de.intevation.flys.exports.process.WOutProcessor; import de.intevation.flys.jfree.Bounds; import de.intevation.flys.jfree.DoubleBounds; import de.intevation.flys.jfree.FLYSAnnotation; import de.intevation.flys.jfree.StyledXYSeries; +import de.intevation.flys.utils.DataUtil; public class BedDifferenceEpochGenerator @@ -25,7 +28,7 @@ implements FacetTypes { public enum YAXIS { - D(0), H(1), dW(2); + D(0), H(1), dW(2), W(3); protected int idx; @@ -51,6 +54,10 @@ public static final String I18N_DW_YAXIS_LABEL = "chart.fixings.longitudinalsection.yaxis.label"; + private static final String I18N_W_YAXIS_LABEL = + "chart.longitudinal.section.yaxis.label"; + private static final String I18N_W_YAXIS_LABEL_DEFAULT = "W [NN + m]"; + @Override protected YAxisWalker getYAxisWalker() { @@ -112,6 +119,7 @@ context.putContextValue("endkm", bounds.getUpper()); } Processor processor = new KMIndexProcessor(); + Processor woutp = new WOutProcessor(); if (name.equals(BED_DIFFERENCE_EPOCH)) { doBedDifferenceEpochOut( (BedDiffEpochResult) bundle.getData(context), @@ -141,6 +149,16 @@ else if (processor.canHandle(name)) { processor.doOut(this, bundle, attr, visible, YAXIS.dW.idx); } + else if (woutp.canHandle(name)) { + woutp.doOut(this, bundle, attr, visible, YAXIS.W.idx); + } + else if (name.equals(W_DIFFERENCES)) { + doWDifferencesOut( + (WKms) bundle.getData(context), + bundle, + attr, + visible); + } else if (name.equals(LONGITUDINAL_ANNOTATION)) { doAnnotations( (FLYSAnnotation) bundle.getData(context), @@ -175,7 +193,9 @@ else if (pos == YAXIS.dW.idx) { return msg(I18N_DW_YAXIS_LABEL, I18N_DW_YAXIS_LABEL_DEFAULT); } - + else if (pos == YAXIS.W.idx) { + return msg(I18N_W_YAXIS_LABEL, I18N_W_YAXIS_LABEL_DEFAULT); + } return label; } @@ -206,4 +226,24 @@ addAxisSeries(series, YAXIS.H.idx, visible); } + + protected void doWDifferencesOut( + WKms wkms, + ArtifactAndFacet aandf, + Document theme, + boolean visible + ) { + if (wkms == null) { + logger.warn("No data to add to WDifferencesChart."); + return; + } + + XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); + StyledSeriesBuilder.addPoints(series, wkms); + + addAxisSeries(series, YAXIS.D.idx, visible); + if (DataUtil.guessWaterIncreasing(wkms.allWs())) { + setInverted(true); + } + } } diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedDifferenceYearGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedDifferenceYearGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedDifferenceYearGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -7,16 +7,20 @@ import de.intevation.artifactdatabase.state.ArtifactAndFacet; import de.intevation.artifactdatabase.state.Facet; import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WKms; import de.intevation.flys.artifacts.model.minfo.BedDiffYearResult; import de.intevation.flys.artifacts.model.minfo.BedDifferencesResult; +import de.intevation.flys.artifacts.model.minfo.MorphologicWidth; import de.intevation.flys.exports.StyledSeriesBuilder; import de.intevation.flys.exports.fixings.FixChartGenerator; import de.intevation.flys.exports.process.KMIndexProcessor; import de.intevation.flys.exports.process.Processor; +import de.intevation.flys.exports.process.WOutProcessor; import de.intevation.flys.jfree.Bounds; import de.intevation.flys.jfree.DoubleBounds; import de.intevation.flys.jfree.FLYSAnnotation; import de.intevation.flys.jfree.StyledXYSeries; +import de.intevation.flys.utils.DataUtil; public class BedDifferenceYearGenerator @@ -24,7 +28,7 @@ implements FacetTypes { public enum YAXIS { - D(0), M(1), H(2), dW(3); + D(0), M(1), H(2), dW(3), W(4); protected int idx; @@ -45,12 +49,15 @@ public static final String I18N_CHART_TITLE_DEFAULT = "Sohlenhöhen Differenz"; public static final String I18N_XAXIS_LABEL_DEFAULT = "Fluss-Km"; public static final String I18N_YAXIS_LABEL_DEFAULT = "delta S [m]"; - public static final String I18N_SECOND_YAXIS_LABEL_DEFAULT = "Morph. Breite [m]"; + public static final String I18N_SECOND_YAXIS_LABEL_DEFAULT = "Breite [m]"; public static final String I18N_THIRD_YAXIS_LABEL_DEFAULT = "Höhe [m]"; public static final String I18N_DW_YAXIS_LABEL_DEFAULT = "delta W [cm]"; public static final String I18N_DW_YAXIS_LABEL = "chart.fixings.longitudinalsection.yaxis.label"; + private static final String I18N_W_YAXIS_LABEL = + "chart.longitudinal.section.yaxis.label"; + private static final String I18N_W_YAXIS_LABEL_DEFAULT = "W [NN + m]"; @Override protected YAxisWalker getYAxisWalker() { @@ -110,6 +117,7 @@ context.putContextValue("endkm", bounds.getUpper()); } Processor processor = new KMIndexProcessor(); + Processor woutp = new WOutProcessor(); if (name.equals(BED_DIFFERENCE_YEAR)) { doBedDifferenceYearOut( (BedDiffYearResult) bundle.getData(context), @@ -145,6 +153,14 @@ (BedDiffYearResult)bundle.getData(context), bundle, attr, visible, 1); } + else if (name.equals(MORPHOLOGIC_WIDTH)) { + doMorphologicWidthOut( + (MorphologicWidth)bundle.getData(context), + bundle, + attr, + visible, + 0); + } else if (processor.canHandle(name)) { processor.doOut(this, bundle, attr, visible, YAXIS.dW.idx); } @@ -155,14 +171,33 @@ attr, visible); } - else if (processor.canHandle(name)) { - processor.doOut(this, bundle, attr, visible, YAXIS.dW.idx); + else if (woutp.canHandle(name)) { + woutp.doOut(this, bundle, attr, visible, YAXIS.W.idx); + } + else if (name.equals(W_DIFFERENCES)) { + doWDifferencesOut( + (WKms) bundle.getData(context), + bundle, + attr, + visible); } else { logger.warn("Unknown facet name " + name); } } + private void doMorphologicWidthOut( + MorphologicWidth data, + ArtifactAndFacet bundle, + Document attr, + boolean visible, + int i) { + XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), attr); + StyledSeriesBuilder.addPoints(series, data.getAsArray(), true); + + addAxisSeries(series, YAXIS.M.idx, visible); + } + private void doBedDifferenceHeightsOut( BedDiffYearResult data, ArtifactAndFacet bundle, @@ -207,6 +242,10 @@ else if (pos == YAXIS.dW.idx) { label = msg(I18N_DW_YAXIS_LABEL, I18N_DW_YAXIS_LABEL_DEFAULT); } + else if (pos == YAXIS.W.idx) { + return msg(I18N_W_YAXIS_LABEL, I18N_W_YAXIS_LABEL_DEFAULT); + } + return label; } @@ -229,4 +268,24 @@ addAxisSeries(series, YAXIS.M.idx, visible); } -} + + protected void doWDifferencesOut( + WKms wkms, + ArtifactAndFacet aandf, + Document theme, + boolean visible + ) { + if (wkms == null) { + logger.warn("No data to add to WDifferencesChart."); + return; + } + + XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); + StyledSeriesBuilder.addPoints(series, wkms); + + addAxisSeries(series, YAXIS.D.idx, visible); + if (DataUtil.guessWaterIncreasing(wkms.allWs())) { + setInverted(true); + } + } +} \ No newline at end of file diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/SedimentLoadLSGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/SedimentLoadLSGenerator.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/SedimentLoadLSGenerator.java Sun Apr 21 10:46:59 2013 +0200 @@ -124,57 +124,8 @@ context.putContextValue("startkm", bounds.getLower()); context.putContextValue("endkm", bounds.getUpper()); } - if (name.equals(SEDIMENT_LOAD_COARSE)) { - doSedimentLoadCoarseOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_SAND)) { - doSedimentLoadSandOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_FINEMIDDLE)) { - doSedimentLoadFineMiddleOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_SUSP_SAND)) { - doSedimentLoadSuspSandOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_SUSP_SAND_BED)) { - doSedimentLoadSuspSandBedOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_SUSP_SEDIMENT)) { - doSedimentLoadSuspSedimentOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_TOTAL_LOAD)) { - doSedimentLoadTotalLoadOut( - (double[][]) bundle.getData(context), - bundle, - attr, - visible); - } - else if (name.equals(SEDIMENT_LOAD_TOTAL)) { - doSedimentLoadTotalOut( + if (FacetTypes.IS.SEDIMENT_LOAD(SEDIMENT_LOAD_COARSE)) { + doSedimentLoadOut( (double[][]) bundle.getData(context), bundle, attr, @@ -288,75 +239,12 @@ return label; } - // TODO all double[][] eating *Out() can be subsumed. - protected void doSedimentLoadCoarseOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadSandOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadFineMiddleOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadSuspSandOut(double[][] data, + protected void doSedimentLoadOut(double[][] data, ArtifactAndFacet aandf, Document theme, boolean visible) { - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadSuspSandBedOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadSuspSedimentOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadTotalLoadOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); - - addAxisSeries(series, YAXIS.L.idx, visible); - } - - protected void doSedimentLoadTotalOut(double[][] data, - ArtifactAndFacet aandf, Document theme, boolean visible) { - - XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); - StyledSeriesBuilder.addPoints(series, data, true); + // Allow for gaps (NaNs). + XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), false, theme); + StyledSeriesBuilder.addPoints(series, data, false); addAxisSeries(series, YAXIS.L.idx, visible); } @@ -434,5 +322,4 @@ setInverted(true); } } - } diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/jfree/DoubleBounds.java --- a/flys-artifacts/src/main/java/de/intevation/flys/jfree/DoubleBounds.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/jfree/DoubleBounds.java Sun Apr 21 10:46:59 2013 +0200 @@ -2,6 +2,7 @@ import org.jfree.chart.axis.ValueAxis; +import org.jfree.chart.axis.LogarithmicAxis; import org.jfree.data.Range; @@ -50,7 +51,12 @@ @Override public void applyBounds(ValueAxis axis, int percent) { double space = (upper - lower) / 100 * percent; - axis.setRange(new Range(lower-space, upper+space)); + if (axis instanceof LogarithmicAxis) { + axis.setRange(new Range(Math.max(lower-space, 0.0001), + Math.max(upper+space, 0.0002))); + } else { + axis.setRange(new Range(lower-space, upper+space)); + } } diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java --- a/flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/ThemeUtil.java Sun Apr 21 10:46:59 2013 +0200 @@ -660,22 +660,35 @@ * @param theme * @return String representation of the MapserverStyle */ - public static String createDynamicMapserverStyle(Document theme) { + public static String createDynamicMapserverStyle(Document theme, + float from, float to, float step) + { MapserverStyle ms = new MapserverStyle(); String strStartColor = XMLUtils.xpathString(theme, XPATH_WSPLGEN_STARTCOLOR, null); Color startColor = strStartColor != null ? parseColor(strStartColor) : new Color(178, 201, 215); String strEndColor = XMLUtils.xpathString(theme, XPATH_WSPLGEN_ENDCOLOR, null); Color endColor = strEndColor != null? parseColor(strEndColor) : new Color(2, 27, 42); +/* String strNumClasses = XMLUtils.xpathString(theme, XPATH_WSPLGEN_NUMCLASSES, null); - int numClasses = strNumClasses != null ? Integer.parseInt(strNumClasses) : 5; + int numClasses; + if (strNumClasses != null) { + numClasses = Integer.parseInt(strNumClasses); + } + else { + numClasses = 5; + logger.warn("createDynamicMapserverStyle(): strNumClasses is null"); + } if (numClasses < 5) { numClasses = 5; } else if (numClasses > 20) { numClasses = 20; - } + }*/ + + + int numClasses = (int)((to - from) / step); float rd = (endColor.getRed() - startColor.getRed()) / (float)numClasses; float gd = (endColor.getGreen() - startColor.getGreen()) / (float)numClasses; @@ -689,7 +702,7 @@ newColor.append(' '); newColor.append(startColor.getBlue() + Math.round(n * bd)); - String expr = createWSPLGENExpression(n + 1, numClasses); + String expr = createWSPLGENExpression(from + n * step, step, n + 1, numClasses); Clazz c = new Clazz(expr); Style s = new Style(); @@ -706,13 +719,12 @@ } - protected static String createWSPLGENExpression(int idx, int maxIdx) { + protected static String createWSPLGENExpression(float val, float step, int idx, int maxIdx) { if (idx < maxIdx) { - int lower = idx - 1; - return "[DIFF] >= " + lower + " AND [DIFF] < " + idx; + return "[DIFF] >= " + val + " AND [DIFF] < " + (val + step); } else { - return "[DIFF] >= " + (maxIdx - 1); + return "[DIFF] >= " + val; } } diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/resources/messages.properties --- a/flys-artifacts/src/main/resources/messages.properties Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/resources/messages.properties Sun Apr 21 10:46:59 2013 +0200 @@ -246,11 +246,11 @@ facet.sedimentload.susp_sediment = Sediment facet.sedimentload.total = Total facet.sedimentload.total_load = Total bed load -missing.fraction.coarse = Missing coarse fraction -missing.fraction.fine_middle = Missing fine/middle fraction -missing.fraction.sand = Missing sand fraction -missing.fraction.susp_sand = Missing susp. sand fraction -missing.fraction.susp_sediment = Missing susp. sediment fraction +missing.fraction.coarse = Year {0}: Missing coarse fraction +missing.fraction.fine_middle = Year {0}: Missing fine/middle fraction +missing.fraction.sand = Year {0}: Missing sand fraction +missing.fraction.susp_sand = Year {0}: Missing susp. sand fraction +missing.fraction.susp_sediment = Year {0}: Missing susp. sediment fraction missing.data.coarse = Missing coarse data at missing.data.fine_middle = Missing fine/middle data at missing.data.sand = Missing sand data at @@ -281,7 +281,7 @@ bedquality.toplayer = 0.0m - 0.3m bedquality.sublayer = 0.1m - 0.5m facet.bedheight.diff.year = Bedheight Difference {0} -facet.bedheight.diff.morph = Morphologic Width {0} +facet.bedheight.diff.morph = sounding Width {0} facet.bedheight.diff.height1 = Original Height Minuend {0} facet.bedheight.diff.height2 = Original Height Subtrahend {0} facet.bedheight.diff.absolute = Bedheight Difference/Year {0} @@ -296,6 +296,7 @@ facet.gauge_discharge_curve.reference_gauge = Gauge official number facet.gauge_discharge_curve.gauge_name = Name of the gauge facet.gauge_discharge_curve.gauge_location = Location of the gauge +facet.morphologic.width = morphologic Width chart.beddifference.height.title = Bedheight Difference chart.beddifference.height.xaxis.label = River-Km [km] @@ -305,7 +306,7 @@ chart.beddifference.yaxis.label.diff = Difference [m] chart.beddifference.yaxis.label.height = Absolute Height [m] chart.beddifference.year.title = Bedheight Difference -chart.beddifference.yaxis.label.morph = Morphologic Width [m] +chart.beddifference.yaxis.label.morph = Width [m] chart.beddifference.yaxis.label.heights = Absolute Height [m] @@ -471,54 +472,54 @@ no.reference.end.kms = No reference end station(s) given. waterlevels = Waterlevels -help.index=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe -help.state.winfo=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO -help.state.winfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.river -help.state.winfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.calculation_mode -help.state.winfo.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location -help.state.winfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance_only -help.state.winfo.distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance -help.state.winfo.location_distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location_distance -help.state.winfo.wq=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq -help.state.winfo.wq_adapted=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq_adapted -help.state.winfo.waterlevel_pair_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select -help.state.winfo.reference.curve.input.start=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start -help.state.winfo.reference.curve.input.end=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end -help.state.winfo.uesk.wsp=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp -help.state.winfo.uesk.dgm=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm -help.state.winfo.uesk.profiles=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles -help.state.winfo.uesk.floodplain=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain -help.state.winfo.uesk.differences=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.differences -help.state.winfo.uesk.scenario=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.dc-hws=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.user-rgd=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.barriers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.historicalq.reference_gauge=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge -help.state.winfo.historicalq.timerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange -help.state.winfo.historicalq.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode -help.state.winfo.function_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.function_select -help.state.winfo.extreme.percent=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.percent -help.state.winfo.extreme.qinput=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput +help.index=${help.url}/OnlineHilfe +help.state.winfo=${help.url}/OnlineHilfe/WINFO +help.state.winfo.river=${help.url}/OnlineHilfe/WINFO#help.state.winfo.river +help.state.winfo.calculation_mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.calculation_mode +help.state.winfo.location=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location +help.state.winfo.distance_only=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance_only +help.state.winfo.distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance +help.state.winfo.location_distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location_distance +help.state.winfo.wq=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq +help.state.winfo.wq_adapted=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq_adapted +help.state.winfo.waterlevel_pair_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select +help.state.winfo.reference.curve.input.start=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start +help.state.winfo.reference.curve.input.end=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end +help.state.winfo.uesk.wsp=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp +help.state.winfo.uesk.dgm=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm +help.state.winfo.uesk.profiles=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles +help.state.winfo.uesk.floodplain=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain +help.state.winfo.uesk.differences=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.differences +help.state.winfo.uesk.scenario=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.dc-hws=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.user-rgd=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.barriers=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.historicalq.reference_gauge=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge +help.state.winfo.historicalq.timerange=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange +help.state.winfo.historicalq.mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode +help.state.winfo.function_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.function_select +help.state.winfo.extreme.percent=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.percent +help.state.winfo.extreme.qinput=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput -help.state.minfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.river -help.state.minfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.calculation_mode -help.state.minfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.distance_only -help.state.minfo.bed.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch -help.state.minfo.sq.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.location -help.state.minfo.bed.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.location -help.state.minfo.dischargestate=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.dischargestate -help.state.minfo.soundings=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.soundings -help.state.minfo.bed.difference_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select -help.state.minfo.sq.outliers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.outliers -help.state.minfo.sediment.load.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch -help.state.minfo.sediment.load.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location -help.state.minfo.bed.periods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.periods -help.state.minfo.bed.char_diameter=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter -help.state.minfo.sediment.load.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period -help.state.minfo.sediment.load.epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs -help.state.minfo.sediment.load.off_epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs -help.state.minfo.sediment.load.unit=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit -help.state.minfo.sq.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.period +help.state.minfo.river=${help.url}/OnlineHilfe/MINFO#help.state.minfo.river +help.state.minfo.calculation_mode=${help.url}/OnlineHilfe/MINFO#help.state.minfo.calculation_mode +help.state.minfo.distance_only=${help.url}/OnlineHilfe/MINFO#help.state.minfo.distance_only +help.state.minfo.bed.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch +help.state.minfo.sq.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.location +help.state.minfo.bed.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.location +help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate +help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings +help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers +help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch +help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location +help.state.minfo.bed.periods=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.periods +help.state.minfo.bed.char_diameter=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter +help.state.minfo.sediment.load.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period +help.state.minfo.sediment.load.epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs +help.state.minfo.sediment.load.off_epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs +help.state.minfo.sediment.load.unit=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit +help.state.minfo.sq.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.period fix.reference.period=Reference period @@ -614,18 +615,18 @@ gauge.discharge.service.chart.series.title = Discharge Curve {0,date,short} - {1,date,short} gauge.discharge.service.chart.series.title.master = Current Discharge Curve since {0,date,short} -help.state.fix.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.river -help.state.fix.calculation.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode -help.state.fix.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.location -help.state.fix.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.period -help.state.fix.gaugerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange -help.state.fix.eventselect=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect -help.state.fix.analysis.referenceperiod=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod -help.state.fix.analysis.analysisperiods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods -help.state.fix.analysis.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function -help.state.fix.analysis.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing -help.state.fix.analysis.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute -help.state.fix.vollmer.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function -help.state.fix.vollmer.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing -help.state.fix.vollmer.qs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs -help.state.fix.vollmer.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute +help.state.fix.river=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.river +help.state.fix.calculation.mode=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode +help.state.fix.location=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.location +help.state.fix.period=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.period +help.state.fix.gaugerange=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange +help.state.fix.eventselect=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect +help.state.fix.analysis.referenceperiod=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod +help.state.fix.analysis.analysisperiods=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods +help.state.fix.analysis.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function +help.state.fix.analysis.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing +help.state.fix.analysis.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute +help.state.fix.vollmer.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function +help.state.fix.vollmer.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing +help.state.fix.vollmer.qs=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs +help.state.fix.vollmer.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/resources/messages_de.properties --- a/flys-artifacts/src/main/resources/messages_de.properties Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/resources/messages_de.properties Sun Apr 21 10:46:59 2013 +0200 @@ -247,11 +247,11 @@ facet.sedimentload.susp_sediment = Schwebstoff facet.sedimentload.total = Gesamt facet.sedimentload.total_load = Gesamt Geschiebe -missing.fraction.coarse = Fehlende Fraktion: grober Kies -missing.fraction.fine_middle = Fehlende Fraktion: fein/mittlerer Kies -missing.fraction.sand = Fehlende Fraktion: Sand -missing.fraction.susp_sand = Fehlende Fraktion: susp. Sand -missing.fraction.susp_sediment = Fehlende Fraktion: Schwebstoffe +missing.fraction.coarse = Jahr {0}: Fehlende Fraktion: grober Kies +missing.fraction.fine_middle = Jahr {0}: Fehlende Fraktion: fein/mittlerer Kies +missing.fraction.sand = Jahr {0}: Fehlende Fraktion: Sand +missing.fraction.susp_sand = Jahr {0}: Fehlende Fraktion: susp. Sand +missing.fraction.susp_sediment = Jahr {0}: Fehlende Fraktion: Schwebstoffe missing.data.coarse = Fehlende Daten bei grobem Kies missing.data.fine_middle = Fehlende Daten bei fein/mittlerem Kies missing.data.sand = Fehlende Daten bei Sand @@ -281,13 +281,13 @@ facet.bedquality.bedload.diameter = {0}_Geschiebe bedquality.toplayer = 0,0m - 0,3m bedquality.sublayer = 0,1m - 0,5m -facet.bedheight.diff.year = Sohlh\u00f6hendiffernez {0} -facet.bedheight.diff.morph = Morphologische Breite {0} +facet.bedheight.diff.year = Sohlh\u00f6hendifferenz {0} +facet.bedheight.diff.morph = gepeilte Breite {0} facet.bedheight.diff.height1 = H\u00f6he Minuend {0} facet.bedheight.diff.height2 = H\u00f6he Subtrahend {0} facet.bedheight.diff.absolute = Sohlh\u00f6hendifferenz/Jahr {0} facet.bedheight.diff.epoch = Sohlh\u00f6hendifferenz {0} -facet.bedheight.diff.year.raw = Sohlh\u00f6hendiffernez {0} (Rohdaten) +facet.bedheight.diff.year.raw = Sohlh\u00f6hendifferenz {0} (Rohdaten) facet.bedheight.diff.height1.raw = H\u00f6he Minuend {0} (Rohdaten) facet.bedheight.diff.height2.raw = H\u00f6he Subtrahend {0} (Rohdaten) facet.bedheight.diff.absolute.raw = Sohlh\u00f6hendifferenz/Jahr {0} (Rohdaten) @@ -297,6 +297,7 @@ facet.gauge_discharge_curve.reference_gauge = Pegelnummer facet.gauge_discharge_curve.gauge_name = Pegelname facet.gauge_discharge_curve.gauge_location = Pegelort +facet.morphologic.width = Morphologische Breite chart.beddifference.height.title = Sohlh\u00f6hendifferenz chart.beddifference.height.xaxis.label = Fluss-Km [km] @@ -306,7 +307,7 @@ chart.beddifference.yaxis.label.diff = Differenz [m] chart.beddifference.yaxis.label.height = Absolute H\u00f6he [m] chart.beddifference.year.title = Sohlh\u00f6hendifferenz -chart.beddifference.yaxis.label.morph = Morphologische Breite [m] +chart.beddifference.yaxis.label.morph = Breite [m] chart.beddifference.yaxis.label.heights = Absolute H\u00f6he [m] export.waterlevel.csv.header.km = Fluss-Km @@ -473,54 +474,54 @@ no.reference.end.kms = Keine Endkilometerstation(en) angegeben. waterlevels = Wasserst\u00e4nde -help.index=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe -help.state.winfo=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO -help.state.winfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.river -help.state.winfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.calculation_mode -help.state.winfo.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location -help.state.winfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance_only -help.state.winfo.distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance -help.state.winfo.location_distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location_distance -help.state.winfo.wq=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq -help.state.winfo.wq_adapted=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq_adapted -help.state.winfo.waterlevel_pair_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select -help.state.winfo.reference.curve.input.start=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start -help.state.winfo.reference.curve.input.end=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end -help.state.winfo.uesk.wsp=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp -help.state.winfo.uesk.dgm=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm -help.state.winfo.uesk.profiles=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles -help.state.winfo.uesk.floodplain=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain -help.state.winfo.uesk.differences=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.differences -help.state.winfo.uesk.scenario=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.dc-hws=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.user-rgd=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.barriers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.historicalq.reference_gauge=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge -help.state.winfo.historicalq.timerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange -help.state.winfo.historicalq.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode -help.state.winfo.function_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.function_select -help.state.winfo.extreme.percent=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.percent -help.state.winfo.extreme.qinput=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput +help.index=${help.url}/OnlineHilfe +help.state.winfo=${help.url}/OnlineHilfe/WINFO +help.state.winfo.river=${help.url}/OnlineHilfe/WINFO#help.state.winfo.river +help.state.winfo.calculation_mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.calculation_mode +help.state.winfo.location=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location +help.state.winfo.distance_only=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance_only +help.state.winfo.distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance +help.state.winfo.location_distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location_distance +help.state.winfo.wq=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq +help.state.winfo.wq_adapted=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq_adapted +help.state.winfo.waterlevel_pair_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select +help.state.winfo.reference.curve.input.start=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start +help.state.winfo.reference.curve.input.end=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end +help.state.winfo.uesk.wsp=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp +help.state.winfo.uesk.dgm=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm +help.state.winfo.uesk.profiles=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles +help.state.winfo.uesk.floodplain=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain +help.state.winfo.uesk.differences=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.differences +help.state.winfo.uesk.scenario=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.dc-hws=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.user-rgd=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.barriers=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.historicalq.reference_gauge=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge +help.state.winfo.historicalq.timerange=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange +help.state.winfo.historicalq.mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode +help.state.winfo.function_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.function_select +help.state.winfo.extreme.percent=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.percent +help.state.winfo.extreme.qinput=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput -help.state.minfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.river -help.state.minfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.calculation_mode -help.state.minfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.distance_only -help.state.minfo.bed.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch -help.state.minfo.sq.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.location -help.state.minfo.bed.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.location -help.state.minfo.dischargestate=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.dischargestate -help.state.minfo.soundings=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.soundings -help.state.minfo.bed.difference_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select -help.state.minfo.sq.outliers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.outliers -help.state.minfo.sediment.load.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch -help.state.minfo.sediment.load.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location -help.state.minfo.bed.periods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.periods -help.state.minfo.bed.char_diameter=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter -help.state.minfo.sediment.load.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period -help.state.minfo.sediment.load.epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs -help.state.minfo.sediment.load.off_epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs -help.state.minfo.sediment.load.unit=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit -help.state.minfo.sq.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.period +help.state.minfo.river=${help.url}/OnlineHilfe/MINFO#help.state.minfo.river +help.state.minfo.calculation_mode=${help.url}/OnlineHilfe/MINFO#help.state.minfo.calculation_mode +help.state.minfo.distance_only=${help.url}/OnlineHilfe/MINFO#help.state.minfo.distance_only +help.state.minfo.bed.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch +help.state.minfo.sq.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.location +help.state.minfo.bed.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.location +help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate +help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings +help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers +help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch +help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location +help.state.minfo.bed.periods=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.periods +help.state.minfo.bed.char_diameter=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter +help.state.minfo.sediment.load.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period +help.state.minfo.sediment.load.epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs +help.state.minfo.sediment.load.off_epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs +help.state.minfo.sediment.load.unit=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit +help.state.minfo.sq.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.period fix.reference.period=Bezugszeitraum @@ -617,18 +618,18 @@ gauge.discharge.service.chart.series.title = Abflusskurve {0,date,short} - {1,date,short} gauge.discharge.service.chart.series.title.master = Aktuelle Abflusskurve ab {0,date,short} -help.state.fix.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.river -help.state.fix.calculation.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode -help.state.fix.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.location -help.state.fix.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.period -help.state.fix.gaugerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange -help.state.fix.eventselect=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect -help.state.fix.analysis.referenceperiod=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod -help.state.fix.analysis.analysisperiods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods -help.state.fix.analysis.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function -help.state.fix.analysis.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing -help.state.fix.analysis.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute -help.state.fix.vollmer.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function -help.state.fix.vollmer.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing -help.state.fix.vollmer.qs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs -help.state.fix.vollmer.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute +help.state.fix.river=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.river +help.state.fix.calculation.mode=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode +help.state.fix.location=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.location +help.state.fix.period=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.period +help.state.fix.gaugerange=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange +help.state.fix.eventselect=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect +help.state.fix.analysis.referenceperiod=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod +help.state.fix.analysis.analysisperiods=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods +help.state.fix.analysis.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function +help.state.fix.analysis.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing +help.state.fix.analysis.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute +help.state.fix.vollmer.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function +help.state.fix.vollmer.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing +help.state.fix.vollmer.qs=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs +help.state.fix.vollmer.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/resources/messages_de_DE.properties --- a/flys-artifacts/src/main/resources/messages_de_DE.properties Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/resources/messages_de_DE.properties Sun Apr 21 10:46:59 2013 +0200 @@ -244,11 +244,11 @@ facet.sedimentload.susp_sediment = Schwebstoff facet.sedimentload.total = Gesamt facet.sedimentload.total_load = Gesamt Geschiebe -missing.fraction.coarse = Fehlende Fraktion: grober Kies -missing.fraction.fine_middle = Fehlende Fraktion: fein/mittlerer Kies -missing.fraction.sand = Fehlende Fraktion: Sand -missing.fraction.susp_sand = Fehlende Fraktion: susp. Sand -missing.fraction.susp_sediment = Fehlende Fraktion: Schwebstoffe +missing.fraction.coarse = Jahr {0}: Fehlende Fraktion: grober Kies +missing.fraction.fine_middle = Jahr {0}: Fehlende Fraktion: fein/mittlerer Kies +missing.fraction.sand = Jahr {0}: Fehlende Fraktion: Sand +missing.fraction.susp_sand = Jahr {0}: Fehlende Fraktion: susp. Sand +missing.fraction.susp_sediment = Jahr {0}: Fehlende Fraktion: Schwebstoffe missing.data.coarse = Fehlende Daten bei grobem Kies missing.data.fine_middle = Fehlende Daten bei fein/mittlerem Kies missing.data.sand = Fehlende Daten bei Sand @@ -278,9 +278,9 @@ facet.bedquality.bedload.diameter = {0}_Geschiebe bedquality.toplayer = 0,0m - 0,3m bedquality.sublayer = 0,1m - 0,5m -facet.bedheight.diff.year = Sohlh\u00f6hendiffernez {0} -facet.bedheight.diff.year.raw = Sohlh\u00f6hendiffernez {0} (Rohdaten) -facet.bedheight.diff.morph = Morphologische Breite {0} +facet.bedheight.diff.year = Sohlh\u00f6hendifferenz {0} +facet.bedheight.diff.year.raw = Sohlh\u00f6hendifferenz {0} (Rohdaten) +facet.bedheight.diff.morph = gepeilte Breite {0} facet.bedheight.diff.height1 = H\u00f6he Minuend {0} facet.bedheight.diff.height2 = H\u00f6he Subtrahend {0} facet.bedheight.diff.absolute = Sohlh\u00f6hendifferenz/Jahr {0} @@ -294,6 +294,7 @@ facet.gauge_discharge_curve.reference_gauge = Pegelnummer facet.gauge_discharge_curve.gauge_name = Pegelname facet.gauge_discharge_curve.gauge_location = Pegelort +facet.morphologic.width = Morphologische Breite chart.beddifference.height.title = Sohlh\u00f6hendifferenz chart.beddifference.height.xaxis.label = Fluss-Km [km] @@ -303,7 +304,7 @@ chart.beddifference.yaxis.label.diff = Differenz [m] chart.beddifference.yaxis.label.height = Absolute H\u00f6he [m] chart.beddifference.year.title = Sohlh\u00f6hendifferenz -chart.beddifference.yaxis.label.morph = Morphologische Breite [m] +chart.beddifference.yaxis.label.morph = Breite [m] chart.beddifference.yaxis.label.heights = Absolute H\u00f6he [m] export.waterlevel.csv.header.km = Fluss-Km @@ -469,54 +470,54 @@ no.reference.end.kms = Keine Endkilometerstation(en) angegeben. waterlevels = Wasserst\u00e4nde -help.index=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe -help.state.winfo=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO -help.state.winfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.river -help.state.winfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.calculation_mode -help.state.winfo.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location -help.state.winfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance_only -help.state.winfo.distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance -help.state.winfo.location_distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location_distance -help.state.winfo.wq=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq -help.state.winfo.wq_adapted=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq_adapted -help.state.winfo.waterlevel_pair_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select -help.state.winfo.reference.curve.input.start=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start -help.state.winfo.reference.curve.input.end=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end -help.state.winfo.uesk.wsp=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp -help.state.winfo.uesk.dgm=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm -help.state.winfo.uesk.profiles=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles -help.state.winfo.uesk.floodplain=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain -help.state.winfo.uesk.differences=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.differences -help.state.winfo.uesk.scenario=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.dc-hws=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.user-rgd=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.barriers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.historicalq.reference_gauge=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge -help.state.winfo.historicalq.timerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange -help.state.winfo.historicalq.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode -help.state.winfo.function_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.function_select -help.state.winfo.extreme.percent=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.percent -help.state.winfo.extreme.qinput=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput +help.index=${help.url}/OnlineHilfe +help.state.winfo=${help.url}/OnlineHilfe/WINFO +help.state.winfo.river=${help.url}/OnlineHilfe/WINFO#help.state.winfo.river +help.state.winfo.calculation_mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.calculation_mode +help.state.winfo.location=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location +help.state.winfo.distance_only=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance_only +help.state.winfo.distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance +help.state.winfo.location_distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location_distance +help.state.winfo.wq=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq +help.state.winfo.wq_adapted=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq_adapted +help.state.winfo.waterlevel_pair_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select +help.state.winfo.reference.curve.input.start=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start +help.state.winfo.reference.curve.input.end=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end +help.state.winfo.uesk.wsp=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp +help.state.winfo.uesk.dgm=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm +help.state.winfo.uesk.profiles=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles +help.state.winfo.uesk.floodplain=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain +help.state.winfo.uesk.differences=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.differences +help.state.winfo.uesk.scenario=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.dc-hws=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.user-rgd=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.barriers=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.historicalq.reference_gauge=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge +help.state.winfo.historicalq.timerange=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange +help.state.winfo.historicalq.mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode +help.state.winfo.function_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.function_select +help.state.winfo.extreme.percent=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.percent +help.state.winfo.extreme.qinput=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput -help.state.minfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.river -help.state.minfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.calculation_mode -help.state.minfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.distance_only -help.state.minfo.bed.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch -help.state.minfo.sq.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.location -help.state.minfo.bed.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.location -help.state.minfo.dischargestate=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.dischargestate -help.state.minfo.soundings=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.soundings -help.state.minfo.bed.difference_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select -help.state.minfo.sq.outliers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.outliers -help.state.minfo.sediment.load.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch -help.state.minfo.sediment.load.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location -help.state.minfo.bed.periods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.periods -help.state.minfo.bed.char_diameter=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter -help.state.minfo.sediment.load.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period -help.state.minfo.sediment.load.epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs -help.state.minfo.sediment.load.off_epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs -help.state.minfo.sediment.load.unit=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit -help.state.minfo.sq.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.period +help.state.minfo.river=${help.url}/OnlineHilfe/MINFO#help.state.minfo.river +help.state.minfo.calculation_mode=${help.url}/OnlineHilfe/MINFO#help.state.minfo.calculation_mode +help.state.minfo.distance_only=${help.url}/OnlineHilfe/MINFO#help.state.minfo.distance_only +help.state.minfo.bed.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch +help.state.minfo.sq.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.location +help.state.minfo.bed.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.location +help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate +help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings +help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers +help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch +help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location +help.state.minfo.bed.periods=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.periods +help.state.minfo.bed.char_diameter=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter +help.state.minfo.sediment.load.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period +help.state.minfo.sediment.load.epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs +help.state.minfo.sediment.load.off_epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs +help.state.minfo.sediment.load.unit=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit +help.state.minfo.sq.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.period fix.reference.period=Bezugszeitraum @@ -615,18 +616,18 @@ gauge.discharge.service.chart.series.title = Abflusskurve {0,date,short} - {1,date,short} gauge.discharge.service.chart.series.title.master = Aktuelle Abflusskurve ab {0,date,short} -help.state.fix.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.river -help.state.fix.calculation.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode -help.state.fix.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.location -help.state.fix.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.period -help.state.fix.gaugerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange -help.state.fix.eventselect=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect -help.state.fix.analysis.referenceperiod=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod -help.state.fix.analysis.analysisperiods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods -help.state.fix.analysis.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function -help.state.fix.analysis.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing -help.state.fix.analysis.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute -help.state.fix.vollmer.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function -help.state.fix.vollmer.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing -help.state.fix.vollmer.qs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs -help.state.fix.vollmer.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute +help.state.fix.river=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.river +help.state.fix.calculation.mode=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode +help.state.fix.location=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.location +help.state.fix.period=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.period +help.state.fix.gaugerange=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange +help.state.fix.eventselect=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect +help.state.fix.analysis.referenceperiod=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod +help.state.fix.analysis.analysisperiods=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods +help.state.fix.analysis.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function +help.state.fix.analysis.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing +help.state.fix.analysis.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute +help.state.fix.vollmer.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function +help.state.fix.vollmer.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing +help.state.fix.vollmer.qs=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs +help.state.fix.vollmer.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute diff -r 1126b9e00378 -r e95427ed80e5 flys-artifacts/src/main/resources/messages_en.properties --- a/flys-artifacts/src/main/resources/messages_en.properties Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-artifacts/src/main/resources/messages_en.properties Sun Apr 21 10:46:59 2013 +0200 @@ -248,11 +248,11 @@ facet.sedimentload.susp_sediment = Sediement facet.sedimentload.total = Total facet.sedimentload.total_load = Total bed load -missing.fraction.coarse = Missing coarse fraction -missing.fraction.fine_middle = Missing fine/middle fraction -missing.fraction.sand = Missing sand fraction -missing.fraction.susp_sand = Missing susp. sand fraction -missing.fraction.susp_sediment = Missing susp. sediment fraction +missing.fraction.coarse = Year {0}: Missing coarse fraction +missing.fraction.fine_middle = Year {0}: Missing fine/middle fraction +missing.fraction.sand = Year {0}: Missing sand fraction +missing.fraction.susp_sand = Year {0}: Missing susp. sand fraction +missing.fraction.susp_sediment = Year {0}: Missing susp. sediment fraction missing.data.coarse = Missing coarse data at missing.data.fine_middle = Missing fine/middle data at missing.data.sand = Missing sand data at @@ -284,7 +284,7 @@ bedquality.toplayer = 0.0m - 0.3m bedquality.sublayer = 0.1m - 0.5m facet.bedheight.diff.year = Bedheight Difference {0} -facet.bedheight.diff.morph = Morphologic Width {0} +facet.bedheight.diff.morph = sounding Width {0} facet.bedheight.diff.height1 = Original Height Minuend {0} facet.bedheight.diff.height2 = Original Height Subtrahend {0} facet.bedheight.diff.absolute = Bedheight Difference/Year {0} @@ -299,6 +299,7 @@ facet.gauge_discharge_curve.reference_gauge = Gauge official number facet.gauge_discharge_curve.gauge_name = Name of the gauge facet.gauge_discharge_curve.gauge_location = Location of the gauge +facet.morphologic.width = morphologic Width chart.beddifference.height.title = Bedheight Difference chart.beddifference.height.xaxis.label = River-Km [km] @@ -308,7 +309,7 @@ chart.beddifference.yaxis.label.diff = Difference [m] chart.beddifference.yaxis.label.height = Absolute Height [m] chart.beddifference.year.title = Bedheight Difference -chart.beddifference.yaxis.label.morph = Morphologic Width [m] +chart.beddifference.yaxis.label.morph = Width [m] chart.beddifference.yaxis.label.heights = Absolute Height [m] export.waterlevel.csv.header.km = River-Km @@ -474,54 +475,54 @@ no.reference.end.kms = No reference end station(s) given. waterlevels = Waterlevels -help.index=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe -help.state.winfo=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO -help.state.winfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.river -help.state.winfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.calculation_mode -help.state.winfo.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location -help.state.winfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance_only -help.state.winfo.distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.distance -help.state.winfo.location_distance=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.location_distance -help.state.winfo.wq=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq -help.state.winfo.wq_adapted=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.wq_adapted -help.state.winfo.waterlevel_pair_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select -help.state.winfo.reference.curve.input.start=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start -help.state.winfo.reference.curve.input.end=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end -help.state.winfo.uesk.wsp=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp -help.state.winfo.uesk.dgm=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm -help.state.winfo.uesk.profiles=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles -help.state.winfo.uesk.floodplain=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain -help.state.winfo.uesk.differences=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.differences -help.state.winfo.uesk.scenario=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.dc-hws=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.user-rgd=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.uesk.barriers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario -help.state.winfo.historicalq.reference_gauge=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge -help.state.winfo.historicalq.timerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange -help.state.winfo.historicalq.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode -help.state.winfo.function_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.function_select -help.state.winfo.extreme.percent=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.percent -help.state.winfo.extreme.qinput=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput +help.index=${help.url}/OnlineHilfe +help.state.winfo=${help.url}/OnlineHilfe/WINFO +help.state.winfo.river=${help.url}/OnlineHilfe/WINFO#help.state.winfo.river +help.state.winfo.calculation_mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.calculation_mode +help.state.winfo.location=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location +help.state.winfo.distance_only=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance_only +help.state.winfo.distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.distance +help.state.winfo.location_distance=${help.url}/OnlineHilfe/WINFO#help.state.winfo.location_distance +help.state.winfo.wq=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq +help.state.winfo.wq_adapted=${help.url}/OnlineHilfe/WINFO#help.state.winfo.wq_adapted +help.state.winfo.waterlevel_pair_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.waterlevel_pair_select +help.state.winfo.reference.curve.input.start=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.start +help.state.winfo.reference.curve.input.end=${help.url}/OnlineHilfe/WINFO#help.state.winfo.reference.curve.input.end +help.state.winfo.uesk.wsp=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.wsp +help.state.winfo.uesk.dgm=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.dgm +help.state.winfo.uesk.profiles=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.profiles +help.state.winfo.uesk.floodplain=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.floodplain +help.state.winfo.uesk.differences=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.differences +help.state.winfo.uesk.scenario=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.dc-hws=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.user-rgd=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.uesk.barriers=${help.url}/OnlineHilfe/WINFO#help.state.winfo.uesk.scenario +help.state.winfo.historicalq.reference_gauge=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.reference_gauge +help.state.winfo.historicalq.timerange=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.timerange +help.state.winfo.historicalq.mode=${help.url}/OnlineHilfe/WINFO#help.state.winfo.historicalq.mode +help.state.winfo.function_select=${help.url}/OnlineHilfe/WINFO#help.state.winfo.function_select +help.state.winfo.extreme.percent=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.percent +help.state.winfo.extreme.qinput=${help.url}/OnlineHilfe/WINFO#help.state.winfo.extreme.qinput -help.state.minfo.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.river -help.state.minfo.calculation_mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.calculation_mode -help.state.minfo.distance_only=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.distance_only -help.state.minfo.bed.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch -help.state.minfo.sq.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.location -help.state.minfo.bed.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.location -help.state.minfo.dischargestate=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.dischargestate -help.state.minfo.soundings=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.soundings -help.state.minfo.bed.difference_select=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select -help.state.minfo.sq.outliers=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.outliers -help.state.minfo.sediment.load.year_epoch=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch -help.state.minfo.sediment.load.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location -help.state.minfo.bed.periods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.periods -help.state.minfo.bed.char_diameter=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter -help.state.minfo.sediment.load.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period -help.state.minfo.sediment.load.epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs -help.state.minfo.sediment.load.off_epochs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs -help.state.minfo.sediment.load.unit=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit -help.state.minfo.sq.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/MINFO#help.state.minfo.sq.period +help.state.minfo.river=${help.url}/OnlineHilfe/MINFO#help.state.minfo.river +help.state.minfo.calculation_mode=${help.url}/OnlineHilfe/MINFO#help.state.minfo.calculation_mode +help.state.minfo.distance_only=${help.url}/OnlineHilfe/MINFO#help.state.minfo.distance_only +help.state.minfo.bed.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.year_epoch +help.state.minfo.sq.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.location +help.state.minfo.bed.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.location +help.state.minfo.dischargestate=${help.url}/OnlineHilfe/MINFO#help.state.minfo.dischargestate +help.state.minfo.soundings=${help.url}/OnlineHilfe/MINFO#help.state.minfo.soundings +help.state.minfo.bed.difference_select=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.difference_select +help.state.minfo.sq.outliers=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.outliers +help.state.minfo.sediment.load.year_epoch=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.year_epoch +help.state.minfo.sediment.load.location=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.location +help.state.minfo.bed.periods=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.periods +help.state.minfo.bed.char_diameter=${help.url}/OnlineHilfe/MINFO#help.state.minfo.bed.char_diameter +help.state.minfo.sediment.load.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.period +help.state.minfo.sediment.load.epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.epochs +help.state.minfo.sediment.load.off_epochs=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.off_epochs +help.state.minfo.sediment.load.unit=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sediment.load.unit +help.state.minfo.sq.period=${help.url}/OnlineHilfe/MINFO#help.state.minfo.sq.period fix.reference.period=Reference period @@ -615,18 +616,18 @@ gauge.discharge.service.chart.series.title = Discharge Curve {0,date,short} - {1,date,short} gauge.discharge.service.chart.series.title.master = Current Discharge Curve since {0,date,short} -help.state.fix.river=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.river -help.state.fix.calculation.mode=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode -help.state.fix.location=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.location -help.state.fix.period=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.period -help.state.fix.gaugerange=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange -help.state.fix.eventselect=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect -help.state.fix.analysis.referenceperiod=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod -help.state.fix.analysis.analysisperiods=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods -help.state.fix.analysis.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function -help.state.fix.analysis.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing -help.state.fix.analysis.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute -help.state.fix.vollmer.function=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function -help.state.fix.vollmer.preprocessing=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing -help.state.fix.vollmer.qs=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs -help.state.fix.vollmer.compute=https://flys-intern.intevation.de/Flys-3.0/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute +help.state.fix.river=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.river +help.state.fix.calculation.mode=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.calculation.mode +help.state.fix.location=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.location +help.state.fix.period=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.period +help.state.fix.gaugerange=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.gaugerange +help.state.fix.eventselect=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.eventselect +help.state.fix.analysis.referenceperiod=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.referenceperiod +help.state.fix.analysis.analysisperiods=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.analysisperiods +help.state.fix.analysis.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.function +help.state.fix.analysis.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.preprocessing +help.state.fix.analysis.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.analysis.compute +help.state.fix.vollmer.function=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.function +help.state.fix.vollmer.preprocessing=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.preprocessing +help.state.fix.vollmer.qs=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.qs +help.state.fix.vollmer.compute=${help.url}/OnlineHilfe/Fixierungsanalyse#help.state.fix.vollmer.compute diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/contrib/shpimporter/boundaries.py --- a/flys-backend/contrib/shpimporter/boundaries.py Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/contrib/shpimporter/boundaries.py Sun Apr 21 10:46:59 2013 +0200 @@ -59,13 +59,9 @@ newFeat.SetField("kind", kind) if self.IsFieldSet(feat, "SECTIE"): newFeat.SetField("sectie", feat.GetField("SECTIE")) - else: - newFeat.SetField("sectie", 0) - if self.IsFieldSet(feat, "SOBEK"): - newFeat.SetField("sobek", feat.GetField("SOBEK")) - else: - newFeat.SetField("sobek", 0) + if self.IsFieldSet(feat, "STROVOER"): + newFeat.SetField("sobek", feat.GetField("STROVOER")) if self.IsFieldSet(feat, "river_id"): newFeat.SetField("river_id", feat.GetField("river_id")) @@ -106,13 +102,9 @@ if self.IsFieldSet(feat, "SECTIE"): newFeat.SetField("sectie", feat.GetField("SECTIE")) - else: - newFeat.SetField("sectie", 0) if self.IsFieldSet(feat, "SOBEK"): newFeat.SetField("sobek", feat.GetField("SOBEK")) - else: - newFeat.SetField("sobek", 0) if self.IsFieldSet(feat, "river_id"): newFeat.SetField("river_id", feat.GetField("river_id")) diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/doc/schema/oracle-minfo.sql --- a/flys-backend/doc/schema/oracle-minfo.sql Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/doc/schema/oracle-minfo.sql Sun Apr 21 10:46:59 2013 +0200 @@ -207,6 +207,7 @@ main_channel NUMBER(38,3) NOT NULL, shear_stress NUMBER(38,3) NOT NULL, PRIMARY KEY(id), + UNIQUE (station, flow_velocity_model_id), CONSTRAINT fk_fvv_flow_velocity_model_id FOREIGN KEY (flow_velocity_model_id) REFERENCES flow_velocity_model(id) ON DELETE CASCADE ); @@ -331,5 +332,5 @@ cduan NUMBER(38,20), PRIMARY KEY (id), CONSTRAINT fk_sqr_id FOREIGN KEY (sq_relation_id) REFERENCES sq_relation(id) ON DELETE CASCADE, - CONSTRAINT fk_mstation_id FOREIGN KEY (measurement_station_id) REFERENCES measurement_station(id) + CONSTRAINT fk_mstation_id FOREIGN KEY (measurement_station_id) REFERENCES measurement_station(id) ON DELETE CASCADE ); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/doc/schema/oracle-spatial.sql --- a/flys-backend/doc/schema/oracle-spatial.sql Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/doc/schema/oracle-spatial.sql Sun Apr 21 10:46:59 2013 +0200 @@ -237,23 +237,23 @@ SELECT HWS_LINES_ID_SEQ.nextval INTO :new.id FROM dual; END; / --- HWS Points lookup tables + CREATE TABLE sectie_kinds ( id NUMBER PRIMARY KEY NOT NULL, name VARCHAR(64) NOT NULL ); -INSERT INTO sectie_kinds (id, name) VALUES (0, 'SECTIE Unbekannt'); -INSERT INTO sectie_kinds (id, name) VALUES (1, 'Flussschlauch'); -INSERT INTO sectie_kinds (id, name) VALUES (2, 'Uferbank'); -INSERT INTO sectie_kinds (id, name) VALUES (3, 'Überflutungsbereich'); +INSERT INTO sectie_kinds (id, name) VALUES (0, 'nicht berücksichtigt'); +INSERT INTO sectie_kinds (id, name) VALUES (1, 'Hauptgerinne'); +INSERT INTO sectie_kinds (id, name) VALUES (2, 'Uferbereich'); +INSERT INTO sectie_kinds (id, name) VALUES (3, 'Vorland'); CREATE TABLE sobek_kinds ( id NUMBER PRIMARY KEY NOT NULL, name VARCHAR(64) NOT NULL ); -INSERT INTO sobek_kinds (id, name) VALUES (0, 'SOBEK Unbekannt'); -INSERT INTO sobek_kinds (id, name) VALUES (1, 'Stromführend'); -INSERT INTO sobek_kinds (id, name) VALUES (2, 'Stromspeichernd'); +INSERT INTO sobek_kinds (id, name) VALUES (0, 'nicht berücksichtigt'); +INSERT INTO sobek_kinds (id, name) VALUES (1, 'durchströmt'); +INSERT INTO sobek_kinds (id, name) VALUES (2, 'nicht durchströmt'); CREATE TABLE boundary_kinds ( id NUMBER PRIMARY KEY NOT NULL, @@ -338,8 +338,8 @@ river_id NUMBER(38) REFERENCES rivers(id) ON DELETE CASCADE, name VARCHAR(255), kind NUMBER(38) DEFAULT 0 NOT NULL REFERENCES boundary_kinds(id), - sectie NUMBER(38) DEFAULT 0 NOT NULL REFERENCES sectie_kinds(id), - sobek NUMBER(38) DEFAULT 0 NOT NULL REFERENCES sobek_kinds(id), + sectie NUMBER(38) REFERENCES sectie_kinds(id), + sobek NUMBER(38) REFERENCES sobek_kinds(id), path VARCHAR(256), id NUMBER PRIMARY KEY NOT NULL ); @@ -357,8 +357,8 @@ river_id NUMBER(38) REFERENCES rivers(id) ON DELETE CASCADE, name VARCHAR(255), kind NUMBER(38) DEFAULT 0 NOT NULL REFERENCES boundary_kinds(id), - sectie NUMBER(38) DEFAULT 0 NOT NULL REFERENCES sectie_kinds(id), - sobek NUMBER(38) DEFAULT 0 NOT NULL REFERENCES sobek_kinds(id), + sectie NUMBER(38) REFERENCES sectie_kinds(id), + sobek NUMBER(38) REFERENCES sobek_kinds(id), path VARCHAR(256), id NUMBER PRIMARY KEY NOT NULL ); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/doc/schema/oracle.sql --- a/flys-backend/doc/schema/oracle.sql Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/doc/schema/oracle.sql Sun Apr 21 10:46:59 2013 +0200 @@ -220,7 +220,7 @@ CREATE TABLE named_main_values ( id NUMBER(38,0) NOT NULL, - name VARCHAR2(255), + name VARCHAR2(256) NOT NULL UNIQUE, type_id NUMBER(38,0), PRIMARY KEY (id) ); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/doc/schema/postgresql-minfo.sql --- a/flys-backend/doc/schema/postgresql-minfo.sql Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/doc/schema/postgresql-minfo.sql Sun Apr 21 10:46:59 2013 +0200 @@ -207,6 +207,7 @@ main_channel NUMERIC NOT NULL, shear_stress NUMERIC NOT NULL, PRIMARY KEY(id), + UNIQUE (station, flow_velocity_model_id), CONSTRAINT fk_fvv_flow_velocity_model_id FOREIGN KEY (flow_velocity_model_id) REFERENCES flow_velocity_model(id) ON DELETE CASCADE ); @@ -331,6 +332,6 @@ cduan NUMERIC, PRIMARY KEY (id), CONSTRAINT fk_sqr_id FOREIGN KEY (sq_relation_id) REFERENCES sq_relation(id) ON DELETE CASCADE, - CONSTRAINT fk_mstation_id FOREIGN KEY (measurement_station_id) REFERENCES measurement_station(id) + CONSTRAINT fk_mstation_id FOREIGN KEY (measurement_station_id) REFERENCES measurement_station(id) ON DELETE CASCADE ); COMMIT; diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/doc/schema/postgresql-spatial.sql --- a/flys-backend/doc/schema/postgresql-spatial.sql Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/doc/schema/postgresql-spatial.sql Sun Apr 21 10:46:59 2013 +0200 @@ -250,18 +250,18 @@ id int PRIMARY KEY NOT NULL, name VARCHAR(64) NOT NULL ); -INSERT INTO sectie_kinds (id, name) VALUES (0, 'SECTIE Unbekannt'); -INSERT INTO sectie_kinds (id, name) VALUES (1, 'Flussschlauch'); -INSERT INTO sectie_kinds (id, name) VALUES (2, 'Uferbank'); -INSERT INTO sectie_kinds (id, name) VALUES (3, 'Überflutungsbereich'); +INSERT INTO sectie_kinds (id, name) VALUES (0, 'nicht berücksichtigt'); +INSERT INTO sectie_kinds (id, name) VALUES (1, 'Hauptgerinne'); +INSERT INTO sectie_kinds (id, name) VALUES (2, 'Uferbereich'); +INSERT INTO sectie_kinds (id, name) VALUES (3, 'Vorland'); CREATE TABLE sobek_kinds ( id int PRIMARY KEY NOT NULL, name VARCHAR(64) NOT NULL ); -INSERT INTO sobek_kinds (id, name) VALUES (0, 'SOBEK Unbekannt'); -INSERT INTO sobek_kinds (id, name) VALUES (1, 'Stromführend'); -INSERT INTO sobek_kinds (id, name) VALUES (2, 'Stromspeichernd'); +INSERT INTO sobek_kinds (id, name) VALUES (0, 'nicht berücksichtigt'); +INSERT INTO sobek_kinds (id, name) VALUES (1, 'durchströmt'); +INSERT INTO sobek_kinds (id, name) VALUES (2, 'nicht durchströmt'); CREATE TABLE boundary_kinds ( id int PRIMARY KEY NOT NULL, @@ -278,8 +278,8 @@ river_id int REFERENCES rivers(id) ON DELETE CASCADE, name VARCHAR(255), kind int REFERENCES boundary_kinds(id) NOT NULL DEFAULT 0, - sectie int REFERENCES sectie_kinds(id) NOT NULL DEFAULT 0, - sobek int REFERENCES sobek_kinds(id) NOT NULL DEFAULT 0, + sectie int REFERENCES sectie_kinds(id), + sobek int REFERENCES sobek_kinds(id), path VARCHAR(256) ); SELECT AddGeometryColumn('hydr_boundaries','geom',31467,'MULTILINESTRING',3); @@ -292,8 +292,8 @@ river_id int REFERENCES rivers(id) ON DELETE CASCADE, name VARCHAR(255), kind int REFERENCES boundary_kinds(id) NOT NULL DEFAULT 0, - sectie int REFERENCES sectie_kinds(id) NOT NULL DEFAULT 0, - sobek int REFERENCES sobek_kinds(id) NOT NULL DEFAULT 0, + sectie int REFERENCES sectie_kinds(id), + sobek int REFERENCES sobek_kinds(id), path VARCHAR(256) ); SELECT AddGeometryColumn('hydr_boundaries_poly','geom',31467,'MULTIPOLYGON',3); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/doc/schema/postgresql.sql --- a/flys-backend/doc/schema/postgresql.sql Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/doc/schema/postgresql.sql Sun Apr 21 10:46:59 2013 +0200 @@ -111,8 +111,7 @@ CREATE TABLE named_main_values ( id int PRIMARY KEY NOT NULL, name VARCHAR(256) NOT NULL UNIQUE, - type_id int NOT NULL REFERENCES main_value_types(id), - UNIQUE (name, type_id) + type_id int NOT NULL REFERENCES main_value_types(id) ); -- Table for time intervals diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModel.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModel.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModel.java Sun Apr 21 10:46:59 2013 +0200 @@ -30,6 +30,12 @@ values = new ArrayList(); } + public ImportFlowVelocityModel(String description) { + this(); + + this.description = description; + } + public ImportFlowVelocityModel(ImportDischargeZone dischargeZone, String description) { this(); @@ -84,14 +90,12 @@ Query query = session.createQuery("from FlowVelocityModel where " + " dischargeZone=:dischargeZone"); - //query.setParameter("river", river); query.setParameter("dischargeZone", zone); List model = query.list(); if (model.isEmpty()) { - //peer = new FlowVelocityModel(river, zone); - peer = new FlowVelocityModel(zone); + peer = new FlowVelocityModel(zone, description); session.save(peer); } else { diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModelValue.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModelValue.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModelValue.java Sun Apr 21 10:46:59 2013 +0200 @@ -49,11 +49,11 @@ Query query = session.createQuery( "from FlowVelocityModelValue where " + " flowVelocity=:model and " + - " station=:station" + " station between :station - 0.00001 and :station + 0.00001" ); query.setParameter("model", model); - query.setParameter("station", station); + query.setParameter("station", station.doubleValue()); List values = query.list(); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/importer/ImportMainValue.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportMainValue.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportMainValue.java Sun Apr 21 10:46:59 2013 +0200 @@ -8,6 +8,7 @@ import de.intevation.flys.model.Gauge; import de.intevation.flys.model.River; import de.intevation.flys.model.NamedMainValue; +import de.intevation.flys.model.TimeInterval; import org.hibernate.Session; import org.hibernate.Query; @@ -17,6 +18,7 @@ protected ImportGauge gauge; protected ImportNamedMainValue mainValue; protected BigDecimal value; + protected ImportTimeInterval timeInterval; protected MainValue peer; @@ -26,11 +28,13 @@ public ImportMainValue( ImportGauge gauge, ImportNamedMainValue mainValue, - BigDecimal value + BigDecimal value, + ImportTimeInterval timeInterval ) { - this.gauge = gauge; - this.mainValue = mainValue; - this.value = value; + this.gauge = gauge; + this.mainValue = mainValue; + this.value = value; + this.timeInterval = timeInterval; } public ImportGauge getGauge() { @@ -62,12 +66,17 @@ Session session = ImporterSession.getInstance().getDatabaseSession(); Query query = session.createQuery("from MainValue where " + "gauge.id=:gauge_id and mainValue.id=:name_id " + + "and timeInterval = :time " + "and value=:value"); Gauge g = gauge.getPeer(river); NamedMainValue n = mainValue.getPeer(); + TimeInterval t = timeInterval != null + ? timeInterval.getPeer() + : null; query.setParameter("gauge_id", g.getId()); query.setParameter("name_id", n.getId()); query.setParameter("value", value); + query.setParameter("time", t); List values = query.list(); if (values.isEmpty()) { peer = new MainValue(g, n, value, null); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/importer/ImportTimeInterval.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportTimeInterval.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportTimeInterval.java Sun Apr 21 10:46:59 2013 +0200 @@ -27,8 +27,14 @@ } public ImportTimeInterval(Date startTime, Date stopTime) { - this.startTime = startTime; - this.stopTime = stopTime; + if (startTime.after(stopTime)) { + this.stopTime = startTime; + this.startTime = stopTime; + } + else { + this.startTime = startTime; + this.stopTime = stopTime; + } } public Date getStartTime() { diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityModelParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityModelParser.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityModelParser.java Sun Apr 21 10:46:59 2013 +0200 @@ -1,10 +1,14 @@ package de.intevation.flys.importer.parsers; +import java.io.File; +import java.io.IOException; + import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.List; +import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -13,6 +17,7 @@ import de.intevation.flys.importer.ImportDischargeZone; import de.intevation.flys.importer.ImportFlowVelocityModel; import de.intevation.flys.importer.ImportFlowVelocityModelValue; +import de.intevation.flys.utils.EpsilonComparator; public class FlowVelocityModelParser extends LineParser { @@ -49,9 +54,14 @@ private ImportFlowVelocityModel current; + protected String description; + + protected TreeSet kmExists; + public FlowVelocityModelParser() { models = new ArrayList(); + kmExists = new TreeSet(EpsilonComparator.CMP); } @@ -60,14 +70,24 @@ } @Override + public void parse(File file) throws IOException { + description = file.getName(); + + super.parse(file); + } + + @Override protected void reset() { - current = new ImportFlowVelocityModel(); + current = new ImportFlowVelocityModel(description); + kmExists.clear(); } @Override protected void finish() { models.add(current); + + // description = null; } @@ -217,7 +237,15 @@ } try { - double km = nf.parse(cols[0]).doubleValue(); + double km = nf.parse(cols[0]).doubleValue(); + + Double key = Double.valueOf(km); + + if (kmExists.contains(key)) { + log.warn("duplicate stattion '" + km + "': -> ignored"); + return; + } + double q = nf.parse(cols[1]).doubleValue(); double total = nf.parse(cols[2]).doubleValue(); double main = nf.parse(cols[3]).doubleValue(); @@ -230,6 +258,8 @@ new BigDecimal(main), new BigDecimal(stress) )); + + kmExists.add(key); } catch (ParseException pe) { log.warn("Unparseable flow velocity values:", pe); diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/importer/parsers/StaFileParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/StaFileParser.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/StaFileParser.java Sun Apr 21 10:46:59 2013 +0200 @@ -11,8 +11,10 @@ import java.util.regex.Pattern; import java.util.regex.Matcher; +import java.util.Date; import java.util.HashMap; import java.util.ArrayList; +import java.util.List; import org.apache.log4j.Logger; @@ -20,6 +22,8 @@ import de.intevation.flys.importer.ImportMainValue; import de.intevation.flys.importer.ImportNamedMainValue; import de.intevation.flys.importer.ImportGauge; +import de.intevation.flys.importer.ImportTimeInterval; +import de.intevation.flys.utils.DateGuesser; public class StaFileParser { @@ -37,6 +41,28 @@ Pattern.compile("\\s*([^\\s]+)\\s+([^\\s]+)\\s+([" + Pattern.quote(TYPES) + "]).*"); + public static final class NameAndTimeInterval { + private String name; + private ImportTimeInterval timeInterval; + + public NameAndTimeInterval(String name) { + this(name, null); + } + + public NameAndTimeInterval(String name, ImportTimeInterval timeInterval) { + this.name = name; + this.timeInterval = timeInterval; + } + + public String getName() { + return name; + } + + public ImportTimeInterval getTimeInterval() { + return timeInterval; + } + } // class NameAndTimeInterval + public StaFileParser() { } @@ -64,7 +90,7 @@ return false; } - String gaugeName = line.substring(16, 37).trim(); + String gaugeName = line.substring(16, 28).trim(); Long gaugeNumber = null; @@ -160,12 +186,16 @@ types.put(typeString, type); } String name = m.group(1); + NameAndTimeInterval nat = parseName(name); ImportNamedMainValue namedMainValue = - new ImportNamedMainValue(type, name); + new ImportNamedMainValue(type, nat.getName()); namedMainValues.add(namedMainValue); - ImportMainValue mainValue = - new ImportMainValue(gauge, namedMainValue, value); + ImportMainValue mainValue = new ImportMainValue( + gauge, + namedMainValue, + value, + nat.getTimeInterval()); mainValues.add(mainValue); } @@ -186,5 +216,123 @@ log.info("finished parsing STA file: " + file); return true; } + + protected NameAndTimeInterval parseName(String name) { + List result = new ArrayList(); + + unbracket(name, 0, result); + + int length = result.size(); + + if (length < 1) { // Should not happen. + return new NameAndTimeInterval(name); + } + + if (length == 1) { // No date at all -> use first part. + return new NameAndTimeInterval(result.get(0).trim()); + } + + if (length == 2) { // e.g. W(1994) or W(1994 - 1999) + String type = result.get(0).trim(); + + ImportTimeInterval timeInterval = getTimeInterval( + result.get(1).trim()); + + if (timeInterval == null) { // No date at all. + type = name; + } + + return new NameAndTimeInterval(type, timeInterval); + } + + if (length == 3) { // e.g W(Q(1994)) or W(Q(1994 - 1999)) + + String type = + result.get(0).trim() + "(" + + result.get(1).trim() + ")"; + + ImportTimeInterval timeInterval = getTimeInterval( + result.get(2).trim()); + + if (timeInterval == null) { // No date at all. + type = name; + } + + return new NameAndTimeInterval(type, timeInterval); + } + + // more than 3 elements return unmodified. + + return new NameAndTimeInterval(name); + } + + private static ImportTimeInterval getTimeInterval(String datePart) { + + int minus = datePart.indexOf('-'); + + if (minus < 0) { // '-' not found + + Date date = null; + try { + date = DateGuesser.guessDate(datePart); + } + catch (IllegalArgumentException iae) { + log.warn("STA: Invalid date '" + datePart + "'"); + return null; + } + + return new ImportTimeInterval(date); + } + + // Found '-' so we have - + String startPart = datePart.substring(0, minus).trim(); + String endPart = datePart.substring(minus).trim(); + + Date startDate = null; + Date endDate = null; + + try { + startDate = DateGuesser.guessDate(startPart); + } + catch (IllegalArgumentException iae) { + log.warn("STA: Invalid start date '" + startPart + "'"); + } + + try { + endDate = DateGuesser.guessDate(endPart); + } + catch (IllegalArgumentException iae) { + log.warn("STA: Invalid end date '" + endPart + "'"); + } + + if (startDate == null) { + log.warn("STA: Need start date."); + return null; + } + + return new ImportTimeInterval(startDate, endDate); + } + + private static int unbracket(String s, int index, List result) { + StringBuilder sb = new StringBuilder(); + int length = s.length(); + while (index < length) { + char c = s.charAt(index); + switch (c) { + case '(': + index = unbracket(s, index+1, result); + break; + case ')': + result.add(0, sb.toString()); + return index+1; + default: + sb.append(c); + ++index; + } + } + result.add(0, sb.toString()); + + return index; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-backend/src/main/java/de/intevation/flys/model/Range.java --- a/flys-backend/src/main/java/de/intevation/flys/model/Range.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/model/Range.java Sun Apr 21 10:46:59 2013 +0200 @@ -19,6 +19,7 @@ public class Range implements Serializable { + public static final double EPSILON = 1e-5; private Integer id; private BigDecimal a; private BigDecimal b; @@ -73,6 +74,22 @@ this.b = b; } + public boolean containsTolerant(double x) { + return containsTolerant(x, EPSILON); + } + + public boolean containsTolerant(double x, double tolerance) { + BigDecimal b = this.b != null ? this.b : a; + double av = a.doubleValue(); + double bv = b.doubleValue(); + if (av > bv) { + double t = av; + av = bv; + bv = t; + } + return x+tolerance >= av && x-tolerance <= bv; + } + public boolean contains(double x) { BigDecimal b = this.b != null ? this.b : a; double av = a.doubleValue(); diff -r 1126b9e00378 -r e95427ed80e5 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 Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java Sun Apr 21 10:46:59 2013 +0200 @@ -594,6 +594,8 @@ // ERRORS + String error_years_wrong(); + String error_read_minmax_values(); String error_validate_range(); @@ -822,6 +824,8 @@ String annotations(); + String all_annotations(); + String flowvelocitymeasurement(); String bed_quality_bed(); @@ -844,6 +848,8 @@ String catchments(); + String catchment_wms(); + String floodplain(); String lines(); @@ -878,6 +884,10 @@ String mainvalues(); + String wmainvalue(); + + String qmainvalue(); + String show_mainvalues(); String dems(); @@ -892,6 +902,8 @@ String bedheights(); + String morph_width(); + String datacage(); String datacage_add_pair(); @@ -1210,5 +1222,39 @@ String printWindowTitle(); + String mapfish_data_range(); + + String mapfish_data_subtitle(); + + String mapfish_data_strech(); + + String mapfish_data_institution(); + + String mapfish_data_source(); + + String mapfish_data_creator(); + + String mapfish_data_dateplace(); + + String mapfish_data_river(); + + String mapTitle(); + + String mapSubtitle(); + + String mapRange(); + + String mapStretch(); + + String mapCreator(); + + String mapInstitution(); + + String mapSource(); + + String mapDate(); + + String mapLogo(); + } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 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 Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties Sun Apr 21 10:46:59 2013 +0200 @@ -307,6 +307,7 @@ ele_window_geometry_error = The geometry is not supported: unexpected_exception = There occured an unexpected exception +error_years_wrong = The second year needs to be bigger than the first year. error_read_minmax_values = Error while reading min/max values for the location input. error_validate_range = The value $1 needs to be smaller than $3 and bigger than $2. error_validate_date_range = Start date needs to be before end date. @@ -426,6 +427,7 @@ columns = Columns annotation = Annotations annotations = Annotations +all_annotations = All annotations flowvelocitymeasurement = Flowvelocity measurements bed_quality_bed = Quality - Bed bed_quality_load = Quality - Load @@ -437,6 +439,7 @@ qps = Crosssection Tracks hws = Floodplain Protection Work catchments = Catchments +catchment_wms = Catchments (WMS) floodplain = Floodplain lines = Lines buildings = Buildings @@ -454,6 +457,8 @@ discharge_table_gauge = Discharge Table at Gauge mainvalue = Mainvalue mainvalues = Mainvalues +wmainvalue = Mainvalues (W) +qmainvalue = Mainvalues (Q) show_mainvalues = Show Mainvalues dems = Digital Elevation Models hydrboundaries = Hydrological Boundaries @@ -461,6 +466,7 @@ single = Year epoch = Epoch bedheights = Bedheights +morph_width = morphologic Width datacage = Datacage official = Offical inofficial = Inofficiall @@ -629,3 +635,29 @@ measurement_station_url = https://flys-intern.intevation.de/MessstellenInfo/ measurement_station_info_link = Measurement Station Info measurement_station_gauge_name = Reference Gauge + +# The prefix is used to classify them and will be stripped +# If the payload part sarts with a number it will be sorted +# By this number and the number will be stripped. +# Number must be a single digit 0-9. This hack was made necessary +# by the usage of an attribute table in mapfish + +mapfish_data_range = mapfish_data_3Range +mapfish_data_subtitle = mapfish_data_0Subtitle +mapfish_data_strech = mapfish_data_2Stretch +mapfish_data_institution = mapfish_data_5Institution +mapfish_data_source = mapfish_data_6Source +mapfish_data_creator = mapfish_data_5Creator +mapfish_data_dateplace = mapfish_data_7Place, Date +mapfish_data_river = mapfish_data_1River + +mapTitle = Title +mapSubtitle = Subtitle +mapRange = Range +mapStretch = Stretch +mapCreator = Creator +mapInstitution = Institution +mapSource = Source +mapDate = Place, Date +mapLogo = Logo + diff -r 1126b9e00378 -r e95427ed80e5 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 Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties Sun Apr 21 10:46:59 2013 +0200 @@ -151,7 +151,7 @@ wqTitle = Eingabe f\u00fcr W/Q Daten wqadaptedTitle = Eingabe f\u00fcr W/Q Daten wqHistorical = Auswahl der Analyseart -calcTableTitle = Werte +calcTableTitle = Ergebnisausgabe helperPanelTitle = Eingabeunterst\u00fctzung gaugePanelTitle = Gew\u00e4sser/Pegel-Info measurementStationPanelTitle = Gew\u00e4sser/Messstellen-Info @@ -307,6 +307,7 @@ ele_window_geometry_error = Die Geometrie wird nicht unterst\u00fctzt: unexpected_exception = Ein unerwarteter Fehler ist aufgetreten +error_years_wrong = Das zweite Jahr muss gr\u00f6\u00dfer als das erste sein. error_read_minmax_values = Fehler beim Lesen der min/max Werte. Es kann keine Validierung der eingegebenen Strecke durchgef\u00fchrt werden. error_validate_range = Der Wert $1 muss kleiner als $3 und gr\u00f6\u00dfer als $2 sein. error_validate_date_range = Anfangsdatum muss fr\u00fcher sein als Enddatum. @@ -428,19 +429,21 @@ annotation = Streckenfavoriten annotation = Streckenfavoriten - Typen annotations = Streckenfavoriten +all_annotations = Alle Streckenfavoriten flowvelocitymeasurement = gemessene Flie\u00dfgeschwindigkeiten bed_quality_bed = Sohlbeschaffenheit - Sohle bed_quality_load = Sohlbeschaffenheit - Geschiebe additionals = Zus\u00e4tzliche L\u00e4ngsschnitte differences = Differenzen -kilometrage = Kilometrierung +kilometrage = Stationierung riveraxis = Flussachse km = Km qps = Querprofilspuren hws = Hochwasserschutzanlagen -catchments = Einzugsgebiete (WMS) +catchments = Einzugsgebiete +catchment_wms = Einzugsgebiete (WMS) floodplain = Talaue -lines = Linien +lines = Darstellungstyp: Linien buildings = Bauwerke fixpoints = Festpunkte uesk = \u00dcberschwemmungsfl\u00e4chen @@ -456,13 +459,16 @@ discharge_table_gauge = Abflusstafel am Pegel mainvalue = Hauptwerte mainvalues = Hauptwerte +wmainvalue = Hauptwerte (W) +qmainvalue = Hauptwerte (Q) show_mainvalues = Hauptwerte anzeigen dems = Digitale Gel\u00e4ndemodelle hydrboundaries = Hydrologische Grenzen -gaugelocations = Pegellagen (WMS) +gaugelocations = PEGELONLINE aktuell (WMS) single = Jahr epoch = Epoche bedheights = Sohlh\u00f6hen +morph_width = Morphologische Breite datacage = Datenkorb official = Offiziell inofficial = Inoffiziell @@ -476,16 +482,16 @@ axis = Achse bfg_model = BfG-Modell federal = Bundesländer -areas = Flächen +areas = Darstellungstyp: Flächen sobek_flooded = SOBEK-Grenzlinie durchflutet / nicht durchflutet sobek_areas = SOBEK-Bereiche measurements = Messungen floodmarks = HW-Marken pegel_had_measurement_points = HAD Abflussmessstellen (WMS) -gauge_points = Pegelpunkte (WSV) -gauge_level = Aktueller Wasserstand (WSV) -gauge_names = Pegelnamen (WSV) -gauge_tendency = Tendenz des Wasserstands (WSV) +gauge_points = Pegelmessstelle (WMS) +gauge_level = Wasserstand (WMS) +gauge_names = Pegelname (WMS) +gauge_tendency = Tendenz des Wasserstands (WMS) startcolor = Farbverlauf Startfarbe endcolor = Farbverlauf Endfarbe @@ -628,3 +634,28 @@ measurement_station_url = https://flys-intern.intevation.de/MessstellenInfo/ measurement_station_info_link = Messstelleninfo measurement_station_gauge_name = hydrologischer Bezugspegel + +# The prefix is used to classify them and will be stripped +# If the payload part sarts with a number it will be sorted +# By this number and the number will be stripped. +# Number must be a single digit 0-9. This hack was made necessary +# by the usage of an attribute table in mapfish + +mapfish_data_range = mapfish_data_3Bereich +mapfish_data_subtitle = mapfish_data_0Untertitel +mapfish_data_strech = mapfish_data_2Strecke +mapfish_data_institution = mapfish_data_5Institution +mapfish_data_source = mapfish_data_6Datenquelle +mapfish_data_creator = mapfish_data_4Bearbeiter +mapfish_data_dateplace = mapfish_data_7Ort, Datum +mapfish_data_river = mapfish_data_1Gew\u00e4sser + +mapTitle = Titel +mapSubtitle = Untertitel +mapRange = Bereich +mapStretch = Strecke +mapCreator = Bearbeiter +mapInstitution = Institution +mapSource = Datenquelle +mapDate = Ort, Datum +mapLogo = Logo diff -r 1126b9e00378 -r e95427ed80e5 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 Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties Sun Apr 21 10:46:59 2013 +0200 @@ -305,6 +305,7 @@ ele_window_geometry_error = The geometry is not supported: unexpected_exception = There occured an unexpected exception +error_years_wrong = The second year needs to be bigger than the first year. error_read_minmax_values = Error while reading min/max values for the location input. error_validate_range = The value $1 needs to be smaller than $3 and bigger than $2. error_validate_date_range = Start date needs to be before end date. @@ -425,6 +426,7 @@ columns = Columns annotation = Annotations annotations = Annotations +all_annotations = All annotations flowvelocitymeasurement = Flowvelocity measurements bed_quality_bed = Quality - Bed bed_quality_load = Quality - Load @@ -435,7 +437,8 @@ km = Km qps = Crosssection Tracks hws = Floodplain Protection Work -catchments = Catchments (WMS) +catchments = Catchments +catchment_wms = Catchment (WMS) floodplain = Floodplain lines = Lines buildings = Buildings @@ -453,6 +456,8 @@ discharge_table_gauge = Discharge Table at Gauge mainvalue = Mainvalue mainvalues = Mainvalues +wmainvalue = Mainvalues (W) +qmainvalue = Mainvalues (Q) show_mainvalues = Show Mainvalues dems = Digital Elevation Models hydrboundaries = Hydrological Boundaries @@ -460,6 +465,7 @@ single = Year epoch = Epoch bedheights = Bedheights +morph_width = morphologic Width datacage = Datacage startcolor = Colorrange start color diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/client/ui/AbstractUIProvider.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/AbstractUIProvider.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/AbstractUIProvider.java Sun Apr 21 10:46:59 2013 +0200 @@ -300,7 +300,7 @@ public List validate() { - return new ArrayList(); + return new ArrayList(); // FIXME: What's this? } diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/client/ui/StyleEditorWindow.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/StyleEditorWindow.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/StyleEditorWindow.java Sun Apr 21 10:46:59 2013 +0200 @@ -2,6 +2,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; + import com.smartgwt.client.types.Alignment; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Button; @@ -327,7 +328,9 @@ set.getName(), set.getType(), set.getDefaultValue()); - vl.addMember(property); + if (property != null) { + vl.addMember(property); + } } // Add settings not in whitelist above. @@ -345,7 +348,9 @@ set.getName(), set.getType(), set.getDefaultValue()); - vl.addMember(property); + if (property != null) { + vl.addMember(property); + } } return vl; @@ -434,6 +439,8 @@ valueMap.put("20", "20"); f.setValueMap(valueMap); f.setValue(value); + // FIXME: Make that work again + return null; } else if (name.contains("transparency")) { LinkedHashMap valueMap = new LinkedHashMap(); diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java Sun Apr 21 10:46:59 2013 +0200 @@ -98,20 +98,23 @@ /** List of doubleArrayPanels shown. */ protected ArrayList doubleArrayPanels; - /** Stores the min/max values for each q range.*/ + /** [startkm,endkm] per gauge in selected range. */ + protected double[][] gaugeRanges; + + /** Stores the min/max values for each q range (gauge). */ protected Map qranges; - /** Stores the min/max values for each w range. */ + /** Stores the min/max values for each w range (gauge). */ protected Map wranges; /** The RadioGroupItem that determines the w/q input mode. */ protected DynamicForm modes; - /** Table holding Q and D values. */ - protected QDTable qdTable; + /** List of wTables in inputhelper section. */ + protected List wTables; - /** Table holding W values. */ - protected WTable wTable; + /** List of QDTables in inputhelper section. */ + protected List qdTables; /** Tabs in inputhelper area. */ protected TabSet tabs; @@ -125,14 +128,14 @@ doubleArrayPanels = new ArrayList(); qranges = new HashMap(); wranges = new HashMap(); - qdTable = new QDTable(); - wTable = new WTable(); - initTableListeners(); + wTables = new ArrayList(); + qdTables = new ArrayList(); } @Override public Canvas create(DataList data) { + readGaugeRanges(data); initHelperPanel(); Canvas submit = getNextButton(); @@ -149,6 +152,10 @@ layout.addMember(widget); layout.addMember(submit); + fetchWQData(); + + initTableListeners(); + return layout; } @@ -160,19 +167,30 @@ tabs.setWidth100(); tabs.setHeight100(); - Tab wTab = new Tab(MESSAGE.wq_table_w()); - Tab qTab = new Tab(MESSAGE.wq_table_q()); + // For each gauge, add two tabs with helper tables. - qdTable.showSelect(); - wTab.setPane(wTable); - qTab.setPane(qdTable); + for (int i = 0; i< gaugeRanges.length; i++) { + // Later the tabs title will get adjusted to include gauges name. + // TODO the tabs title becomes rather long through that (i18n). + Tab wTab = new Tab(MESSAGE.wq_table_w()); + Tab qTab = new Tab(MESSAGE.wq_table_q()); - tabs.addTab(wTab, 0); - tabs.addTab(qTab, 1); + QDTable qdTable = new QDTable(); + WTable wTable = new WTable(); + + wTables.add(wTable); + qdTables.add(qdTable); + + qdTable.showSelect(); + //wTable.showSelect(); + wTab.setPane(wTable); + qTab.setPane(qdTable); + + tabs.addTab(wTab, i*2+0); + tabs.addTab(qTab, i*2+1); + } helperContainer.addMember(tabs); - - fetchWQData(); } @@ -181,32 +199,57 @@ */ // TODO dupe from WQInputPanel protected void initTableListeners() { - CellClickHandler handler = new CellClickHandler() { - @Override - public void onCellClick(CellClickEvent e) { - if (isWMode() || qdTable.isLocked()) { - return; - } + int i = 0; + for (QDTable qdTable: qdTables) { + // Register listener such that values are filled in on click. + final QDTable table = qdTable; + final int fi = i; + CellClickHandler handler = new CellClickHandler() { + @Override + public void onCellClick(CellClickEvent e) { + if (isWMode() || table.isLocked()) { + return; + } - int idx = e.getColNum(); - Record r = e.getRecord(); - double val = r.getAttributeAsDouble("value"); + int idx = e.getColNum(); + Record r = e.getRecord(); + double val = r.getAttributeAsDouble("value"); - if (itemWithFocus != null) { - itemWithFocus.setValues(new double[]{val}); - // TODO 1133, show different data for each doublearraypanel - int i = doubleArrayPanels.indexOf(itemWithFocus); - if (i == doubleArrayPanels.size()-1) { - doubleArrayPanels.get(0).focusInItem(1); + doubleArrayPanels.get(fi).setValues(new double[]{val}); + // If a named value for first gauge is chosen, try to find and set + // the values to the other panels too. + if (fi == 0) { + String valueName = r.getAttribute("name"); + int oi = 0; + // TODO instead of oi use random access. + for (QDTable otherQDTable: qdTables) { + if (oi == 0) { + oi++; + continue; + } + Double value = otherQDTable.findRecordValue(valueName); + if (value == null) { + // TODO i18n + SC.warn("No Value for at "); + } + else { + doubleArrayPanels.get(oi).setValues(new double[]{value}); + } + oi++; + } } else { - doubleArrayPanels.get(i+1).focusInItem(1); + // Focus next. + if (fi != doubleArrayPanels.size()-1) { + doubleArrayPanels.get(fi+1).focusInItem(1); + } } } - } - }; + }; - qdTable.addCellClickHandler(handler); + qdTable.addCellClickHandler(handler); + i++; + } } @@ -294,6 +337,7 @@ } + /** Create non-input helper part of the UI. */ protected Canvas createWidget(DataList dataList) { VLayout layout = new VLayout(); @@ -468,15 +512,40 @@ } } + /** Populate Gauge Ranges array. */ + private void readGaugeRanges(DataList dataList) { + DataItem[] items = getWQItems(dataList); + gaugeRanges = new double[items.length][2]; + + int i = 0; + + for (DataItem item: items) { + String[] startEndKm = item.getLabel().split(";"); + + gaugeRanges[i][0] = Double.parseDouble(startEndKm[0]); + gaugeRanges[i][1] = Double.parseDouble(startEndKm[1]); + i++; + } + } + protected Canvas createList(DataList dataList) { VLayout layout = new VLayout(); DataItem[] items = getWQItems(dataList); + int i = 0; + for (DataItem item: items) { - String title = item.getLabel(); + String title = item.getLabel(); // of form: 70.5;112.0 String label = item.getStringValue(); + + // Rename W and Q tab to include gauges name. + tabs.getTab(i*2).setTitle(tabs.getTab(i*2).getTitle() + + " (" + label + ")"); + tabs.getTab(i*2+1).setTitle(tabs.getTab(i*2+1).getTitle() + + " (" + label + ")"); + DoubleArrayPanel dap = new DoubleArrayPanel( label, null, this, this, TitleOrientation.LEFT); @@ -493,6 +562,7 @@ } layout.addMember(dap); + i++; } layout.setHeight(items.length * ROW_HEIGHT); @@ -650,10 +720,14 @@ } - /** Store the currently focussed DoubleArrayPanel. */ + /** Store the currently focussed DoubleArrayPanel and focus helper tab. */ @Override public void onFocus(FocusEvent event) { itemWithFocus = (DoubleArrayPanel) event.getForm(); + // Switch to respective tab. + // TODO which makes a focus loss + int inputIndex = doubleArrayPanels.indexOf(itemWithFocus); + tabs.selectTab(inputIndex*2 + (isWMode() ? 0 : 1)); } @@ -664,7 +738,7 @@ } - /** Get the WQD data from servide and stuck them up that tables. */ + /** Get the WQD data from service and stuck them up that tables. */ protected void fetchWQData() { Config config = Config.getInstance(); String locale = config.getLocale (); @@ -675,39 +749,49 @@ double[] mm = getMinMaxKM(data); String river = getRiverName(data); - wqInfoService.getWQInfo(locale, river, mm[0], mm[0], - new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - GWT.log("Could not recieve wq informations."); - SC.warn(caught.getMessage()); - } + int i = 0; - @Override - public void onSuccess(WQInfoObject[] wqi) { - int num = wqi != null ? wqi.length :0; - GWT.log("Recieved " + num + " wq informations."); - - if (num == 0) { - return; + // Get Data for respective gauge. + for (double[] range : gaugeRanges){ + // Gauge ranges overlap, move start and end a bit closer to each other. + final double rDiff = (range[1] - range[0]) / 10d; + final int fi = i; + wqInfoService.getWQInfo(locale, river, range[0]+rDiff, range[1]-rDiff, + new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + GWT.log("Could not recieve wq informations."); + SC.warn(caught.getMessage()); } - addWQInfo(wqi); + @Override + public void onSuccess(WQInfoObject[] wqi) { + int num = wqi != null ? wqi.length :0; + GWT.log("Received " + num + " wq informations (" + fi + "."); + + if (num == 0) { + return; + } + + addWQInfo(wqi, fi); + } } - } - ); + ); + i++; + } } - protected void addWQInfo (WQInfoObject[] wqi) { + /** Add Info to helper table for gauge at index gaugeIdx. */ + protected void addWQInfo (WQInfoObject[] wqi, int gaugeIdx) { for(WQInfoObject wi: wqi) { WQInfoRecord rec = new WQInfoRecord(wi); if (wi.getType().equals("W")) { - wTable.addData(rec); + wTables.get(gaugeIdx).addData(rec); } else { - qdTable.addData(rec); + qdTables.get(gaugeIdx).addData(rec); } } } diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapPrintPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapPrintPanel.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapPrintPanel.java Sun Apr 21 10:46:59 2013 +0200 @@ -9,6 +9,7 @@ import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.ButtonItem; +import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.types.Alignment; @@ -25,21 +26,30 @@ import de.intevation.flys.client.shared.model.Property; import de.intevation.flys.client.shared.model.PropertySetting; import de.intevation.flys.client.shared.model.Settings; +import de.intevation.flys.client.shared.model.Artifact; +import de.intevation.flys.client.shared.model.ArtifactDescription; +import de.intevation.flys.client.shared.model.Data; +import de.intevation.flys.client.shared.model.DataItem; +import de.intevation.flys.client.shared.model.DataList; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; +import java.util.MissingResourceException; public class MapPrintPanel extends Canvas { - private static final String MAPFISH_MAPTITLE = "mapfish-mapTitle"; - private static final String MAPFISH_RANGE = "mapfish-data-range"; - private static final String MAPFISH_SUBTITLE = "mapfish-data-subtitle"; - private static final String MAPFISH_STRETCH = "mapfish-data-strech"; - private static final String MAPFISH_CREATED = "mapfish-data-created"; - private static final String MAPFISH_SOURCE = "mapfish-data-source"; - private static final String MAPFISH_CREATOR = "mapfish-data-creator"; - private static final String MAPFISH_DATEPLACE = "mapfish-data-dateplace"; + private static final String MAPFISH_MAPTITLE = "mapfish_mapTitle"; + private static final String MAPFISH_RANGE = "mapfish_data_range"; + private static final String MAPFISH_SUBTITLE = "mapfish_data_subtitle"; + private static final String MAPFISH_STRETCH = "mapfish_data_strech"; + private static final String MAPFISH_INSTITUTION = "mapfish_data_institution"; + private static final String MAPFISH_SOURCE = "mapfish_data_source"; + private static final String MAPFISH_CREATOR = "mapfish_data_creator"; + private static final String MAPFISH_DATEPLACE = "mapfish_data_dateplace"; + private static final String MAPFISH_RIVER = "mapfish_data_river"; + private static final String MAPFISH_LOGO = "mapfish_logo"; protected FLYSConstants MSG = GWT.create(FLYSConstants.class); @@ -53,11 +63,12 @@ protected TextItem pageTitle = new TextItem(); protected TextItem pageRange = new TextItem(); protected TextItem pageSubtitle = new TextItem(); - protected TextItem pageStrech = new TextItem(); - protected TextItem pageCreated = new TextItem(); + protected TextItem pageStretch = new TextItem(); + protected TextItem pageInstitution = new TextItem(); protected TextItem pageSource = new TextItem(); protected TextItem pageCreator = new TextItem(); protected TextItem pageDatePlace = new TextItem(); + protected SelectItem pageLogo = createPageLogoSelectItem(); // protected SelectItem pageFormat = createPageFormatSelectItem(); protected MapToolbar mapToolbar; protected MapPrintWindow parent; @@ -88,10 +99,10 @@ this.pageSubtitle.setValue(props.getValue()); } else if (props.getName().equals(MAPFISH_STRETCH)) { - this.pageStrech.setValue(props.getValue()); + this.pageStretch.setValue(props.getValue()); } - else if (props.getName().equals(MAPFISH_CREATED)) { - this.pageCreated.setValue(props.getValue()); + else if (props.getName().equals(MAPFISH_INSTITUTION)) { + this.pageInstitution.setValue(props.getValue()); } else if (props.getName().equals(MAPFISH_SOURCE)) { this.pageSource.setValue(props.getValue()); @@ -110,15 +121,23 @@ protected void initLayout() { // TODO: i18n - this.pageTitle.setTitle("Titel"); - this.pageSubtitle.setTitle("Untertitel"); - this.pageRange.setTitle("Bereich"); - this.pageStrech.setTitle("Strecke"); - this.pageCreated.setTitle("Aufgestellt"); - this.pageSource.setTitle("Datenquelle"); - this.pageCreator.setTitle("Ersteller"); - this.pageDatePlace.setTitle("Ort, Datum"); + this.pageTitle.setTitle(MSG.mapTitle()); + this.pageSubtitle.setTitle(MSG.mapSubtitle()); + this.pageRange.setTitle(MSG.mapRange()); + this.pageStretch.setTitle(MSG.mapStretch()); + this.pageInstitution.setTitle(MSG.mapInstitution()); + this.pageSource.setTitle(MSG.mapSource()); + this.pageCreator.setTitle(MSG.mapCreator()); + this.pageDatePlace.setTitle(MSG.mapDate()); + pageTitle.setLength(30); + pageSubtitle.setLength(30); + pageRange.setLength(30); + pageStretch.setLength(30); + pageInstitution.setLength(30); + pageSource.setLength(30); + pageCreator.setLength(30); + pageDatePlace.setLength(30); ButtonItem printButton = createPrintButtonItem(); printButton.setAlign(Alignment.RIGHT); @@ -129,15 +148,29 @@ this.pageTitle, this.pageSubtitle, this.pageRange, - this.pageStrech, - this.pageCreated, + this.pageStretch, + this.pageInstitution, this.pageSource, this.pageCreator, this.pageDatePlace, + this.pageLogo, printButton); addChild(df); } + protected SelectItem createPageLogoSelectItem() { + LinkedHashMap values = new LinkedHashMap(); + // TODO: this should be configurable + values.put(MSG.bfgLogo(), "BfG Logo"); + + SelectItem selItem = new SelectItem(); + selItem.setTitle(MSG.mapLogo()); + selItem.setValueMap(values); + selItem.setDefaultToFirstOption(true); + + return selItem; + } + /* * Commented out because we only provide a layout for A4 Landscape atm @@ -158,11 +191,9 @@ */ protected ButtonItem createPrintButtonItem() { ButtonItem btn = new ButtonItem(); - GWT.log("Button created"); btn.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { - GWT.log("Print Button Click"); updateCollection(); Window.open(createPrintUrl(), "_blank", ""); parent.destroy(); @@ -229,11 +260,65 @@ for (Property prop : properties) { PropertySetting props = (PropertySetting)prop; url.append("&"); - url.append(props.getName()); + String localized; + try { + localized = MSG.getString(props.getName()); + } + catch (MissingResourceException mre) { + localized = props.getName(); + } + url.append(toJavaEncodedString(localized)); url.append("="); url.append(props.getValue()); } } + // O.o + String river = findRiver(((MapOutputTab)mapToolbar.getOutputTab() + ).getCollectionView().getArtifact()); + url.append("&" + toJavaEncodedString(MSG.getString(MAPFISH_RIVER)) + "=" + river); + } + + // Copy of DatacageWindow's findRiver + protected String findRiver(Artifact artifact) { + ArtifactDescription adescr = artifact.getArtifactDescription(); + DataList [] data = adescr.getOldData(); + + if (data != null && data.length > 0) { + for (int i = 0; i < data.length; i++) { + DataList dl = data[i]; + if (dl.getState().equals("state.winfo.river")) { + for (int j = dl.size()-1; j >= 0; --j) { + Data d = dl.get(j); + DataItem [] di = d.getItems(); + if (di != null && di.length == 1) { + return d.getItems()[0].getStringValue(); + } + } + } + } + } + + return ""; + } + + public static String toJavaEncodedString(String str) { + if (str == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (int i = 0, len = str.length(); i < len; i++) { + int unipoint = Character.codePointAt(str, i); + if ((unipoint < 32) || (unipoint > 127)) { + sb.append("\\u"); + sb.append(Integer.toHexString((unipoint >> 3*4) & 0xf)); + sb.append(Integer.toHexString((unipoint >> 2*4) & 0xf)); + sb.append(Integer.toHexString((unipoint >> 1*4) & 0xf)); + sb.append(Integer.toHexString((unipoint >> 0*4) & 0xf)); + } else { + sb.append(str.charAt(i)); + } + } + return sb.toString(); } protected void updateCollection() { @@ -243,15 +328,16 @@ GWT.log("MapPrintPanel.updateCollection via RPC now"); List properties = new ArrayList(); - properties.add(new PropertySetting(MAPFISH_MAPTITLE, this.pageTitle.getValueAsString())); -// properties.add(new PropertySetting(MAPFISH_LAYOUT, this.pageFormat.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_SUBTITLE, this.pageSubtitle.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_RANGE, this.pageRange.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_STRETCH, this.pageStrech.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_CREATED, this.pageCreated.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_SOURCE, this.pageSource.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_CREATOR, this.pageCreator.getValueAsString())); - properties.add(new PropertySetting(MAPFISH_DATEPLACE, this.pageDatePlace.getValueAsString())); + properties.add(new PropertySetting(MAPFISH_MAPTITLE, toJavaEncodedString(pageTitle.getValueAsString()))); +// properties.add(new PropertySetting(MAPFISH_LAYOUT, toJavaEncodedString(pageFormat.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_SUBTITLE, toJavaEncodedString(pageSubtitle.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_RANGE, toJavaEncodedString(pageRange.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_STRETCH, toJavaEncodedString(pageStretch.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_INSTITUTION, toJavaEncodedString(pageInstitution.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_SOURCE, toJavaEncodedString(pageSource.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_CREATOR, toJavaEncodedString(pageCreator.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_DATEPLACE, toJavaEncodedString(pageDatePlace.getValueAsString()))); + properties.add(new PropertySetting(MAPFISH_LOGO, toJavaEncodedString(pageLogo.getValueAsString()))); settings.setSettings("default", properties); collection.addSettings("print-settings", settings); diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapPrintWindow.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapPrintWindow.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapPrintWindow.java Sun Apr 21 10:46:59 2013 +0200 @@ -13,7 +13,7 @@ public MapPrintWindow(Collection collection, MapToolbar mapToolbar) { setWidth(255); - setHeight(280); + setHeight(300); setTitle(MSG.printWindowTitle()); centerInPage(); diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/QDTable.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/QDTable.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/QDTable.java Sun Apr 21 10:46:59 2013 +0200 @@ -109,5 +109,18 @@ public boolean isLocked() { return lockClick; } + + /** + * Search all records for one with attribute name equals to given name. + * @return null if none found. + * */ + public Double findRecordValue(String name) { + for (ListGridRecord record : getRecords()) { + if (record.getAttribute("name").equals(name)) { + return record.getAttributeAsDouble("value"); + } + } + return null; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/server/MapPrintServiceImpl.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/MapPrintServiceImpl.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/MapPrintServiceImpl.java Sun Apr 21 10:46:59 2013 +0200 @@ -11,7 +11,6 @@ import de.intevation.artifacts.httpclient.http.response.DocumentResponseHandler; import de.intevation.flys.client.shared.MapUtils; import de.intevation.flys.client.shared.model.MapConfig; -import de.intevation.flys.client.client.FLYSConstants; import java.io.IOException; import java.io.InputStream; @@ -107,7 +106,10 @@ List subLayers = new ArrayList(1); subLayers.add(layers); layer.put("layers", subLayers); - layer.put("baseURL", url); + // XXX: osm.intevation.de mapache only offers low dpi maps + // so we need to use the uncached service + layer.put("baseURL", url.replace("http://osm.intevation.de/mapcache/?", + "http://osm.intevation.de/cgi-bin/germany.fcgi?")); layer.put("format", "image/png"); // TODO: Make configurable. return layer; @@ -129,12 +131,12 @@ Map pageSpecs ) { Map spec = new LinkedHashMap(); + int dpi = 254; spec.put("layout", "A4 landscape"); spec.put("pageSize", "A4"); - spec.put("landscape", "false"); - spec.put("title", "FLYS Druck"); + spec.put("landscape", "true"); spec.put("srs", "EPSG:" + mapConfig.getSrid()); - spec.put("dpi", Integer.valueOf(254)); + spec.put("dpi", dpi); spec.put("units", "m"); spec.put("geodaetic", "true"); spec.put("outputFormat", "pdf"); @@ -202,7 +204,7 @@ Map legend = new LinkedHashMap(); List classes = new ArrayList(1); Map clazz = new LinkedHashMap(); - String lgu = MapUtils.getLegendGraphicUrl(layer.url, layer.layers); + String lgu = MapUtils.getLegendGraphicUrl(layer.url, layer.layers, dpi); clazz.put("icon", lgu); clazz.put("name", layer.description); classes.add(clazz); @@ -264,21 +266,34 @@ Map data = new HashMap(); List payload = new ArrayList(); data.put("data", payload); - Enumeration paramNames = req.getParameterNames(); - while (paramNames.hasMoreElements()) { - String paramName = paramNames.nextElement(); - if (paramName.startsWith("mapfish-data-")) { - // You can add mapfish-data variables that will be mapped + Enumeration paramNames = req.getParameterNames(); + List params = Collections.list(paramNames); + Collections.sort(params); + for (String paramName : params) { + if (paramName.startsWith("mapfish_data_")) { + // You can add mapfish_data variables that will be mapped // to a info value pairs to provide meta data for the map + // The the info part starts with a number for sorting that + // number will be stripped String paramValue = req.getParameter(paramName); - if (paramValue != null && !paramValue.isEmpty()) { - Map data3 = new HashMap(); + Map data3 = new HashMap(); + int order = 0; + try { + order = Integer.parseInt(paramName.substring(13, 14)); + data3.put("info", paramName.substring(14)); + } catch (NumberFormatException nfe) { data3.put("info", paramName.substring(13)); - data3.put("value", paramValue); payload.add(data3); } - } else if (paramName.startsWith("mapfish-")) { + if (paramValue.equals("null")) + data3.put("value", ""); + else + data3.put("value", paramValue); + payload.add(data3); + } else if (paramName.startsWith("mapfish_")) { String paramValue = req.getParameter(paramName); + if (paramValue.equals("null")) + paramValue = ""; pageSpecs.put(paramName.substring(8), paramValue); } } @@ -412,9 +427,15 @@ try { byte [] buf = new byte[4096]; int r; - resp.setHeader("Content-Disposition", - "attachment;filename=flys-karte.pdf"); - resp.setContentType("application/pdf"); + if (result < 200 || result >= 300) { + resp.setContentType("text/plain"); + } else { + // Only send content disposition and filename content + // type when we have a pdf + resp.setHeader("Content-Disposition", + "attachment;filename=flys-karte.pdf"); + resp.setContentType("application/pdf"); + } while ((r = in.read(buf)) >= 0) { out.write(buf, 0, r); } diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/java/de/intevation/flys/client/shared/MapUtils.java --- a/flys-client/src/main/java/de/intevation/flys/client/shared/MapUtils.java Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/shared/MapUtils.java Sun Apr 21 10:46:59 2013 +0200 @@ -13,18 +13,29 @@ private MapUtils() { } + public static String getLegendGraphicUrl(String server, String layer) { + return getLegendGraphicUrl(server, layer, -1); + } - public static String getLegendGraphicUrl(String server, String layer) { + public static String getLegendGraphicUrl(String server, String layer, int dpi) { if (server == null || layer == null) { return null; } + if (server.contains("osm.intevation.de")) { + // GetLegend is not implemented at osm.intevation.de + // This avoids an error in the print log + return null; + } server = server.indexOf("?") >= 0 ? server : server + "?"; String url = GET_LEGEND_GRAPHIC_TEMPLATE; url = url.replace("${SERVER}", server); url = url.replace("${LAYER}", layer); url = url + "×tamp=" + new Date().getTime(); + if (dpi != -1) { + url+="&legend_options=dpi:" + dpi; + } return url; } diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/webapp/WEB-INF/config.yaml --- a/flys-client/src/main/webapp/WEB-INF/config.yaml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/webapp/WEB-INF/config.yaml Sun Apr 21 10:46:59 2013 +0200 @@ -69,13 +69,22 @@ - !localMatch dummy: true - !dnsMatch - host: wsvmapserv.wsv.bund.de + host: wsvmapserv.ilmenau.baw.de + port: 80 + - !dnsMatch + host: www.pegelonline.wsv.de + port: 80 + - !dnsMatch + host: gdz.bkg.bund.de + port: 80 + - !dnsMatch + host: ims3.bkg.bund.de port: 80 - !dnsMatch host: tile.openstreetmap.org port: 80 - !dnsMatch - host: www.pegelonline.wsv.de + host: wsvmapserv.wsv.bund.de port: 80 - !dnsMatch host: geo4.service24.rlp.de @@ -93,6 +102,14 @@ - !dnsMatch host: geoportal.bafg.de port: 80 + - !dnsMatch + host: wsvmapserv.wsv.bvbs.bund.de + port: 80 + +# We need a font with unicode support the defaults only +# have latin1 +fonts: + - /usr/share/fonts/truetype/freefont/FreeSans.ttf layouts: #=========================================================================== @@ -119,102 +136,160 @@ absoluteX: 20 align: left absoluteY: 575 - width: 592 + width: 587 height: 555 spacingAfter: 0 - #Flys and BFG Logo + # The north arrow - !columns - absoluteX: 747 - absoluteY: 100 - width: 60 - items: - - !image - maxWidth: 60 - maxHeight: 60 - url: '${configDir}/../images/FLYS_Logo.png' - - !columns - absoluteX: 732 - absoluteY: 160 - width: 90 + absoluteX: 627 + absoluteY: 65 + width: 32 items: - !image - maxWidth: 90 - maxHeight: 60 - url: '${configDir}/../images/bfg_logo.gif' - # Legend header, a bit hackish with the border - # but I don't know how to put two rows in a column and I don't want to - # use tables + maxWidth: 20 + maxHeight: 40 + url: '${configDir}/../images/north.png' + # The scale text - !columns - absoluteX: 612 - absoluteY: 575 - width: 200 + absoluteX: 615 + absoluteY: 30 + width: 45 items: - !text - text: "Legende:" + fontSize: 8 + text: '1:${scale}' align: center - config: - borderWidthLeft: 1 - borderWidthRight: 1 - borderWidthTop: 1 - borderWidthBottom: 0 + fontEncoding: Identity-H + font: FreeSans + backgroundColor: #FFFFFF + #Flys and BFG Logo + - !columns + absoluteX: 760 + absoluteY: 70 + width: 50 + items: + - !image + maxWidth: 50 + maxHeight: 50 + url: '${configDir}/../images/FLYS_Logo.png' + - !columns + absoluteX: 665 + absoluteY: 70 + width: 75 + items: + - !image + maxWidth: 75 + maxHeight: 50 + url: '${configDir}/../${logo}' + # Scalebar + - !columns + absoluteX: 460 + absoluteY: 40 + width: 150 + items: + - !scalebar + type: bar + maxSize: 150 + barSize: 5 + barBgColor: white + fontSize: 8 + backgroundColor: #FFFFFF # The legend - !columns absoluteX: 612 - absoluteY: 564 + absoluteY: 390 width: 200 items: - !legends - maxHeight: 400 + maxHeight: 310 maxWidth: 0 maxIconHeight: 0 - inline: false + inline: true classIndentation: 10 - layerSpace: 5 - classSpace: 2 - layerFont: Helvetica + layerSpace: 0 + classSpace: 5 layerFontSize: 0 - classFont: Helvetica - classFontSize: 0 - fontEncoding: Cp1252 - columnMargin: 2 - defaultScale: 0.7 - config: - borderWidthLeft: 1 - borderWidthRight: 1 - borderWidthTop: 0 - borderWidthBottom: 1 - # The Stamp - - !columns - absoluteX: 612 - absoluteY: 200 - width: 200 + classFontSize: 10 + fontEncoding: Identity-H + classFont: FreeSans + layerFont: FreeSans + defaultScale: 0.5 config: borderWidthLeft: 1 borderWidthRight: 1 borderWidthTop: 1 borderWidthBottom: 1 + # The stamp background + - !columns + absoluteX: 557 + absoluteY: 575 + width: 260 + items: + - !image + maxWidth: 260 + maxHeight: 184 + url: '${configDir}/../images/white.png' + + # Title of the map + - !columns + absoluteX: 562 + absoluteY: 575 + width: 250 + condition: mapTitle + items: + - !text + text: '${mapTitle}' + + # The Stamp + - !columns + absoluteX: 562 + absoluteY: 555 + width: 250 + # config: + # borderWidthLeft: 5 + # borderWidthRight: 5 + # borderWidthTop: 5 + # borderWidthBottom: 5 + #padding: 10 + #backgroundColor: #FFFFFF + #borderColor: #FFFFFF items: - !attributes source: data - spacingAfter: 30 + spacingAfter: 0 columnDefs: info: - columnWeight: 2 + columnWeight: 7 header: !text - text: Info - backgroundColor: #A0A0A0 - cell: !text - text: '${info}' - value: - columnWeight: 5 - header: !text - text: value - backgroundColor: #A0A0A0 + text: info + fontSize: 0 cell: !columns config: cells: - borderWidth: 1 + padding: 5 + items: + - !text + text: '${info}' + fontSize: 10 + fontEncoding: Identity-H + font: FreeSans + fontSize: 10 + backgroundColor: #FFFFFF + value: + columnWeight: 15 + header: !text + text: value + fontSize: 0 + cell: !columns + config: + cells: + - borderWidth: 1 + padding: 5 items: - !text text: '${value}' - + fontEncoding: Identity-H + font: FreeSans + fontSize: 10 + backgroundColor: #FFFFFF diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/webapp/WEB-INF/features.xml --- a/flys-client/src/main/webapp/WEB-INF/features.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/webapp/WEB-INF/features.xml Sun Apr 21 10:46:59 2013 +0200 @@ -7,14 +7,14 @@ module:new_chart module:fixanalysis river:Saar - river:Saar-Wilt-Bogen + river:Saar (Wiltinger Bogen) river:Rhein river:Mosel river:Elbe - river:Donau (rna) - river:Donau (SK) + river:Donau (Regensburg Nordarm) + river:Donau (Schleusenkanäle) river:Donau - river:Fulda + river:Fulda (Winter) river:Fulda (Sommer) river:Havel river:Lahn @@ -26,7 +26,7 @@ river:Oder river:Saale river:Saale-Thüringen - river:Werra + river:Werra (Winter) river:Werra (Sommer) river:Weser diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/webapp/WEB-INF/stylesheets/fixoverview2html.xsl --- a/flys-client/src/main/webapp/WEB-INF/stylesheets/fixoverview2html.xsl Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/webapp/WEB-INF/stylesheets/fixoverview2html.xsl Sun Apr 21 10:46:59 2013 +0200 @@ -24,6 +24,13 @@ + + + Pegel + Gauge + + + Ereignis @@ -255,6 +262,13 @@ / Q / Q + + + : + + + + @@ -277,6 +291,18 @@ + + + + + + + + + + + diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/webapp/WEB-INF/wms-services.xml --- a/flys-client/src/main/webapp/WEB-INF/wms-services.xml Sun Apr 21 10:46:06 2013 +0200 +++ b/flys-client/src/main/webapp/WEB-INF/wms-services.xml Sun Apr 21 10:46:59 2013 +0200 @@ -1,11 +1,11 @@ + - diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/webapp/images/north.png Binary file flys-client/src/main/webapp/images/north.png has changed diff -r 1126b9e00378 -r e95427ed80e5 flys-client/src/main/webapp/images/white.png Binary file flys-client/src/main/webapp/images/white.png has changed