ingo@1528: package de.intevation.flys.client.client.ui;
ingo@1528:
ingo@1528: import java.util.ArrayList;
ingo@1528: import java.util.LinkedHashMap;
ingo@1528: import java.util.List;
ingo@1528:
ingo@1528: import com.google.gwt.core.client.GWT;
ingo@1528:
ingo@1528: import com.smartgwt.client.widgets.Canvas;
ingo@1528: import com.smartgwt.client.widgets.Label;
ingo@1528: import com.smartgwt.client.widgets.form.DynamicForm;
ingo@1528: import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
ingo@1528: import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
ingo@1528: import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
ingo@1528: import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
ingo@1528: import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
ingo@1556: import com.smartgwt.client.widgets.layout.HLayout;
ingo@1528: import com.smartgwt.client.widgets.layout.VLayout;
ingo@1528:
ingo@1528: import de.intevation.flys.client.shared.model.Data;
ingo@1528: import de.intevation.flys.client.shared.model.DataItem;
ingo@1528: import de.intevation.flys.client.shared.model.DataList;
ingo@1528: import de.intevation.flys.client.shared.model.DefaultData;
ingo@1528: import de.intevation.flys.client.shared.model.DefaultDataItem;
ingo@1528: import de.intevation.flys.client.shared.model.IntegerArrayData;
ingo@1528: import de.intevation.flys.client.shared.model.IntegerOptionsData;
ingo@1528: import de.intevation.flys.client.client.FLYSConstants;
ingo@1528:
ingo@1528:
ingo@1528: /**
ingo@1528: * An UIProvider for inserting a mode for W or Q and an array of values for each
ingo@1528: * mode.
ingo@1528: *
ingo@1528: * @author Ingo Weinzierl
ingo@1528: */
ingo@1528: public class WQSimpleArrayPanel
ingo@1528: extends AbstractUIProvider
ingo@1528: implements BlurHandler
ingo@1528: {
ingo@1528: public static final String FIELD_MODE = "field_mode";
ingo@1528: public static final String FIELD_VALUES = "field_values";
ingo@1528:
ingo@1528: public static final int MODE_W = 0;
ingo@1528:
ingo@1528: protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
ingo@1528:
ingo@1528: protected String modeName;
ingo@1528: protected String valuesName;
ingo@1528:
ingo@1528: protected Canvas valuesWrapper;
ingo@1528:
ingo@1528: protected DynamicForm modeForm;
ingo@1528: protected DoubleArrayPanel panelW;
ingo@1528: protected DoubleArrayPanel panelQ;
ingo@1528:
ingo@1528:
ingo@1528: @Override
ingo@1528: public Canvas create(DataList data) {
ingo@1528: VLayout rootLayout = new VLayout();
ingo@1528: rootLayout.addMember(createLabel(data));
ingo@1528: rootLayout.addMember(createModeForm(data));
ingo@1528: rootLayout.addMember(createValuesForm(data));
ingo@1528: rootLayout.addMember(getNextButton());
ingo@1528:
ingo@1528: initializeMode(data);
ingo@1528:
ingo@1528: return rootLayout;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: @Override
ingo@1556: public Canvas createOld(DataList dataList) {
ingo@1556: Data data = dataList.get(0);
ingo@1556: DataItem[] items = data.getItems();
ingo@1556:
ingo@1556: HLayout layout = new HLayout();
ingo@1556: VLayout valueContainer = new VLayout();
ingo@1556:
ingo@1556: Label label = new Label(dataList.getLabel());
ingo@1556: label.setWidth(200);
ingo@1556: label.setHeight(20);
ingo@1556:
ingo@1556: // TODO Display mode and selected values
ingo@1556: Label mode = new Label("TODO: IMPLEMENT MODE");
ingo@1556: mode.setHeight(20);
ingo@1556: mode.setWidth(150);
ingo@1556:
ingo@1556: Label values = new Label("TODO: IMPLEMENT VALUES");
ingo@1556: values.setHeight(20);
ingo@1556: values.setWidth(150);
ingo@1556:
ingo@1556: valueContainer.addMember(mode);
ingo@1556: valueContainer.addMember(values);
ingo@1556:
ingo@1556: layout.addMember(label);
ingo@1556: layout.addMember(valueContainer);
ingo@1556: layout.addMember(getBackButton(dataList.getState()));
ingo@1556:
ingo@1556: return layout;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: @Override
ingo@1528: protected Data[] getData() {
ingo@1528: Data mode = getModeAsData();
ingo@1528:
ingo@1528: if (getMode() == MODE_W) {
ingo@1528: return new Data[] { mode, getWValuesAsData() };
ingo@1528: }
ingo@1528: else {
ingo@1528: return new Data[] { mode, getQValuesAsData() };
ingo@1528: }
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: @Override
ingo@1528: public List validate() {
ingo@1528: List errors = new ArrayList();
ingo@1528:
ingo@1528: // TODO IMPLEMENT ME
ingo@1528:
ingo@1528: return errors;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: @Override
ingo@1528: public void onBlur(BlurEvent event) {
ingo@1528: // TODO TRIGGER VALIDATION HERE
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected void initializeMode(DataList dataList) {
ingo@1528: IntegerOptionsData data = findOptionsData(dataList);
ingo@1528: DataItem[] items = data != null ? data.getItems() : null;
ingo@1528:
ingo@1528: if (items != null) {
ingo@1528: String value = items[0].getStringValue();
ingo@1528: modeForm.setValue(modeName, value);
ingo@1528: switchMode(value);
ingo@1528: }
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected Canvas createLabel(DataList dataList) {
ingo@1528: Label label = new Label(MSG.wqHistorical());
ingo@1528: label.setWidth100();
ingo@1528: label.setHeight(25);
ingo@1528:
ingo@1528: return label;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected IntegerArrayData findValuesData(DataList dataList) {
ingo@1528: IntegerArrayData data = null;
ingo@1528:
ingo@1528: for (int i = 0, n = dataList.size(); i < n; i++) {
ingo@1528: Data tmp = dataList.get(i);
ingo@1528:
ingo@1528: if (tmp instanceof IntegerArrayData) {
ingo@1528: return (IntegerArrayData) tmp;
ingo@1528: }
ingo@1528: }
ingo@1528:
ingo@1528: return null;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected IntegerOptionsData findOptionsData(DataList dataList) {
ingo@1528: IntegerOptionsData data = null;
ingo@1528:
ingo@1528: for (int i = 0, n = dataList.size(); i < n; i++) {
ingo@1528: Data tmp = dataList.get(i);
ingo@1528:
ingo@1528: if (tmp instanceof IntegerOptionsData) {
ingo@1528: return (IntegerOptionsData) tmp;
ingo@1528: }
ingo@1528: }
ingo@1528:
ingo@1528: return null;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected Canvas createModeForm(DataList dataList) {
ingo@1528: IntegerOptionsData data = findOptionsData(dataList);
ingo@1528: DataItem[] opts = data != null ? data.getItems() : null;
ingo@1528:
ingo@1528: if (data == null || opts == null) {
ingo@1528: return new Label("NO MODES FOUND");
ingo@1528: }
ingo@1528:
ingo@1528: modeName = data.getLabel();
ingo@1528: modeForm = new DynamicForm();
ingo@1528:
ingo@1528: RadioGroupItem items = new RadioGroupItem(data.getLabel());
ingo@1528: LinkedHashMap values = new LinkedHashMap();
ingo@1528:
ingo@1528: for (DataItem opt: opts) {
ingo@1528: values.put(opt.getStringValue(), opt.getLabel());
ingo@1528: }
ingo@1528:
ingo@1528: items.setValueMap(values);
ingo@1528: items.setVertical(false);
ingo@1528: items.setShowTitle(false);
ingo@1528: items.addChangedHandler(new ChangedHandler() {
ingo@1528: @Override
ingo@1528: public void onChanged(ChangedEvent event) {
ingo@1528: switchMode((String) event.getValue());
ingo@1528: }
ingo@1528: });
ingo@1528:
ingo@1528: modeForm.setFields(items);
ingo@1528:
ingo@1528: return modeForm;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected Canvas createValuesForm(DataList dataList) {
ingo@1528: IntegerArrayData data = findValuesData(dataList);
ingo@1528:
ingo@1528: if (data == null) {
ingo@1528: return new Label("NO VALUES GIVEN!");
ingo@1528: }
ingo@1528:
ingo@1528: valuesName = data.getLabel();
ingo@1528: panelW = new DoubleArrayPanel(MSG.unitWSingle(), null, this);
ingo@1528: panelQ = new DoubleArrayPanel(MSG.unitQSingle(), null, this);
ingo@1528:
ingo@1528: valuesWrapper = new Canvas();
ingo@1528: valuesWrapper.setWidth100();
ingo@1528: valuesWrapper.setHeight(35);
ingo@1528:
ingo@1528: return valuesWrapper;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: public void switchMode(String newMode) {
ingo@1528: for (Canvas child: valuesWrapper.getChildren()) {
ingo@1528: valuesWrapper.removeChild(child);
ingo@1528: }
ingo@1528:
ingo@1528: if (newMode.equals("0")) {
ingo@1528: valuesWrapper.addChild(panelW);
ingo@1528: }
ingo@1528: else if (newMode.equals("1")) {
ingo@1528: valuesWrapper.addChild(panelQ);
ingo@1528: }
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: public String getModeAsString() {
ingo@1528: return (String) modeForm.getValue(modeName);
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: public int getMode() {
ingo@1528: String modeValue = getModeAsString();
ingo@1528:
ingo@1528: try {
ingo@1528: return Integer.valueOf(modeValue);
ingo@1528: }
ingo@1528: catch (NumberFormatException nfe) {
ingo@1528: // do something
ingo@1528: }
ingo@1528: catch (NullPointerException npe) {
ingo@1528: // do something
ingo@1528: }
ingo@1528:
ingo@1528: return -1;
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: public Data getModeAsData() {
ingo@1528: String value = getModeAsString();
ingo@1528: DataItem item = new DefaultDataItem(value, value, value);
ingo@1528:
ingo@1528: return new DefaultData(modeName, null, null, new DataItem[] { item });
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: public Data getWValuesAsData() {
ingo@1528: double[] values = panelW.getInputValues();
ingo@1528: String valueStr = getStringValue(values);
ingo@1528:
ingo@1528: DataItem item = new DefaultDataItem(valueStr, valueStr, valueStr);
ingo@1528:
ingo@1528: return new DefaultData(valuesName, null, null, new DataItem[] { item });
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: public Data getQValuesAsData() {
ingo@1528: double[] values = panelQ.getInputValues();
ingo@1528: String valueStr = getStringValue(values);
ingo@1528:
ingo@1528: DataItem item = new DefaultDataItem(valueStr, valueStr, valueStr);
ingo@1528:
ingo@1528: return new DefaultData(valuesName, null, null, new DataItem[] { item });
ingo@1528: }
ingo@1528:
ingo@1528:
ingo@1528: protected static String getStringValue(double[] values) {
ingo@1528: StringBuilder sb = new StringBuilder();
ingo@1528: boolean first = true;
ingo@1528:
ingo@1528: for (double value: values) {
ingo@1528: if (first) {
ingo@1528: sb.append(String.valueOf(value));
ingo@1528: first = false;
ingo@1528: }
ingo@1528: else {
ingo@1528: sb.append(";" + String.valueOf(value));
ingo@1528: }
ingo@1528: }
ingo@1528:
ingo@1528: return sb.toString();
ingo@1528: }
ingo@1528: }
ingo@1528: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :