# HG changeset patch # User Felix Wolfsteller # Date 1350918422 -7200 # Node ID 47b7325eafeba2db241537726034691066dedb05 # Parent e47559908acc9c04a3e4c495c7e744683fa83acb# Parent 0dd8963cec9c6dca8f9c9720e40162950d69017c merged diff -r e47559908acc -r 47b7325eafeb flys-artifacts/doc/conf/artifacts/gaugedischargecurve.xml --- a/flys-artifacts/doc/conf/artifacts/gaugedischargecurve.xml Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/doc/conf/artifacts/gaugedischargecurve.xml Mon Oct 22 17:07:02 2012 +0200 @@ -3,7 +3,7 @@ - + @@ -11,6 +11,11 @@ + + + + + diff -r e47559908acc -r 47b7325eafeb flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/doc/conf/conf.xml Mon Oct 22 17:07:02 2012 +0200 @@ -336,6 +336,7 @@ de.intevation.flys.exports.ReportGenerator de.intevation.flys.exports.ATExporter + de.intevation.flys.exports.ATExporter de.intevation.flys.exports.fixings.FixATExport diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeCurveArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeCurveArtifact.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeCurveArtifact.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,5 +1,6 @@ package de.intevation.flys.artifacts; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -42,6 +43,17 @@ public static final String NAME = "gaugedischargecurve"; public static final String STATIC_STATE_NAME = "state.gaugedischargecurve.static"; public static final String UIPROVIDER = "gauge_discharge_curve"; + public static final String GAUGE_DISCHARGE_CURVE_FACET = + "gauge_discharge_curve"; + public static final String GAUGE_DISCHARGE_CURVE_AT_EXPORT_FACET = + "gauge_discharge_curve_at_export"; + public static final String GAUGE_DISCHARGE_CURVE_OUT = + "discharge_curve"; + public static final String GAUGE_DISCHARGE_CURVE_AT_EXPORT_OUT = + "computed_dischargecurve_at_export"; + + private Facet atexportfacet; + private Facet curvefacet; /** * Setup initializes the data by extracting the river and gauge from @@ -74,12 +86,17 @@ Resources.getMsg(callmeta, "facet.gauge_discharge_curve.reference_gauge", "Gauge official number"), - "Double", gaugeref)); + "Long", gaugeref)); Gauge gauge = FLYSUtils.getReferenceGauge(this); String gaugename = ""; + Double gaugelocation = null; if (gauge != null) { gaugename = gauge.getName(); + BigDecimal station = gauge.getStation(); + if (station != null) { + gaugelocation = station.doubleValue(); + } } addData("gauge_name", new DefaultStateData("gauge_name", @@ -88,16 +105,33 @@ "Name of the gauge"), "String", gaugename)); + if (gaugelocation != null) { + addData("ld_locations", new DefaultStateData("ld_locations", + Resources.getMsg(callmeta, + "facet.gauge_discharge_curve.gauge_location", + "Location of the gauge"), + "Double", gaugelocation.toString())); + } + String description = Resources.format(callmeta, "facet.gauge_discharge_curve.description", "Discharge curve on gauge", rivername, gaugename); - Facet gfacet = new GaugeDischargeCurveFacet(description); + List fs = new ArrayList(2); + curvefacet = new GaugeDischargeCurveFacet( + GAUGE_DISCHARGE_CURVE_FACET, description); + fs.add(curvefacet); - List fs = new ArrayList(1); - fs.add(gfacet); + description = Resources.format(callmeta, + "facet.gauge_discharge_curve_at_export.description", + "Discharge curve AT export on gauge", + rivername, + gaugename); + atexportfacet = new GaugeDischargeCurveFacet( + GAUGE_DISCHARGE_CURVE_AT_EXPORT_FACET, description); + fs.add(atexportfacet); addFacets(STATIC_STATE_NAME, fs); @@ -112,14 +146,28 @@ @Override protected void initStaticState() { StaticState state = new StaticState(STATIC_STATE_NAME); - List fs = facets.get(STATIC_STATE_NAME); + + List fs = new ArrayList(1); + fs.add(curvefacet); + DefaultOutput output = new DefaultOutput( - "discharge_curve", - "output.discharge_curve", "image/png", + GAUGE_DISCHARGE_CURVE_OUT, + "output.discharge_curve", + "image/png", fs, "chart"); + state.addOutput(output); + fs = new ArrayList(1); + fs.add(atexportfacet); + output = new DefaultOutput( + GAUGE_DISCHARGE_CURVE_AT_EXPORT_OUT, + "output.computed_dischargecurve_at_export", + "text/plain", + fs, + "export"); state.addOutput(output); + state.setUIProvider(UIPROVIDER); setStaticState(state); } diff -r e47559908acc -r 47b7325eafeb 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 Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Mon Oct 22 17:07:02 2012 +0200 @@ -185,6 +185,7 @@ String DISCHARGE_CURVE = "discharge_curve.curve"; String GAUGE_DISCHARGE_CURVE = "gauge_discharge_curve"; + String GAUGE_DISCHARGE_CURVE_AT_EXPORT = "gauge_discharge_curve_at_export"; String DURATION_W = "duration_curve.w"; String DURATION_Q = "duration_curve.q"; diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugeDischargeCurveFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugeDischargeCurveFacet.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugeDischargeCurveFacet.java Mon Oct 22 17:07:02 2012 +0200 @@ -29,8 +29,8 @@ private static final Logger log = Logger.getLogger(GaugeDischargeCurveFacet.class); - public GaugeDischargeCurveFacet(String description) { - super(0, GAUGE_DISCHARGE_CURVE, description); + public GaugeDischargeCurveFacet(String name, String description) { + super(0, name, description); } @Override @@ -70,6 +70,7 @@ @Override public Facet deepCopy() { GaugeDischargeCurveFacet copy = new GaugeDischargeCurveFacet( + this.name, this.description); copy.set(this); return copy; diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/DischargeInfoService.java Mon Oct 22 17:07:02 2012 +0200 @@ -3,8 +3,6 @@ import java.util.Collections; import java.util.List; import java.util.Date; -import java.util.Calendar; -import java.util.GregorianCalendar; import org.apache.log4j.Logger; diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/extreme/ExtremeQInput.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/extreme/ExtremeQInput.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/extreme/ExtremeQInput.java Mon Oct 22 17:07:02 2012 +0200 @@ -2,8 +2,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Comparator; -import java.util.Collections; import org.apache.log4j.Logger; @@ -21,17 +19,19 @@ import de.intevation.flys.artifacts.model.RiverFactory; import de.intevation.flys.artifacts.model.WstValueTable; +/* import de.intevation.flys.model.Gauge; +import de.intevation.flys.model.Wst; +import de.intevation.flys.utils.FLYSUtils; +*/ import de.intevation.flys.artifacts.model.Range; import de.intevation.flys.model.River; -import de.intevation.flys.model.Wst; import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.model.RangeWithValues; import de.intevation.flys.artifacts.states.DefaultState; import de.intevation.flys.artifacts.model.WstValueTableFactory; -import de.intevation.flys.utils.FLYSUtils; /** TODO Subclass WQAdapted. */ diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/java/de/intevation/flys/exports/HistoricalDischargeCurveExporter.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/HistoricalDischargeCurveExporter.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/HistoricalDischargeCurveExporter.java Mon Oct 22 17:07:02 2012 +0200 @@ -9,7 +9,6 @@ import java.util.Map; import java.util.HashMap; import java.util.Locale; -import java.util.TreeMap; import org.w3c.dom.Document; diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/resources/messages.properties --- a/flys-artifacts/src/main/resources/messages.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/resources/messages.properties Mon Oct 22 17:07:02 2012 +0200 @@ -235,6 +235,7 @@ facet.gauge_discharge_curve.river = Name of the river 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 chart.beddifference.height.title = Bedheight Difference chart.beddifference.height.xaxis.label = River-Km [km] diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/resources/messages_de.properties --- a/flys-artifacts/src/main/resources/messages_de.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/resources/messages_de.properties Mon Oct 22 17:07:02 2012 +0200 @@ -235,6 +235,7 @@ facet.gauge_discharge_curve.river = Gew\u00e4sser facet.gauge_discharge_curve.reference_gauge = Pegelnummer facet.gauge_discharge_curve.gauge_name = Pegelname +facet.gauge_discharge_curve.gauge_location = Pegelort chart.beddifference.height.title = Sohlh\u00f6hendifferenz chart.beddifference.height.xaxis.label = Fluss-Km [km] diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/resources/messages_de_DE.properties --- a/flys-artifacts/src/main/resources/messages_de_DE.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/resources/messages_de_DE.properties Mon Oct 22 17:07:02 2012 +0200 @@ -233,6 +233,7 @@ facet.gauge_discharge_curve.river = Gew\u00e4sser facet.gauge_discharge_curve.reference_gauge = Pegelnummer facet.gauge_discharge_curve.gauge_name = Pegelname +facet.gauge_discharge_curve.gauge_location = Pegelort chart.beddifference.height.title = Sohlh\u00f6hendifferenz chart.beddifference.height.xaxis.label = Fluss-Km [km] diff -r e47559908acc -r 47b7325eafeb flys-artifacts/src/main/resources/messages_en.properties --- a/flys-artifacts/src/main/resources/messages_en.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-artifacts/src/main/resources/messages_en.properties Mon Oct 22 17:07:02 2012 +0200 @@ -237,6 +237,7 @@ facet.gauge_discharge_curve.river = Name of the river 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 chart.beddifference.height.title = Bedheight Difference chart.beddifference.height.xaxis.label = River-Km [km] diff -r e47559908acc -r 47b7325eafeb flys-backend/doc/schema/postgresql-minfo.sql --- a/flys-backend/doc/schema/postgresql-minfo.sql Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/doc/schema/postgresql-minfo.sql Mon Oct 22 17:07:02 2012 +0200 @@ -352,6 +352,28 @@ ); +CREATE SEQUENCE MEASUREMENT_STATION_ID_SEQ; +CREATE TABLE measurement_station ( + id int NOT NULL, + name VARCHAR(256) NOT NULL, + river_id int NOT NULL, + station NUMERIC NOT NULL, + range_id int NOT NULL, + measurement_type VARCHAR(64) NOT NULL, + riverside VARCHAR(16), + reference_gauge_id int, + observation_timerange_id int, + operator VARCHAR(64), + comment VARCHAR(512), + PRIMARY KEY (id), + CONSTRAINT fk_ms_river_id FOREIGN KEY (river_id) REFERENCES rivers(id), + CONSTRAINT fk_ms_range_id FOREIGN KEY (range_id) REFERENCES ranges(id), + CONSTRAINT fk_ms_reference_gauge_id FOREIGN KEY (reference_gauge_id) REFERENCES gauges(id), + CONSTRAINT fk_ms_observation_timerange_id FOREIGN KEY (observation_timerange_id) REFERENCES time_intervals(id), + UNIQUE (river_id, station) +); + + CREATE SEQUENCE SQ_RELATION_ID_SEQ; CREATE TABLE sq_relation ( diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/backend/FLYSCredentials.java --- a/flys-backend/src/main/java/de/intevation/flys/backend/FLYSCredentials.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/backend/FLYSCredentials.java Mon Oct 22 17:07:02 2012 +0200 @@ -45,6 +45,7 @@ import de.intevation.flys.model.LocationSystem; import de.intevation.flys.model.MainValue; import de.intevation.flys.model.MainValueType; +import de.intevation.flys.model.MeasurementStation; import de.intevation.flys.model.MorphologicalWidth; import de.intevation.flys.model.MorphologicalWidthValue; import de.intevation.flys.model.NamedMainValue; @@ -155,6 +156,7 @@ Line.class, LocationSystem.class, MainValueType.class, + MeasurementStation.class, MorphologicalWidth.class, MorphologicalWidthValue.class, NamedMainValue.class, diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/Config.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/Config.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/Config.java Mon Oct 22 17:07:02 2012 +0200 @@ -71,6 +71,9 @@ public static final String SKIP_WATERLEVEL_DIFFERENCES = "flys.backend.importer.skip.waterlevel.differences"; + public static final String SKIP_MEASUREMENT_STATIONS = + "flys.backend.importer.skip.measurement.stations"; + public static final String SKIP_SQ_RELATION = "flys.backend.importer.skip.sq.relation"; @@ -175,6 +178,10 @@ return getFlag(SKIP_WATERLEVEL_DIFFERENCES); } + public boolean skipMeasurementStations() { + return getFlag(SKIP_MEASUREMENT_STATIONS); + } + public boolean skipSQRelation() { return getFlag(SKIP_SQ_RELATION); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/ImportMeasurementStation.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportMeasurementStation.java Mon Oct 22 17:07:02 2012 +0200 @@ -0,0 +1,112 @@ +package de.intevation.flys.importer; + +import java.sql.SQLException; +import java.util.List; + +import org.apache.log4j.Logger; +import org.hibernate.Session; +import org.hibernate.exception.ConstraintViolationException; + +import de.intevation.flys.model.Gauge; +import de.intevation.flys.model.MeasurementStation; +import de.intevation.flys.model.Range; +import de.intevation.flys.model.River; +import de.intevation.flys.model.TimeInterval; + + +public class ImportMeasurementStation { + + private static final Logger log = Logger + .getLogger(ImportMeasurementStation.class); + + private MeasurementStation peer; + + public String name; + public Double station; + public ImportRange range; + public String measurementType; + public String riverside; + public String gauge; + public ImportTimeInterval observationTimerange; + public String operator; + public String comment; + + public ImportMeasurementStation() { + } + + private Gauge getGaugeFromDB() { + Session session = ImporterSession.getInstance().getDatabaseSession(); + + org.hibernate.Query query = session + .createQuery("FROM Gauge WHERE name=:name"); + + query.setParameter("name", gauge); + List gauges = query.list(); + + return gauges.isEmpty() ? null : gauges.get(0); + } + + public boolean storeDependencies(River river) throws SQLException, + ConstraintViolationException { + getPeer(river); + + return peer != null; + } + + public Object getPeer(River river) { + if (peer == null) { + Gauge gauge = null; + try { + gauge = getGaugeFromDB(); + if (gauge == null) { + log.warn("Skip measurement station '" + name + + "': unable to find gauge with name '" + this.gauge + + "'"); + return null; + } + } + catch (Exception e) { + log.error("Exception: " + e.getMessage()); + } + + Range range = this.range.getPeer(river); + if (range == null) { + log.warn("Skip measurement station '" + name + + "': unable to get range"); + return null; + } + + TimeInterval observationTimerange = this.observationTimerange + .getPeer(); + if (observationTimerange == null) { + log.warn("Skip measurement station '" + name + + "': unable to get time interval for observation time"); + return null; + } + + Session session = ImporterSession.getInstance() + .getDatabaseSession(); + + org.hibernate.Query query = session + .createQuery("FROM MeasurementStation " + + " WHERE river=:river AND station=:station"); + + query.setParameter("river", river); + query.setParameter("station", station); + + List stations = query.list(); + + if (stations.isEmpty()) { + log.info("create new measurement station '" + name + "'"); + + peer = new MeasurementStation(river, name, measurementType, + riverside, station, range, gauge, observationTimerange, + operator, comment); + + session.save(peer); + } + } + + return peer; + } +} diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,34 +1,8 @@ package de.intevation.flys.importer; -import de.intevation.artifacts.common.utils.FileTools.HashedFile; - -import de.intevation.artifacts.common.utils.FileTools; - -import de.intevation.flys.importer.parsers.AnnotationClassifier; -import de.intevation.flys.importer.parsers.AnnotationsParser; -import de.intevation.flys.importer.parsers.BedHeightEpochParser; -import de.intevation.flys.importer.parsers.BedHeightSingleParser; -import de.intevation.flys.importer.parsers.FlowVelocityMeasurementParser; -import de.intevation.flys.importer.parsers.FlowVelocityModelParser; -import de.intevation.flys.importer.parsers.HYKParser; -import de.intevation.flys.importer.parsers.MorphologicalWidthParser; -import de.intevation.flys.importer.parsers.PRFParser; -import de.intevation.flys.importer.parsers.PegelGltParser; -import de.intevation.flys.importer.parsers.SedimentDensityParser; -import de.intevation.flys.importer.parsers.SedimentYieldParser; -import de.intevation.flys.importer.parsers.SQRelationParser; -import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser; -import de.intevation.flys.importer.parsers.WaterlevelParser; -import de.intevation.flys.importer.parsers.WstParser; - -import de.intevation.flys.model.River; -import de.intevation.flys.model.Unit; - import java.io.File; import java.io.IOException; - import java.sql.SQLException; - import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -38,11 +12,31 @@ import java.util.Set; import org.apache.log4j.Logger; - import org.hibernate.Query; import org.hibernate.Session; +import org.hibernate.exception.ConstraintViolationException; -import org.hibernate.exception.ConstraintViolationException; +import de.intevation.artifacts.common.utils.FileTools; +import de.intevation.artifacts.common.utils.FileTools.HashedFile; +import de.intevation.flys.importer.parsers.AnnotationClassifier; +import de.intevation.flys.importer.parsers.AnnotationsParser; +import de.intevation.flys.importer.parsers.BedHeightEpochParser; +import de.intevation.flys.importer.parsers.BedHeightSingleParser; +import de.intevation.flys.importer.parsers.FlowVelocityMeasurementParser; +import de.intevation.flys.importer.parsers.FlowVelocityModelParser; +import de.intevation.flys.importer.parsers.HYKParser; +import de.intevation.flys.importer.parsers.MeasurementStationsParser; +import de.intevation.flys.importer.parsers.MorphologicalWidthParser; +import de.intevation.flys.importer.parsers.PRFParser; +import de.intevation.flys.importer.parsers.PegelGltParser; +import de.intevation.flys.importer.parsers.SQRelationParser; +import de.intevation.flys.importer.parsers.SedimentDensityParser; +import de.intevation.flys.importer.parsers.SedimentYieldParser; +import de.intevation.flys.importer.parsers.WaterlevelDifferencesParser; +import de.intevation.flys.importer.parsers.WaterlevelParser; +import de.intevation.flys.importer.parsers.WstParser; +import de.intevation.flys.model.River; +import de.intevation.flys.model.Unit; public class ImportRiver { @@ -97,6 +91,10 @@ public static final String MINFO_WATERLEVEL_DIFF_DIR = "Wasserspiegeldifferenzen"; + public static final String MINFO_BASE_DIR = "Basisdaten"; + + public static final String MINFO_CORE_DATA_FILE = "Stammdaten_Messstellen.csv"; + public static final String MINFO_SQ_DIR = "Feststofftransport-Abfluss-Beziehung"; @@ -142,6 +140,8 @@ protected List waterlevelDiffs; + protected List measurementStations; + protected List sqRelations; protected ImportWst wst; @@ -167,6 +167,7 @@ sedimentYields = new ArrayList(); waterlevels = new ArrayList(); waterlevelDiffs = new ArrayList(); + measurementStations = new ArrayList(); sqRelations = new ArrayList(); } @@ -238,6 +239,7 @@ parseSedimentYield(); parseWaterlevels(); parseWaterlevelDifferences(); + parseMeasurementStations(); parseSQRelation(); } @@ -498,6 +500,36 @@ waterlevels = parser.getWaterlevels(); } + protected void parseMeasurementStations() throws IOException { + if (Config.INSTANCE.skipMeasurementStations()) { + log.info("skip parsing measurement stations"); + return; + } + + log.info("Parse measurement stations"); + + File minfo = getMinfoDir(); + File minfoBaseDir = new File(minfo, MINFO_BASE_DIR); + File coredataFile = new File(minfoBaseDir, MINFO_CORE_DATA_FILE); + + if (coredataFile == null || !coredataFile.exists()) { + log.warn("No core data file '" + MINFO_CORE_DATA_FILE + "' found"); + return; + } + + MeasurementStationsParser parser = new MeasurementStationsParser(); + try { + parser.parse(coredataFile); + measurementStations = parser.getMeasurementStations(); + + log.info("Successfully parsed " + measurementStations.size() + " measurement stations."); + } + catch (IOException ioe) { + log.error("unable to parse file '" + coredataFile.getName() + + ": " + ioe.getMessage()); + } + } + protected void parseWaterlevelDifferences() throws IOException { if (Config.INSTANCE.skipWaterlevelDifferences()) { @@ -929,6 +961,7 @@ storeSedimentYield(); storeWaterlevels(); storeWaterlevelDifferences(); + storeMeasurementStations(); storeSQRelations(); } @@ -1224,6 +1257,34 @@ } + public void storeMeasurementStations() { + if (!Config.INSTANCE.skipMeasurementStations()) { + log.info("store measurement stations"); + + River river = getPeer(); + + int count = 0; + + for (ImportMeasurementStation station: measurementStations) { + try { + boolean success = station.storeDependencies(river); + if (success) { + count++; + } + } + catch (SQLException sqle) { + log.error("Error while storing measurement station.", sqle); + } + catch (ConstraintViolationException cve) { + log.error("Error while storing measurement station.", cve); + } + } + + log.info("stored " + count + " measurement stations."); + } + } + + public void storeSQRelations() { if (!Config.INSTANCE.skipSQRelation()) { log.info("store sq relations"); diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityMeasurementParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityMeasurementParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityMeasurementParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -53,7 +53,7 @@ @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb 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 Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/FlowVelocityModelParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -72,7 +72,7 @@ @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/LineParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/LineParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/LineParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -2,6 +2,10 @@ import java.io.File; +import java.text.DateFormat; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; @@ -26,7 +30,7 @@ public static final String SEPERATOR_CHAR = ";"; - protected abstract void handleLine(String line); + protected abstract void handleLine(int lineNum, String line); protected abstract void reset(); @@ -52,13 +56,15 @@ new InputStreamReader( new FileInputStream(file), ENCODING)); - String line = null; + String line = null; + int lineNum = 1; while ((line = in.readLine()) != null) { if ((line = line.trim()).length() == 0) { + lineNum++; continue; } - handleLine(line); + handleLine(lineNum++, line); } } finally { @@ -82,6 +88,20 @@ } } + public static double getDouble(String doubleString) throws ParseException { + NumberFormat nf = NumberFormat.getInstance(DEFAULT_LOCALE); + Number value = nf.parse(doubleString); + + return value.doubleValue(); + } + + public static Date getDate(String dateString) throws ParseException { + DateFormat df = SimpleDateFormat.getDateInstance( + SimpleDateFormat.MEDIUM, DEFAULT_LOCALE); + + return df.parse(dateString); + } + public static Date getDateFromYear(int year) { Calendar cal = Calendar.getInstance(); diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/MeasurementStationsParser.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/MeasurementStationsParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -0,0 +1,192 @@ +package de.intevation.flys.importer.parsers; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; + +import de.intevation.flys.importer.ImportMeasurementStation; +import de.intevation.flys.importer.ImportRange; +import de.intevation.flys.importer.ImportTimeInterval; + + +public class MeasurementStationsParser extends LineParser { + + public static class MeasurementStationParserException extends Exception { + + private static final long serialVersionUID = 1L; + + public MeasurementStationParserException(String msg) { + super(msg); + } + } + + public static final int MIN_COLUMNS = 10; + + private static final Logger log = Logger + .getLogger(MeasurementStationsParser.class); + + private List measurementStations; + private ImportMeasurementStation current; + + @Override + protected void reset() { + this.measurementStations = new ArrayList(); + } + + @Override + protected void finish() { + } + + @Override + protected void handleLine(int lineNum, String line) { + if (line == null || line.startsWith(START_META_CHAR)) { + log.info("skip meta information at line " + lineNum); + return; + } + + try { + current = new ImportMeasurementStation(); + handleDataLine(line); + measurementStations.add(current); + } + catch (MeasurementStationParserException e) { + log.warn("Problem in line " + lineNum + ": " + e.getMessage()); + } + } + + public List getMeasurementStations() { + return measurementStations; + } + + protected void handleDataLine(String line) + throws MeasurementStationParserException { + String[] cols = line.split(SEPERATOR_CHAR); + + if (cols == null || cols.length < MIN_COLUMNS) { + int num = cols != null ? cols.length : 0; + throw new MeasurementStationParserException("Not enough columns: " + + num); + } + + current.name = getName(cols); + current.station = getStation(cols); + current.range = getRange(cols); + current.measurementType = getMeasurementType(cols); + current.riverside = getRiverside(cols); + current.gauge = getGauge(cols); + current.observationTimerange = getObservationTimerange(cols); + current.operator = getOperator(cols); + current.comment = getComment(cols); + + log.debug("Found new measurement station '" + current.name + "' at km " + + current.station); + } + + protected String getName(String[] cols) + throws MeasurementStationParserException { + if (cols[0] == null || cols[0].length() == 0) { + throw new MeasurementStationParserException("invalid name '" + + cols[0] + "'"); + } + + return cols[0]; + } + + protected double getStation(String[] cols) + throws MeasurementStationParserException { + if (cols[1] == null || cols[1].length() == 0) { + throw new MeasurementStationParserException("invalid station '" + + cols[1] + "'"); + } + + try { + return getDouble(cols[1]); + } + catch (ParseException e) { + throw new MeasurementStationParserException( + "unable to parse station: " + e.getMessage()); + } + } + + protected ImportRange getRange(String[] cols) + throws MeasurementStationParserException { + if (cols[4] == null || cols[4].length() == 0) { + throw new MeasurementStationParserException("invalid lower range '" + + cols[4] + "'"); + } + + if (cols[5] == null || cols[5].length() == 0) { + throw new MeasurementStationParserException("invalid lower range '" + + cols[5] + "'"); + } + + try { + double lower = getDouble(cols[4]); + double upper = getDouble(cols[5]); + + return new ImportRange(new BigDecimal(lower), new BigDecimal(upper)); + } + catch (ParseException e) { + throw new MeasurementStationParserException( + "unable to parse range: " + e.getMessage()); + } + } + + protected String getMeasurementType(String[] cols) + throws MeasurementStationParserException { + if (cols[2] == null || cols[2].length() == 0) { + throw new MeasurementStationParserException( + "invalid measurement type '" + cols[2] + "'"); + } + + return cols[2]; + } + + protected String getRiverside(String[] cols) { + return cols[3]; + } + + protected String getGauge(String[] cols) + throws MeasurementStationParserException { + if (cols[6] == null || cols[6].length() == 0) { + throw new MeasurementStationParserException("invalid gauge '" + + cols[6] + "'"); + } + + return cols[6]; + } + + protected ImportTimeInterval getObservationTimerange(String[] cols) + throws MeasurementStationParserException { + if (cols[8] == null || cols[8].length() == 0) { + throw new MeasurementStationParserException( + "invalid observation time '" + cols[8] + "'"); + } + + try { + Date date = getDate(cols[8]); + + if (date != null) { + return new ImportTimeInterval(date); + } + + throw new MeasurementStationParserException( + "invalid observation time '" + cols[8] + "'"); + } + catch (ParseException pe) { + throw new MeasurementStationParserException(pe.getMessage()); + } + } + + protected String getOperator(String[] cols) { + return cols[9]; + } + + protected String getComment(String[] cols) { + return cols.length > 10 ? cols[10] : null; + } +} diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/MorphologicalWidthParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/MorphologicalWidthParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/MorphologicalWidthParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -55,7 +55,7 @@ @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/SQRelationParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SQRelationParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SQRelationParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -67,7 +67,7 @@ @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentDensityParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -72,7 +72,7 @@ @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentYieldParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentYieldParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/SedimentYieldParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -126,7 +126,7 @@ @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelDifferencesParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelDifferencesParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelDifferencesParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -74,7 +74,7 @@ } @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); } diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/parsers/WaterlevelParser.java Mon Oct 22 17:07:02 2012 +0200 @@ -77,7 +77,7 @@ } @Override - protected void handleLine(String line) { + protected void handleLine(int lineNum, String line) { if (line.startsWith(START_META_CHAR)) { handleMetaLine(stripMetaLine(line)); return; diff -r e47559908acc -r 47b7325eafeb flys-backend/src/main/java/de/intevation/flys/model/MeasurementStation.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/model/MeasurementStation.java Mon Oct 22 17:07:02 2012 +0200 @@ -0,0 +1,156 @@ +package de.intevation.flys.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; + + +@Entity +@Table(name = "measurement_station") +public class MeasurementStation { + + private Integer id; + + private String name; + private String measurementType; + private String riverside; + private String operator; + private String comment; + + private Double station; + private Range range; + + private River river; + + private Gauge gauge; + + private TimeInterval observationTimerange; + + public MeasurementStation(River river, String name, String measurementType, + String riverside, Double station, Range range, Gauge gauge, + TimeInterval observationTimerange, String operator, String comment) { + this.river = river; + this.name = name; + this.measurementType = measurementType; + this.riverside = riverside; + this.station = station; + this.range = range; + this.gauge = gauge; + this.observationTimerange = observationTimerange; + this.operator = operator; + this.comment = comment; + } + + @Id + @SequenceGenerator(name = "SEQ_MEASUREMENT_STATION_ID_SEQ", sequenceName = "MEASUREMENT_STATION_ID_SEQ", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_MEASUREMENT_STATION_ID_SEQ") + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Column(name = "measurement_type") + public String getMeasurementType() { + return measurementType; + } + + public void setMeasurementType(String measurementType) { + this.measurementType = measurementType; + } + + @Column(name = "riverside") + public String getRiverside() { + return riverside; + } + + public void setRiverside(String riverside) { + this.riverside = riverside; + } + + @OneToOne + @JoinColumn(name = "river_id") + public River getRiver() { + return river; + } + + public void setRiver(River river) { + this.river = river; + } + + @OneToOne + @JoinColumn(name = "reference_gauge_id") + public Gauge getGauge() { + return gauge; + } + + public void setGauge(Gauge gauge) { + this.gauge = gauge; + } + + @Column(name = "station") + public Double getStation() { + return station; + } + + public void setStation(Double station) { + this.station = station; + } + + @OneToOne + @JoinColumn(name = "range_id") + public Range getRange() { + return range; + } + + public void setRange(Range range) { + this.range = range; + } + + @OneToOne + @JoinColumn(name = "observation_timerange_id") + public TimeInterval getObservationTimerange() { + return observationTimerange; + } + + public void setObservationTimerange(TimeInterval observationTimerange) { + this.observationTimerange = observationTimerange; + } + + @Column(name = "operator") + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + @Column(name = "comment") + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + +} diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYS.java Mon Oct 22 17:07:02 2012 +0200 @@ -477,7 +477,6 @@ public void onSuccess(Collection collection) { GWT.log("Successfully created a new collection."); final Collection col = collection; - final ProjectList plist = projectList; artifactService.createGaugeDischargeCurveArtifact( col, locale, riv, ref, new AsyncCallback() { diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java Mon Oct 22 17:07:02 2012 +0200 @@ -1057,5 +1057,8 @@ String gauge_url(); String gauge_curve_link(); + + String gauge_discharge_curve_at_export(); + } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties Mon Oct 22 17:07:02 2012 +0200 @@ -251,6 +251,7 @@ at = AT pdf = PDF computed_dischargecurve_at_export = AT Export +gauge_discharge_curve_at_export = Gauge Discharge Curve gauge_class = Gauge Class eventselect = Eventselection events = Events diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties Mon Oct 22 17:07:02 2012 +0200 @@ -248,6 +248,7 @@ at = AT pdf = PDF computed_dischargecurve_at_export = AT Export +gauge_discharge_curve_at_export = Abflusskurve am Pegel gauge_class = Abflussklasse eventselect = Ereignisauswahl events = Ereignisse diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties --- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties Mon Oct 22 17:07:02 2012 +0200 @@ -251,6 +251,7 @@ at = AT pdf = PDF computed_dischargecurve_at_export = AT Export +gauge_discharge_curve_at_export = Gauge Discharge Curve gauge_class = Gauge Class eventselect = Eventselection events = Events diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -8,6 +8,7 @@ import com.google.gwt.user.client.ui.Label; import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.ResizedEvent; import com.smartgwt.client.widgets.events.ResizedHandler; import com.smartgwt.client.widgets.layout.SectionStackSection; @@ -42,6 +43,7 @@ GWT.create(GaugeOverviewInfoService.class); protected GaugeTree gaugetree; + protected Canvas gaugetreecanvas; protected RiverInfoPanel riverinfopanel; @@ -54,6 +56,9 @@ */ public GaugePanel(FLYS flys, SectionStackSection sectionStack) { gaugetree = new GaugeTree(flys); + gaugetreecanvas = new Canvas(); + gaugetreecanvas.addChild(gaugetree); + setOverflow(Overflow.HIDDEN); sectionStack.setHidden(true); sectionStack.setItems(this); @@ -98,13 +103,20 @@ } public void renderGaugeOverviewInfo(RiverInfo riverinfo) { - removeMembers(getMembers()); + gaugetree.setGauges(riverinfo); - riverinfopanel = new RiverInfoPanel(riverinfo); - addMember(riverinfopanel); - addMember(gaugetree); + if (riverinfopanel == null) { + removeMembers(getMembers()); + riverinfopanel = new RiverInfoPanel(riverinfo); - gaugetree.setGauges(riverinfo); + gaugetreecanvas.setWidth("100%"); + + addMember(riverinfopanel); + addMember(gaugetreecanvas); + } + else { + riverinfopanel.setRiverInfo(riverinfo); + } } @Override @@ -112,16 +124,21 @@ /* this height calculation is only an approximation and doesn't reflect * the real height of the the gaugetree. */ int height = getInnerContentHeight() - - (RiverInfoPanel.HEIGHT + - (2 * RiverInfoPanel.BORDER_WIDTH) + - (2 * RiverInfoPanel.PADDING) + - (2 * RiverInfoPanel.MARGIN)); + RiverInfoPanel.getStaticHeight(); + int width = getInnerContentWidth(); if (height < 0) { height = 0; } + GWT.log("GaugePanel - onResize " + height); + gaugetree.setHeight("" + height + "px"); + gaugetree.setWidth("" + width + "px"); + + for (Canvas canvas : getMembers()) { + GWT.log("GaugePanel - member height " + canvas.getHeight()); + } } @@ -142,70 +159,4 @@ GWT.log("GaugePanel - show"); this.sectionStack.setHidden(false); } - - class RiverInfoPanel extends HorizontalPanel { - - public final static int HEIGHT = 30; - public final static int BORDER_WIDTH = 3; - public final static int PADDING = 8; - public final static int MARGIN = 10; - - public RiverInfoPanel(RiverInfo riverinfo) { - setStyleName("riverinfopanel"); - setHeight("" + HEIGHT + "px"); - setVerticalAlignment(ALIGN_MIDDLE); - - NumberFormat nf = NumberFormat.getDecimalFormat(); - - addLabel(riverinfo.getName(), false); - - String kmtext = ""; - Double start = riverinfo.getKmStart(); - Double end = riverinfo.getKmEnd(); - - if (!riverinfo.isKmUp()) { - Double tmp = end; - end = start; - start = tmp; - } - if (end != null) { - kmtext += nf.format(end); - kmtext += " - "; - } - if (start != null) { - kmtext += nf.format(start); - } - kmtext += " km"; - - addLabel(kmtext, false); - - String qtext = ""; - Double qmin = riverinfo.getMinQ(); - Double qmax = riverinfo.getMaxQ(); - if (qmin != null) { - qtext += nf.format(qmin); - qtext += " " + MSG.gauge_q_unit(); - qtext += " - "; - } - if (qmax != null) { - qtext += nf.format(qmax); - qtext += " " + MSG.gauge_q_unit(); - } - - addLabel(qtext, false); - - Long number = riverinfo.getOfficialNumber(); - String url = number != null ? - MSG.gauge_river_url() + number : - MSG.gauge_river_url(); - Anchor anchor = new Anchor(MSG.gauge_river_info_link(), url, "_blank"); - add(anchor); - } - - private void addLabel(String text, boolean wordwrap) { - Label label = new Label(text, wordwrap); - add(label); - setCellHeight(label, "" + HEIGHT + "px"); - } - } } diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTimeRangePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTimeRangePanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTimeRangePanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -76,6 +76,7 @@ this.maxLower = maxLower; } + @Override public Canvas create(DataList data) { setDataName(data); @@ -118,9 +119,7 @@ @Override public Canvas createOld(DataList dataList) { GWT.log("create old date."); - Data data = dataList.get(0); - DataItem[] items = data.getItems(); - + Data data = dataList.get(0); HLayout layout = new HLayout(); Label label = new Label(dataList.getLabel()); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTree.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTree.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTree.java Mon Oct 22 17:07:02 2012 +0200 @@ -112,7 +112,7 @@ for (int i = 0; i < data.length; i++) { DataList dl = data[i]; String state = dl.getState(); - GWT.log("GaugeTree - setData " + state); + GWT.log("GaugeTree - open " + state); if (state.equals("state.winfo.location_distance")) { Double ldfrom = null; Double ldto = null; diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/MultipleLocationPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/MultipleLocationPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/MultipleLocationPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,37 +1,33 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.List; - import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; +import com.smartgwt.client.data.Record; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.form.fields.events.BlurEvent; import com.smartgwt.client.widgets.form.fields.events.BlurHandler; -import com.smartgwt.client.widgets.form.fields.events.BlurEvent; - +import com.smartgwt.client.widgets.grid.events.RecordClickEvent; +import com.smartgwt.client.widgets.grid.events.RecordClickHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; -import com.smartgwt.client.widgets.grid.events.RecordClickHandler; -import com.smartgwt.client.widgets.grid.events.RecordClickEvent; - -import com.smartgwt.client.data.Record; - +import de.intevation.flys.client.client.Config; +import de.intevation.flys.client.client.services.DistanceInfoService; +import de.intevation.flys.client.client.services.DistanceInfoServiceAsync; +import de.intevation.flys.client.client.ui.range.DistanceInfoDataSource; +import de.intevation.flys.client.shared.DoubleUtils; 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 de.intevation.flys.client.shared.model.DistanceInfoObject; -import de.intevation.flys.client.shared.DoubleUtils; import de.intevation.flys.client.shared.model.RangeData; -import de.intevation.flys.client.client.services.DistanceInfoService; -import de.intevation.flys.client.client.services.DistanceInfoServiceAsync; -import de.intevation.flys.client.client.Config; -import de.intevation.flys.client.client.ui.range.DistanceInfoDataSource; +import java.util.ArrayList; +import java.util.List; /** @@ -43,6 +39,8 @@ extends LocationPanel implements RecordClickHandler { + private static final long serialVersionUID = -3359966826794082718L; + /** The DistanceInfoService used to retrieve locations about rivers. */ protected DistanceInfoServiceAsync distanceInfoService = GWT.create(DistanceInfoService.class); @@ -113,6 +111,7 @@ * * @param list The DataList container that stores the Data objects. */ + @Override protected void initDefaults(DataList list) { Data data = list.get(0); @@ -163,6 +162,7 @@ } + @Override protected Canvas createWidget(DataList data) { VLayout layout = new VLayout(); inputLayout = new HLayout(); @@ -171,7 +171,8 @@ locationPanel = new DoubleArrayPanel( MSG.unitLocation(), getLocationValues(), - new BlurHandler(){public void onBlur(BlurEvent be) {validate();}}); + new BlurHandler(){@Override + public void onBlur(BlurEvent be) {validate();}}); picker.getLocationTable().setAutoFetchData(true); @@ -249,6 +250,7 @@ * * @return the selected/inserted data in feedable form. */ + @Override public Data[] getData() { saveLocationValues(locationPanel); double[] lValues = getLocationValues(); @@ -314,6 +316,7 @@ * Set the respective km-value in the location value field. * @param e event passed. */ + @Override public void onRecordClick (RecordClickEvent e) { Record record = e.getRecord(); double[] old = getLocationValues(); @@ -324,6 +327,7 @@ } catch(NumberFormatException nfe) { // Is there anything else to do here? + GWT.log(nfe.getMessage()); } // compare reference location and target location. diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/NoInputPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/NoInputPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/NoInputPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -9,6 +9,9 @@ public class NoInputPanel extends AbstractUIProvider { + private static final long serialVersionUID = -8789143404415288132L; + + @Override public Canvas create(DataList data) { return new Canvas(); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterList.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterList.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterList.java Mon Oct 22 17:07:02 2012 +0200 @@ -66,6 +66,8 @@ HasParameterChangeHandler, CollectionChangeHandler, OutputModesChangeHandler, AdvanceHandler { + private static final long serialVersionUID = 5204784727239299980L; + public static final String STYLENAME_OLD_PARAMETERS = "oldParameters"; /** The message class that provides i18n strings.*/ @@ -355,6 +357,8 @@ widget.setContainer(helperPanel); handler.addStepForwardHandler(new StepForwardHandler() { + private static final long serialVersionUID = -6210719844707004860L; + @Override public void onStepForward(StepForwardEvent event) { lockUI(); @@ -366,8 +370,8 @@ String module = moduleItems[0].getStringValue(); String river = riversItems[0].getStringValue(); - if (module == null) { - // TODO throw / show error! + if (module == null || river == null) { + GWT.log("ParameterList.renderNew(): module == null || river == null"); unlockUI(); return; } @@ -387,7 +391,7 @@ public void onFailure(Throwable caught) { unlockUI(); GWT.log("Could not create the new artifact."); - SC.warn(MSG.getString(caught.getMessage())); + SC.warn(FLYS.getExceptionString(MSG, caught)); } @Override diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterMatrix.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterMatrix.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterMatrix.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,19 +1,12 @@ package de.intevation.flys.client.client.ui; -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.user.client.ui.ClickListener; -import com.smartgwt.client.types.Autofit; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; @@ -26,6 +19,12 @@ import de.intevation.flys.client.shared.model.IntegerOptionsData; import de.intevation.flys.client.shared.model.StringOptionsData; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Some parameters take the form of on/off options that can also be seen @@ -40,6 +39,9 @@ protected ListGrid listGrid = null; public static class Column implements Serializable { + + private static final long serialVersionUID = -3493426383086860118L; + protected String name; protected Map values; @@ -233,10 +235,10 @@ /** Create Checkbox for column/value. */ protected Canvas createCheckBox(final String colName, final String value) { CheckBox box = new CheckBox(); - box.addClickListener(new ClickListener() { + box.addClickHandler(new ClickHandler() { + @Override - public void onClick(Widget sender) { - CheckBox box = (CheckBox) sender; + public void onClick(ClickEvent event) { Map> selection = getSelection(); List values = selection.get(colName); @@ -259,12 +261,11 @@ if (listGrid == null) { return selected; } - + ListGridRecord[] records = listGrid.getRecords(); for (ListGridRecord record: records) { for (int i = 0, n = columnNames.size(); i < n; i++) { String columnName = columnNames.get(i); - Column col = columns.get(columnName); List chosenItems = selected.get(columnName); if (Boolean.valueOf(record.getAttribute(columnName)) == true) { chosenItems.add(record.getAttribute(columnName + "-value")); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterMatrixPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterMatrixPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterMatrixPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,12 +1,6 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - import com.google.gwt.core.client.GWT; - import com.google.gwt.user.client.ui.HTML; import com.smartgwt.client.widgets.Canvas; @@ -23,11 +17,18 @@ import de.intevation.flys.client.shared.model.IntegerOptionsData; import de.intevation.flys.client.shared.model.StringOptionsData; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * @author Ingo Weinzierl */ public class ParameterMatrixPanel extends AbstractUIProvider { + private static final long serialVersionUID = -5827445025768340371L; + /** The message class that provides i18n strings. */ protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/PeriodPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/PeriodPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/PeriodPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,25 +1,17 @@ package de.intevation.flys.client.client.ui; import com.google.gwt.core.client.GWT; - -import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; - import com.google.gwt.i18n.client.DateTimeFormat; import com.smartgwt.client.util.SC; - import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; - import com.smartgwt.client.widgets.form.DynamicForm; - import com.smartgwt.client.widgets.form.fields.DateRangeItem; - import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import de.intevation.flys.client.client.FLYSConstants; - import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; import de.intevation.flys.client.shared.model.DataList; @@ -38,6 +30,8 @@ public class PeriodPanel extends AbstractUIProvider { + private static final long serialVersionUID = -5249560815807538821L; + /** The message class that provides i18n strings. */ protected FLYSConstants MSG = GWT.create(FLYSConstants.class); @@ -59,6 +53,7 @@ } + @Override public Canvas create(DataList list) { VLayout layout = new VLayout(); @@ -152,6 +147,7 @@ * * @return the selected/inserted data. */ + @Override public Data[] getData() { List data = new ArrayList(); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/ProjectList.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/ProjectList.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/ProjectList.java Mon Oct 22 17:07:02 2012 +0200 @@ -4,6 +4,7 @@ import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; + import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Autofit; import com.smartgwt.client.types.ListGridEditEvent; @@ -657,8 +658,6 @@ * @param search String to search for in collection names. */ protected void filterCollections(String search) { - int j = 0; - // Clear the collection list. filteredCollections.clear(); @@ -680,7 +679,6 @@ // matches. if (name.contains(search.toLowerCase())) { filteredCollections.add(collections.get(i)); - j++; } } updateGrid(); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/QSegmentedInputPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/QSegmentedInputPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/QSegmentedInputPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,12 +1,5 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -16,17 +9,22 @@ import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; -import com.smartgwt.client.widgets.form.DynamicForm; -import com.smartgwt.client.widgets.form.fields.RadioGroupItem; +import com.smartgwt.client.widgets.form.fields.events.BlurEvent; import com.smartgwt.client.widgets.form.fields.events.BlurHandler; -import com.smartgwt.client.widgets.form.fields.events.BlurEvent; +import com.smartgwt.client.widgets.form.fields.events.ChangeEvent; import com.smartgwt.client.widgets.form.fields.events.ChangeHandler; -import com.smartgwt.client.widgets.form.fields.events.ChangeEvent; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; -import com.smartgwt.client.widgets.tab.Tab; +import de.intevation.flys.client.client.Config; +import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.client.services.WQInfoService; +import de.intevation.flys.client.client.services.WQInfoServiceAsync; +import de.intevation.flys.client.client.ui.wq.QDTable; +import de.intevation.flys.client.client.ui.wq.WTable; +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; @@ -35,15 +33,12 @@ import de.intevation.flys.client.shared.model.WQDataItem; import de.intevation.flys.client.shared.model.WQInfoObject; import de.intevation.flys.client.shared.model.WQInfoRecord; -import de.intevation.flys.client.shared.model.ArtifactDescription; - -import de.intevation.flys.client.client.FLYSConstants; -import de.intevation.flys.client.client.Config; -import de.intevation.flys.client.client.services.WQInfoService; -import de.intevation.flys.client.client.services.WQInfoServiceAsync; -import de.intevation.flys.client.client.ui.wq.WTable; -import de.intevation.flys.client.client.ui.wq.QDTable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; /** @@ -53,6 +48,9 @@ extends AbstractUIProvider implements ChangeHandler, BlurHandler { + + private static final long serialVersionUID = -8627825064071479905L; + public static final String FIELD_WQ_MODE = "wq_isq"; public static final String FIELD_WQ_Q = "Q"; @@ -98,6 +96,7 @@ /** Create main UI Canvas. */ + @Override public Canvas create(DataList data) { initHelperPanel(); @@ -140,6 +139,7 @@ /** Create display for passive mode. */ + @Override public Canvas createOld(DataList dataList) { List all = dataList.getAll(); Data wqData = getData(all, "ranges"); @@ -304,7 +304,6 @@ if (item instanceof WQDataItem) { WQDataItem wq = (WQDataItem) item; double[] mmQ = wq.getQRange(); - double[] mmW = wq.getWRange(); qranges.put(title, mmQ); } @@ -344,6 +343,7 @@ } + @Override public Data[] getData() { Data values = getWQValues(); @@ -397,11 +397,13 @@ } + @Override public void onChange(ChangeEvent event) { // TODO IMPLEMENT ME } + @Override public void onBlur(BlurEvent event) { DoubleArrayPanel dap = (DoubleArrayPanel) event.getForm(); dap.validateForm(event.getItem()); @@ -420,11 +422,13 @@ 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()); } + @Override public void onSuccess(WQInfoObject[] wqi) { int num = wqi != null ? wqi.length :0; GWT.log("Recieved " + num + " wq informations."); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/RadioPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/RadioPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/RadioPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,8 +1,7 @@ package de.intevation.flys.client.client.ui; -import java.util.LinkedHashMap; +import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.GWT; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.DynamicForm; @@ -16,14 +15,17 @@ import de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; +import java.util.LinkedHashMap; + public class RadioPanel extends AbstractUIProvider { + private static final long serialVersionUID = 3357071563224461043L; + protected String dataName; protected DynamicForm form; @Override public Canvas createOld(DataList dataList) { - // TODO Auto-generated method stub Data data = dataList.get(0); DataItem[] items = data.getItems(); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/RangePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/RangePanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/RangePanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,8 +1,5 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.List; - import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.Alignment; @@ -16,11 +13,14 @@ import com.smartgwt.client.widgets.layout.VLayout; import de.intevation.flys.client.client.FLYSConstants; -import de.intevation.flys.client.shared.model.DataList; 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 de.intevation.flys.client.shared.model.RangeData; +import java.util.ArrayList; +import java.util.List; + /** * An UIProvider for inserting ranges. @@ -29,6 +29,8 @@ */ public abstract class RangePanel extends AbstractUIProvider { + private static final long serialVersionUID = -9213089589150335651L; + public static final String FIELD_LOWER = "field_lower"; public static final String FIELD_UPPER = "field_upper"; @@ -126,8 +128,6 @@ protected RangeData findRangeData(DataList dataList) { - RangeData data = null; - for (int i = 0, n = dataList.size(); i < n; i++) { Data tmp = dataList.get(i); @@ -135,7 +135,6 @@ return (RangeData) tmp; } } - return null; } diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/RangeTableFilter.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/RangeTableFilter.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/RangeTableFilter.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,9 +1,5 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import com.google.gwt.core.client.GWT; import com.smartgwt.client.widgets.form.DynamicForm; @@ -14,11 +10,15 @@ import com.smartgwt.client.widgets.form.fields.events.KeyUpHandler; import com.smartgwt.client.widgets.layout.HLayout; +import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.event.FilterHandler; import de.intevation.flys.client.client.event.RangeFilterEvent; -import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.utils.DoubleValidator; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * @author Raimund Renkert */ @@ -60,15 +60,17 @@ } + @Override public void onChanged(ChangedEvent event) { // This event handler is to slow... // fireFilterCriteriaChanged(getSearchString()); } + @Override public void onKeyUp(KeyUpEvent event) { DoubleValidator validator = new DoubleValidator(); - Map errors = filterForm.getErrors(); + Map errors = filterForm.getErrors(); if(event.getItem().getValue() != null && !validator.validate(event.getItem(), errors)) { filterForm.setErrors(errors, true); @@ -124,6 +126,7 @@ } + @Override public void clear() { fromField.clearValue(); toField.clearValue(); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/RecommendationPairRecord.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/RecommendationPairRecord.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/RecommendationPairRecord.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,6 +1,7 @@ package de.intevation.flys.client.client.ui; import com.smartgwt.client.widgets.grid.ListGridRecord; + import de.intevation.flys.client.shared.model.Recommendation; @@ -30,6 +31,7 @@ /** Trivial, blocked constructor. */ + @SuppressWarnings("unused") private RecommendationPairRecord() { } diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/RiverInfoPanel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/RiverInfoPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -0,0 +1,118 @@ +package de.intevation.flys.client.client.ui; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Widget; + +import de.intevation.flys.client.client.FLYSConstants; + +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * @author Björn Ricks + */ +public class RiverInfoPanel extends HorizontalPanel { + + /** + * Panel to display information about a river + */ + + /** The message class that provides i18n strings.*/ + protected FLYSConstants MSG = GWT.create(FLYSConstants.class); + + public final static int HEIGHT = 30; + public final static int BORDER_WIDTH = 3; + public final static int PADDING = 8; + public final static int MARGIN = 10; + + public RiverInfoPanel(RiverInfo riverinfo) { + setStyleName("riverinfopanel"); + setHeight("" + HEIGHT + "px"); + setVerticalAlignment(ALIGN_MIDDLE); + + setRiverInfo(riverinfo); + } + + public void setRiverInfo(RiverInfo riverinfo) { + GWT.log("RiverInfoPanel - setRiverInfo"); + + NumberFormat nf = NumberFormat.getDecimalFormat(); + + removeAllLabels(); + + addLabel(riverinfo.getName(), false); + + String kmtext = ""; + Double start = riverinfo.getKmStart(); + Double end = riverinfo.getKmEnd(); + + if (!riverinfo.isKmUp()) { + Double tmp = end; + end = start; + start = tmp; + } + if (end != null) { + kmtext += nf.format(end); + kmtext += " - "; + } + if (start != null) { + kmtext += nf.format(start); + } + kmtext += " km"; + + addLabel(kmtext, false); + + String qtext = ""; + Double qmin = riverinfo.getMinQ(); + Double qmax = riverinfo.getMaxQ(); + if (qmin != null) { + qtext += nf.format(qmin); + qtext += " " + MSG.gauge_q_unit(); + qtext += " - "; + } + if (qmax != null) { + qtext += nf.format(qmax); + qtext += " " + MSG.gauge_q_unit(); + } + + addLabel(qtext, false); + + Long number = riverinfo.getOfficialNumber(); + String url = number != null ? + MSG.gauge_river_url() + number : + MSG.gauge_river_url(); + Anchor anchor = new Anchor(MSG.gauge_river_info_link(), url, "_blank"); + add(anchor); + } + + public static int getStaticHeight() { + return RiverInfoPanel.HEIGHT + + (2 * RiverInfoPanel.BORDER_WIDTH) + + (2 * RiverInfoPanel.PADDING) + + (2 * RiverInfoPanel.MARGIN); + } + + private void addLabel(String text, boolean wordwrap) { + Label label = new Label(text, wordwrap); + add(label); + setCellHeight(label, "" + HEIGHT + "px"); + } + + private void removeAllLabels() { + GWT.log("RiverInfoPanel - removeAllLabels"); + + Iterator it = this.iterator(); + while(it.hasNext()) { + it.next(); + it.remove(); + } + /* for (Widget wid: this) { */ + /* this.remove(wid); */ + /* } */ + } +} diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/SelectProvider.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/SelectProvider.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/SelectProvider.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,9 +1,5 @@ package de.intevation.flys.client.client.ui; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; - import com.google.gwt.core.client.GWT; import com.smartgwt.client.types.VerticalAlignment; @@ -14,13 +10,16 @@ import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import de.intevation.flys.client.client.FLYSConstants; 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 de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; -import de.intevation.flys.client.client.FLYSConstants; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; /** @@ -31,6 +30,8 @@ public class SelectProvider extends AbstractUIProvider { + private static final long serialVersionUID = 4696637534424070726L; + /** The message class that provides i18n strings.*/ protected FLYSConstants messages = GWT.create(FLYSConstants.class); @@ -47,6 +48,7 @@ * * @return a combobox. */ + @Override public Canvas create(DataList data) { VLayout v = new VLayout(); v.setMembersMargin(10); @@ -61,6 +63,7 @@ } + @Override public Canvas createOld(DataList dataList) { HLayout layout = new HLayout(); VLayout vLayout = new VLayout(); @@ -109,7 +112,7 @@ layout.setAlign(VerticalAlignment.TOP); layout.setHeight(25); - LinkedHashMap initial = new LinkedHashMap(); + LinkedHashMap initial = new LinkedHashMap(); form = new DynamicForm(); @@ -166,9 +169,10 @@ } + @Override protected Data[] getData() { - Map values = form.getValues(); - Iterator keys = values.keySet().iterator(); + Map values = form.getValues(); + Iterator keys = values.keySet().iterator(); Data[] list = new Data[values.size()]; int i = 0; diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/SingleLocationPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/SingleLocationPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/SingleLocationPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -3,7 +3,6 @@ import com.google.gwt.i18n.client.NumberFormat; import com.smartgwt.client.data.Record; - import com.smartgwt.client.widgets.grid.events.RecordClickEvent; import de.intevation.flys.client.shared.model.Data; @@ -17,6 +16,9 @@ public class SingleLocationPanel extends MultipleLocationPanel { + private static final long serialVersionUID = -300641333561787454L; + + /** * Creates a new SingleLocationPanel instance. */ @@ -78,6 +80,7 @@ * * @return the selected/inserted data. */ + @Override public Data[] getData() { saveLocationValues(locationPanel); double[] values = getLocationValues(); @@ -101,6 +104,7 @@ * Set the respective km-value in the location value field. * @param e event passed. */ + @Override public void onRecordClick (RecordClickEvent e) { Record record = e.getRecord(); double[] selected = new double[1]; @@ -115,6 +119,7 @@ } + @Override protected String getLabelString() { return MSG.single_location(); } diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/TableDataPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/TableDataPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/TableDataPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,26 +1,24 @@ package de.intevation.flys.client.client.ui; -import java.util.List; - import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.i18n.client.NumberFormat; +import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; -import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; -import com.smartgwt.client.types.ListGridFieldType; +import com.smartgwt.client.widgets.layout.VLayout; +import de.intevation.flys.client.client.Config; +import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.client.services.CSVExportService; +import de.intevation.flys.client.client.services.CSVExportServiceAsync; import de.intevation.flys.client.shared.model.DataList; -import de.intevation.flys.client.client.FLYSConstants; -import de.intevation.flys.client.client.Config; - -import de.intevation.flys.client.client.services.CSVExportService; -import de.intevation.flys.client.client.services.CSVExportServiceAsync; +import java.util.List; /** * This UIProvider creates a widget that displays calculated data in a table. @@ -72,11 +70,13 @@ exportService.getCSV(locale, uuid, name, new AsyncCallback>() { + @Override public void onFailure(Throwable caught) { GWT.log("Could not recieve csv."); SC.warn(caught.getMessage()); } + @Override public void onSuccess(List l) { GWT.log("Recieved csv with " + l.size() + " lines."); setData(l); @@ -110,11 +110,11 @@ /** - * This method sets the data to a dynmic table. + * This method sets the data to a dynamic table. * * @param list List if String[] containing the data. */ - public void setData(List list) { + public void setData(List list) { if (list == null || list.size() < 2) { dataTable.setEmptyMessage(MESSAGES.error_no_calc_result()); dataTable.redraw(); @@ -132,8 +132,8 @@ nf = NumberFormat.getFormat("#.##"); } - String[] header = (String[])list.get(0); - String[] firstValues = (String[])list.get(1); + String[] header = list.get(0); + String[] firstValues = list.get(1); ListGridField[] fields = new ListGridField[header.length]; @@ -154,7 +154,7 @@ dataTable.setFields(fields); for(int i = 1; i < list.size(); i++) { - String[] sItem = (String[])list.get(i); + String[] sItem = list.get(i); ListGridRecord r = new ListGridRecord(); for(int j = 0; j < sItem.length; j++) { r.setAttribute(String.valueOf(j), sItem[j]); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/TextProvider.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/TextProvider.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/TextProvider.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,8 +1,5 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.List; - import com.google.gwt.core.client.GWT; import com.smartgwt.client.data.DataSource; @@ -18,13 +15,15 @@ import com.smartgwt.client.widgets.form.validator.Validator; import com.smartgwt.client.widgets.layout.HLayout; +import de.intevation.flys.client.client.FLYSConstants; 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 de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; -import de.intevation.flys.client.client.FLYSConstants; +import java.util.ArrayList; +import java.util.List; /** @@ -34,6 +33,7 @@ extends AbstractUIProvider implements ItemChangedHandler { + private static final long serialVersionUID = -6868303464989138497L; public static final String FIELD_NAME = "textprovider_inputfield"; public static final int FORM_WIDTH = 400; diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/ThemePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/ThemePanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/ThemePanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -1,13 +1,10 @@ package de.intevation.flys.client.client.ui; -import java.util.ArrayList; -import java.util.List; - import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; -import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridRecord; @@ -20,13 +17,6 @@ import com.smartgwt.client.widgets.menu.events.ClickHandler; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; -import de.intevation.flys.client.shared.model.Collection; -import de.intevation.flys.client.shared.model.CollectionItemAttribute; -import de.intevation.flys.client.shared.model.FacetRecord; -import de.intevation.flys.client.shared.model.OutputMode; -import de.intevation.flys.client.shared.model.Theme; -import de.intevation.flys.client.shared.model.ThemeList; - import de.intevation.flys.client.client.Config; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.event.HasOutputParameterChangeHandlers; @@ -35,13 +25,22 @@ import de.intevation.flys.client.client.event.OnMoveHandler; import de.intevation.flys.client.client.event.OutputParameterChangeEvent; import de.intevation.flys.client.client.event.OutputParameterChangeHandler; -import de.intevation.flys.client.client.event.RedrawRequestHandler; import de.intevation.flys.client.client.event.RedrawRequestEvent; import de.intevation.flys.client.client.event.RedrawRequestEvent.Type; +import de.intevation.flys.client.client.event.RedrawRequestHandler; import de.intevation.flys.client.client.services.CollectionAttributeService; import de.intevation.flys.client.client.services.CollectionAttributeServiceAsync; import de.intevation.flys.client.client.services.CollectionItemAttributeService; import de.intevation.flys.client.client.services.CollectionItemAttributeServiceAsync; +import de.intevation.flys.client.shared.model.Collection; +import de.intevation.flys.client.shared.model.CollectionItemAttribute; +import de.intevation.flys.client.shared.model.FacetRecord; +import de.intevation.flys.client.shared.model.OutputMode; +import de.intevation.flys.client.shared.model.Theme; +import de.intevation.flys.client.shared.model.ThemeList; + +import java.util.ArrayList; +import java.util.List; /** * ThemePanel on the left in CollectionView. @@ -93,8 +92,9 @@ this.list = createGrid(); this.view = view; list.addRowContextClickHandler(new RowContextClickHandler() { + @Override public void onRowContextClick(RowContextClickEvent event) { - ListGridRecord[] records = list.getSelection(); + ListGridRecord[] records = list.getSelectedRecords(); Menu menu = null; @@ -164,6 +164,7 @@ * * @param h The new handler. */ + @Override public void addOutputParameterChangeHandler(OutputParameterChangeHandler h){ if (h != null) { outHandlers.add(h); @@ -176,6 +177,7 @@ * * @param h The new handler. */ + @Override public void addRedrawRequestHandler(RedrawRequestHandler h){ if (h != null) { redrawRequestHandlers.add(h); @@ -298,6 +300,7 @@ disable(); updater.update(getCollection(), loc, new AsyncCallback() { + @Override public void onFailure(Throwable caught) { GWT.log("Could not update collection attributes."); SC.warn(MSG.getString(caught.getMessage())); @@ -306,6 +309,7 @@ } + @Override public void onSuccess(Collection collection) { setCollection(collection); @@ -386,6 +390,7 @@ MenuItem properties = new MenuItem(MSG.properties()); properties.addClickHandler(new ClickHandler() { + @Override public void onClick(MenuItemClickEvent evt) { GWT.log("clicked properties"); for (ListGridRecord record: records) { @@ -402,6 +407,7 @@ MenuItem activate = new MenuItem(MSG.activateTheme()); activate.addClickHandler(new ClickHandler() { + @Override public void onClick(MenuItemClickEvent evt) { for (ListGridRecord record: records) { FacetRecord facet = (FacetRecord) record; @@ -420,6 +426,7 @@ MenuItem deactivate = new MenuItem(MSG.deactivateTheme()); deactivate.addClickHandler(new ClickHandler() { + @Override public void onClick(MenuItemClickEvent evt) { for (ListGridRecord record: records) { FacetRecord facet = (FacetRecord) record; @@ -451,6 +458,7 @@ MenuItem remove = new MenuItem(MSG.removeTheme()); remove.addClickHandler(new ClickHandler() { + @Override public void onClick(MenuItemClickEvent evt) { SC.ask(MSG.askThemeRemove(), new BooleanCallback() { @Override @@ -497,7 +505,7 @@ * @param newIdx The index of the theme after it was moved. */ protected void fireThemeMoved(Theme theme, int oldIdx, int newIdx) { - // TODO Implement in subclasses + // Do nothing } @@ -507,7 +515,7 @@ GWT.log("ThemePanel.onMove: " + type); - ListGridRecord[] records = list.getSelection(); + ListGridRecord[] records = list.getSelectedRecords(); if (records == null || records.length == 0) { GWT.log("ThemePanel.onMove: No records selected."); @@ -626,9 +634,11 @@ artifact, locale, new AsyncCallback() { + @Override public void onFailure (Throwable caught) { SC.warn(MSG.getString(caught.getMessage())); } + @Override public void onSuccess(CollectionItemAttribute cia) { GWT.log("Successfully loaded collectionitem attributes."); showStyleEditor(cia, record); diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/WQSimpleArrayPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/WQSimpleArrayPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/WQSimpleArrayPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -7,7 +7,6 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; - import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.DynamicForm; @@ -18,9 +17,19 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; -import com.smartgwt.client.widgets.tab.Tab; +import de.intevation.flys.client.client.Config; +import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.client.services.GaugeInfoService; +import de.intevation.flys.client.client.services.GaugeInfoServiceAsync; +import de.intevation.flys.client.client.services.WQInfoService; +import de.intevation.flys.client.client.services.WQInfoServiceAsync; +import de.intevation.flys.client.client.ui.wq.ClickableQDTable; +import de.intevation.flys.client.client.ui.wq.ClickableWTable; +import de.intevation.flys.client.client.ui.wq.ClickableWTable.ClickMode; +import de.intevation.flys.client.client.ui.wq.QDTable; import de.intevation.flys.client.shared.model.ArtifactDescription; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; @@ -30,17 +39,8 @@ import de.intevation.flys.client.shared.model.DoubleArrayData; import de.intevation.flys.client.shared.model.Gauge; import de.intevation.flys.client.shared.model.IntegerOptionsData; -import de.intevation.flys.client.shared.model.WQInfoRecord; import de.intevation.flys.client.shared.model.WQInfoObject; - -import de.intevation.flys.client.client.Config; -import de.intevation.flys.client.client.FLYSConstants; -import de.intevation.flys.client.client.services.GaugeInfoService; -import de.intevation.flys.client.client.services.GaugeInfoServiceAsync; -import de.intevation.flys.client.client.services.WQInfoService; -import de.intevation.flys.client.client.services.WQInfoServiceAsync; -import de.intevation.flys.client.client.ui.wq.WTable; -import de.intevation.flys.client.client.ui.wq.QDTable; +import de.intevation.flys.client.shared.model.WQInfoRecord; /** @@ -71,12 +71,14 @@ protected Canvas valuesWrapper; + protected TabSet tabs; + protected DynamicForm modeForm; protected DoubleArrayPanel panelW; protected DoubleArrayPanel panelQ; - protected WTable wTable; - protected QDTable qTable; + protected ClickableWTable wTable; + protected ClickableQDTable qTable; @Override @@ -170,15 +172,37 @@ protected void initializeTables() { - wTable = new WTable(); - qTable = new QDTable(); + wTable = new ClickableWTable(new ClickableWTable.WClickedListener() { + @Override + public void clickedUpper(double value) { + // nothing to do here + } + + @Override + public void clickedLower(double value) { + panelW.addValue(value); + } + }, ClickMode.SINGLE); + + qTable = new ClickableQDTable(new ClickableQDTable.QClickedListener() { + + @Override + public void clickedUpper(double value) { + // nothing to do here + } + + @Override + public void clickedLower(double value) { + panelQ.addValue(value); + } + }, ClickableQDTable.ClickMode.SINGLE); fetchWQData(); } protected void initializeHelperPanel() { - TabSet tabs = new TabSet(); + tabs = new TabSet(); tabs.setWidth100(); tabs.setHeight100(); @@ -376,9 +400,23 @@ if (newMode.equals("0")) { valuesWrapper.addChild(panelW); + showWTable(); } else if (newMode.equals("1")) { valuesWrapper.addChild(panelQ); + showQDTable(); + } + } + + public void showWTable() { + if (tabs != null) { + tabs.selectTab(0); + } + } + + public void showQDTable() { + if (tabs != null) { + tabs.selectTab(1); } } diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/WaterlevelGroundPanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/WaterlevelGroundPanel.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/WaterlevelGroundPanel.java Mon Oct 22 17:07:02 2012 +0200 @@ -2,6 +2,8 @@ public class WaterlevelGroundPanel extends DistancePanel { + private static final long serialVersionUID = 6598703468619862469L; + public static final String FIELD_LOWER = "diff_from"; public static final String FIELD_UPPER = "diff_to"; public static final String FIELD_STEP = "diff_diff"; diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/ClickableQDTable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/ClickableQDTable.java Mon Oct 22 17:07:02 2012 +0200 @@ -0,0 +1,171 @@ +package de.intevation.flys.client.client.ui.wq; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; +import com.smartgwt.client.types.ListGridFieldType; +import com.smartgwt.client.types.SelectionStyle; +import com.smartgwt.client.widgets.grid.CellFormatter; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.grid.events.CellClickEvent; +import com.smartgwt.client.widgets.grid.events.CellClickHandler; + +import de.intevation.flys.client.client.FLYSConstants; + + +/** + * @author Ingo Weinzierl + */ +public class ClickableQDTable extends ListGrid { + + public static enum ClickMode { + NONE, SINGLE, RANGE + } + + public static interface QClickedListener { + + void clickedLower(double value); + + void clickedUpper(double value); + } + + /** The message class that provides i18n strings. */ + protected FLYSConstants MESSAGE = GWT.create(FLYSConstants.class); + + private QClickedListener qClickedListener; + private ClickMode clickMode; + + protected boolean lockClick; + + public ClickableQDTable() { + this.clickMode = ClickMode.NONE; + init(); + } + + public ClickableQDTable(QClickedListener qClickedListener, + ClickMode clickMode) { + this.qClickedListener = qClickedListener; + this.clickMode = clickMode; + init(); + } + + private void init() { + setWidth100(); + setHeight100(); + setSelectionType(SelectionStyle.SINGLE); + setSelectionType(SelectionStyle.SINGLE); + setShowHeaderContextMenu(false); + setShowRecordComponents(true); + setShowRecordComponentsByCell(true); + setEmptyMessage(MESSAGE.empty_table()); + + ListGridField name = new ListGridField("name", MESSAGE.discharge()); + name.setType(ListGridFieldType.TEXT); + name.setWidth("*"); + + ListGridField type = new ListGridField("type", MESSAGE.type()); + type.setType(ListGridFieldType.TEXT); + type.setWidth("20%"); + + final NumberFormat nf = NumberFormat.getDecimalFormat(); + + ListGridField value = new ListGridField("value", MESSAGE.wq_value_q()); + value.setType(ListGridFieldType.FLOAT); + value.setCellFormatter(new CellFormatter() { + + @Override + public String format(Object v, ListGridRecord r, int row, int col) { + if (v == null) { + return null; + } + + try { + double value = Double.valueOf(v.toString()); + return nf.format(value); + } + catch (NumberFormatException nfe) { + return v.toString(); + } + } + }); + value.setWidth("20%"); + + switch (clickMode) { + case NONE: + setFields(name, type, value); + break; + case SINGLE: + initSingleClickMode(name, type, value); + break; + case RANGE: + initRangeClickMode(name, type, value); + break; + } + } + + private void initSingleClickMode(ListGridField name, ListGridField type, + ListGridField value) { + ListGridField select = new ListGridField("select", MESSAGE.selection()); + select.setType(ListGridFieldType.ICON); + select.setWidth(70); + select.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); + + addCellClickHandler(new CellClickHandler() { + + @Override + public void onCellClick(CellClickEvent event) { + if (event.getColNum() == 0) { + ListGridRecord r = event.getRecord(); + fireLowerClickEvent(r.getAttributeAsDouble("value")); + } + } + }); + + setFields(select, name, type, value); + } + + private void initRangeClickMode(ListGridField name, ListGridField type, + ListGridField value) { + ListGridField addMin = new ListGridField("min", MESSAGE.to()); + addMin.setType(ListGridFieldType.ICON); + addMin.setWidth(30); + addMin.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); + + ListGridField addMax = new ListGridField("max", MESSAGE.from()); + addMax.setType(ListGridFieldType.ICON); + addMax.setWidth(30); + addMax.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerRed()); + + addCellClickHandler(new CellClickHandler() { + + @Override + public void onCellClick(CellClickEvent event) { + if (event.getColNum() == 0) { + ListGridRecord r = event.getRecord(); + fireLowerClickEvent(r.getAttributeAsDouble("value")); + } + + if (event.getColNum() == 1) { + ListGridRecord r = event.getRecord(); + fireUpperClickEvent(r.getAttributeAsDouble("value")); + } + } + }); + + setFields(addMin, addMax, name, type, value); + } + + private void fireLowerClickEvent(double value) { + if (qClickedListener != null) { + qClickedListener.clickedLower(value); + } + } + + private void fireUpperClickEvent(double value) { + if (qClickedListener != null) { + qClickedListener.clickedUpper(value); + } + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/ClickableWTable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/ClickableWTable.java Mon Oct 22 17:07:02 2012 +0200 @@ -0,0 +1,172 @@ +package de.intevation.flys.client.client.ui.wq; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.types.ListGridFieldType; +import com.smartgwt.client.types.SelectionStyle; +import com.smartgwt.client.widgets.grid.CellFormatter; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.grid.events.CellClickEvent; +import com.smartgwt.client.widgets.grid.events.CellClickHandler; + +import de.intevation.flys.client.client.FLYSConstants; + + +public class ClickableWTable extends ListGrid { + + public static enum ClickMode { + NONE, SINGLE, RANGE + } + + public static interface WClickedListener { + + void clickedLower(double value); + + void clickedUpper(double value); + } + + /** The message class that provides i18n strings. */ + protected FLYSConstants MESSAGE = GWT.create(FLYSConstants.class); + + private WClickedListener wClickedListener; + private ClickMode clickMode; + + public ClickableWTable() { + this.clickMode = ClickMode.NONE; + init(); + } + + public ClickableWTable(WClickedListener lowerListener, + ClickMode selectionMode) { + this.wClickedListener = lowerListener; + this.clickMode = selectionMode; + init(); + } + + private void init() { + setWidth100(); + setHeight100(); + setSelectionType(SelectionStyle.NONE); + setSelectionType(SelectionStyle.NONE); + setShowHeaderContextMenu(false); + setShowRecordComponents(true); + setShowRecordComponentsByCell(true); + setEmptyMessage(MESSAGE.empty_table()); + + ListGridField name = new ListGridField("name", MESSAGE.name()); + name.setType(ListGridFieldType.TEXT); + name.setWidth("*"); + + ListGridField type = new ListGridField("type", MESSAGE.type()); + type.setType(ListGridFieldType.TEXT); + type.setWidth("50"); + + final NumberFormat nf = NumberFormat.getDecimalFormat(); + + ListGridField value = new ListGridField("value", MESSAGE.wq_value_w()); + value.setType(ListGridFieldType.FLOAT); + value.setCellFormatter(new CellFormatter() { + + @Override + public String format(Object v, ListGridRecord r, int row, int col) { + if (v == null) { + return null; + } + + try { + double value = Double.valueOf(v.toString()); + return nf.format(value); + } + catch (NumberFormatException nfe) { + return v.toString(); + } + } + }); + + switch (clickMode) { + case NONE: + setFields(name, type, value); + break; + case SINGLE: + initSingleClickMode(name, type, value); + break; + case RANGE: + initRangeClickMode(name, type, value); + break; + } + } + + private void initSingleClickMode(ListGridField name, ListGridField type, + ListGridField value) { + ListGridField lower = new ListGridField("selection", + MESSAGE.selection()); + lower.setType(ListGridFieldType.ICON); + lower.setWidth("65"); + lower.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); + addCellClickHandler(new CellClickHandler() { + + @Override + public void onCellClick(CellClickEvent event) { + if (event.getColNum() == 0) { + Record r = event.getRecord(); + double val = r.getAttributeAsDouble("value"); + fireLowerClickEvent(val); + } + } + }); + + setFields(lower, name, type, value); + } + + private void initRangeClickMode(ListGridField name, ListGridField type, + ListGridField value) { + ListGridField lower = new ListGridField("lower", MESSAGE.lower()); + lower.setType(ListGridFieldType.ICON); + lower.setWidth("50"); + lower.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerRed()); + addCellClickHandler(new CellClickHandler() { + + @Override + public void onCellClick(CellClickEvent event) { + if (event.getColNum() == 0) { + Record r = event.getRecord(); + double val = r.getAttributeAsDouble("value"); + fireLowerClickEvent(val); + } + } + }); + + ListGridField upper = new ListGridField("upper", MESSAGE.upper()); + upper.setType(ListGridFieldType.ICON); + upper.setWidth("50"); + upper.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); + addCellClickHandler(new CellClickHandler() { + + @Override + public void onCellClick(CellClickEvent event) { + if (event.getColNum() == 1) { + Record r = event.getRecord(); + double val = r.getAttributeAsDouble("value"); + fireUpperClickEvent(val); + } + } + }); + + setFields(lower, upper, name, type, value); + } + + private void fireLowerClickEvent(double value) { + if (wClickedListener != null) { + wClickedListener.clickedLower(value); + } + } + + private void fireUpperClickEvent(double value) { + if (wClickedListener != null) { + wClickedListener.clickedUpper(value); + } + } +} diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/server/GGInAFilter.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/GGInAFilter.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/GGInAFilter.java Mon Oct 22 17:07:02 2012 +0200 @@ -32,6 +32,7 @@ private boolean deactivate = false; private String authmethod; + private String redirecturl; private ServletContext sc; public static final String LOGIN_JSP = "/login.jsp"; @@ -52,6 +53,7 @@ this.sc = config.getServletContext(); logger.debug("GGInAFilter context " + this.sc.getContextPath()); this.authmethod = sc.getInitParameter("authentication"); + this.redirecturl = sc.getInitParameter("redirect-url"); if (deactivate != null && deactivate.equalsIgnoreCase("true")) { this.deactivate = true; } @@ -95,9 +97,16 @@ return; } + boolean redirect = false; + HttpSession session = sreq.getSession(); - String uri = requesturi; + String uri = path + "/" + this.redirecturl; + + if (requesturi.equals(uri)) { + redirect = true; + } + if (sreq.getQueryString() != null) { uri = uri + "?" + sreq.getQueryString(); } @@ -106,7 +115,7 @@ User user = (User)session.getAttribute("user"); if (user == null) { logger.debug("No user in session: " + requesturi); - this.redirect(resp); + this.handleResponse(resp, redirect); return; } if (user.hasExpired()) { @@ -117,12 +126,12 @@ Authentication auth = this.auth(user, encoding); if (auth == null || !auth.isSuccess()) { logger.debug("Re-athentication not successful"); - this.redirect(resp); + this.handleResponse(resp, redirect); } } catch(AuthenticationException e) { logger.error("Failure during re-authentication", e); - this.redirect(resp); + this.handleResponse(resp, redirect); return; } } @@ -138,6 +147,20 @@ "/login.jsp"); } + private void sendNotAuthenticated(ServletResponse resp) throws IOException { + logger.debug("Send not authenticated"); + ((HttpServletResponse)resp).sendError(HttpServletResponse.SC_FORBIDDEN, "User not authenticated"); + } + + private void handleResponse(ServletResponse resp, boolean redirect) throws IOException { + if (redirect) { + this.redirect(resp); + } + else { + this.sendNotAuthenticated(resp); + } + } + /** * Do nothing at destruction. diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/java/de/intevation/flys/client/server/LoginServlet.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/LoginServlet.java Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/LoginServlet.java Mon Oct 22 17:07:02 2012 +0200 @@ -40,7 +40,9 @@ private void redirectSuccess(HttpServletResponse resp, String path, String uri) throws IOException { if (uri == null) { - uri = path + "/FLYS.html"; + String redirecturl = getServletContext().getInitParameter("redirect-url"); + + uri = "/" + redirecturl; } resp.sendRedirect(uri); } diff -r e47559908acc -r 47b7325eafeb flys-client/src/main/webapp/WEB-INF/web.xml --- a/flys-client/src/main/webapp/WEB-INF/web.xml Mon Oct 22 09:10:40 2012 +0200 +++ b/flys-client/src/main/webapp/WEB-INF/web.xml Mon Oct 22 17:07:02 2012 +0200 @@ -11,6 +11,12 @@ + + redirect-url + FLYS.html + + + authentication GGInA