comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9078:fc02833dbcc1

SingleInputItem abstract
author gernotbelger
date Tue, 22 May 2018 17:44:05 +0200
parents
children aafae1ab25f0
comparison
equal deleted inserted replaced
9077:2b13de1b0897 9078:fc02833dbcc1
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
2 * Software engineering by
3 * Björnsen Beratende Ingenieure GmbH
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
5 *
6 * This file is Free Software under the GNU AGPL (>=v3)
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
8 * documentation coming with Dive4Elements River for details.
9 */
10 package org.dive4elements.river.client.client.ui;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler;
16 import org.dive4elements.river.client.shared.model.Data;
17 import org.dive4elements.river.client.shared.model.DataItem;
18 import org.dive4elements.river.client.shared.model.DataList;
19 import org.dive4elements.river.client.shared.model.DefaultData;
20 import org.dive4elements.river.client.shared.model.DefaultDataItem;
21
22 import com.smartgwt.client.widgets.Canvas;
23 import com.smartgwt.client.widgets.Label;
24 import com.smartgwt.client.widgets.form.DynamicForm;
25 import com.smartgwt.client.widgets.form.fields.TextItem;
26 import com.smartgwt.client.widgets.form.validator.IsIntegerValidator;
27 import com.smartgwt.client.widgets.grid.ListGrid;
28 import com.smartgwt.client.widgets.layout.HLayout;
29 import com.smartgwt.client.widgets.layout.VLayout;
30
31 /**
32 * @author Domenico Nardi Tironi
33 *
34 */
35 public abstract class AbstractSingleItemPanel extends AbstractUIProvider {
36
37 protected static final String FORM_ID = "FORM_ID";
38
39 protected TextItem inputItem;
40
41 protected List<String> validInputs = new ArrayList<String>();
42
43 protected ListGrid table;
44
45 protected abstract String getDatakey();
46
47 protected abstract void appendValue(final String value);
48
49 protected abstract boolean getTitleVisible();
50
51 protected abstract String errorForItemMsg();
52
53 @Override
54 public Canvas create(final DataList data) {
55 final VLayout layout = new VLayout();
56 final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class
57
58 @Override
59 public void columnClicked(final String value) {
60 appendValue(value);
61 }
62 };
63
64 final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, getDatakey(), this.MSG, fromHandler, null);
65 final Canvas table = helper.getTable();
66 this.validInputs = helper.getKeycolEntries();
67
68 this.helperContainer.addMember(table);
69
70 final Canvas submit = getNextButton();
71 final Canvas widget = createWidget(data);
72
73 layout.addMember(widget);
74 layout.addMember(submit);
75
76 return layout;
77 }
78
79 public Canvas createWidget(final DataList data) {
80 final VLayout layout = new VLayout();
81
82 final Label title = new Label(data.get(0).getDescription());
83 title.setHeight("25px");
84
85 final DynamicForm form = new DynamicForm();
86 form.setID(FORM_ID);
87 form.setNumCols(4);
88 this.inputItem = new TextItem(this.MSG.years());
89 this.inputItem.setShowTitle(getTitleVisible());
90 this.inputItem.setValidators(new IsIntegerValidator()); // TODO: validator to be overriden...
91 form.setFields(this.inputItem);
92
93 layout.addMember(title);
94 layout.addMember(form);
95
96 return layout;
97 }
98
99 @Override
100 public Canvas createOld(final DataList dataList) {
101 final List<Data> items = dataList.getAll();
102 final Data years = getData(items, getDatakey());
103 final DataItem[] yearsItems = years.getItems();
104
105 final String v1 = yearsItems[0].getStringValue().replace(" ", ", ");
106
107 final Label old = new Label(v1);
108 final HLayout layout = new HLayout();
109 layout.setWidth("400px");
110
111 final Label label = new Label(dataList.getLabel());
112 label.setWidth("200px");
113
114 final Canvas back = getBackButton(dataList.getState());
115
116 layout.addMember(label);
117 layout.addMember(old);
118 layout.addMember(back);
119
120 return layout;
121 }
122
123 @Override
124 public List<String> validate() {
125 final List<String> errors = new ArrayList<String>();
126
127 if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) {
128 errors.add(this.MSG.empty_filter());
129 return errors;
130 }
131 final String sValue = this.inputItem.getValueAsString();
132 String filtered = "";
133 int goodValues = 0;
134
135 int value = 0;
136 try {
137 value = Integer.parseInt(sValue);
138 }
139 catch (final NumberFormatException e) {
140 errors.add(this.MSG.wrongFormat() + ": " + sValue);
141
142 }
143 boolean isGood = false;
144 for (final String validYear : this.validInputs) {
145 /* No list contains for strings? */
146 if (sValue.equals(validYear)) {
147 isGood = true;
148 break;
149 }
150 }
151 if (!isGood) {
152 String tmp = errorForItemMsg();
153 tmp = tmp.replace("$1", sValue);
154 errors.add(tmp);
155 // continue;
156 }
157 goodValues++;
158 if (goodValues > 1) {
159 filtered += " " + Integer.toString(value);
160 } else {
161 filtered = Integer.toString(value);
162 }
163
164 return errors;
165 }
166
167 @Override
168 protected Data[] getData() {
169 final List<String> errors = this.validate();
170 if (errors.size() > 0) {
171 showErrors(errors); // TODO: do not allow advance state
172 // return null;
173 }
174 if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) {
175 final List<Data> data = new ArrayList<Data>();
176
177 final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim());
178 data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata }));
179
180 return data.toArray(new Data[data.size()]);
181 }
182 return new Data[0];
183 }
184
185 }

http://dive4elements.wald.intevation.org