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:

http://dive4elements.wald.intevation.org