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