Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java @ 657:af3f56758f59
merged gnv-artifacts/0.5
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:13:53 +0200 (2012-09-28) |
parents | 65f09139e9b3 |
children | dde7f51dbe1e |
comparison
equal
deleted
inserted
replaced
590:5f5f273c8566 | 657:af3f56758f59 |
---|---|
1 package de.intevation.gnv.state; | |
2 | |
3 import de.intevation.artifactdatabase.XMLUtils; | |
4 | |
5 import de.intevation.artifacts.CallMeta; | |
6 | |
7 import de.intevation.gnv.artifacts.ressource.RessourceFactory; | |
8 | |
9 import de.intevation.gnv.geobackend.base.Result; | |
10 | |
11 import de.intevation.gnv.geobackend.util.DateUtils; | |
12 | |
13 import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData; | |
14 import de.intevation.gnv.state.describedata.DescribeData; | |
15 import de.intevation.gnv.state.describedata.MinMaxDescribeData; | |
16 | |
17 import de.intevation.gnv.state.exception.StateException; | |
18 | |
19 import de.intevation.gnv.utils.InputValidator; | |
20 | |
21 import java.util.ArrayList; | |
22 import java.util.Collection; | |
23 import java.util.Date; | |
24 import java.util.GregorianCalendar; | |
25 import java.util.Iterator; | |
26 import java.util.List; | |
27 | |
28 import org.apache.log4j.Logger; | |
29 | |
30 import org.w3c.dom.Document; | |
31 import org.w3c.dom.Element; | |
32 import org.w3c.dom.Node; | |
33 | |
34 /** | |
35 * @author Tim Englich (tim.englich@intevation.de) | |
36 * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) | |
37 */ | |
38 public class MinMaxState extends StateBase { | |
39 | |
40 /** | |
41 * The UID of this Class | |
42 */ | |
43 private static final long serialVersionUID = -3525903792105187408L; | |
44 /** | |
45 * the logger, used to log exceptions and additonaly information | |
46 */ | |
47 private static Logger log = Logger.getLogger(MinMaxState.class); | |
48 | |
49 /** | |
50 * Constructor | |
51 */ | |
52 public MinMaxState() { | |
53 super(); | |
54 } | |
55 | |
56 /** | |
57 * @see de.intevation.gnv.state.StateBase#purifyResult(java.util.Collection, | |
58 * java.lang.String) | |
59 */ | |
60 @Override | |
61 protected List<Object> purifyResult( | |
62 Collection<Result> result, String uuid) | |
63 { | |
64 List<Object> describeData = new ArrayList<Object>(); | |
65 | |
66 if (result != null && result.size() == 1) { | |
67 Result value = result.iterator().next(); | |
68 DescribeData values = new DefaultMinMaxDescribeData( | |
69 dataName, | |
70 value.getObject("MIN"), | |
71 value.getObject("MAX"), | |
72 getID()); | |
73 describeData.add(values); | |
74 } else { | |
75 log.warn("Result cannot be handled as MinMax Resultset"); | |
76 } | |
77 | |
78 return describeData; | |
79 } | |
80 | |
81 | |
82 /** | |
83 * @see de.intevation.gnv.state.StateBase#feed(java.util.Collection, | |
84 * java.lang.String) | |
85 */ | |
86 @Override | |
87 public void feed(Collection<InputData> inputData, String uuid) | |
88 throws StateException | |
89 { | |
90 if (inputData == null) | |
91 return; | |
92 | |
93 InputValidator iv = new InputValidator(); | |
94 Iterator iter = inputData.iterator(); | |
95 | |
96 Object min = null; | |
97 Object max = null; | |
98 | |
99 while (iter.hasNext()) { | |
100 InputData tmp = (InputData) iter.next(); | |
101 InputValue meta = inputValues.get(tmp.getName()); | |
102 String value = tmp.getValue(); | |
103 String name = tmp.getName(); | |
104 | |
105 if (meta == null) { | |
106 log.warn("Input data not expected here. Data will be ignored."); | |
107 return; | |
108 } | |
109 | |
110 boolean valid = iv.isInputValid(value, meta.getType()); | |
111 if (!valid) { | |
112 String msg = "Input is not valid for this state."; | |
113 log.error(msg); | |
114 throw new StateException(msg); | |
115 } | |
116 | |
117 if (name.equals(MINVALUEFIELDNAME)) { | |
118 min = value; | |
119 } | |
120 | |
121 if (name.equals(MAXVALUEFIELDNAME)) { | |
122 max = value; | |
123 } | |
124 } | |
125 | |
126 if (min != null && max != null) { | |
127 DescribeData values = new DefaultMinMaxDescribeData( | |
128 dataName, min, max, getID()); | |
129 | |
130 this.inputData.put(dataName, new DefaultInputData(dataName, values)); | |
131 } | |
132 } | |
133 | |
134 | |
135 @Override | |
136 protected void appendToStaticNode( | |
137 XMLUtils.ElementCreator artCreator, | |
138 XMLUtils.ElementCreator creator, | |
139 Document document, | |
140 Node staticNode, | |
141 CallMeta callMeta | |
142 ) { | |
143 InputData data = inputData.get(dataName); | |
144 | |
145 if (data == null) { | |
146 return; | |
147 } | |
148 | |
149 MinMaxDescribeData minMax = (MinMaxDescribeData) data.getObject(); | |
150 | |
151 Object min = minMax.getMinValue(); | |
152 Object max = minMax.getMaxValue(); | |
153 if (min instanceof GregorianCalendar) { | |
154 Date d = ((GregorianCalendar) min).getTime(); | |
155 min = DateUtils.getPatternedDateAmer(d); | |
156 } | |
157 | |
158 if (max instanceof GregorianCalendar) { | |
159 Date d = ((GregorianCalendar) max).getTime(); | |
160 max = DateUtils.getPatternedDateAmer(d); | |
161 } | |
162 | |
163 Element groupNode = creator.create("group"); | |
164 artCreator.addAttr(groupNode, "state", minMax.getState(), true); | |
165 | |
166 creator.addAttr(groupNode, "ref", minMax.getName()); | |
167 Element groupNodeLableNode = creator.create("label"); | |
168 groupNodeLableNode.setTextContent(RessourceFactory | |
169 .getInstance().getRessource( | |
170 callMeta.getLanguages(), | |
171 minMax.getName(), | |
172 minMax.getName())); | |
173 groupNode.appendChild(groupNodeLableNode); | |
174 | |
175 Element inputMinNode = creator.create("input"); | |
176 creator.addAttr(inputMinNode, "ref", MINVALUEFIELDNAME); | |
177 Element inputMinLableNode = creator.create("label"); | |
178 inputMinLableNode.setTextContent(RessourceFactory | |
179 .getInstance().getRessource( | |
180 callMeta.getLanguages(), MINVALUEFIELDNAME, | |
181 MINVALUEFIELDNAME)); | |
182 inputMinNode.appendChild(inputMinLableNode); | |
183 | |
184 Element inputMinValueNode = creator.create("value"); | |
185 inputMinValueNode.setTextContent(min.toString()); | |
186 inputMinNode.appendChild(inputMinValueNode); | |
187 | |
188 Element inputMaxNode = creator.create("input"); | |
189 creator.addAttr(inputMaxNode, "ref", MAXVALUEFIELDNAME); | |
190 Element inputMaxLableNode = creator.create("label"); | |
191 inputMaxLableNode.setTextContent(RessourceFactory | |
192 .getInstance().getRessource( | |
193 callMeta.getLanguages(), MAXVALUEFIELDNAME, | |
194 MAXVALUEFIELDNAME)); | |
195 inputMaxNode.appendChild(inputMaxLableNode); | |
196 | |
197 Element inputMaxValueNode = creator.create("value"); | |
198 inputMaxValueNode.setTextContent(max.toString()); | |
199 inputMaxNode.appendChild(inputMaxValueNode); | |
200 | |
201 groupNode.appendChild(inputMinNode); | |
202 groupNode.appendChild(inputMaxNode); | |
203 | |
204 staticNode.appendChild(groupNode); | |
205 } | |
206 } | |
207 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: |