9267
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
|
2 * Software engineering by Intevation GmbH |
|
3 * |
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
|
6 * documentation coming with Dive4Elements River for details. |
|
7 */ |
|
8 |
|
9 package org.dive4elements.river.client.client.ui.fixation; |
|
10 |
|
11 import java.util.ArrayList; |
|
12 import java.util.List; |
|
13 |
|
14 import org.dive4elements.river.client.client.FLYSConstants; |
|
15 import org.dive4elements.river.client.client.ui.PanelHelper; |
9270
|
16 import org.dive4elements.river.client.client.ui.StringArrayParseHelper; |
9267
|
17 import org.dive4elements.river.client.client.ui.ValidationHelper; |
|
18 import org.dive4elements.river.client.shared.model.Data; |
|
19 import org.dive4elements.river.client.shared.model.DataItem; |
|
20 import org.dive4elements.river.client.shared.model.DataList; |
|
21 import org.dive4elements.river.client.shared.model.DefaultData; |
|
22 import org.dive4elements.river.client.shared.model.DefaultDataItem; |
|
23 import org.dive4elements.river.client.shared.model.FixingsOverviewInfo; |
|
24 import org.dive4elements.river.client.shared.model.FixingsOverviewInfo.FixEvent; |
|
25 import org.dive4elements.river.client.shared.model.IntDataItem; |
|
26 import org.dive4elements.river.client.shared.model.IntegerArrayData; |
|
27 |
|
28 import com.google.gwt.core.client.GWT; |
|
29 import com.google.gwt.i18n.client.DateTimeFormat; |
|
30 import com.smartgwt.client.widgets.Canvas; |
|
31 import com.smartgwt.client.widgets.Label; |
|
32 import com.smartgwt.client.widgets.form.DynamicForm; |
|
33 import com.smartgwt.client.widgets.form.fields.TextItem; |
|
34 import com.smartgwt.client.widgets.layout.HLayout; |
|
35 import com.smartgwt.client.widgets.layout.VLayout; |
|
36 |
|
37 /** |
|
38 * This UIProvider creates a panel for location or distance input. |
|
39 * |
|
40 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> |
|
41 */ |
|
42 public class BunduFixPeriodPanel extends FixationPanel { |
|
43 private static final long serialVersionUID = 1L; |
|
44 /** The message class that provides i18n strings. */ |
|
45 protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); |
|
46 private TextItem inputItem; |
|
47 |
|
48 long start; |
|
49 long end; |
|
50 |
|
51 private final ArrayList<FixEvent> events = new ArrayList<FixEvent>(); |
|
52 |
|
53 protected String getDatakey() { |
|
54 return "singleyear"; |
|
55 } |
|
56 |
|
57 @Override |
|
58 public Canvas createWidget(final DataList data) { |
|
59 instances.put(this.artifact.getUuid(), this); |
|
60 final VLayout layout = new VLayout(); |
|
61 |
|
62 final Label title = new Label(data.get(0).getDescription()); |
|
63 title.setHeight("25px"); |
|
64 |
|
65 final DynamicForm form = new DynamicForm(); |
|
66 form.setNumCols(4); |
|
67 |
|
68 this.inputItem = PanelHelper.createItem("YEAR_INPUT"); |
|
69 this.inputItem.setShowHint(true); |
|
70 this.inputItem.setHint(this.MSG.common_input_hint_year()); |
|
71 this.inputItem.setShowHintInField(true); |
|
72 this.inputItem.setShowTitle(false); |
|
73 form.setFields(this.inputItem); |
|
74 |
|
75 layout.addMember(title); |
|
76 layout.addMember(form); |
|
77 |
|
78 return layout; |
|
79 } |
|
80 |
|
81 @Override |
|
82 public Canvas createOld(final DataList dataList) { |
|
83 final List<Data> items = dataList.getAll(); |
|
84 final Data years = getData(items, getDatakey()); |
|
85 final DataItem[] yearsItems = years.getItems(); |
|
86 |
|
87 final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); // multi.. single only allowed.. TODO: make createOld expecting single (general |
|
88 // refactoring necessary) |
|
89 |
|
90 final Label old = new Label(v1); |
|
91 final HLayout layout = new HLayout(); |
|
92 layout.setWidth("400px"); |
|
93 |
|
94 final Label label = new Label(dataList.getLabel()); |
|
95 label.setWidth("200px"); |
|
96 |
|
97 final Canvas back = getBackButton(dataList.getState()); |
|
98 |
|
99 layout.addMember(label); |
|
100 layout.addMember(old); |
|
101 layout.addMember(back); |
|
102 |
|
103 return layout; |
|
104 } |
|
105 |
|
106 /** |
|
107 * This method returns the selected data. |
|
108 * |
|
109 * @return the selected/inserted data. |
|
110 */ |
|
111 @Override |
|
112 public Data[] getData() { |
|
113 final List<String> errors = this.validate(); |
|
114 if (errors.size() > 0) { |
|
115 showErrors(errors); // TODO: do not allow advance state |
|
116 } |
|
117 long startMillis = 0; |
|
118 long endMillis = 0; |
|
119 final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy"); |
|
120 if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { |
|
121 final List<Data> data = new ArrayList<Data>(); |
9270
|
122 final String bezugsjahr = StringArrayParseHelper.trimRawString(this.inputItem.getValueAsString()); |
9267
|
123 final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), bezugsjahr); |
|
124 data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); |
|
125 |
|
126 // start/end |
|
127 |
|
128 final int bezugsjahrInt = Integer.valueOf(bezugsjahr); |
|
129 |
|
130 startMillis = df.parse("01.01." + (bezugsjahrInt - 5)).getTime(); |
|
131 // ist; radio-auswahl erfolgt aber erst im nächsten schritt |
|
132 endMillis = df.parse("31.12." + (bezugsjahrInt + 5)).getTime(); |
|
133 |
|
134 // events: |
|
135 if (this.events.size() > 0) { |
|
136 // filter by start/end |
|
137 final ArrayList<FixEvent> temp = new ArrayList<FixEvent>(); |
|
138 |
|
139 for (final FixEvent e : this.events) { |
|
140 final long time = df.parse(e.getDate()).getTime(); |
|
141 if (!(time >= startMillis && time <= endMillis)) { |
|
142 temp.add(e); |
|
143 } |
|
144 } |
|
145 this.events.removeAll(temp); |
|
146 |
|
147 final IntDataItem[] arr = new IntDataItem[this.events.size()]; |
|
148 for (int i = 0, E = this.events.size(); i < E; i++) { |
|
149 try { |
|
150 final Integer v = new Integer(this.events.get(i).getCId()); |
|
151 arr[i] = new IntDataItem("id", "id", v.intValue()); |
|
152 } |
|
153 catch (final NumberFormatException nfe) { |
|
154 return data.toArray(new Data[data.size()]); |
|
155 } |
|
156 } |
|
157 |
|
158 final IntegerArrayData iad = new IntegerArrayData("events_temp", "events_temp", arr); |
|
159 |
|
160 data.add(iad); |
|
161 } |
|
162 |
|
163 return data.toArray(new Data[data.size()]); |
|
164 } |
|
165 return new Data[0]; |
|
166 } |
|
167 |
|
168 @Override |
|
169 public final List<String> validate() { |
|
170 final List<String> errors = new ArrayList<String>(); |
|
171 errors.addAll(ValidationHelper.checkForEmpty(this.inputItem, this.MSG)); |
|
172 try { |
|
173 final int year = Integer.valueOf(this.inputItem.getValueAsString()); |
|
174 if (year < 1000 || year > 9999) { |
|
175 errors.add(this.MSG.wrongFormat() + "(" + this.MSG.common_input_hint_year() + ")"); |
|
176 } |
|
177 } |
|
178 catch (final NumberFormatException e) { |
|
179 errors.add(this.MSG.error_invalid_integer()); |
|
180 } |
|
181 return errors; |
|
182 } |
|
183 |
|
184 @Override |
|
185 public void setValues(final String cid, final boolean checked) { |
|
186 // No user interaction, do nothing. |
|
187 } |
|
188 |
|
189 @Override |
|
190 public boolean renderCheckboxes() { |
|
191 // No selection, return false. |
|
192 return false; |
|
193 } |
|
194 |
|
195 @Override |
|
196 public void success(final FixingsOverviewInfo fixInfo) { |
|
197 for (final FixEvent fe : fixInfo.getEvents()) { |
|
198 this.events.add(fe); |
|
199 } |
|
200 } |
|
201 } |