ingo@2521: package de.intevation.flys.client.client.ui; ingo@2521: felix@3994: import java.util.ArrayList; ingo@2525: import java.util.List; ingo@2525: import java.util.Map; ingo@2525: import java.util.Set; ingo@2525: felix@3994: import com.google.gwt.core.client.GWT; felix@3994: felix@3850: import com.google.gwt.user.client.ui.HTML; felix@3850: ingo@2521: import com.smartgwt.client.widgets.Canvas; ingo@2521: import com.smartgwt.client.widgets.Label; ingo@2528: import com.smartgwt.client.widgets.layout.HLayout; ingo@2521: import com.smartgwt.client.widgets.layout.VLayout; ingo@2521: bjoern@4003: import de.intevation.flys.client.client.FLYSConstants; ingo@2521: import de.intevation.flys.client.shared.model.Data; ingo@2521: import de.intevation.flys.client.shared.model.DataItem; ingo@2521: import de.intevation.flys.client.shared.model.DataList; ingo@2525: import de.intevation.flys.client.shared.model.DefaultData; ingo@2525: import de.intevation.flys.client.shared.model.DefaultDataItem; ingo@2521: import de.intevation.flys.client.shared.model.IntegerOptionsData; ingo@2532: import de.intevation.flys.client.shared.model.StringOptionsData; ingo@2521: ingo@2521: /** ingo@2521: * @author Ingo Weinzierl ingo@2521: */ ingo@2521: public class ParameterMatrixPanel extends AbstractUIProvider { ingo@2521: felix@3994: /** The message class that provides i18n strings. */ felix@3994: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); felix@3994: ingo@2525: private ParameterMatrix matrix; ingo@2525: ingo@2521: @Override ingo@2521: protected Data[] getData() { ingo@2525: Map> selection = matrix.getSelection(); ingo@2525: Set>> entries = selection.entrySet(); ingo@2525: ingo@2525: Data[] list = new Data[selection.size()]; ingo@2525: ingo@2525: int i = 0; ingo@2525: ingo@2525: for (Map.Entry> entry: entries) { ingo@2525: String value = buildValueString(entry.getValue()); ingo@2525: ingo@2525: DataItem item = new DefaultDataItem( ingo@2525: entry.getKey(), ingo@2525: null, ingo@2525: value); ingo@2525: ingo@2525: list[i++] = new DefaultData( ingo@2525: entry.getKey(), null, null, new DataItem[] { item }); ingo@2525: } ingo@2525: ingo@2525: return list; ingo@2521: } ingo@2521: ingo@2525: ingo@2525: protected String buildValueString(List values) { ingo@2525: StringBuilder sb = new StringBuilder(); ingo@2525: ingo@2525: boolean first = true; ingo@2525: ingo@2525: for (String value: values) { ingo@2525: if (!first) { ingo@2525: sb.append(";"); ingo@2525: } ingo@2525: ingo@2525: sb.append(value); ingo@2525: ingo@2525: first = false; ingo@2525: } ingo@2525: ingo@2525: return sb.toString(); ingo@2525: } ingo@2525: ingo@2525: felix@3850: /** Canvas to show in non-edit mode. */ ingo@2521: @Override ingo@2521: public Canvas createOld(DataList dataList) { ingo@2528: HLayout layout = new HLayout(); ingo@2528: VLayout vLayout = new VLayout(); ingo@2528: ingo@2528: layout.setWidth(300); ingo@2528: vLayout.setWidth(280); ingo@2528: ingo@2528: for (int i = 0, n = dataList.size(); i < n; i++) { ingo@2528: HLayout row = new HLayout(); ingo@2528: VLayout cols = new VLayout(); ingo@2528: ingo@2528: row.setWidth(300); ingo@2528: cols.setWidth(100); ingo@2528: ingo@2528: Data data = dataList.get(i); ingo@2528: DataItem[] items = data.getItems(); ingo@2528: ingo@2528: Label parameter = new Label(data.getDescription()); ingo@2528: parameter.setWidth(200); ingo@2528: ingo@2532: for (int j = 0, m = items.length; j < m; j++) { ingo@2528: DataItem item = items[j]; ingo@2528: Label value = new Label(item.getLabel()); ingo@2528: ingo@2528: value.setValign(com.smartgwt.client.types.VerticalAlignment.TOP); ingo@2528: value.setWidth(130); ingo@2528: value.setHeight(20); ingo@2528: ingo@2528: cols.addMember(value); felix@3850: HTML hr = new HTML("
"); felix@3850: hr.setHeight("3px"); felix@3850: cols.addMember(hr); ingo@2528: } ingo@2528: ingo@2528: row.addMember(parameter); ingo@2528: row.addMember(cols); ingo@2528: ingo@2528: vLayout.addMember(row); ingo@2528: } ingo@2528: ingo@2528: Canvas back = getBackButton(dataList.getState()); ingo@2528: ingo@2528: layout.addMember(vLayout); ingo@2528: layout.addMember(back); ingo@2528: ingo@2528: return layout; ingo@2521: } ingo@2521: felix@3853: felix@3853: /** Create the main canvas in the "editing" mode. */ ingo@2521: @Override ingo@2521: public Canvas create(DataList dataList) { ingo@2521: VLayout v = new VLayout(); ingo@2521: v.addMember(createTitle(dataList)); ingo@2521: ingo@2525: matrix = new ParameterMatrix(); ingo@2521: ingo@2521: for (Data data: dataList.getAll()) { ingo@2521: if (data instanceof IntegerOptionsData) { ingo@2521: matrix.addColumn((IntegerOptionsData) data); ingo@2521: } ingo@2532: else if (data instanceof StringOptionsData) { ingo@2532: matrix.addColumn((StringOptionsData) data); ingo@2532: } ingo@2521: } ingo@2521: felix@3853: // If too many items are shown, show it in the helper Panel. felix@3854: // TODO its not about the datalist, but about the "rows" in the data. felix@3853: if (dataList.getAll().size() > 5) { felix@3854: v.addMember(matrix.create(false)); felix@3853: } felix@3853: else { felix@3854: helperContainer.addMember(matrix.create(true)); felix@3853: } ingo@2525: v.addMember(getNextButton()); ingo@2521: ingo@2521: return v; ingo@2521: } ingo@2521: ingo@2521: felix@3853: /** Reaturns a label with description of first Data. */ ingo@2521: protected Canvas createTitle(DataList dataList) { ingo@3710: Data data = dataList.get(0); ingo@3710: Label label = new Label(data.getDescription()); ingo@2521: label.setHeight(35); ingo@2521: ingo@2521: return label; ingo@2521: } felix@3994: felix@3994: felix@3994: /** Selection shall not be empty. */ felix@3994: @Override felix@3994: public List validate() { felix@3994: GWT.log ("validation. validation. validation. "); felix@3994: List errors = new ArrayList(); felix@3994: // Early stop on one (only) error. felix@3994: for (Map.Entry> entry : matrix.getSelection().entrySet()) { felix@3994: if (entry.getValue() == null || entry.getValue().size() == 0) { felix@3994: errors.add(MESSAGES.error_values_needed()); felix@3994: return errors; felix@3994: } felix@3994: } felix@3994: return errors; felix@3994: } ingo@2521: } ingo@2521: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :