comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/WQSimpleArrayPanel.java @ 1528:ff41405a891d

Added a new widget to simply insert a WQ mode and values as array. flys-client/trunk@3726 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 19 Jan 2012 17:03:38 +0000
parents
children e91f87b2524e
comparison
equal deleted inserted replaced
1527:252c22237fe7 1528:ff41405a891d
1 package de.intevation.flys.client.client.ui;
2
3 import java.util.ArrayList;
4 import java.util.LinkedHashMap;
5 import java.util.List;
6
7 import com.google.gwt.core.client.GWT;
8
9 import com.smartgwt.client.widgets.Canvas;
10 import com.smartgwt.client.widgets.Label;
11 import com.smartgwt.client.widgets.form.DynamicForm;
12 import com.smartgwt.client.widgets.form.fields.FormItem;
13 import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
14 import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
15 import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
16 import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
17 import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
18 import com.smartgwt.client.widgets.layout.VLayout;
19
20 import de.intevation.flys.client.shared.model.Data;
21 import de.intevation.flys.client.shared.model.DataItem;
22 import de.intevation.flys.client.shared.model.DataList;
23 import de.intevation.flys.client.shared.model.DefaultData;
24 import de.intevation.flys.client.shared.model.DefaultDataItem;
25 import de.intevation.flys.client.shared.model.IntegerArrayData;
26 import de.intevation.flys.client.shared.model.IntegerOptionsData;
27 import de.intevation.flys.client.client.FLYSConstants;
28
29
30 /**
31 * An UIProvider for inserting a mode for W or Q and an array of values for each
32 * mode.
33 *
34 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
35 */
36 public class WQSimpleArrayPanel
37 extends AbstractUIProvider
38 implements BlurHandler
39 {
40 public static final String FIELD_MODE = "field_mode";
41 public static final String FIELD_VALUES = "field_values";
42
43 public static final int MODE_W = 0;
44
45 protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
46
47 protected String modeName;
48 protected String valuesName;
49
50 protected Canvas valuesWrapper;
51
52 protected DynamicForm modeForm;
53 protected DoubleArrayPanel panelW;
54 protected DoubleArrayPanel panelQ;
55
56
57 @Override
58 public Canvas create(DataList data) {
59 VLayout rootLayout = new VLayout();
60 rootLayout.addMember(createLabel(data));
61 rootLayout.addMember(createModeForm(data));
62 rootLayout.addMember(createValuesForm(data));
63 rootLayout.addMember(getNextButton());
64
65 initializeMode(data);
66
67 return rootLayout;
68 }
69
70
71 @Override
72 public Canvas createOld(DataList data) {
73 // TODO IMPLEMENT ME
74 return new Canvas();
75 }
76
77
78 @Override
79 protected Data[] getData() {
80 Data mode = getModeAsData();
81
82 if (getMode() == MODE_W) {
83 return new Data[] { mode, getWValuesAsData() };
84 }
85 else {
86 return new Data[] { mode, getQValuesAsData() };
87 }
88 }
89
90
91 @Override
92 public List<String> validate() {
93 List<String> errors = new ArrayList<String>();
94
95 // TODO IMPLEMENT ME
96
97 return errors;
98 }
99
100
101 @Override
102 public void onBlur(BlurEvent event) {
103 // TODO TRIGGER VALIDATION HERE
104 }
105
106
107 protected void initializeMode(DataList dataList) {
108 IntegerOptionsData data = findOptionsData(dataList);
109 DataItem[] items = data != null ? data.getItems() : null;
110
111 if (items != null) {
112 String value = items[0].getStringValue();
113 modeForm.setValue(modeName, value);
114 switchMode(value);
115 }
116 }
117
118
119 protected Canvas createLabel(DataList dataList) {
120 Label label = new Label(MSG.wqHistorical());
121 label.setWidth100();
122 label.setHeight(25);
123
124 return label;
125 }
126
127
128 protected IntegerArrayData findValuesData(DataList dataList) {
129 IntegerArrayData data = null;
130
131 for (int i = 0, n = dataList.size(); i < n; i++) {
132 Data tmp = dataList.get(i);
133
134 if (tmp instanceof IntegerArrayData) {
135 return (IntegerArrayData) tmp;
136 }
137 }
138
139 return null;
140 }
141
142
143 protected IntegerOptionsData findOptionsData(DataList dataList) {
144 IntegerOptionsData data = null;
145
146 for (int i = 0, n = dataList.size(); i < n; i++) {
147 Data tmp = dataList.get(i);
148
149 if (tmp instanceof IntegerOptionsData) {
150 return (IntegerOptionsData) tmp;
151 }
152 }
153
154 return null;
155 }
156
157
158 protected Canvas createModeForm(DataList dataList) {
159 IntegerOptionsData data = findOptionsData(dataList);
160 DataItem[] opts = data != null ? data.getItems() : null;
161
162 if (data == null || opts == null) {
163 return new Label("NO MODES FOUND");
164 }
165
166 modeName = data.getLabel();
167 modeForm = new DynamicForm();
168
169 RadioGroupItem items = new RadioGroupItem(data.getLabel());
170 LinkedHashMap values = new LinkedHashMap();
171
172 for (DataItem opt: opts) {
173 values.put(opt.getStringValue(), opt.getLabel());
174 }
175
176 items.setValueMap(values);
177 items.setVertical(false);
178 items.setShowTitle(false);
179 items.addChangedHandler(new ChangedHandler() {
180 @Override
181 public void onChanged(ChangedEvent event) {
182 switchMode((String) event.getValue());
183 }
184 });
185
186 modeForm.setFields(items);
187
188 return modeForm;
189 }
190
191
192 protected Canvas createValuesForm(DataList dataList) {
193 IntegerArrayData data = findValuesData(dataList);
194
195 if (data == null) {
196 return new Label("NO VALUES GIVEN!");
197 }
198
199 valuesName = data.getLabel();
200 panelW = new DoubleArrayPanel(MSG.unitWSingle(), null, this);
201 panelQ = new DoubleArrayPanel(MSG.unitQSingle(), null, this);
202
203 valuesWrapper = new Canvas();
204 valuesWrapper.setWidth100();
205 valuesWrapper.setHeight(35);
206
207 return valuesWrapper;
208 }
209
210
211 public void switchMode(String newMode) {
212 for (Canvas child: valuesWrapper.getChildren()) {
213 valuesWrapper.removeChild(child);
214 }
215
216 if (newMode.equals("0")) {
217 valuesWrapper.addChild(panelW);
218 }
219 else if (newMode.equals("1")) {
220 valuesWrapper.addChild(panelQ);
221 }
222 }
223
224
225 public String getModeAsString() {
226 return (String) modeForm.getValue(modeName);
227 }
228
229
230 public int getMode() {
231 String modeValue = getModeAsString();
232
233 try {
234 return Integer.valueOf(modeValue);
235 }
236 catch (NumberFormatException nfe) {
237 // do something
238 }
239 catch (NullPointerException npe) {
240 // do something
241 }
242
243 return -1;
244 }
245
246
247 public Data getModeAsData() {
248 String value = getModeAsString();
249 DataItem item = new DefaultDataItem(value, value, value);
250
251 return new DefaultData(modeName, null, null, new DataItem[] { item });
252 }
253
254
255 public Data getWValuesAsData() {
256 double[] values = panelW.getInputValues();
257 String valueStr = getStringValue(values);
258
259 DataItem item = new DefaultDataItem(valueStr, valueStr, valueStr);
260
261 return new DefaultData(valuesName, null, null, new DataItem[] { item });
262 }
263
264
265 public Data getQValuesAsData() {
266 double[] values = panelQ.getInputValues();
267 String valueStr = getStringValue(values);
268
269 DataItem item = new DefaultDataItem(valueStr, valueStr, valueStr);
270
271 return new DefaultData(valuesName, null, null, new DataItem[] { item });
272 }
273
274
275 protected static String getStringValue(double[] values) {
276 StringBuilder sb = new StringBuilder();
277 boolean first = true;
278
279 for (double value: values) {
280 if (first) {
281 sb.append(String.valueOf(value));
282 first = false;
283 }
284 else {
285 sb.append(";" + String.valueOf(value));
286 }
287 }
288
289 return sb.toString();
290 }
291 }
292 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org