# HG changeset patch # User Felix Wolfsteller # Date 1351257095 -7200 # Node ID edcd276a7234389bfeef01c051aca0dd57e2965b # Parent 270f3ac8a82ecb04ca251d0db5e266d86eb48757# Parent 6c776f102e0344a6e8f138c6619c2d14e1e672f4 Merged. diff -r 270f3ac8a82e -r edcd276a7234 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HistoricalDischargeWQFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HistoricalDischargeWQFacet.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HistoricalDischargeWQFacet.java Fri Oct 26 15:11:35 2012 +0200 @@ -3,6 +3,7 @@ import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; +import de.intevation.flys.artifacts.states.DefaultState.ComputeType; /** @@ -15,8 +16,11 @@ public HistoricalDischargeWQFacet() { } - public HistoricalDischargeWQFacet(String name, String desc, double value) { - super(name, desc); + public HistoricalDischargeWQFacet(int index, String name, + String description, ComputeType type, String hash, String stateId, + double value) { + + super(index, name, description, type, hash, stateId); this.value = value; } diff -r 270f3ac8a82e -r edcd276a7234 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MeasurementStationInfoService.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MeasurementStationInfoService.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MeasurementStationInfoService.java Fri Oct 26 15:11:35 2012 +0200 @@ -24,7 +24,7 @@ public class MeasurementStationInfoService extends RiverInfoService { private static final Logger logger = Logger.getLogger( - GaugeOverviewInfoService.class); + MeasurementStationInfoService.class); @Override public Document doProcess( @@ -50,6 +50,11 @@ ec.addAttr(eg, "name", name, true); } + Integer id = mstation.getId(); + if (id != null) { + ec.addAttr(eg, "id", Integer.toString(id), true); + } + String type = mstation.getMeasurementType(); if (type != null) { ec.addAttr(eg, "type", type, true); @@ -78,6 +83,11 @@ } } + String moperator = mstation.getOperator(); + if (moperator != null) { + ec.addAttr(eg, "operator", moperator, true); + } + egs.appendChild(eg); } diff -r 270f3ac8a82e -r edcd276a7234 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/HistoricalDischargeComputeState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/HistoricalDischargeComputeState.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/HistoricalDischargeComputeState.java Fri Oct 26 15:11:35 2012 +0200 @@ -137,13 +137,15 @@ double[] qs = access.getQs(); for (int k = 0; k < ws.length; k++) { - facets.add(new HistoricalDischargeWQFacet( - HISTORICAL_DISCHARGE_WQ_W, "W=" + ws[k], ws[k])); + facets.add(new HistoricalDischargeWQFacet(k, + HISTORICAL_DISCHARGE_WQ_W, "W=" + ws[k], ComputeType.ADVANCE, + hash, getID(), ws[k])); } for (int k = 0; k < qs.length; k++) { - facets.add(new HistoricalDischargeWQFacet( - HISTORICAL_DISCHARGE_WQ_Q, "Q=" + qs[k], qs[k])); + facets.add(new HistoricalDischargeWQFacet(k, + HISTORICAL_DISCHARGE_WQ_Q, "Q=" + qs[k], ComputeType.ADVANCE, + hash, getID(), qs[k])); } int idx = 0; diff -r 270f3ac8a82e -r edcd276a7234 flys-backend/src/main/java/de/intevation/flys/model/MeasurementStation.java --- a/flys-backend/src/main/java/de/intevation/flys/model/MeasurementStation.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/model/MeasurementStation.java Fri Oct 26 15:11:35 2012 +0200 @@ -32,6 +32,9 @@ private TimeInterval observationTimerange; + public MeasurementStation() { + } + public MeasurementStation(River river, String name, String measurementType, String riverside, Double station, Range range, Gauge gauge, TimeInterval observationTimerange, String operator, String comment) { diff -r 270f3ac8a82e -r edcd276a7234 flys-backend/src/main/java/de/intevation/flys/model/River.java --- a/flys-backend/src/main/java/de/intevation/flys/model/River.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-backend/src/main/java/de/intevation/flys/model/River.java Fri Oct 26 15:11:35 2012 +0200 @@ -13,6 +13,7 @@ import javax.persistence.SequenceGenerator; import javax.persistence.OneToMany; import javax.persistence.OneToOne; +import javax.persistence.OrderBy; import javax.persistence.JoinColumn; import javax.persistence.GenerationType; @@ -124,6 +125,7 @@ @OneToMany + @OrderBy("station") @JoinColumn(name="river_id") public List getMeasurementStations() { return measurementstations; diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java Fri Oct 26 15:11:35 2012 +0200 @@ -236,6 +236,8 @@ String gaugePanelTitle(); + String measurementStationPanelTitle(); + String wqTitle(); String wqadaptedTitle(); @@ -1062,6 +1064,12 @@ String gauge_discharge_curve_at_export(); + // Measurement Station Info + + String measurement_station_type(); + + String measurement_station_operator(); + String discharge_timeranges(); String discharge_chart(); diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties Fri Oct 26 15:11:35 2012 +0200 @@ -158,6 +158,7 @@ calcTableTitle = Calculated Output helperPanelTitle = Input Support gaugePanelTitle = Gauge Information +measurementStationPanelTitle = Measurement Station Information wqW = W at Gauge [cm] wqQ = Q [m\u00b3/s] wqWFree = W free position [m+NHN] @@ -553,4 +554,7 @@ gauge_river_url = https://flys-intern.intevation.de/GewaesserInfo/ gauge_curve_link = Dischargecurve discharge_timeranges = DC-Timeranges -discharge_chart = DC-Chart \ No newline at end of file +discharge_chart = DC-Chart + +measurement_station_type = Type of Measurement Station +measurement_station_operator = Operator diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties Fri Oct 26 15:11:35 2012 +0200 @@ -144,6 +144,7 @@ calcTableTitle = Berechnungsausgabe helperPanelTitle = Eingabeunterst\u00fctzung gaugePanelTitle = Gew\u00e4sser/Pegel-Info +measurementStationPanelTitle = Gew\u00e4sser/Messstellen-Info wqW = W am Pegel [cm] wqQ = Q [m\u00b3/s] wqWFree = W auf freier Strecke [m+NHN] @@ -551,4 +552,7 @@ gauge_river_url = https://flys-intern.intevation.de/GewaesserInfo/ gauge_curve_link = Abflusskurve discharge_timeranges = AK-Zeitr\u00e4ume -discharge_chart = AK-Diagramm \ No newline at end of file +discharge_chart = AK-Diagramm + +measurement_station_type = Typ der Messstelle +measurement_station_operator = Operator diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties Fri Oct 26 15:11:35 2012 +0200 @@ -158,6 +158,7 @@ calcTableTitle = Calculated Output helperPanelTitle = Input Support gaugePanelTitle = Gauge Information +measurementStationPanelTitle = Measurement Station Information wqW = W at Gauge [cm] wqQ = Q [m\u00b3/s] wqWFree = W at free position [m+NHN] @@ -552,4 +553,7 @@ gauge_river_url = https://flys-intern.intevation.de/GewaesserInfo/ gauge_curve_link = Dischargecurve discharge_timeranges = DC-Timeranges -discharge_chart = DC-Chart \ No newline at end of file +discharge_chart = DC-Chart + +measurement_station_type = Type of Measurement Station +measurement_station_operator = Operator diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeDischargeCurvePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeDischargeCurvePanel.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeDischargeCurvePanel.java Fri Oct 26 15:11:35 2012 +0200 @@ -1,25 +1,16 @@ 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; 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.SelectItem; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; 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; @@ -45,7 +36,6 @@ @Override public Canvas createOld(DataList dataList) { - HLayout layout = new HLayout(); VLayout vLayout = new VLayout(); vLayout.setWidth("400px"); diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Fri Oct 26 15:11:35 2012 +0200 @@ -1,100 +1,30 @@ package de.intevation.flys.client.client.ui; 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.user.client.ui.Anchor; -import com.google.gwt.user.client.ui.HorizontalPanel; -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.WidgetCanvas; -import com.smartgwt.client.widgets.events.ResizedEvent; -import com.smartgwt.client.widgets.events.ResizedHandler; -import com.smartgwt.client.widgets.layout.SectionStackSection; -import com.smartgwt.client.widgets.layout.VLayout; - import de.intevation.flys.client.client.FLYS; -import de.intevation.flys.client.client.FLYSConstants; -import de.intevation.flys.client.client.services.RiverInfoService; -import de.intevation.flys.client.client.services.RiverInfoServiceAsync; -import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.RiverInfo; /** * The GaugePanel is intended to be used within a SectionStackSection - * It extends the VLayout by two methods to show and hide the - * section stack section. * * @author Björn Ricks */ -public class GaugePanel extends VLayout implements ResizedHandler { - - /** SectionStackSection where this GaugePanel belongs in*/ - private SectionStackSection section; - - /** Name of the river */ - private String river; - - /** The message class that provides i18n strings.*/ - protected FLYSConstants MSG = GWT.create(FLYSConstants.class); - - protected RiverInfoServiceAsync riverInfoService = - GWT.create(RiverInfoService.class); - - protected GaugeTree gaugetree; - protected Canvas gaugetreecanvas; - - protected RiverInfoPanel riverinfopanel; - - public final static String SECTION_ID = "GaugePanelSection"; - private final static String GAUGE_TREE_CANVAS_ID = - "GaugeTreeCanvas"; +public class GaugePanel extends InfoPanel { /** - * Creates a new VLayout with a SectionStackSection - * The GaugePanel's SectionStackSection is hidden by default. + * GaugePanel loads the GaugeInfo from the RiverInfoService and + * displays them in a tree underneath a RiverInfoPanel * * @param flys The FLYS object - * @param section The section stack section to place the VLayout in. */ public GaugePanel(FLYS flys) { - SectionStackSection section = new SectionStackSection(); - section.setExpanded(false); - section.setTitle(MSG.gaugePanelTitle()); - section.setName(SECTION_ID); - section.setID(SECTION_ID); - - gaugetree = new GaugeTree(flys); - gaugetreecanvas = new WidgetCanvas(gaugetree); - gaugetreecanvas.setID(GAUGE_TREE_CANVAS_ID); - - setOverflow(Overflow.HIDDEN); - setStyleName("gaugepanel"); - - section.setHidden(true); - section.setItems(this); - this.section = section; - - addResizedHandler(this); + super(new GaugeTree(flys)); } - /** - * Sets and loads the river data if river is not the current set river - */ - public void setRiver(String river) { - if (!river.equals(this.river)) { - this.river = river; - this.refresh(); - } - } - - /** - * Sets the data and closes not corresponding folds in the gauge tree - */ - public void setData(DataList[] data) { - gaugetree.setData(data); + @Override + public String getSectionTitle() { + return MSG.gaugePanelTitle(); } /** @@ -112,96 +42,10 @@ @Override public void onSuccess(RiverInfo riverinfo) { GWT.log("Loaded river info"); - renderGaugeOverviewInfo(riverinfo); + render(riverinfo); expand(); } }); } - public void renderGaugeOverviewInfo(RiverInfo riverinfo) { - gaugetree.setGauges(riverinfo); - - if (riverinfopanel == null) { - removeAllMembers(); - - riverinfopanel = new RiverInfoPanel(riverinfo); - - addMember(riverinfopanel); - addMember(gaugetreecanvas); - } - else { - riverinfopanel.setRiverInfo(riverinfo); - } - } - - @Override - public void onResized(ResizedEvent event) { - /* this height calculation is only an approximation and doesn't reflect - * the real height of the the gaugetree. */ - int height = getInnerContentHeight() - - RiverInfoPanel.getStaticHeight(); - int width = getInnerContentWidth(); - - if (height < 0) { - height = 0; - } - - GWT.log("GaugePanel - onResize " + height); - - gaugetree.setHeight("" + height + "px"); - gaugetree.setWidth("" + width + "px"); - } - - - /** - * Hide the section stack section. - */ - @Override - public void hide() { - GWT.log("GaugePanel - hide"); - this.section.setHidden(true); - } - - /** - * Show the section stack section. - */ - @Override - public void show() { - GWT.log("GaugePanel - show"); - this.section.setHidden(false); - } - - @Override - public void addMember(Canvas component) { - super.addMember(component); - expand(); - } - - @Override - public void removeMembers(Canvas[] components) { - super.removeMembers(components); - contract(); - } - - public SectionStackSection getSection() { - return this.section; - } - - private void removeAllMembers() { - removeMembers(getMembers()); - } - - /** - * Expands the gauge section - */ - public void expand() { - section.setExpanded(true); - } - - /** - * Contracts/shrinks the expanded gauge section - */ - public void contract() { - section.setExpanded(false); - } } diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugeTree.java Fri Oct 26 15:11:35 2012 +0200 @@ -8,14 +8,12 @@ import com.google.gwt.user.client.ui.DecoratorPanel; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; import com.smartgwt.client.widgets.layout.HLayout; import de.intevation.flys.client.client.FLYS; -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; @@ -26,15 +24,10 @@ import java.util.Iterator; import java.util.List; - -public class GaugeTree extends ScrollPanel { - - private FLYS flys; - private Tree tree; - private DataList[] data; - - /** The message class that provides i18n strings.*/ - protected FLYSConstants MSG = GWT.create(FLYSConstants.class); +/** + * @author Björn Ricks + */ +public class GaugeTree extends InfoTree { public GaugeTree(FLYS flys) { this.flys = flys; @@ -46,7 +39,8 @@ * Resets the items of the tree. * If the list of gauges is empty or null the tree will be empty. */ - public void setGauges(RiverInfo riverinfo) { + @Override + public void setRiverInfo(RiverInfo riverinfo) { tree.clear(); List gauges = riverinfo.getGauges(); @@ -90,114 +84,7 @@ tree.addItem(gaugeitem); } - public void openAll() { - GWT.log("GaugeTree - openAll"); - for (Iterator it = tree.treeItemIterator(); it.hasNext();) { - TreeItem item = it.next(); - item.setState(true); - } - } - - public void setData(DataList[] data) { - this.data = data; - if (tree.getItemCount() > 0) { - open(); - } - } - - public void open() { - ArrayList locations = new ArrayList(); - - if (data != null && data.length > 0) { - for (int i = 0; i < data.length; i++) { - DataList dl = data[i]; - String state = dl.getState(); - GWT.log("GaugeTree - open " + state); - if (state.equals("state.winfo.location_distance")) { - Double ldfrom = null; - Double ldto = null; - - for (int j = dl.size()-1; j >= 0; --j) { - Data d = dl.get(j); - String label = d.getLabel(); - GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); - if (label.equals("ld_from")) { - ldfrom = getDoubleValue(d); - } - else if (label.equals("ld_to")) { - ldto = getDoubleValue(d); - } - else if (label.equals("ld_locations")) { - getLocationsFromData(locations, d); - openOnLocations(locations); - return; - } - } - if (ldfrom != null) { - openOnDistance(ldfrom, ldto); - return; - } - } - else if(state.equals("state.winfo.distance_only") || - state.equals("state.winfo.distance")) { - Double ldfrom = null; - Double ldto = null; - - for (int j = dl.size()-1; j >= 0; --j) { - Data d = dl.get(j); - String label = d.getLabel(); - GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); - if (label.equals("ld_from")) { - ldfrom = getDoubleValue(d); - } - else if (label.equals("ld_to")) { - ldto = getDoubleValue(d); - } - } - - if (ldfrom != null) { - openOnDistance(ldfrom, ldto); - return; - } - } - else if (state.equals("state.winfo.location")) { - getLocations("ld_locations", locations, dl); - openOnLocations(locations); - return; - } - else if (state.equals("state.winfo.reference.curve.input.start")) { - getLocations("reference_startpoint", locations, dl); - } - else if (state.equals("state.winfo.reference.curve.input.end")) { - getLocations("reference_endpoint", locations, dl); - } - else if (state.equals("state.winfo.historicalq.reference_gauge")) { - for (int j = dl.size()-1; j >= 0; --j) { - Data d = dl.get(j); - String label = d.getLabel(); - if (label.equals("reference_gauge")) { - String tmp = d.getStringValue(); - if (tmp != null) { - Long gaugereference = Long.valueOf(tmp); - if (gaugereference != null) { - openOnReference(gaugereference); - return; - } - } - } - } - } - } - } - if (!locations.isEmpty()) { - openOnLocations(locations); - } - else { - openAll(); - } - } - - private void getLocations(String labelname, List locations, DataList dl) { + void getLocations(String labelname, List locations, DataList dl) { for (int j = dl.size()-1; j >= 0; --j) { Data d = dl.get(j); String label = d.getLabel(); @@ -207,7 +94,7 @@ } } - private void getLocationsFromData(List locations, Data data) { + void getLocationsFromData(List locations, Data data) { DataItem[] items = data.getItems(); for (int k = 0; k < items.length; k++) { String tmp = items[k].getStringValue(); @@ -233,14 +120,6 @@ } } - private Double getDoubleValue(Data d) { - String tmp = d.getStringValue(); - if (tmp != null) { - return Double.valueOf(tmp); - } - return null; - } - public void openOnReference(Long number) { GWT.log("GaugeTree - openOnReference " + number); for (Iterator it = tree.treeItemIterator(); it.hasNext();) { @@ -476,4 +355,95 @@ } } + public void open() { + ArrayList locations = new ArrayList(); + + if (data != null && data.length > 0) { + for (int i = 0; i < data.length; i++) { + DataList dl = data[i]; + String state = dl.getState(); + GWT.log("GaugeTree - open " + state); + if (state.equals("state.winfo.location_distance")) { + Double ldfrom = null; + Double ldto = null; + + for (int j = dl.size()-1; j >= 0; --j) { + Data d = dl.get(j); + String label = d.getLabel(); + GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); + if (label.equals("ld_from")) { + ldfrom = getDoubleValue(d); + } + else if (label.equals("ld_to")) { + ldto = getDoubleValue(d); + } + else if (label.equals("ld_locations")) { + getLocationsFromData(locations, d); + openOnLocations(locations); + return; + } + } + if (ldfrom != null) { + openOnDistance(ldfrom, ldto); + return; + } + } + else if(state.equals("state.winfo.distance_only") || + state.equals("state.winfo.distance")) { + Double ldfrom = null; + Double ldto = null; + + for (int j = dl.size()-1; j >= 0; --j) { + Data d = dl.get(j); + String label = d.getLabel(); + GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); + if (label.equals("ld_from")) { + ldfrom = getDoubleValue(d); + } + else if (label.equals("ld_to")) { + ldto = getDoubleValue(d); + } + } + + if (ldfrom != null) { + openOnDistance(ldfrom, ldto); + return; + } + } + else if (state.equals("state.winfo.location")) { + getLocations("ld_locations", locations, dl); + openOnLocations(locations); + return; + } + else if (state.equals("state.winfo.reference.curve.input.start")) { + getLocations("reference_startpoint", locations, dl); + } + else if (state.equals("state.winfo.reference.curve.input.end")) { + getLocations("reference_endpoint", locations, dl); + } + else if (state.equals("state.winfo.historicalq.reference_gauge")) { + for (int j = dl.size()-1; j >= 0; --j) { + Data d = dl.get(j); + String label = d.getLabel(); + if (label.equals("reference_gauge")) { + String tmp = d.getStringValue(); + if (tmp != null) { + Long gaugereference = Long.valueOf(tmp); + if (gaugereference != null) { + openOnReference(gaugereference); + return; + } + } + } + } + } + } + } + if (!locations.isEmpty()) { + openOnLocations(locations); + } + else { + openAll(); + } + } } diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/client/ui/InfoPanel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/InfoPanel.java Fri Oct 26 15:11:35 2012 +0200 @@ -0,0 +1,170 @@ +package de.intevation.flys.client.client.ui; + +import com.google.gwt.core.client.GWT; + +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; +import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.WidgetCanvas; + +import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.client.services.RiverInfoService; +import de.intevation.flys.client.client.services.RiverInfoServiceAsync; +import de.intevation.flys.client.shared.model.DataList; +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * @author Björn Ricks + */ +public abstract class InfoPanel extends VLayout implements ResizedHandler { + + /** SectionStackSection where this InfoPanel belongs in*/ + protected SectionStackSection section; + + /** Name of the river */ + protected String river; + + /** The message class that provides i18n strings.*/ + protected FLYSConstants MSG = GWT.create(FLYSConstants.class); + + protected RiverInfoServiceAsync riverInfoService = GWT.create(RiverInfoService.class); + + /** Panel to show the info about the river */ + protected RiverInfoPanel riverinfopanel; + protected InfoTree tree; + + /** Wrapper arround the GWT Tree (InfoTree) object */ + protected Canvas treecanvas; + + protected final static String SECTION_ID = "InfoPanelSection"; + + public InfoPanel(InfoTree tree) { + SectionStackSection section = new SectionStackSection(); + section.setExpanded(false); + section.setTitle(getSectionTitle()); + section.setName(SECTION_ID); + section.setID(SECTION_ID); + + treecanvas = new WidgetCanvas(tree); + + setOverflow(Overflow.HIDDEN); + setStyleName("infopanel"); + + section.setHidden(true); + section.setItems(this); + this.section = section; + this.tree = tree; + + addResizedHandler(this); + } + + /** + * Sets and loads the river data if river is not the current set river + */ + public void setRiver(String river) { + if (!river.equals(this.river)) { + this.river = river; + this.refresh(); + } + } + + /** + * Sets the data and closes not corresponding folds in the gauge tree + */ + public void setData(DataList[] data) { + tree.setData(data); + } + + protected void render(RiverInfo riverinfo) { + tree.setRiverInfo(riverinfo); + + if (riverinfopanel == null) { + removeAllMembers(); + + riverinfopanel = new RiverInfoPanel(riverinfo); + + addMember(riverinfopanel); + addMember(treecanvas); + } + else { + riverinfopanel.setRiverInfo(riverinfo); + } + } + + @Override + public void onResized(ResizedEvent event) { + /* this height calculation is only an approximation and doesn't reflect + * the real height of the the gaugetree. */ + int height = getInnerContentHeight() - + RiverInfoPanel.getStaticHeight(); + int width = getInnerContentWidth(); + + if (height < 0) { + height = 0; + } + + GWT.log("InfoPanel - onResize " + height); + + tree.setHeight("" + height + "px"); + tree.setWidth("" + width + "px"); + } + + /** + * Hide the section stack section. + */ + @Override + public void hide() { + GWT.log("InfoPanel - hide"); + this.section.setHidden(true); + } + + /** + * Show the section stack section. + */ + @Override + public void show() { + GWT.log("InfoPanel - show"); + this.section.setHidden(false); + } + + @Override + public void addMember(Canvas component) { + super.addMember(component); + expand(); + } + + @Override + public void removeMembers(Canvas[] components) { + super.removeMembers(components); + contract(); + } + + public SectionStackSection getSection() { + return this.section; + } + + protected void removeAllMembers() { + removeMembers(getMembers()); + } + + /** + * Expands the gauge section + */ + public void expand() { + section.setExpanded(true); + } + + /** + * Contracts/shrinks the expanded gauge section + */ + public void contract() { + section.setExpanded(false); + } + + protected abstract void refresh(); + + protected abstract String getSectionTitle(); +} diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/client/ui/InfoTree.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/InfoTree.java Fri Oct 26 15:11:35 2012 +0200 @@ -0,0 +1,55 @@ +package de.intevation.flys.client.client.ui; + +import java.util.Iterator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.ScrollPanel; +import com.google.gwt.user.client.ui.Tree; +import com.google.gwt.user.client.ui.TreeItem; + +import de.intevation.flys.client.client.FLYS; +import de.intevation.flys.client.client.FLYSConstants; +import de.intevation.flys.client.shared.model.Data; +import de.intevation.flys.client.shared.model.DataList; +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * @author Björn Ricks + */ +public abstract class InfoTree extends ScrollPanel { + + protected FLYS flys; + protected Tree tree; + protected DataList[] data; + + /** The message class that provides i18n strings.*/ + protected FLYSConstants MSG = GWT.create(FLYSConstants.class); + + public void openAll() { + for (Iterator it = tree.treeItemIterator(); it.hasNext();) { + TreeItem item = it.next(); + item.setState(true); + } + } + + public void setData(DataList[] data) { + this.data = data; + if (tree.getItemCount() > 0) { + open(); + } + } + + protected Double getDoubleValue(Data d) { + String tmp = d.getStringValue(); + if (tmp != null) { + return Double.valueOf(tmp); + } + return null; + } + + public abstract void open() ; + + public abstract void setRiverInfo(RiverInfo riverinfo); + + +} \ No newline at end of file diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/client/ui/MeasurementStationPanel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/MeasurementStationPanel.java Fri Oct 26 15:11:35 2012 +0200 @@ -0,0 +1,55 @@ +package de.intevation.flys.client.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.rpc.AsyncCallback; +import de.intevation.flys.client.client.FLYS; +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * A Panel to show info about the MeasurementStations of a river + * + * @author Björn Ricks + */ +public class MeasurementStationPanel extends InfoPanel { + + /** + * MeasurementStationPanel loads the MeasurementStations from the + * RiverInfoService and displays them in a tree underneath a RiverInfoPanel + * + * @param flys The FLYS object + */ + public MeasurementStationPanel(FLYS flys) { + super(new MeasurementStationTree(flys)); + } + + /** + * Returns the title which should be displayed in the section + */ + @Override + public String getSectionTitle() { + return MSG.measurementStationPanelTitle(); + } + + /** + * Loads the river info and renders it afterwards + */ + @Override + public void refresh() { + contract(); + + riverInfoService.getMeasurementStations(this.river, + new AsyncCallback() { + @Override + public void onFailure(Throwable e) { + GWT.log("Could not load the river info." + e); + } + + @Override + public void onSuccess(RiverInfo riverinfo) { + GWT.log("Loaded river info"); + render(riverinfo); + expand(); + } + }); + } +} diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/client/ui/MeasurementStationTree.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/MeasurementStationTree.java Fri Oct 26 15:11:35 2012 +0200 @@ -0,0 +1,205 @@ +package de.intevation.flys.client.client.ui; + +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.i18n.client.NumberFormat; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.DecoratorPanel; +import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Tree; +import com.google.gwt.user.client.ui.TreeItem; + +import com.smartgwt.client.widgets.layout.HLayout; + +import de.intevation.flys.client.client.FLYS; +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.MeasurementStation; +import de.intevation.flys.client.shared.model.RiverInfo; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * @author Björn Ricks + */ +public class MeasurementStationTree extends InfoTree { + + public MeasurementStationTree(FLYS flys) { + this.flys = flys; + tree = new Tree(); + setWidget(tree); + } + + /** + * Resets the items of the tree. + * If the list of gauges is empty or null the tree will be empty. + */ + @Override + public void setRiverInfo(RiverInfo riverinfo) { + tree.clear(); + + List stations = riverinfo.getMeasurementStations(); + + if (stations != null && !stations.isEmpty()) { + + ArrayList emptystations = + new ArrayList(); + + if (!riverinfo.isKmUp()) { + for (MeasurementStation station : stations) { + addStation(station, emptystations); + } + } + else { + for (int i = stations.size()-1; i >= 0; i--) { + MeasurementStation station = stations.get(i); + addStation(station, emptystations); + } + } + + // put empty stations to the end + for (MeasurementStation station : emptystations) { + addStation(station); + } + } + } + + private void addStation(MeasurementStation station, + List empty) { + if (station.getKmStart() != null && station.getKmEnd() != null) { + addStation(station); + } + else { + empty.add(station); + } + } + + private void addStation(MeasurementStation station) { + MeasurementStationItem sitem = + new MeasurementStationItem(flys, station); + tree.addItem(sitem); + } + + class MeasurementStationItem extends TreeItem { + + private MeasurementStation station; + + public MeasurementStationItem(FLYS flys, MeasurementStation station) { + MeasurementStationHead head = + new MeasurementStationHead(flys, station); + MeasurementStationDecoratorPanel + panel = new MeasurementStationDecoratorPanel(station); + setWidget(head); + addItem(panel); + this.station = station; + } + + public Double getStart() { + return station.getKmStart(); + } + + public Double getEnd() { + return station.getKmEnd(); + } + + public Integer getID() { + return station.getID(); + } + } + + class MeasurementStationHead extends HLayout { + + public MeasurementStationHead(FLYS flys, MeasurementStation station) { + setStyleName("infohead"); + setAutoHeight(); + setAutoWidth(); + + NumberFormat nf = NumberFormat.getDecimalFormat(); + + Label label = new Label(station.getName(), true); + addMember(label); + + Double start; + Double end; + + if (!station.isKmUp()) { + start = station.getKmStart(); + end = station.getKmEnd(); + } + else { + start = station.getKmEnd(); + end = station.getKmStart(); + } + + String kmtext = ""; + if (start != null) { + kmtext += nf.format(start); + kmtext += " - "; + } + if (end != null) { + kmtext += nf.format(end); + } + if (start != null || end != null) { + kmtext += " km"; + } + + label = new Label(kmtext); + + addMember(label); + + Double dstation = station.getStation(); + if (dstation != null) { + String stext = nf.format(dstation); + stext += " km"; + label = new Label(stext); + addMember(label); + } + + /* Long number = gauge.getOfficialNumber(); */ + /* String url = number != null ? */ + /* MSG.gauge_url() + number : */ + /* MSG.gauge_url(); */ + /* Anchor anchor = new Anchor(MSG.gauge_info_link(), url, "_blank"); */ + /* addMember(anchor); */ + } + } + + class MeasurementStationDecoratorPanel extends DecoratorPanel { + + public MeasurementStationDecoratorPanel(MeasurementStation station) { + setStyleName("infopanel"); + Grid grid = new Grid(4, 2); + + NumberFormat nf = NumberFormat.getDecimalFormat(); + + String riverside = station.getRiverSide(); + if (riverside != null) { + grid.setText(0, 0, MSG.riverside()); + grid.setText(0, 1, riverside); + } + + String type = station.getMeasurementType(); + if (type != null) { + grid.setText(1, 0, MSG.measurement_station_type()); + grid.setText(1, 1, type); + } + + String moperator = station.getOperator(); + if (moperator != null) { + grid.setText(2, 0, MSG.measurement_station_operator()); + grid.setText(2, 1, moperator); + } + + setWidget(grid); + } + } + + @Override + public void open() { + } +} diff -r 270f3ac8a82e -r edcd276a7234 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 Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/ParameterList.java Fri Oct 26 15:11:35 2012 +0200 @@ -52,6 +52,7 @@ import de.intevation.flys.client.shared.model.ReportMode; import de.intevation.flys.client.shared.model.River; import de.intevation.flys.client.shared.model.WINFOArtifact; +import de.intevation.flys.client.shared.model.MINFOArtifact; import java.util.ArrayList; import java.util.List; @@ -112,7 +113,7 @@ protected VLayout report; protected VLayout helperPanel; protected VLayout tablePanel; - protected GaugePanel gaugePanel; + protected InfoPanel infoPanel; protected Canvas reportPanel; private SectionStack stack; @@ -752,17 +753,15 @@ } } if (art instanceof WINFOArtifact) { - String river = desc.getRiver(); - - if (river != null) { - renderGaugeInfo(desc.getRiver(), desc.getOldData()); - } - else { - hideGaugePanel(); - } + createGaugePanel(); + renderInfo(desc.getRiver(), desc.getOldData()); + } + else if (art instanceof MINFOArtifact) { + createMeasurementStationPanel(); + renderInfo(desc.getRiver(), desc.getOldData()); } else { - removeGaugePanel(); + removeInfoPanel(); } addOldDatas( @@ -944,49 +943,60 @@ private void createGaugePanel() { GWT.log("ParameterList - createGaugePanel"); - if (gaugePanel == null) { - gaugePanel = new GaugePanel(flys); - gaugePanel.setWidth100(); - gaugePanel.setHeight100(); + if (infoPanel == null) { + infoPanel = new GaugePanel(flys); + infoPanel.setWidth100(); + infoPanel.setHeight100(); } } - private void addGaugePanel() { - GWT.log("ParameterList - addGaugePanel"); - createGaugePanel(); - stack.addSection(gaugePanel.getSection(), 0); - } - - private void showGaugePanel() { - GWT.log("ParameterList - showGaugePanel"); - - /* Don't add GaugePanel twice */ - SectionStackSection exists = stack.getSection(GaugePanel.SECTION_ID); - if (exists == null) { - addGaugePanel(); - } - - gaugePanel.show(); - } - - private void hideGaugePanel() { - GWT.log("ParameterList - hideGaugePanel"); - - if (gaugePanel != null) { - gaugePanel.hide(); + private void createMeasurementStationPanel() { + GWT.log("ParameterList - createMeasurementStationPanel"); + if (infoPanel == null) { + infoPanel = new MeasurementStationPanel(flys); + infoPanel.setWidth100(); + infoPanel.setHeight100(); } } - private void removeGaugePanel() { - GWT.log("ParameterList - removeGaugePanel"); - stack.removeSection(GaugePanel.SECTION_ID); + private void showInfoPanel() { + GWT.log("ParameterList - showInfoPanel"); + + /* Don't add InfoPanel twice */ + SectionStackSection exists = stack.getSection(InfoPanel.SECTION_ID); + if (exists == null) { + stack.addSection(infoPanel.getSection(), 0); + } + + infoPanel.show(); + } + + private void hideInfoPanel() { + GWT.log("ParameterList - hideInfoPanel"); + + if (infoPanel != null) { + infoPanel.hide(); + } + } + + private void removeInfoPanel() { + GWT.log("ParameterList - removeInfoPanel"); + stack.removeSection(InfoPanel.SECTION_ID); } - private void renderGaugeInfo(String river, DataList[] data) { - showGaugePanel(); - gaugePanel.setRiver(river); - gaugePanel.setData(data); + private void renderInfo(String river, DataList[] data) { + GWT.log("ParameterList - renderInfo"); + + if (river != null) { + showInfoPanel(); + infoPanel.setRiver(river); + infoPanel.setData(data); + } + else { + GWT.log("ParameterList - renderInfo no river"); + hideInfoPanel(); + } } } diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java --- a/flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/server/RiverInfoServiceImpl.java Fri Oct 26 15:11:35 2012 +0200 @@ -112,7 +112,7 @@ DefaultRiverInfo riverinfo = getRiverInfo(result); List mstations = createMeasurementStations( - result, riverinfo.getName()); + result, riverinfo.getName(), riverinfo.isKmUp()); riverinfo.setMeasurementStations(mstations); @@ -157,8 +157,22 @@ } } + private Integer parseInteger(String value) { + if (value == null || value.isEmpty()) { + return null; + } + try { + return Integer.valueOf(value); + } + catch(NumberFormatException e) { + logger.error(e, e); + return null; + } + } + private List createMeasurementStations( - Document result, String rivername) { + Document result, String rivername, boolean kmup) { + NodeList stationnodes = (NodeList) XMLUtils.xpath( result, XPATH_STATIONS, @@ -190,17 +204,24 @@ ArtifactNamespaceContext.NAMESPACE_URI, "type"); String riverside = stationele.getAttributeNS( ArtifactNamespaceContext.NAMESPACE_URI, "riverside"); + String mid = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "id"); + String moperator = stationele.getAttributeNS( + ArtifactNamespaceContext.NAMESPACE_URI, "operator"); logger.debug("Found measurement station with name " + mname); MeasurementStation station = new DefaultMeasurementStation( rivername, mname, + parseInteger(mid), parseDouble(mstation), parseDouble(mstart), parseDouble(mend), + kmup, riverside, - mtype + mtype, + moperator ); mstations.add(station); diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultMeasurementStation.java --- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultMeasurementStation.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultMeasurementStation.java Fri Oct 26 15:11:35 2012 +0200 @@ -5,25 +5,31 @@ */ public class DefaultMeasurementStation implements MeasurementStation { - private String name; - private Double start; - private Double end; - private Double station; - private String rivername; - private String measurementtype; - private String riverside; + private String name; + private Double start; + private Double end; + private Double station; + private String rivername; + private String measurementtype; + private String riverside; + private Integer id; + private boolean kmup; + private String moperator; public DefaultMeasurementStation() { } public DefaultMeasurementStation( - String rivername, - String name, - Double station, - Double start, - Double end, - String riverside, - String measurementtype) + String rivername, + String name, + Integer id, + Double station, + Double start, + Double end, + boolean kmup, + String riverside, + String measurementtype, + String moperator) { this.rivername = rivername; this.name = name; @@ -32,6 +38,9 @@ this.end = end; this.riverside = riverside; this.measurementtype = measurementtype; + this.id = id; + this.kmup = kmup; + this.moperator = moperator; } /** @@ -90,4 +99,25 @@ public String getRiverSide() { return this.riverside; } + + /** + * Returns the ID of the measurement station + */ + @Override + public Integer getID() { + return this.id; + } + + @Override + public boolean isKmUp() { + return this.kmup; + } + + /** + * Returns the operator of the measurement station + */ + @Override + public String getOperator() { + return this.moperator; + } } diff -r 270f3ac8a82e -r edcd276a7234 flys-client/src/main/java/de/intevation/flys/client/shared/model/MeasurementStation.java --- a/flys-client/src/main/java/de/intevation/flys/client/shared/model/MeasurementStation.java Fri Oct 26 15:09:48 2012 +0200 +++ b/flys-client/src/main/java/de/intevation/flys/client/shared/model/MeasurementStation.java Fri Oct 26 15:11:35 2012 +0200 @@ -22,6 +22,8 @@ */ Double getKmEnd(); + boolean isKmUp(); + /** * Returns the station km of the measurement station or null if not * available @@ -42,4 +44,14 @@ * Returns the type of the measurement station */ String getMeasurementType(); + + /** + * Returns the ID of the measurement station + */ + Integer getID(); + + /** + * Returns the operator of the measurement station + */ + String getOperator(); }