annotate gwt-client/src/main/java/org/dive4elements/river/client/client/ui/fixation/BunduFixPeriodPanel.java @ 9270:7337034eb5d5

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

http://dive4elements.wald.intevation.org