ingo@243: package de.intevation.flys.client.client.ui; ingo@243: 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@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@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; 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@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: 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@255: /** The RadioGroupItem that determines the w/q input mode.*/ ingo@255: protected DynamicForm modes; ingo@255: 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@255: layout.setWidth(350); 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@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@255: return layout; ingo@255: } ingo@255: ingo@255: 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@255: 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); ingo@255: ingo@255: LinkedHashMap initial = new LinkedHashMap(); ingo@255: initial.put(FIELD_WQ_MODE, FIELD_WQ_W); ingo@255: modes.setValues(initial); ingo@255: 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@246: protected Data getWQMode() { ingo@255: String wqMode = modes.getValueAsString(FIELD_WQ_MODE); ingo@255: DataItem item = new DefaultDataItem("wq_mode", "wq_mode", wqMode); 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 :