comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/SelectProvider.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-client/src/main/java/org/dive4elements/river/client/client/ui/SelectProvider.java@821a02bbfb4e
children 172338b1407f
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
1 package org.dive4elements.river.client.client.ui;
2
3 import com.google.gwt.core.client.GWT;
4 import com.smartgwt.client.types.VerticalAlignment;
5 import com.smartgwt.client.widgets.Canvas;
6 import com.smartgwt.client.widgets.Label;
7 import com.smartgwt.client.widgets.form.DynamicForm;
8 import com.smartgwt.client.widgets.form.fields.FormItem;
9 import com.smartgwt.client.widgets.form.fields.LinkItem;
10 import com.smartgwt.client.widgets.form.fields.SelectItem;
11 import com.smartgwt.client.widgets.form.fields.SpacerItem;
12 import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
13 import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
14 import com.smartgwt.client.widgets.layout.HLayout;
15 import com.smartgwt.client.widgets.layout.VLayout;
16
17 import org.dive4elements.river.client.client.FLYSConstants;
18 import org.dive4elements.river.client.client.event.StepForwardEvent;
19 import org.dive4elements.river.client.shared.model.Data;
20 import org.dive4elements.river.client.shared.model.DataItem;
21 import org.dive4elements.river.client.shared.model.DataList;
22 import org.dive4elements.river.client.shared.model.DefaultData;
23 import org.dive4elements.river.client.shared.model.DefaultDataItem;
24
25 import java.util.ArrayList;
26 import java.util.Iterator;
27 import java.util.LinkedHashMap;
28 import java.util.Map;
29
30
31 /**
32 * This UIProvider displays the DataItems of the Data object in a combo box.
33 *
34 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
35 */
36 public class SelectProvider
37 extends AbstractUIProvider
38 {
39 private static final long serialVersionUID = 4696637534424070726L;
40
41 /** The message class that provides i18n strings.*/
42 protected FLYSConstants messages = GWT.create(FLYSConstants.class);
43
44 /** The combobox.*/
45 protected DynamicForm form = new DynamicForm();
46
47 public static final int COMBOBOX_THRESHOLD = 20;
48
49
50 /**
51 * This method currently returns a
52 * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all
53 * data items in a combobox stored in <i>data</i>.
54 *
55 * @param data The {@link Data} object.
56 *
57 * @return a combobox.
58 */
59 @Override
60 public Canvas create(DataList data) {
61 VLayout v = new VLayout();
62 v.setMembersMargin(10);
63 v.addMember(createWidget(data));
64 if(data.size() > COMBOBOX_THRESHOLD) {
65 v.addMember(getNextButton());
66 }
67 return v;
68 }
69
70
71 protected Canvas createWidget(DataList data) {
72 if (data.size() > COMBOBOX_THRESHOLD) {
73 return createComboboxWidget(data);
74 }
75 else {
76 return createListWidget(data);
77 }
78 }
79
80
81 @Override
82 public Canvas createOld(DataList dataList) {
83 HLayout layout = new HLayout();
84 VLayout vLayout = new VLayout();
85 layout.setWidth("400px");
86
87 Label label = new Label(dataList.getLabel());
88 label.setWidth("200px");
89
90 int size = dataList.size();
91 for (int i = 0; i < size; i++) {
92 Data data = dataList.get(i);
93 DataItem[] items = data.getItems();
94
95 for (DataItem item: items) {
96 HLayout hLayout = new HLayout();
97
98 hLayout.addMember(label);
99 hLayout.addMember(new Label(item.getLabel()));
100
101 vLayout.addMember(hLayout);
102 vLayout.setWidth("130px");
103 }
104 }
105
106 Canvas back = getBackButton(dataList.getState());
107
108 layout.addMember(label);
109 layout.addMember(vLayout);
110 layout.addMember(back);
111
112 return layout;
113 }
114
115
116 protected Canvas createListWidget(DataList data) {
117 VLayout layout = new VLayout();
118 layout.setAlign(VerticalAlignment.TOP);
119 layout.setHeight(25);
120 layout.setWidth("100%");
121
122 VLayout formLayout = new VLayout();
123 formLayout.setLayoutTopMargin(20);
124 formLayout.setLayoutLeftMargin(50);
125
126 ClickHandler handler = new ClickHandler() {
127 @Override
128 public void onClick(ClickEvent event) {
129 LinkItem li = (LinkItem)event.getItem();
130 String attr = li.getAttribute(li.getName());
131 GWT.log("li.getTarget: " + attr + " " + li.getName());
132 DataItem item = new DefaultDataItem(
133 attr,
134 null,
135 attr);
136
137 Data d = new DefaultData(
138 li.getName(),
139 null,
140 null,
141 new DataItem [] { item });
142
143 Data [] odata = getData();
144 Data [] ndata = new Data[odata.length+1];
145 System.arraycopy(odata, 0, ndata, 0, odata.length);
146 ndata[odata.length] = d;
147
148 fireStepForwardEvent(new StepForwardEvent(ndata));
149 }
150 };
151
152 for (int i = 0, size = data.size(); i < size; i++) {
153 Data d = data.get(i);
154
155 Label label = new Label(d.getDescription());
156 label.setValign(VerticalAlignment.TOP);
157 label.setHeight(20);
158 label.setWidth(400);
159
160 LinkedHashMap<String, String> initial = new LinkedHashMap<String, String>();
161 ArrayList<FormItem> formItems = new ArrayList<FormItem>();
162
163 for (DataItem item: d.getItems()) {
164 initial.put(item.getLabel().replace(' ', '_'), item.getStringValue());
165 GWT.log("put: " + item.getLabel().replace(' ', '_') + "=" + item.getStringValue());
166
167 LinkItem link = new LinkItem(d.getLabel());
168 link.setLinkTitle(item.getLabel()); // i18n text of the link
169 link.setAttribute(d.getLabel(), item.getStringValue()); // e.g. "calculation_mode":"foo"
170 link.setShowTitle(false);
171 link.setEndRow(true);
172 link.setWidth("350px");
173
174 SpacerItem space = new SpacerItem();
175 space.setWidth(15);
176 formItems.add(space);
177 formItems.add(link);
178
179 link.addClickHandler(handler);
180 }
181
182 form.setFields(formItems.toArray(new FormItem[0]));
183 form.setValues(initial);
184
185 layout.addMember(label);
186 layout.addMember(form);
187 }
188 return layout;
189 }
190
191 protected Canvas createComboboxWidget(DataList data) {
192 GWT.log("SelectProvider.createComboboxWidget()");
193
194 VLayout layout = new VLayout();
195 layout.setAlign(VerticalAlignment.TOP);
196 layout.setHeight(25);
197
198 LinkedHashMap<String, String> initial = new LinkedHashMap<String, String>();
199
200 int size = data.size();
201
202 for (int i = 0; i < size; i++) {
203 Data d = data.get(i);
204
205 Label label = new Label(d.getDescription());
206 label.setValign(VerticalAlignment.TOP);
207 label.setHeight(20);
208 label.setWidth(400);
209
210 SelectItem combobox = new SelectItem(d.getLabel());
211 combobox.setWidth(250);
212
213 LinkedHashMap<String, String> it = new LinkedHashMap<String, String>();
214
215 boolean defaultSet = false;
216 boolean first = true;
217
218 DataItem def = d.getDefault();
219 String defValue = def != null ? def.getStringValue() : null;
220
221 if (defValue != null && defValue.length() > 0) {
222 initial.put(d.getLabel(), def.getStringValue());
223 defaultSet = true;
224 }
225
226 for (DataItem item: d.getItems()) {
227 if (!defaultSet && first) {
228 initial.put(d.getLabel(), item.getStringValue());
229 first = false;
230 }
231
232 it.put(item.getStringValue(), item.getLabel());
233 }
234
235 label.setWidth(50);
236 combobox.setValueMap(it);
237 combobox.setShowTitle(false);
238 form.setItems(combobox);
239
240 layout.addMember(label);
241 layout.addMember(form);
242 }
243
244 form.setValues(initial);
245
246 layout.setAlign(VerticalAlignment.TOP);
247
248 return layout;
249 }
250
251
252 @Override
253 protected Data[] getData() {
254 Map<?,?> values = form.getValues();
255 Iterator<?> keys = values.keySet().iterator();
256
257 Data[] list = new Data[values.size()];
258 int i = 0;
259
260 while (keys.hasNext()) {
261 String fieldname = ((String) keys.next()).replace('_', ' ');
262 String selection = (String) values.get(fieldname);
263
264 DataItem item = new DefaultDataItem(fieldname, null, selection);
265
266 list[i++] = new DefaultData(
267 fieldname, null, null, new DataItem[] { item });
268 }
269
270 return list;
271 }
272 }
273 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org