gernotbelger@9276: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
gernotbelger@9276: * Software engineering by Intevation GmbH
gernotbelger@9276: *
gernotbelger@9276: * This file is Free Software under the GNU AGPL (>=v3)
gernotbelger@9276: * and comes with ABSOLUTELY NO WARRANTY! Check out the
gernotbelger@9276: * documentation coming with Dive4Elements River for details.
gernotbelger@9276: */
gernotbelger@9276:
gernotbelger@9276: package org.dive4elements.river.client.client.ui.bundu;
gernotbelger@9276:
gernotbelger@9276: import java.util.ArrayList;
gernotbelger@9404: import java.util.Date;
gernotbelger@9288: import java.util.LinkedHashMap;
gernotbelger@9276: import java.util.List;
gernotbelger@9276: import java.util.Map;
gernotbelger@9276:
gernotbelger@9404: import org.dive4elements.river.client.client.Config;
gernotbelger@9288: import org.dive4elements.river.client.client.services.DynamicMainValuesService;
gernotbelger@9288: import org.dive4elements.river.client.client.services.DynamicMainValuesServiceAsync;
gernotbelger@9404: import org.dive4elements.river.client.client.services.DynamicMainValuesTimeRangeDeterminationService;
gernotbelger@9404: import org.dive4elements.river.client.client.services.DynamicMainValuesTimeRangeDeterminationServiceAsync;
gernotbelger@9288: import org.dive4elements.river.client.client.ui.AbstractWQAdaptedInputPanel;
gernotbelger@9276: import org.dive4elements.river.client.client.ui.DoubleArrayPanel;
gernotbelger@9288: import org.dive4elements.river.client.client.ui.wq.QDTable;
gernotbelger@9404: import org.dive4elements.river.client.shared.model.ArtifactDescription;
gernotbelger@9277: import org.dive4elements.river.client.shared.model.Data;
gernotbelger@9278: import org.dive4elements.river.client.shared.model.DataItem;
gernotbelger@9277: import org.dive4elements.river.client.shared.model.DataList;
gernotbelger@9288: import org.dive4elements.river.client.shared.model.DefaultData;
gernotbelger@9288: import org.dive4elements.river.client.shared.model.DefaultDataItem;
gernotbelger@9404: import org.dive4elements.river.client.shared.model.GaugeInfoObject;
gernotbelger@9288: import org.dive4elements.river.client.shared.model.WQDataItem;
gernotbelger@9288: import org.dive4elements.river.client.shared.model.WQInfoObject;
gernotbelger@9276:
gernotbelger@9288: import com.google.gwt.core.client.GWT;
gernotbelger@9276: import com.google.gwt.i18n.client.NumberFormat;
gernotbelger@9288: import com.google.gwt.user.client.rpc.AsyncCallback;
gernotbelger@9288: import com.smartgwt.client.types.TitleOrientation;
gernotbelger@9288: import com.smartgwt.client.types.VerticalAlignment;
gernotbelger@9288: import com.smartgwt.client.types.Visibility;
gernotbelger@9404: import com.smartgwt.client.util.SC;
gernotbelger@9277: import com.smartgwt.client.widgets.Canvas;
gernotbelger@9288: import com.smartgwt.client.widgets.Label;
gernotbelger@9288: import com.smartgwt.client.widgets.form.DynamicForm;
gernotbelger@9288: import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
gernotbelger@9288: import com.smartgwt.client.widgets.form.fields.TextItem;
gernotbelger@9288: import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
gernotbelger@9288: import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
gernotbelger@9293: import com.smartgwt.client.widgets.form.fields.events.FocusEvent;
gernotbelger@9293: import com.smartgwt.client.widgets.form.fields.events.FocusHandler;
gernotbelger@9288: import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
gernotbelger@9288: import com.smartgwt.client.widgets.layout.HLayout;
gernotbelger@9288: import com.smartgwt.client.widgets.layout.VLayout;
gernotbelger@9288: import com.smartgwt.client.widgets.tab.Tab;
gernotbelger@9276:
gernotbelger@9276: /**
gernotbelger@9276: * This UIProvider creates a widget to enter W or Q data for
gernotbelger@9276: * Fixation analysis
gernotbelger@9276: *
gernotbelger@9276: * @author Andre Heinecke
gernotbelger@9276: */
gernotbelger@9293: public class BunduWstWQPanel extends AbstractWQAdaptedInputPanel implements FocusHandler {
gernotbelger@9288:
gernotbelger@9288: private static final long serialVersionUID = -1L;
gernotbelger@9288:
gernotbelger@9288: private static enum mode {
gernotbelger@9288: Q, UD
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9293: /** The currently focussed Input element. */
gernotbelger@9293: private DoubleArrayPanel itemWithFocus;
gernotbelger@9293:
gernotbelger@9288: /** Service to fetch W/Q MainValues. */
gernotbelger@9288: private final DynamicMainValuesServiceAsync mainValueService = GWT.create(DynamicMainValuesService.class);
gernotbelger@9404: private final DynamicMainValuesTimeRangeDeterminationServiceAsync serviceForTime = GWT.create(DynamicMainValuesTimeRangeDeterminationService.class);
gernotbelger@9288:
gernotbelger@9288: private final RadioGroupItem radiogroup = new RadioGroupItem();
gernotbelger@9276:
gernotbelger@9278: private int bezugsjahr = 0;
gernotbelger@9288:
gernotbelger@9278: private int qSeriesLength = 0;
gernotbelger@9278:
gernotbelger@9288: private Canvas list;
gernotbelger@9288:
gernotbelger@9288: private final DynamicForm udForm = new DynamicForm();
gernotbelger@9288:
gernotbelger@9288: private final TextItem udInputItem = new TextItem();
gernotbelger@9288:
gernotbelger@9277: @Override
gernotbelger@9288: protected void beforeCreate(final DataList data) {
gernotbelger@9278: for (final Data container : data.getAll()) {
gernotbelger@9288: final DataItem[] items = container.getItems();
gernotbelger@9288: if (items != null) {
gernotbelger@9288: for (final DataItem item : items) {
gernotbelger@9288: if ("ignore_bezugsjahr".equals(item.getLabel())) {
gernotbelger@9288: this.bezugsjahr = Integer.valueOf(item.getStringValue());
gernotbelger@9288: } else if ("ignore_q_series_length".equals(item.getLabel())) {
gernotbelger@9288: this.qSeriesLength = Integer.valueOf(item.getStringValue());
gernotbelger@9288: }
gernotbelger@9278: }
gernotbelger@9278: }
gernotbelger@9278: }
gernotbelger@9277: }
gernotbelger@9277:
gernotbelger@9276: @Override
gernotbelger@9288: protected void afterCreate() {
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: @Override
gernotbelger@9288: protected Canvas createWidget(final DataList dataList) {
gernotbelger@9288: final VLayout layout = new VLayout();
gernotbelger@9288: final Canvas mode = createMode(dataList);
gernotbelger@9288:
gernotbelger@9288: this.list = createList(dataList);
gernotbelger@9288:
gernotbelger@9288: this.udInputItem.setShowTitle(false);
gernotbelger@9288: this.udInputItem.setWidth(120);
gernotbelger@9288: final IntegerRangeValidator validator = new IntegerRangeValidator();
gernotbelger@9288: validator.setMax(364);
gernotbelger@9288: validator.setMin(0);
gernotbelger@9288: validator.setErrorMessage(this.MSG.bundu_bezugswst_validation_range());
gernotbelger@9288: this.udInputItem.setRequiredMessage(this.MSG.bundu_bezugswst_validation_range());
gernotbelger@9288: this.udInputItem.setValidators(validator);
gernotbelger@9288: this.udInputItem.setValidateOnChange(true);
gernotbelger@9288: this.udForm.setFields(this.udInputItem);
gernotbelger@9288:
gernotbelger@9288: final List items = getWQItems(dataList);
gernotbelger@9288: final int listHeight = ROW_HEIGHT * items.size();
gernotbelger@9288:
gernotbelger@9288: mode.setHeight(25);
gernotbelger@9288: mode.setWidth(200);
gernotbelger@9288:
gernotbelger@9288: layout.addMember(mode);
gernotbelger@9288: layout.addMember(this.list);
gernotbelger@9288: layout.addMember(this.udForm);
gernotbelger@9288: layout.setHeight(25 + listHeight);
gernotbelger@9288: layout.setWidth(350);
gernotbelger@9288: enableQ();
gernotbelger@9288: return layout;
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: /**
gernotbelger@9288: * Create radio button for switching
gernotbelger@9288: * Radiobutton-change also triggers helper panel tab selection.
gernotbelger@9288: */
gernotbelger@9288:
gernotbelger@9288: private Canvas createMode(final DataList dataList) {
gernotbelger@9288: this.radiogroup.setShowTitle(false);
gernotbelger@9288: this.radiogroup.setVertical(false);
gernotbelger@9288: this.radiogroup.setWidth(200);
gernotbelger@9288:
gernotbelger@9288: final LinkedHashMap wqValues = new LinkedHashMap();
gernotbelger@9288: wqValues.put(String.valueOf(mode.Q), this.MSG.wqQatGauge());
gernotbelger@9288: wqValues.put(String.valueOf(mode.UD), this.MSG.bundu_bezugswst_mode_ud());
gernotbelger@9288: this.radiogroup.setValueMap(wqValues);
gernotbelger@9288: this.radiogroup.setValue(String.valueOf(mode.Q));
gernotbelger@9288:
gernotbelger@9288: this.modes = new DynamicForm();
gernotbelger@9288: this.modes.setFields(this.radiogroup);
gernotbelger@9288: this.modes.setWidth(200);
gernotbelger@9288: this.radiogroup.addChangeHandler(new ChangeHandler() {
gernotbelger@9288: @Override
gernotbelger@9288: public void onChange(final ChangeEvent e) {
gernotbelger@9288:
gernotbelger@9288: final String value = e.getValue().toString();
gernotbelger@9288: if (value.equals(String.valueOf(mode.UD))) {
gernotbelger@9290: enableUD();
gernotbelger@9290: } else if (value.equals(String.valueOf(mode.Q))) {
gernotbelger@9288: enableQ();
gernotbelger@9288: }
gernotbelger@9288: }
gernotbelger@9288: });
gernotbelger@9288: return this.modes;
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: private void enableUD() {
gernotbelger@9290: BunduWstWQPanel.this.list.setVisibility(Visibility.HIDDEN);
gernotbelger@9290: BunduWstWQPanel.this.udForm.setVisibility(Visibility.VISIBLE);
gernotbelger@9290: BunduWstWQPanel.this.tabs.disable();
gernotbelger@9290: }
gernotbelger@9290:
gernotbelger@9290: private void enableQ() {
gernotbelger@9288: BunduWstWQPanel.this.list.setVisibility(Visibility.VISIBLE);
gernotbelger@9288: BunduWstWQPanel.this.udForm.setVisibility(Visibility.HIDDEN);
gernotbelger@9288: BunduWstWQPanel.this.tabs.enable();
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: private final String getMode() {
gernotbelger@9288: return (String) this.radiogroup.getValue();
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: @Override
gernotbelger@9288: public Data[] getData() {
gernotbelger@9288: final Data[] data = new Data[2];
gernotbelger@9288: final String modeStr = getMode();
gernotbelger@9288: final DataItem item = new DefaultDataItem("bundu.wst.mode", "bundu.wst.mode", modeStr);
gernotbelger@9288: final Data modeData = new DefaultData("bundu.wst.mode", null, null, new DataItem[] { item });
gernotbelger@9288: data[0] = modeData;
gernotbelger@9288: if (modeStr.equals(mode.Q.toString())) {
gernotbelger@9288: data[1] = getWQValues("wq_values");
gernotbelger@9288: } else if (modeStr.equals(mode.UD.toString())) {
gernotbelger@9288: final String udValue = this.udInputItem.getValueAsString(); // in validate findet der int-check statt; er verhindert ein weitergehen, falls der Wert
gernotbelger@9288: // nicht int-kompatibel ist
gernotbelger@9288: final DataItem itemV = new DefaultDataItem("bundu.wst.ud_value", "bundu.wst.ud_value", udValue);
gernotbelger@9288: data[1] = new DefaultData("bundu.wst.ud_value", null, null, new DataItem[] { itemV });
gernotbelger@9288: }
gernotbelger@9288: return data;
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: @Override
gernotbelger@9288: protected void createTabs() {
gernotbelger@9288: for (int i = 0; i < this.gaugeRanges.size(); i++) {
gernotbelger@9288: final Tab qTab = new Tab(this.MSG.wq_table_q());
gernotbelger@9407: qTab.setPaneMargin(0);
gernotbelger@9288: final QDTable qdTable = new QDTable();
gernotbelger@9288: this.qdTables.add(qdTable);
gernotbelger@9288: qdTable.showSelect();
gernotbelger@9288: qTab.setPane(qdTable);
gernotbelger@9288: this.tabs.addTab(qTab, i);
gernotbelger@9288: }
gernotbelger@9288: this.tabs.setSelectedTab(0);
gernotbelger@9407:
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: private Canvas createList(final DataList dataList) {
gernotbelger@9288: final VLayout layout = new VLayout();
gernotbelger@9288:
gernotbelger@9288: final List items = getWQItems(dataList);
gernotbelger@9288:
gernotbelger@9288: int i = 0;
gernotbelger@9288: for (final DataItem item : items) {
gernotbelger@9288: if (item instanceof WQDataItem) {
gernotbelger@9288: final String title = item.getLabel();
gernotbelger@9288: final String label = item.getStringValue();
gernotbelger@9288:
gernotbelger@9288: this.tabs.getTab(i).setTitle(this.tabs.getTab(i).getTitle() + " (" + label + ")");
gernotbelger@9288:
gernotbelger@9293: final DoubleArrayPanel dap = new DoubleArrayPanel(label, null, this, this, TitleOrientation.LEFT);
gernotbelger@9288: this.wqranges.put(title, dap);
gernotbelger@9288: this.doubleArrayPanels.add(dap);
gernotbelger@9288: if (item instanceof WQDataItem) {
gernotbelger@9288: final WQDataItem wq = (WQDataItem) item;
gernotbelger@9288: final double[] mmQ = wq.getQRange();
gernotbelger@9288: this.qranges.put(title, mmQ);
gernotbelger@9288:
gernotbelger@9288: }
gernotbelger@9288: layout.addMember(dap);
gernotbelger@9288: i++;
gernotbelger@9288: }
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: layout.setHeight(items.size() * ROW_HEIGHT);
gernotbelger@9288:
gernotbelger@9288: return layout;
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: @Override
gernotbelger@9288: public List validate() {
gernotbelger@9276: final List errors = new ArrayList();
gernotbelger@9288: if (getMode().equals(mode.Q.toString())) {
gernotbelger@9288: errors.addAll(this.validateRange(this.qranges));
gernotbelger@9288: } else if (getMode().equals(mode.UD.toString())) {
gernotbelger@9288: try {
gernotbelger@9290: if (!this.udInputItem.validate()) {
gernotbelger@9288: errors.add(this.udInputItem.getRequiredMessage());
gernotbelger@9288: }
gernotbelger@9292: final String value = this.udInputItem.getValueAsString();
gernotbelger@9292: if (value == null || value.isEmpty()) {
gernotbelger@9292: errors.add(this.MSG.missingInput());
gernotbelger@9292: return errors;
gernotbelger@9292: }
gernotbelger@9292: Integer.valueOf(value);// irgendwie klappt die validator-validierung nur bei der eingabe von
gernotbelger@9292: // ganzzahlen :-(
gernotbelger@9288: }
gernotbelger@9288: catch (final NumberFormatException e) {
gernotbelger@9288: errors.add(this.MSG.error_invalid_integer());
gernotbelger@9288: }
gernotbelger@9288: }
gernotbelger@9288: return errors;
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9288: private List validateRange(final Map ranges) {
gernotbelger@9288: final List errors = new ArrayList();
gernotbelger@9288:
gernotbelger@9276: final NumberFormat nf = NumberFormat.getDecimalFormat();
gernotbelger@9276:
gernotbelger@9276: for (final DoubleArrayPanel dap : this.wqranges.values()) {
gernotbelger@9276:
gernotbelger@9276: if (!dap.validateForm()) {
gernotbelger@9276: errors.add(this.MSG.error_invalid_double_value());
gernotbelger@9276: return errors;
gernotbelger@9276: }
gernotbelger@9276:
gernotbelger@9276: int idx = 0;
gernotbelger@9276:
gernotbelger@9276: final double[] values = dap.getInputValues();
gernotbelger@9292: if (values == null) {
gernotbelger@9292: errors.add(this.MSG.missingInputs());
gernotbelger@9292: return errors;
gernotbelger@9292: }
gernotbelger@9276: final double[] good = new double[values.length];
gernotbelger@9276:
gernotbelger@9276: for (final double value : values) {
gernotbelger@9276: if (value <= 0) {
gernotbelger@9276: String tmp = this.MSG.error_validate_positive();
gernotbelger@9276: tmp = tmp.replace("$1", nf.format(value));
gernotbelger@9276: errors.add(tmp);
gernotbelger@9276: } else {
gernotbelger@9276: good[idx++] = value;
gernotbelger@9276: }
gernotbelger@9276: }
gernotbelger@9276:
gernotbelger@9276: final double[] justGood = new double[idx];
gernotbelger@9276: for (int i = 0; i < justGood.length; i++) {
gernotbelger@9276: justGood[i] = good[i];
gernotbelger@9276: }
gernotbelger@9276:
gernotbelger@9276: if (!errors.isEmpty()) {
gernotbelger@9276: dap.setValues(justGood);
gernotbelger@9276: }
gernotbelger@9276: }
gernotbelger@9276: return errors;
gernotbelger@9276: }
gernotbelger@9288:
gernotbelger@9288: @Override
gernotbelger@9288: public Canvas createOld(final DataList dataList) {
gernotbelger@9288: final List all = dataList.getAll();
gernotbelger@9288: final Data wqData = getData(all, "wq_values");
gernotbelger@9288: final Data wqMode = getData(all, "bundu.wst.mode");
gernotbelger@9288: final Data udValue = getData(all, "bundu.wst.ud_value");
gernotbelger@9288:
gernotbelger@9288: final boolean isQ = wqMode.getItems()[0].getStringValue().equals(String.valueOf(mode.Q));
gernotbelger@9288: final Canvas back = getBackButton(dataList.getState());
gernotbelger@9288:
gernotbelger@9288: final HLayout valLayout = new HLayout();
gernotbelger@9288: final HLayout modeLayout = new HLayout();
gernotbelger@9288: final VLayout vlayout = new VLayout();
gernotbelger@9288:
gernotbelger@9288: final Label wqLabel = new Label(dataList.getLabel());
gernotbelger@9288: final Label modeLabel = new Label("");
gernotbelger@9288:
gernotbelger@9288: wqLabel.setValign(VerticalAlignment.TOP);
gernotbelger@9288:
gernotbelger@9288: wqLabel.setWidth(200);
gernotbelger@9288: wqLabel.setHeight(25);
gernotbelger@9288: modeLabel.setHeight(25);
gernotbelger@9288: modeLabel.setWidth(200);
gernotbelger@9288:
gernotbelger@9288: valLayout.addMember(wqLabel);
gernotbelger@9288: if (isQ) {
gernotbelger@9288: valLayout.addMember(createOldWQValues(wqData, true));
gernotbelger@9288: } else {
gernotbelger@9288: valLayout.addMember(new Label(udValue.getItems()[0].getStringValue() + " [d/a]"));
gernotbelger@9288: }
gernotbelger@9288: valLayout.addMember(back);
gernotbelger@9288: modeLayout.addMember(modeLabel);
gernotbelger@9288:
gernotbelger@9288: vlayout.addMember(valLayout);
gernotbelger@9288: vlayout.addMember(modeLayout);
gernotbelger@9288:
gernotbelger@9288: return vlayout;
gernotbelger@9288: }
gernotbelger@9288:
gernotbelger@9404: protected void callMainValuesService(final String locale, final String river, final double start, final double end, final Date startDate,
gernotbelger@9404: final Date endDate, final AsyncCallback cb) {
gernotbelger@9288:
gernotbelger@9404: this.mainValueService.getWQInfo(locale, river, start, end, startDate, endDate, cb);
gernotbelger@9288: }
gernotbelger@9293:
gernotbelger@9293: @Override
gernotbelger@9293: public void onFocus(final FocusEvent event) {
gernotbelger@9293: this.itemWithFocus = (DoubleArrayPanel) event.getForm();
gernotbelger@9293: // Switch to respective tab.
gernotbelger@9293: if (getMode().equals(mode.Q.toString())) {
gernotbelger@9293: final int inputIndex = this.doubleArrayPanels.indexOf(this.itemWithFocus);
gernotbelger@9293: this.tabs.selectTab(inputIndex);
gernotbelger@9293: }
gernotbelger@9293: }
gernotbelger@9404:
gernotbelger@9404: @Override
gernotbelger@9404: protected void fetchWQData() {
gernotbelger@9404: {
gernotbelger@9404: final Config config = Config.getInstance();
gernotbelger@9404: final String locale = config.getLocale();
gernotbelger@9404:
gernotbelger@9404: final ArtifactDescription adescr = this.artifact.getArtifactDescription();
gernotbelger@9404: final DataList[] data = adescr.getOldData();
gernotbelger@9404:
gernotbelger@9404: final String river = getRiverName(data);
gernotbelger@9404: final int startYear = this.bezugsjahr - this.qSeriesLength;
gernotbelger@9404: final int endYear = this.bezugsjahr;
gernotbelger@9404:
gernotbelger@9404: // Gauge ranges overlap, move start and end a bit closer
gernotbelger@9404: // to each other.
gernotbelger@9404:
gernotbelger@9404: final AsyncCallback cb = new AsyncCallback() {
gernotbelger@9404: @Override
gernotbelger@9404: public void onFailure(final Throwable caught) {
gernotbelger@9404: GWT.log("Could not recieve wq informations.");
gernotbelger@9404: final String msg = caught.getMessage();
gernotbelger@9404: resetLoadingMessageOfQTable(msg);
gernotbelger@9404: // disable weiter-knopf
gernotbelger@9404: getSubmitBtn().disable();
gernotbelger@9404: SC.warn(msg);
gernotbelger@9404: }
gernotbelger@9404:
gernotbelger@9404: @Override
gernotbelger@9404: public void onSuccess(final GaugeInfoObject[] result) {
gernotbelger@9404: // TODO Auto-generated method stub
gernotbelger@9404: final int num = result != null ? result.length : 0;
gernotbelger@9404: GWT.log("Received timeranges for gauges");
gernotbelger@9404:
gernotbelger@9404: if (num == 0) {
gernotbelger@9404: return;
gernotbelger@9404: }
gernotbelger@9404:
gernotbelger@9404: for (int i = 0; i < result.length; i++) {
gernotbelger@9404: final GaugeInfoObject gauge = result[i];
gernotbelger@9404: // Gauge ranges overlap, move start and end a bit closer
gernotbelger@9404: // to each other.
gernotbelger@9404: final Double[] range = getGaugeNamesRange().get(gauge.getName());
gernotbelger@9404: final double rDiff = (range[1] - range[0]) / 10d;
gernotbelger@9404: final int fi = i;
gernotbelger@9404:
gernotbelger@9404: final AsyncCallback cb = new AsyncCallback() {
gernotbelger@9404: @Override
gernotbelger@9404: public void onFailure(final Throwable caught) {
gernotbelger@9404: GWT.log("Could not recieve wq informations.");
gernotbelger@9404: addWQInfo(null, fi, gauge);
gernotbelger@9404: }
gernotbelger@9404:
gernotbelger@9404: @Override
gernotbelger@9404: public void onSuccess(final WQInfoObject[] wqi) {
gernotbelger@9404: final int num = wqi != null ? wqi.length : 0;
gernotbelger@9404: GWT.log("Received " + num + " wq informations (" + fi + ".");
gernotbelger@9404:
gernotbelger@9404: addWQInfo(wqi, fi, gauge);
gernotbelger@9404: if (fi == (result.length - 1))
gernotbelger@9404: getSubmitBtn().enable();
gernotbelger@9404: }
gernotbelger@9404: };
gernotbelger@9404: callMainValuesService(locale, river, range[0] + rDiff, range[1] - rDiff, gauge.getStartTime(), gauge.getStopTime(), cb);
gernotbelger@9404: }
gernotbelger@9404: }
gernotbelger@9404:
gernotbelger@9404: };
gernotbelger@9404:
gernotbelger@9404: this.serviceForTime.getGaugeInfo(locale, river, getGaugeNames(), startYear, endYear, cb);
gernotbelger@9404: getSubmitBtn().disable();
gernotbelger@9404: }
gernotbelger@9404:
gernotbelger@9404: }
gernotbelger@9404:
gernotbelger@9407: @Override
gernotbelger@9407: protected String getWQInfoMsg() {
gernotbelger@9407: return this.MSG.bundu_ws_wq_info();
gernotbelger@9407: }
gernotbelger@9407:
gernotbelger@9288: }