ingo@243: package de.intevation.flys.client.client.ui;
ingo@243:
ingo@565: import java.util.ArrayList;
ingo@246: import java.util.HashMap;
ingo@246: import java.util.Iterator;
ingo@255: import java.util.LinkedHashMap;
ingo@246: import java.util.List;
ingo@246: import java.util.Map;
ingo@246:
ingo@243: import com.google.gwt.core.client.GWT;
ingo@565: import com.google.gwt.i18n.client.NumberFormat;
raimund@2456: import com.google.gwt.user.client.rpc.AsyncCallback;
ingo@243:
ingo@246: import com.smartgwt.client.types.TitleOrientation;
ingo@247: import com.smartgwt.client.types.VerticalAlignment;
ingo@602: import com.smartgwt.client.util.SC;
ingo@243: import com.smartgwt.client.widgets.Canvas;
ingo@243: import com.smartgwt.client.widgets.Label;
ingo@255: import com.smartgwt.client.widgets.form.DynamicForm;
ingo@255: import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
ingo@243: import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
ingo@243: import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
ingo@243: import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
ingo@243: import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
ingo@247: import com.smartgwt.client.widgets.layout.HLayout;
ingo@243: import com.smartgwt.client.widgets.layout.VLayout;
raimund@2456: import com.smartgwt.client.widgets.tab.TabSet;
raimund@2456: import com.smartgwt.client.widgets.tab.Tab;
ingo@243:
ingo@243: import de.intevation.flys.client.shared.model.Data;
ingo@243: import de.intevation.flys.client.shared.model.DataItem;
ingo@243: import de.intevation.flys.client.shared.model.DataList;
ingo@243: import de.intevation.flys.client.shared.model.DefaultData;
ingo@243: import de.intevation.flys.client.shared.model.DefaultDataItem;
ingo@565: import de.intevation.flys.client.shared.model.WQDataItem;
raimund@2456: import de.intevation.flys.client.shared.model.WQInfoObject;
raimund@2456: import de.intevation.flys.client.shared.model.WQInfoRecord;
raimund@2456: import de.intevation.flys.client.shared.model.ArtifactDescription;
raimund@2456:
ingo@243:
ingo@246: import de.intevation.flys.client.client.FLYSConstants;
raimund@2456: import de.intevation.flys.client.client.Config;
raimund@2456: import de.intevation.flys.client.client.services.WQInfoService;
raimund@2456: import de.intevation.flys.client.client.services.WQInfoServiceAsync;
raimund@2456: import de.intevation.flys.client.client.ui.wq.WTable;
raimund@2456: import de.intevation.flys.client.client.ui.wq.QDTable;
ingo@246:
ingo@243:
ingo@243: /**
ingo@243: * This UIProvider creates a widget to enter W or Q data for discharge
ingo@243: * longitudinal section computations.
ingo@243: *
ingo@243: * @author Ingo Weinzierl
ingo@243: */
ingo@243: public class WQAdaptedInputPanel
ingo@243: extends AbstractUIProvider
ingo@243: implements ChangeHandler, BlurHandler
ingo@243: {
raimund@2432: public static final String FIELD_WQ_MODE = "wq_isq";
ingo@255: public static final String FIELD_WQ_W = "W";
ingo@255: public static final String FIELD_WQ_Q = "Q";
ingo@246:
ingo@247: public static final String GAUGE_SEPARATOR = ":";
ingo@247:
ingo@247: public static final String GAUGE_PART_SEPARATOR = ";";
ingo@247:
ingo@247: public static final String VALUE_SEPARATOR = ",";
ingo@247:
ingo@255: public static final int ROW_HEIGHT = 20;
ingo@255:
raimund@2456: /** The constant field name for choosing w or q mode.*/
raimund@2456: public static final String FIELD_WQ = "wq";
raimund@2456:
raimund@2456: /** The constant field name for choosing single values or range.*/
raimund@2456: public static final String FIELD_MODE = "mode";
raimund@2456:
raimund@2456: /** The constant field value for range input mode.*/
raimund@2456: public static final String FIELD_MODE_RANGE = "range";
raimund@2456:
raimund@2456: protected WQInfoServiceAsync wqInfoService =
raimund@2456: GWT.create(WQInfoService.class);
ingo@246:
ingo@246: /** The message class that provides i18n strings.*/
ingo@246: protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
ingo@246:
ingo@246: /** Stores the input panels related to their keys.*/
ingo@246: protected Map wqranges;
ingo@246:
ingo@565: /** Stores the min/max values for each q range.*/
ingo@565: protected Map qranges;
ingo@565:
ingo@565: /** Stores the min/max values for each w range.*/
ingo@565: protected Map wranges;
ingo@565:
ingo@255: /** The RadioGroupItem that determines the w/q input mode.*/
ingo@255: protected DynamicForm modes;
ingo@255:
raimund@2456: protected QDTable qdTable;
raimund@2456:
raimund@2456: protected WTable wTable;
raimund@2456:
raimund@2456: protected TabSet tabs;
ingo@246:
ingo@246:
ingo@243: public WQAdaptedInputPanel() {
ingo@246: wqranges = new HashMap();
ingo@565: qranges = new HashMap();
ingo@565: wranges = new HashMap();
raimund@2456: qdTable = new QDTable();
raimund@2456: wTable = new WTable();
ingo@243: }
ingo@243:
ingo@243:
ingo@243: public Canvas create(DataList data) {
raimund@2456: initHelperPanel();
raimund@2456:
ingo@243: Canvas submit = getNextButton();
ingo@246: Canvas widget = createWidget(data);
ingo@246: Label label = new Label(MSG.wqadaptedTitle());
ingo@246:
ingo@246: label.setHeight(25);
ingo@243:
ingo@243: VLayout layout = new VLayout();
ingo@243: layout.setMembersMargin(10);
ingo@255: layout.setWidth(350);
ingo@243:
ingo@246: layout.addMember(label);
ingo@246: layout.addMember(widget);
ingo@243: layout.addMember(submit);
ingo@243:
raimund@2456:
ingo@243: return layout;
ingo@243: }
ingo@243:
ingo@243:
raimund@2456: protected void initHelperPanel() {
raimund@2456: tabs = new TabSet();
raimund@2456: tabs.setWidth100();
raimund@2456: tabs.setHeight100();
raimund@2456:
raimund@2456: // TODO i18n
raimund@2456: Tab wTab = new Tab("W");
raimund@2456: Tab qTab = new Tab("Q / D");
raimund@2456:
raimund@2456: wTab.setPane(wTable);
raimund@2456: qTab.setPane(qdTable);
raimund@2456: qdTable.hideIconFields();
raimund@2456:
raimund@2456: tabs.addTab(wTab, 0);
raimund@2456: tabs.addTab(qTab, 1);
raimund@2456:
raimund@2456: helperContainer.addMember(tabs);
raimund@2456:
raimund@2456: fetchWQData();
raimund@2456: }
raimund@2456:
raimund@2456:
ingo@243: public Canvas createOld(DataList dataList) {
ingo@247: List all = dataList.getAll();
ingo@247: Data wqData = getData(all, "wq_values");
raimund@2432: Data wqMode = getData(all, "wq_isq");
ingo@247:
ingo@247: Canvas back = getBackButton(dataList.getState());
ingo@247:
ingo@247: HLayout valLayout = new HLayout();
ingo@247: HLayout modeLayout = new HLayout();
ingo@247: VLayout vlayout = new VLayout();
ingo@247:
ingo@247: Label wqLabel = new Label(dataList.getLabel());
ingo@247: Label modeLabel = new Label("");
ingo@247:
ingo@247: wqLabel.setValign(VerticalAlignment.TOP);
ingo@247:
ingo@247: wqLabel.setWidth(200);
ingo@247: wqLabel.setHeight(25);
ingo@247: modeLabel.setHeight(25);
ingo@247: modeLabel.setWidth(200);
ingo@247:
ingo@247: valLayout.addMember(wqLabel);
ingo@247: valLayout.addMember(createOldWQValues(wqData));
ingo@247: valLayout.addMember(back);
ingo@247: modeLayout.addMember(modeLabel);
ingo@247:
ingo@247: vlayout.addMember(valLayout);
ingo@247: vlayout.addMember(modeLayout);
ingo@247:
ingo@247: return vlayout;
ingo@247: }
ingo@247:
ingo@247:
ingo@247: protected Canvas createOldWQValues(Data wqData) {
ingo@247: VLayout layout = new VLayout();
ingo@247:
ingo@247: DataItem item = wqData.getItems()[0];
ingo@247: String value = item.getStringValue();
ingo@247:
ingo@247: String[] gauges = value.split(GAUGE_SEPARATOR);
ingo@247:
ingo@247: for (String gauge: gauges) {
ingo@247: HLayout h = new HLayout();
ingo@247:
ingo@247: String[] parts = gauge.split(GAUGE_PART_SEPARATOR);
ingo@247: String[] values = parts[2].split(VALUE_SEPARATOR);
ingo@247:
ingo@247: Label l = new Label(parts[0] + " - " + parts[1] + ": ");
ingo@247:
ingo@247: StringBuilder sb = new StringBuilder();
ingo@247: boolean first = true;
ingo@247:
ingo@247: for (String v: values) {
ingo@247: if (!first) {
ingo@247: sb.append(", ");
ingo@247: }
ingo@247:
ingo@247: sb.append(v);
ingo@247:
ingo@247: first = false;
ingo@247: }
ingo@247:
ingo@247: Label v = new Label(sb.toString());
ingo@247:
ingo@247: l.setWidth(65);
ingo@247: v.setWidth(65);
ingo@247:
ingo@247: h.addMember(l);
ingo@247: h.addMember(v);
ingo@247:
ingo@247: layout.addMember(h);
ingo@247: }
ingo@247:
ingo@247: return layout;
ingo@243: }
ingo@243:
ingo@243:
ingo@246: protected Canvas createWidget(DataList dataList) {
ingo@246: VLayout layout = new VLayout();
ingo@246:
ingo@255: Canvas mode = createMode(dataList);
ingo@255: Canvas list = createList(dataList);
ingo@255:
ingo@255: DataItem[] items = getWQItems(dataList);
ingo@255: int listHeight = ROW_HEIGHT * items.length;
ingo@255:
ingo@255: mode.setHeight(25);
ingo@255: mode.setWidth(200);
ingo@255:
ingo@255: layout.addMember(mode);
ingo@255: layout.addMember(list);
ingo@255:
ingo@255: layout.setHeight(25 + listHeight);
ingo@255: layout.setWidth(350);
ingo@255:
ingo@519: initUserDefaults(dataList);
ingo@519:
ingo@255: return layout;
ingo@255: }
ingo@255:
ingo@255:
ingo@565: @Override
ingo@565: public List validate() {
ingo@565: if (isWMode()) {
ingo@565: return validateW();
ingo@565: }
ingo@565: else {
ingo@565: return validateQ();
ingo@565: }
ingo@565: }
ingo@565:
ingo@565:
ingo@565: protected List validateW() {
ingo@565: List errors = new ArrayList();
ingo@565: NumberFormat nf = NumberFormat.getDecimalFormat();
ingo@565:
ingo@565: Iterator iter = wqranges.keySet().iterator();
ingo@565:
ingo@565: while (iter.hasNext()) {
ingo@565: List tmpErrors = new ArrayList();
ingo@565:
ingo@565: String key = iter.next();
ingo@565: DoubleArrayPanel dap = wqranges.get(key);
ingo@602:
ingo@602: if (!dap.validateForm()) {
ingo@602: errors.add(MSG.error_invalid_double_value());
ingo@602: return errors;
ingo@602: }
ingo@602:
ingo@602: double[] mm = wranges.get(key);
ingo@602: if (mm == null) {
ingo@602: SC.warn(MSG.error_read_minmax_values());
ingo@602: continue;
ingo@602: }
ingo@565:
ingo@565: double[] values = dap.getInputValues();
ingo@565: double[] good = new double[values.length];
ingo@565:
ingo@565: int idx = 0;
ingo@565:
ingo@565: for (double value: values) {
ingo@565: if (value < mm[0] || value > mm[1]) {
ingo@565: String tmp = MSG.error_validate_range();
ingo@565: tmp = tmp.replace("$1", nf.format(value));
ingo@565: tmp = tmp.replace("$2", nf.format(mm[0]));
ingo@565: tmp = tmp.replace("$3", nf.format(mm[1]));
ingo@565: tmpErrors.add(tmp);
ingo@565: }
ingo@565: else {
ingo@565: good[idx++] = value;
ingo@565: }
ingo@565: }
ingo@565:
ingo@565: double[] justGood = new double[idx];
ingo@565: for (int i = 0; i < justGood.length; i++) {
ingo@565: justGood[i] = good[i];
ingo@565: }
ingo@565:
ingo@565: if (!tmpErrors.isEmpty()) {
ingo@565: dap.setValues(justGood);
ingo@565:
ingo@565: errors.addAll(tmpErrors);
ingo@565: }
ingo@565: }
ingo@565:
ingo@565: return errors;
ingo@565: }
ingo@565:
ingo@565:
ingo@565: protected List validateQ() {
ingo@565: List errors = new ArrayList();
ingo@565: NumberFormat nf = NumberFormat.getDecimalFormat();
ingo@565:
ingo@565: Iterator iter = wqranges.keySet().iterator();
ingo@565:
ingo@565: while (iter.hasNext()) {
ingo@565: List tmpErrors = new ArrayList();
ingo@565:
ingo@565: String key = iter.next();
ingo@565: DoubleArrayPanel dap = wqranges.get(key);
ingo@602:
ingo@602: if (!dap.validateForm()) {
ingo@602: errors.add(MSG.error_invalid_double_value());
ingo@602: return errors;
ingo@602: }
ingo@602:
ingo@602: double[] mm = qranges.get(key);
ingo@602: if (mm == null) {
ingo@602: SC.warn(MSG.error_read_minmax_values());
ingo@602: continue;
ingo@602: }
ingo@565:
ingo@565: double[] values = dap.getInputValues();
ingo@565: double[] good = new double[values.length];
ingo@565:
ingo@565: int idx = 0;
ingo@565:
ingo@565: for (double value: values) {
ingo@565: if (value < mm[0] || value > mm[1]) {
ingo@565: String tmp = MSG.error_validate_range();
ingo@565: tmp = tmp.replace("$1", nf.format(value));
ingo@565: tmp = tmp.replace("$2", nf.format(mm[0]));
ingo@565: tmp = tmp.replace("$3", nf.format(mm[1]));
ingo@565: tmpErrors.add(tmp);
ingo@565: }
ingo@565: else {
ingo@565: good[idx++] = value;
ingo@565: }
ingo@565: }
ingo@565:
ingo@565: double[] justGood = new double[idx];
ingo@565: for (int i = 0; i < justGood.length; i++) {
ingo@565: justGood[i] = good[i];
ingo@565: }
ingo@565:
ingo@565: if (!tmpErrors.isEmpty()) {
ingo@565: dap.setValues(justGood);
ingo@565:
ingo@565: errors.addAll(tmpErrors);
ingo@565: }
ingo@565: }
ingo@565:
ingo@565: return errors;
ingo@565: }
ingo@565:
ingo@565:
ingo@519: protected void initUserDefaults(DataList dataList) {
ingo@519:
ingo@519: initUserWQValues(dataList);
ingo@519: initUserWQMode(dataList);
ingo@519: }
ingo@519:
ingo@519:
ingo@519: protected void initUserWQMode(DataList dataList) {
ingo@519: List allData = dataList.getAll();
ingo@519:
ingo@519: Data dDef = getData(allData, "wq_mode");
ingo@519: DataItem def = dDef != null ? dDef.getDefault() : null;
ingo@519: String value = def != null ? def.getStringValue() : null;
ingo@519:
ingo@617: if (value != null && value.equals(FIELD_WQ_W)) {
ingo@617: modes.setValue(FIELD_WQ_MODE, FIELD_WQ_W);
ingo@519: }
ingo@519: else {
ingo@617: modes.setValue(FIELD_WQ_MODE, FIELD_WQ_Q);
ingo@519: }
ingo@519: }
ingo@519:
ingo@519:
ingo@519: protected void initUserWQValues(DataList dataList) {
ingo@519: List allData = dataList.getAll();
ingo@519:
ingo@519: Data dDef = getData(allData, "wq_values");
ingo@519: DataItem def = dDef != null ? dDef.getDefault() : null;
ingo@519: String value = def != null ? def.getStringValue() : null;
ingo@519:
ingo@519: if (value == null || value.length() == 0) {
ingo@519: return;
ingo@519: }
ingo@519:
ingo@519: String[] lines = value.split(GAUGE_SEPARATOR);
ingo@519:
ingo@519: if (lines == null || lines.length == 0) {
ingo@519: return;
ingo@519: }
ingo@519:
ingo@519: for (String line: lines) {
ingo@519: String[] cols = line.split(GAUGE_PART_SEPARATOR);
ingo@519: String title = createLineTitle(line);
ingo@519:
ingo@519: if (cols == null || cols.length < 3) {
ingo@519: continue;
ingo@519: }
ingo@519:
ingo@519: String[] strValues = cols[2].split(VALUE_SEPARATOR);
ingo@519: double[] values = new double[strValues.length];
ingo@519:
ingo@519: int idx = 0;
ingo@519:
ingo@519: for (String strValue: strValues) {
ingo@519: try {
ingo@519: values[idx++] = Double.valueOf(strValue);
ingo@519: }
ingo@519: catch (NumberFormatException nfe) {
ingo@519: // do nothing
ingo@519: }
ingo@519: }
ingo@519:
ingo@519: String key = cols[0] + GAUGE_PART_SEPARATOR + cols[1];
ingo@519: DoubleArrayPanel dap = wqranges.get(key);
ingo@560:
ingo@560: if (dap == null) {
ingo@560: continue;
ingo@560: }
ingo@560:
ingo@519: dap.setValues(values);
ingo@519: }
ingo@519: }
ingo@519:
ingo@519:
ingo@255: protected Canvas createList(DataList dataList) {
ingo@255: VLayout layout = new VLayout();
ingo@255:
ingo@255: DataItem[] items = getWQItems(dataList);
ingo@255:
ingo@255: for (DataItem item: items) {
ingo@255: String title = item.getLabel();
ingo@255:
ingo@255: DoubleArrayPanel dap = new DoubleArrayPanel(
ingo@255: createLineTitle(title), null, this, TitleOrientation.LEFT);
ingo@255:
ingo@255: wqranges.put(title, dap);
ingo@565:
ingo@565: if (item instanceof WQDataItem) {
ingo@565: WQDataItem wq = (WQDataItem) item;
ingo@565: double[] mmQ = wq.getQRange();
ingo@565: double[] mmW = wq.getWRange();
ingo@565:
ingo@565: qranges.put(title, mmQ);
ingo@565: wranges.put(title, mmW);
ingo@565: }
ingo@565:
ingo@255: layout.addMember(dap);
ingo@255: }
ingo@255:
ingo@255: layout.setHeight(items.length * ROW_HEIGHT);
ingo@255:
ingo@255: return layout;
ingo@255: }
ingo@255:
ingo@255:
ingo@255: protected DataItem[] getWQItems(DataList dataList) {
ingo@246: List data = dataList.getAll();
ingo@246:
ingo@246: for (Data d: data) {
ingo@246: String name = d.getLabel();
ingo@246:
ingo@246: if (name.equals(FIELD_WQ_MODE)) {
ingo@246: continue;
ingo@246: }
ingo@246:
ingo@255: return d.getItems();
ingo@246: }
ingo@246:
ingo@255: return null;
ingo@255: }
ingo@255:
ingo@255:
ingo@255: protected Canvas createMode(DataList dataList) {
ingo@255: RadioGroupItem wq = new RadioGroupItem(FIELD_WQ_MODE);
ingo@255: wq.setShowTitle(false);
ingo@255: wq.setVertical(false);
ingo@255: wq.setWidth(200);
ingo@255:
ingo@255: LinkedHashMap wqValues = new LinkedHashMap();
ingo@255: wqValues.put(FIELD_WQ_W, MSG.wqW());
ingo@255: wqValues.put(FIELD_WQ_Q, MSG.wqQ());
ingo@255:
ingo@255: wq.setValueMap(wqValues);
ingo@255:
ingo@255: modes = new DynamicForm();
ingo@255: modes.setFields(wq);
ingo@255: modes.setWidth(200);
raimund@2456: wq.addChangeHandler(new ChangeHandler() {
raimund@2456: public void onChange(ChangeEvent e) {
raimund@2456: DynamicForm form = e.getForm();
raimund@2456:
raimund@2456: if(form.getValueAsString(FIELD_WQ_MODE).contains("Q")) {
raimund@2456: tabs.selectTab(0);
raimund@2456: }
raimund@2456: else {
raimund@2456: tabs.selectTab(1);
raimund@2456: }
raimund@2456: }
raimund@2456: });
raimund@2456:
ingo@255:
ingo@255: LinkedHashMap initial = new LinkedHashMap();
ingo@617: initial.put(FIELD_WQ_MODE, FIELD_WQ_Q);
ingo@255: modes.setValues(initial);
raimund@2456: tabs.selectTab(1);
ingo@255: return modes;
ingo@246: }
ingo@246:
ingo@246:
ingo@246: public String createLineTitle(String key) {
ingo@246: String[] splitted = key.split(";");
ingo@246:
ingo@246: return splitted[0] + " - " + splitted[1];
ingo@246: }
ingo@246:
ingo@246:
ingo@243: public Data[] getData() {
ingo@246: Data mode = getWQMode();
ingo@246: Data values = getWQValues();
ingo@243:
ingo@246: return new Data[] { mode, values };
ingo@246: }
ingo@246:
ingo@246:
ingo@565: public boolean isWMode() {
ingo@565: String mode = (String) modes.getValue(FIELD_WQ_MODE);
ingo@565:
ingo@565: return FIELD_WQ_W.equals(mode);
ingo@565: }
ingo@565:
ingo@565:
ingo@246: protected Data getWQMode() {
ingo@255: String wqMode = modes.getValueAsString(FIELD_WQ_MODE);
raimund@2428: String value = "false";
raimund@2428: if (wqMode.equals("Q")) {
raimund@2428: value = "true";
raimund@2428: }
raimund@2432: DataItem item = new DefaultDataItem("wq_isq", "wq_isq", value);
ingo@243: Data mode = new DefaultData(
raimund@2432: "wq_isq", null, null, new DataItem[] { item });
ingo@243:
ingo@246: return mode;
ingo@246: }
ingo@246:
ingo@246:
ingo@246: protected Data getWQValues() {
ingo@246: String wqvalue = null;
ingo@246:
ingo@246: Iterator iter = wqranges.keySet().iterator();
ingo@246: while (iter.hasNext()) {
ingo@246: String key = iter.next();
ingo@246: DoubleArrayPanel dap = wqranges.get(key);
ingo@246:
ingo@246: double[] values = dap.getInputValues();
ingo@246: if (wqvalue == null) {
ingo@246: wqvalue = createValueString(key, values);
ingo@246: }
ingo@246: else {
ingo@247: wqvalue += GAUGE_SEPARATOR + createValueString(key, values);
ingo@246: }
ingo@246: }
ingo@246:
ingo@243: DataItem valueItem = new DefaultDataItem(
ingo@246: "wq_values", "wq_values", wqvalue);
ingo@243: Data values = new DefaultData(
ingo@243: "wq_values", null, null, new DataItem[] { valueItem });
ingo@243:
ingo@246: return values;
ingo@246: }
ingo@246:
ingo@246:
ingo@246: protected String createValueString(String key, double[] values) {
ingo@246: StringBuilder sb = new StringBuilder();
ingo@246:
ingo@246: boolean first = true;
ingo@246:
ingo@246: for (double value: values) {
ingo@246: if (!first) {
ingo@246: sb.append(",");
ingo@246: }
ingo@246:
ingo@246: sb.append(Double.toString(value));
ingo@246:
ingo@246: first = false;
ingo@246: }
ingo@246:
ingo@246: return key + ";" + sb.toString();
ingo@243: }
ingo@243:
ingo@243:
ingo@243: public void onChange(ChangeEvent event) {
ingo@243: // TODO IMPLEMENT ME
ingo@243: }
ingo@243:
ingo@243:
ingo@243: public void onBlur(BlurEvent event) {
ingo@246: DoubleArrayPanel dap = (DoubleArrayPanel) event.getForm();
ingo@246: dap.validateForm(event.getItem());
ingo@243: }
raimund@2456:
raimund@2456:
raimund@2456: protected void fetchWQData() {
raimund@2456: Config config = Config.getInstance();
raimund@2456: String locale = config.getLocale ();
raimund@2456:
raimund@2456: ArtifactDescription adescr = artifact.getArtifactDescription();
raimund@2456: DataList[] data = adescr.getOldData();
raimund@2456:
raimund@2456: double[] mm = getMinMaxKM(data);
raimund@2456: String river = getRiverName(data);
raimund@2456:
raimund@2456: wqInfoService.getWQInfo(locale, river, mm[0], mm[0],
raimund@2456: new AsyncCallback() {
raimund@2456: public void onFailure(Throwable caught) {
raimund@2456: GWT.log("Could not recieve wq informations.");
raimund@2456: SC.warn(caught.getMessage());
raimund@2456: }
raimund@2456:
raimund@2456: public void onSuccess(WQInfoObject[] wqi) {
raimund@2456: int num = wqi != null ? wqi.length :0;
raimund@2456: GWT.log("Recieved " + num + " wq informations.");
raimund@2456:
raimund@2456: if (num == 0) {
raimund@2456: return;
raimund@2456: }
raimund@2456:
raimund@2456: addWQInfo(wqi);
raimund@2456:
raimund@2456: }
raimund@2456: }
raimund@2456: );
raimund@2456: }
raimund@2456:
raimund@2456:
raimund@2456: protected void addWQInfo (WQInfoObject[] wqi) {
raimund@2456: for(WQInfoObject wi: wqi) {
raimund@2456: WQInfoRecord rec = new WQInfoRecord(wi);
raimund@2456:
raimund@2456: if (wi.getType().equals("W")) {
raimund@2456: wTable.addData(rec);
raimund@2456: }
raimund@2456: else {
raimund@2456: qdTable.addData(rec);
raimund@2456: }
raimund@2456: }
raimund@2456: }
raimund@2456:
raimund@2456:
raimund@2456: /**
raimund@2456: * Determines the min and max kilometer value selected in a former state. A
raimund@2456: * bit silly, but we need to run over each value of the "old data" to find
raimund@2456: * such values because it is not available here.
raimund@2456: *
raimund@2456: * @param data The DataList which contains the whole data inserted for the
raimund@2456: * current artifact.
raimund@2456: *
raimund@2456: * @return a double array with [min, max].
raimund@2456: */
raimund@2456: protected double[] getMinMaxKM(DataList[] data) {
raimund@2456: ArtifactDescription adesc = artifact.getArtifactDescription();
raimund@2456: return adesc.getKMRange();
raimund@2456: }
raimund@2456:
raimund@2456:
raimund@2456: /**
raimund@2456: * Returns the name of the selected river.
raimund@2456: *
raimund@2456: * @param data The DataList with all data.
raimund@2456: *
raimund@2456: * @return the name of the current river.
raimund@2456: */
raimund@2456: protected String getRiverName(DataList[] data) {
raimund@2456: ArtifactDescription adesc = artifact.getArtifactDescription();
raimund@2456: return adesc.getRiver();
raimund@2456: }
raimund@2456:
raimund@2456:
raimund@2456: protected void updatePanels(boolean isQ) {
raimund@2456:
raimund@2456: }
raimund@2456:
raimund@2456:
ingo@243: }
ingo@243: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :