Mercurial > dive4elements > gnv-client
comparison gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java @ 12:4ebe57b170d3
Integration of moving through the Artifact-States and rendering the UI.
gnv/trunk@91 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Wed, 16 Sep 2009 07:44:26 +0000 |
parents | 3cb753564552 |
children | 2535158e2687 |
comparison
equal
deleted
inserted
replaced
11:3cb753564552 | 12:4ebe57b170d3 |
---|---|
27 import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; | 27 import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; |
28 import de.intevation.gnv.artifactdatabase.objects.Artifact; | 28 import de.intevation.gnv.artifactdatabase.objects.Artifact; |
29 import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; | 29 import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; |
30 import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; | 30 import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; |
31 import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; | 31 import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; |
32 import de.intevation.gnv.artifactdatabase.objects.InputParameter; | |
32 import de.intevation.gnv.util.XMLUtils; | 33 import de.intevation.gnv.util.XMLUtils; |
33 | 34 |
34 /** | 35 /** |
35 * @author Tim Englich <tim.englich@intevation.de> | 36 * @author Tim Englich <tim.englich@intevation.de> |
36 * | 37 * |
243 ArtifactObject currentArtifact) | 244 ArtifactObject currentArtifact) |
244 throws ArtifactDatabaseClientException { | 245 throws ArtifactDatabaseClientException { |
245 try { | 246 try { |
246 | 247 |
247 Document request = this.createDescribeRequestBody(currentArtifact); | 248 Document request = this.createDescribeRequestBody(currentArtifact); |
248 String url = ((ArtifactFactory)artifactFactory).getDataBaseUrl()+"/artifact/"+ currentArtifact.getId(); | 249 String url = this.getArtifactUrl(artifactFactory, currentArtifact); |
249 Document result = this.doGetRequest(url); | 250 Document result = this.doGetRequest(url); |
250 return this.readDescription(result,currentArtifact); | 251 return this.readDescription(result,currentArtifact); |
251 } catch (IOException e) { | 252 } catch (IOException e) { |
252 log.error(e,e); | 253 log.error(e,e); |
253 throw new ArtifactDatabaseClientException(e); | 254 throw new ArtifactDatabaseClientException(e); |
254 } | 255 } |
255 } | 256 } |
257 | |
258 /** | |
259 * @param artifactFactory | |
260 * @param currentArtifact | |
261 * @return | |
262 */ | |
263 private String getArtifactUrl(ArtifactObject artifactFactory, | |
264 ArtifactObject currentArtifact) { | |
265 String url = ((ArtifactFactory)artifactFactory).getDataBaseUrl()+"/artifact/"+ currentArtifact.getId(); | |
266 return url; | |
267 } | |
256 | 268 |
257 private ArtifactDescription readDescription(Document document, ArtifactObject artifact) throws ArtifactDatabaseClientException{ | 269 private ArtifactDescription readDescription(Document document, ArtifactObject artifact) throws ArtifactDatabaseClientException{ |
258 XMLUtils xmlUtils = new XMLUtils(); | 270 XMLUtils xmlUtils = new XMLUtils(); |
259 if (artifact instanceof ArtifactDescription){ | 271 if (artifact instanceof ArtifactDescription){ |
260 ArtifactDescription ad = (ArtifactDescription)artifact; | 272 ArtifactDescription ad = (ArtifactDescription)artifact; |
261 Node uiNode = xmlUtils.getNodeXPath(document, "/result/ui"); | 273 Node uiNode = xmlUtils.getNodeXPath(document, "/result/ui"); |
262 uiNode = uiNode.getFirstChild(); | 274 // uiNode = uiNode.getFirstChild(); |
263 Node outputNode = xmlUtils.getNodeXPath(document, "/result/outputs"); | 275 Node outputNode = xmlUtils.getNodeXPath(document, "/result/outputs"); |
264 String currentState = xmlUtils.getStringXPath(document, "/result/state/@name"); | 276 String currentState = xmlUtils.getStringXPath(document, "/result/state/@name"); |
265 NodeList statesList = xmlUtils.getNodeSetXPath(document, "/result/reachable-states/state/@name"); | 277 NodeList statesList = xmlUtils.getNodeSetXPath(document, "/result/reachable-states/state/@name"); |
266 Collection<String> reachableStates = new ArrayList<String>(statesList.getLength()); | 278 Collection<String> reachableStates = new ArrayList<String>(statesList.getLength()); |
267 for (int i = 0; i < statesList.getLength(); i++){ | 279 for (int i = 0; i < statesList.getLength(); i++){ |
268 reachableStates.add(statesList.item(i).getNodeValue()); | 280 reachableStates.add(statesList.item(i).getNodeValue()); |
281 } | |
282 | |
283 NodeList inputNodes = xmlUtils.getNodeSetXPath(document, "/result/model/input"); | |
284 if (inputNodes != null){ | |
285 Collection<String> inputParameter = new ArrayList<String>(inputNodes.getLength()); | |
286 for (int i = 0; i < inputNodes.getLength(); i++){ | |
287 Node inputNode = inputNodes.item(i); | |
288 String name = xmlUtils.getStringXPath(inputNode, "@name"); | |
289 inputParameter.add(name); | |
290 } | |
291 ad.setInputParameter(inputParameter); | |
269 } | 292 } |
270 | 293 |
271 ad.setCurrentOut(outputNode); | 294 ad.setCurrentOut(outputNode); |
272 ad.setCurrentUI(uiNode); | 295 ad.setCurrentUI(uiNode); |
273 ad.setCurrentState(currentState); | 296 ad.setCurrentState(currentState); |
278 throw new ArtifactDatabaseClientException("Artifact must be Instance of ArtifactDescription"); | 301 throw new ArtifactDatabaseClientException("Artifact must be Instance of ArtifactDescription"); |
279 } | 302 } |
280 | 303 |
281 | 304 |
282 } | 305 } |
283 | 306 |
284 | 307 /** |
285 | 308 * @see de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient#doNextStep(de.intevation.gnv.artifactdatabase.objects.ArtifactObject, de.intevation.gnv.artifactdatabase.objects.ArtifactObject, java.lang.String, java.util.Collection) |
309 */ | |
310 public ArtifactDescription doNextStep(ArtifactObject artifactFactory, | |
311 ArtifactObject currentArtifact, String target, | |
312 Collection<InputParameter> inputParameter) | |
313 throws ArtifactDatabaseClientException { | |
314 | |
315 try { | |
316 // 1 Feed | |
317 Document feedDocument = this.createFeedRequestBody(currentArtifact, inputParameter); | |
318 String url = this.getArtifactUrl(artifactFactory, currentArtifact); | |
319 InputStream feedResult = this.doPostRequest(url, feedDocument); | |
320 // TODO feedResult auswerten und ggf. Fehler werfen. | |
321 // 2 Advance | |
322 Document advanceDocument = this.createAdvanceRequestBody(currentArtifact, target); | |
323 log.debug(new XMLUtils().writeDocument2String(advanceDocument)); | |
324 InputStream advanceResult = this.doPostRequest(url, advanceDocument); | |
325 // TODO feedResult auswerten und ggf. Fehler werfen. | |
326 // 3 Descibe | |
327 return this.getCurrentStepDescription(artifactFactory, currentArtifact); | |
328 } catch (IOException e) { | |
329 log.error(e,e); | |
330 throw new ArtifactDatabaseClientException(e); | |
331 } | |
332 } | |
333 | |
334 private Document createFeedRequestBody(ArtifactObject currentArtifact, | |
335 Collection<InputParameter> inputParameter){ | |
336 Document document = new XMLUtils().newDocument(); | |
337 Node rootNode = this.createRootNode(document); | |
338 | |
339 Element typeNode = this.createArtifactElement(document, "type"); | |
340 typeNode.setAttribute("name", "feed"); | |
341 rootNode.appendChild(typeNode); | |
342 | |
343 Element uuidNode = this.createArtifactElement(document, "uuid"); | |
344 uuidNode.setAttribute("value", currentArtifact.getId()); | |
345 rootNode.appendChild(uuidNode); | |
346 | |
347 Element hashNode = this.createArtifactElement(document, "hash"); | |
348 hashNode.setAttribute("value", currentArtifact.getHash()); | |
349 rootNode.appendChild(hashNode); | |
350 | |
351 Element dataNode = this.createArtifactElement(document, "data"); | |
352 rootNode.appendChild(dataNode); | |
353 if (inputParameter != null){ | |
354 Iterator<InputParameter> it = inputParameter.iterator(); | |
355 while(it.hasNext()){ | |
356 InputParameter ip = it.next(); | |
357 String name = ip.getName(); | |
358 String[] values = ip.getValues(); | |
359 if (values != null){ | |
360 for (int i = 0; i < values.length; i++){ | |
361 String value = values[i]; | |
362 Element inputNode = this.createArtifactElement(document, "input"); | |
363 inputNode.setAttribute("name", name); | |
364 inputNode.setAttribute("value", value); | |
365 dataNode.appendChild(inputNode); | |
366 } | |
367 } | |
368 } | |
369 } | |
370 | |
371 | |
372 return document; | |
373 } | |
374 | |
375 private Document createAdvanceRequestBody(ArtifactObject currentArtifact, String target){ | |
376 Document document = new XMLUtils().newDocument(); | |
377 Node rootNode = this.createRootNode(document); | |
378 | |
379 Element typeNode = this.createArtifactElement(document, "type"); | |
380 typeNode.setAttribute("name", "advance"); | |
381 rootNode.appendChild(typeNode); | |
382 | |
383 Element uuidNode = this.createArtifactElement(document, "uuid"); | |
384 uuidNode.setAttribute("value", currentArtifact.getId()); | |
385 rootNode.appendChild(uuidNode); | |
386 | |
387 Element hashNode = this.createArtifactElement(document, "hash"); | |
388 hashNode.setAttribute("value", currentArtifact.getHash()); | |
389 rootNode.appendChild(hashNode); | |
390 Element targetNode = this.createArtifactElement(document, "target"); | |
391 targetNode.setAttribute("name", target); | |
392 rootNode.appendChild(targetNode); | |
393 return document; | |
394 } | |
286 } | 395 } |