ingo@2521: package de.intevation.flys.client.client.ui; ingo@2521: ingo@2521: import java.io.Serializable; ingo@2521: ingo@2521: import java.util.ArrayList; ingo@2521: import java.util.HashMap; ingo@2521: import java.util.List; ingo@2521: import java.util.Map; ingo@2521: ingo@2521: import com.google.gwt.core.client.GWT; ingo@2521: import com.google.gwt.user.client.ui.CheckBox; ingo@2521: import com.google.gwt.user.client.ui.Grid; ingo@2521: import com.google.gwt.user.client.ui.Widget; ingo@2521: import com.google.gwt.user.client.ui.ClickListener; ingo@2521: ingo@2521: import com.smartgwt.client.widgets.Label; ingo@2521: raimund@3705: import de.intevation.flys.client.client.FLYSConstants; ingo@2521: import de.intevation.flys.client.shared.model.DataItem; 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: public class ParameterMatrix { ingo@2521: ingo@2521: public static class Column implements Serializable { ingo@2521: protected String name; ingo@2521: protected Map values; ingo@2521: ingo@2521: private Column() { ingo@2521: this.values = new HashMap(); ingo@2521: } ingo@2521: ingo@2521: public Column(String name) { ingo@2521: this(); ingo@2521: this.name = name; ingo@2521: } ingo@2521: ingo@2521: public void addValue(String label, String value) { ingo@2521: values.put(label, value); ingo@2521: } ingo@2521: ingo@2521: public String getValue(String label) { ingo@2521: return values.get(label); ingo@2521: } ingo@2521: } // end of class Column ingo@2521: raimund@3705: /** The message class that provides i18n strings.*/ raimund@3705: protected FLYSConstants MESSAGE = GWT.create(FLYSConstants.class); ingo@2521: ingo@2521: public static final int CELL_HEIGHT = 25; ingo@2521: ingo@2521: private Map columns; ingo@2521: private List columnNames; ingo@2521: private List valueNames; ingo@2521: ingo@2521: private Map> selected; ingo@2521: ingo@2521: public ParameterMatrix() { ingo@2521: super(); ingo@2521: this.columns = new HashMap(); ingo@2521: this.columnNames = new ArrayList(); ingo@2521: this.valueNames = new ArrayList(); ingo@2521: this.selected = new HashMap>(); ingo@2521: } ingo@2521: ingo@2521: ingo@2521: public void addColumn(IntegerOptionsData group) { ingo@2521: String groupTitle = group.getLabel(); ingo@2521: ingo@2532: Column col = new Column(groupTitle); ingo@2532: DataItem[] items = group.getItems(); ingo@2532: ingo@2532: if (items == null) { ingo@2532: GWT.log("No items found in StringOptionsData '" + groupTitle + "'"); ingo@2532: return; ingo@2532: } ingo@2532: ingo@2532: for (DataItem item: items) { ingo@2532: String title = item.getLabel(); ingo@2532: ingo@2532: if (valueNames.indexOf(title) < 0) { ingo@2532: valueNames.add(title); ingo@2532: } ingo@2532: ingo@2532: col.addValue(item.getLabel(), item.getStringValue()); ingo@2532: } ingo@2532: ingo@2532: columnNames.add(groupTitle); ingo@2532: columns.put(groupTitle, col); ingo@2532: } ingo@2532: ingo@2532: ingo@2532: public void addColumn(StringOptionsData options) { ingo@2532: String groupTitle = options.getLabel(); ingo@2532: ingo@2532: Column col = new Column(groupTitle); ingo@2532: DataItem[] items = options.getItems(); ingo@2532: ingo@2532: if (items == null) { ingo@2532: GWT.log("No items found in StringOptionsData '" + groupTitle + "'"); ingo@2532: return; ingo@2532: } ingo@2532: ingo@2532: for (DataItem item: items) { ingo@2521: String title = item.getLabel(); ingo@2521: ingo@2521: if (valueNames.indexOf(title) < 0) { ingo@2521: valueNames.add(title); ingo@2521: } ingo@2521: ingo@2521: col.addValue(item.getLabel(), item.getStringValue()); ingo@2521: } ingo@2521: ingo@2521: columnNames.add(groupTitle); ingo@2521: columns.put(groupTitle, col); ingo@2521: } ingo@2521: ingo@2521: ingo@2521: public Widget create() { ingo@2521: Grid grid = new Grid(valueNames.size()+1, columnNames.size() + 1); ingo@2521: ingo@2521: for (int i = 0, n = columnNames.size(); i < n; i++) { ingo@2521: String columnName = columnNames.get(i); ingo@2521: Column col = columns.get(columnName); ingo@2521: ingo@2521: selected.put(columnName, new ArrayList()); ingo@2521: raimund@3705: grid.setWidget(0, i+1, createLabel(MESSAGE.getString(columnName))); ingo@2521: ingo@2521: for (int j = 0, o = valueNames.size(); j < o; j++) { ingo@2521: String valueName = valueNames.get(j); ingo@2521: String value = col.getValue(valueName); ingo@2521: ingo@2521: if (i == 0) { ingo@2521: grid.setWidget(j+1, 0, createLabel(valueName)); ingo@2521: } ingo@2521: ingo@2521: if (value != null && value.length() > 0) { ingo@2521: grid.setWidget(j+1, i+1, createWidget(columnName, value)); ingo@2521: } ingo@2521: } ingo@2521: } ingo@2521: ingo@2521: return grid; ingo@2521: } ingo@2521: ingo@2521: ingo@2521: protected Label createLabel(String text) { ingo@2521: Label label = new Label(text); ingo@2521: label.setHeight(CELL_HEIGHT); ingo@2521: ingo@2521: return label; ingo@2521: } ingo@2521: ingo@2521: ingo@2521: protected CheckBox createWidget(final String colName, final String value) { ingo@2521: CheckBox box = new CheckBox(); ingo@2521: box.addClickListener(new ClickListener() { ingo@2521: @Override ingo@2521: public void onClick(Widget sender) { ingo@2521: CheckBox box = (CheckBox) sender; ingo@2521: Map> selection = getSelection(); ingo@2521: ingo@2521: List values = selection.get(colName); ingo@2521: if (values.indexOf(value) >= 0) { ingo@2521: values.remove(value); ingo@2521: } ingo@2521: else { ingo@2521: values.add(value); ingo@2521: } ingo@2521: } ingo@2521: }); ingo@2521: ingo@2521: return box; ingo@2521: } ingo@2521: ingo@2521: ingo@2521: public Map> getSelection() { ingo@2521: return selected; ingo@2521: } ingo@2521: } ingo@2521: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :