comparison gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java @ 607:292fbcd5e9ac

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

http://dive4elements.wald.intevation.org