]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/WebServiceTreeTestResultNotifier.java
Updates required by deploy
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / core / test / tree / WebServiceTreeTestResultNotifier.java
1 package org.argeo.slc.core.test.tree;
2
3 import org.springframework.ws.client.WebServiceIOException;
4 import org.springframework.ws.client.core.WebServiceTemplate;
5 import org.springframework.ws.soap.client.SoapFaultClientException;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9
10 import org.argeo.slc.core.test.TestResultListener;
11 import org.argeo.slc.core.test.TestResultPart;
12 import org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest;
13 import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;
14 import org.argeo.slc.msg.test.tree.ResultPartRequest;
15 import org.argeo.slc.ws.client.WebServiceUtils;
16
17 public class WebServiceTreeTestResultNotifier implements
18 TestResultListener<TreeTestResult> {
19 private WebServiceTemplate template;
20 private Boolean onlyOnClose = false;
21
22 private Log log = LogFactory.getLog(getClass());
23
24 private Boolean cannotConnect = false;
25
26 public void resultPartAdded(TreeTestResult testResult,
27 TestResultPart testResultPart) {
28 if (onlyOnClose)
29 return;
30
31 if (cannotConnect)
32 return;
33
34 try {
35 if (testResult.getResultParts().size() == 1
36 && testResult.getResultParts().values().iterator().next()
37 .getParts().size() == 1) {
38 CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(
39 testResult);
40
41 if (log.isDebugEnabled())
42 log.debug("Send create result request for result "
43 + testResult.getUuid());
44
45 WebServiceUtils.marshalSendAndReceive(template, req);
46 } else {
47 ResultPartRequest req = new ResultPartRequest(testResult);
48
49 if (log.isDebugEnabled())
50 log.debug("Send result parts for result "
51 + testResult.getUuid());
52
53 WebServiceUtils.marshalSendAndReceive(template, req);
54 }
55 } catch (SoapFaultClientException e) {
56 WebServiceUtils.manageSoapException(e);
57
58 } catch (WebServiceIOException e) {
59 manageIoException(e);
60 }
61 }
62
63 public void close(TreeTestResult testResult) {
64 if (cannotConnect)
65 return;
66
67 try {
68 if (onlyOnClose) {
69 CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(
70 testResult);
71
72 if (log.isDebugEnabled())
73 log.debug("Send create result request for result "
74 + testResult.getUuid());
75
76 WebServiceUtils.marshalSendAndReceive(template, req);
77 } else {
78 CloseTreeTestResultRequest req = new CloseTreeTestResultRequest(
79 testResult);
80
81 if (log.isDebugEnabled())
82 log.debug("Send close result request for result "
83 + testResult.getUuid());
84
85 WebServiceUtils.marshalSendAndReceive(template, req);
86
87 }
88 } catch (SoapFaultClientException e) {
89 WebServiceUtils.manageSoapException(e);
90 } catch (WebServiceIOException e) {
91 manageIoException(e);
92 }
93 }
94
95 public void setTemplate(WebServiceTemplate template) {
96 this.template = template;
97 }
98
99 public void setOnlyOnClose(Boolean onlyOnClose) {
100 this.onlyOnClose = onlyOnClose;
101 }
102
103 protected void manageIoException(WebServiceIOException e) {
104 if (!cannotConnect) {
105 log.error("Cannot connect to " + template.getDefaultUri()
106 + ". Won't try again.", e);
107 cannotConnect = true;
108 }
109 }
110 }