comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWQKmsArtifact.java @ 2124:a202a9e048a5

Made StaticWQKmsArtifact a fully featured Artifact. flys-artifacts/trunk@3694 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 17 Jan 2012 08:17:50 +0000
parents 64ffc371afe7
children 79a94c4171cb
comparison
equal deleted inserted replaced
2123:907322e269e3 2124:a202a9e048a5
6 import org.apache.log4j.Logger; 6 import org.apache.log4j.Logger;
7 7
8 import org.w3c.dom.Document; 8 import org.w3c.dom.Document;
9 9
10 import de.intevation.artifactdatabase.state.Facet; 10 import de.intevation.artifactdatabase.state.Facet;
11 import de.intevation.artifactdatabase.state.DefaultOutput;
12 import de.intevation.artifactdatabase.state.State;
13 11
14 import de.intevation.artifacts.Artifact; 12 import de.intevation.artifacts.Artifact;
15 import de.intevation.artifacts.ArtifactFactory; 13 import de.intevation.artifacts.ArtifactFactory;
16 import de.intevation.artifacts.ArtifactNamespaceContext; 14 import de.intevation.artifacts.ArtifactNamespaceContext;
17 import de.intevation.artifacts.CallMeta; 15 import de.intevation.artifacts.CallMeta;
18 16
17 import de.intevation.artifacts.common.utils.XMLUtils;
18
19 import de.intevation.flys.artifacts.model.FacetTypes; 19 import de.intevation.flys.artifacts.model.FacetTypes;
20 import de.intevation.flys.artifacts.model.WQKms; 20 import de.intevation.flys.artifacts.model.WQKms;
21 import de.intevation.flys.artifacts.model.WQKmsFacet;
22 import de.intevation.flys.artifacts.model.WKmsFactory; 21 import de.intevation.flys.artifacts.model.WKmsFactory;
23 import de.intevation.flys.artifacts.model.WQKmsFactory; 22 import de.intevation.flys.artifacts.model.WQKmsFactory;
24 23
25 import de.intevation.flys.artifacts.states.StaticState; 24 import de.intevation.flys.artifacts.states.DefaultState;
26 import de.intevation.flys.artifacts.resources.Resources;
27 25
28 import de.intevation.artifacts.common.utils.XMLUtils;
29 26
30 /** 27 /**
31 * Artifact to access additional "waterlevel/discharge"-type of data, like 28 * Artifact to access additional "waterlevel/discharge"-type of data, like
32 * fixation measurements. 29 * fixation measurements.
33 * 30 *
47 "/art:action/art:ids/@value"; 44 "/art:action/art:ids/@value";
48 45
49 public static final String STATIC_STATE_NAME = 46 public static final String STATIC_STATE_NAME =
50 "state.additional_wqkms.static"; 47 "state.additional_wqkms.static";
51 48
52 /** One and only state to be in. */
53 protected transient State state = null;
54
55 49
56 /** 50 /**
57 * Trivial Constructor. 51 * Trivial Constructor.
58 */ 52 */
59 public StaticWQKmsArtifact() { 53 public StaticWQKmsArtifact() {
72 CallMeta callMeta, 66 CallMeta callMeta,
73 Document data) 67 Document data)
74 { 68 {
75 logger.debug("StaticWQKmsArtifact.setup"); 69 logger.debug("StaticWQKmsArtifact.setup");
76 70
77 state = new StaticState(STATIC_STATE_NAME); 71 // Store the 'ids' (from datacage).
72 logger.debug("StaticWQKmsArtiact.setup" + XMLUtils.toString(data));
78 73
79 List<Facet> fs = new ArrayList<Facet>();
80 logger.debug(XMLUtils.toString(data));
81 String code = XMLUtils.xpathString( 74 String code = XMLUtils.xpathString(
82 data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); 75 data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE);
83 76 addStringData("ids", code);
84 // TODO Go for JSON, one day.
85 //ex.: flood_protection-wstv-114-12
86 if (code != null) { 77 if (code != null) {
87 String [] parts = code.split("-"); 78 String [] parts = code.split("-");
88 79
89 if (parts.length >= 4) { 80 if (parts.length >= 4) {
90 int col = Integer.valueOf(parts[2]); 81 int col = Integer.valueOf(parts[2]);
91 int wst = Integer.valueOf(parts[3]); 82 int wst = Integer.valueOf(parts[3]);
92 83
93 addStringData("col_pos", parts[2]); 84 addStringData("col_pos", parts[2]);
94 addStringData("wst_id", parts[3]); 85 addStringData("wst_id", parts[3]);
95
96 String wkmsName = WKmsFactory.getWKmsName(col, wst);
97
98 String name;
99 if (parts[0].equals(HEIGHTMARKS_POINTS)) {
100 name = HEIGHTMARKS_POINTS;
101 }
102 else {
103 name = STATIC_WQKMS;
104 }
105
106 Facet facet = new WQKmsFacet(
107 name,
108 Resources.getMsg(
109 callMeta,
110 wkmsName,
111 wkmsName));
112 fs.add(facet);
113 facets.put(state.getID(), fs);
114 } 86 }
115 } 87 }
116 88
117 spawnState(); 89 // Do this AFTER we have set the col_pos etc.
118 super.setup(identifier, factory, context, callMeta, data); 90 super.setup(identifier, factory, context, callMeta, data);
119 }
120
121
122 /**
123 * Initialize the static state with output.
124 * @return static state
125 * @TODO merge with StaticWKmsArtifact implementation.
126 */
127 protected State spawnState() {
128 state = new StaticState(STATIC_STATE_NAME);
129 List<Facet> fs = facets.get(STATIC_STATE_NAME);
130 DefaultOutput output = new DefaultOutput(
131 "general",
132 "general",
133 "image/png",
134 fs,
135 "chart");
136
137 state.getOutputs().add(output);
138 return state;
139 } 91 }
140 92
141 93
142 /** 94 /**
143 * Called via setup. 95 * Called via setup.
150 Object context, 102 Object context,
151 CallMeta meta) 103 CallMeta meta)
152 { 104 {
153 logger.debug("StaticWQKmsArtifact.initialize"); 105 logger.debug("StaticWQKmsArtifact.initialize");
154 WINFOArtifact winfo = (WINFOArtifact) artifact; 106 WINFOArtifact winfo = (WINFOArtifact) artifact;
155 // TODO: The river is of no interest, so far. 107 // TODO: The river is of no interest, so far., also use importData
156 addData("river", winfo.getData("river")); 108 addData("river", winfo.getData("river"));
157 }
158 109
110 List<Facet> fs = new ArrayList<Facet>();
159 111
160 /** 112 DefaultState state = (DefaultState) getCurrentState(context);
161 * Get a list containing the one and only State. 113 state.computeInit(this, hash(), context, meta, fs);
162 * @param context ignored. 114 if (!fs.isEmpty()) {
163 * @return list with one and only state. 115 logger.debug("Facets to add in StaticWQKmsArtifact.initialize .");
164 */ 116 facets.put(getCurrentStateId(), fs);
165 @Override 117 }
166 protected List<State> getStates(Object context) { 118 else {
167 ArrayList<State> states = new ArrayList<State>(); 119 logger.debug("No facets to add in StaticWQKmsArtifact.initialize ("
168 states.add(getState()); 120 + state.getID() + ").");
169 return states; 121 }
170 }
171
172
173 /**
174 * Get the "current" state (there is but one).
175 * @param cc ignored.
176 * @return the "current" (only possible) state.
177 */
178 @Override
179 public State getCurrentState(Object cc) {
180 return getState();
181 }
182
183
184 /**
185 * Get the only possible state.
186 * @return the state.
187 */
188 protected State getState() {
189 return getState(null, null);
190 }
191
192
193 /**
194 * Get the state.
195 * @param context ignored.
196 * @param stateID ignored.
197 * @return the state.
198 */
199 @Override
200 protected State getState(Object context, String stateID) {
201 return (state != null)
202 ? state
203 : spawnState();
204 } 122 }
205 123
206 124
207 /** 125 /**
208 * Get WQKms from factory. 126 * Get WQKms from factory.
209 * @param TODO idx param is not needed
210 * @return WQKms according to parameterization (can be null); 127 * @return WQKms according to parameterization (can be null);
211 */ 128 */
212 public WQKms getWQKms(int idx) { 129 public WQKms getWQKms() {
213 logger.debug("StaticWQKmsArtifact.getWQKms"); 130 logger.debug("StaticWQKmsArtifact.getWQKms");
214 131
215 return WQKmsFactory.getWQKms( 132 int col = Integer.valueOf(getDataAsString("col_pos"));
133 int wst = Integer.valueOf(getDataAsString("wst_id"));
134
135 /** TODO do not run twice against db to do this. */
136 String wkmsName = WKmsFactory.getWKmsName(col, wst);
137
138 WQKms res = WQKmsFactory.getWQKms(
216 Integer.valueOf(getDataAsString("col_pos")), 139 Integer.valueOf(getDataAsString("col_pos")),
217 Integer.valueOf(getDataAsString("wst_id"))); 140 Integer.valueOf(getDataAsString("wst_id")));
141 res.setName(wkmsName);
142 return res;
218 } 143 }
219 144
220 145
221 /** 146 /**
222 * Determines Facets initial disposition regarding activity (think of 147 * Determines Facets initial disposition regarding activity (think of
234 String facetName, 159 String facetName,
235 int index) 160 int index)
236 { 161 {
237 return 0; 162 return 0;
238 } 163 }
164
165
166 /** Return specific name. */
167 public String getName() {
168 return "staticwqkms";
169 }
170
171 // TODO implement deepCopy.
239 } 172 }
240 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : 173 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org