ingo@243: package de.intevation.flys.client.client.ui; ingo@243: ingo@246: import java.util.HashMap; ingo@246: import java.util.Iterator; ingo@246: import java.util.List; ingo@246: import java.util.Map; ingo@246: ingo@243: import com.google.gwt.core.client.GWT; ingo@243: ingo@246: import com.smartgwt.client.types.TitleOrientation; ingo@247: import com.smartgwt.client.types.VerticalAlignment; ingo@243: import com.smartgwt.client.widgets.Canvas; ingo@243: import com.smartgwt.client.widgets.Label; 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; 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@243: ingo@246: import de.intevation.flys.client.client.FLYSConstants; 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: { ingo@246: public static final String FIELD_WQ_MODE = "wq_mode"; 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@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@246: ingo@246: ingo@243: public WQAdaptedInputPanel() { ingo@246: wqranges = new HashMap(); ingo@243: } ingo@243: ingo@243: ingo@243: public Canvas create(DataList data) { 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@243: ingo@246: layout.addMember(label); ingo@246: layout.addMember(widget); ingo@243: layout.addMember(submit); ingo@243: ingo@243: return layout; ingo@243: } ingo@243: ingo@243: ingo@243: public Canvas createOld(DataList dataList) { ingo@247: List all = dataList.getAll(); ingo@247: Data wqData = getData(all, "wq_values"); ingo@247: Data wqMode = getData(all, "wq_mode"); 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@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@246: DataItem[] items = d.getItems(); ingo@246: ingo@246: for (DataItem item: items) { ingo@246: String title = item.getLabel(); ingo@246: ingo@246: DoubleArrayPanel dap = new DoubleArrayPanel( ingo@246: createLineTitle(title), null, this, TitleOrientation.LEFT); ingo@246: ingo@246: wqranges.put(title, dap); ingo@246: ingo@246: layout.addMember(dap); ingo@246: } ingo@246: } ingo@246: ingo@246: return layout; 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@246: protected Data getWQMode() { ingo@246: // TODO Search for the correct value! ingo@246: DataItem item = new DefaultDataItem("wq_mode", "wq_mode", "q"); ingo@243: Data mode = new DefaultData( ingo@243: "wq_mode", 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: } ingo@243: } ingo@243: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :