]> git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/runtime/org.argeo.slc.support.ws.client/src/main/java/org/argeo/slc/ws/test/tree/WebServiceTreeTestResultNotifier.java
Move to SLC legacy
[gpl/argeo-slc.git] / legacy / runtime / org.argeo.slc.support.ws.client / src / main / java / org / argeo / slc / ws / test / tree / WebServiceTreeTestResultNotifier.java
1 /*
2 * Copyright (C) 2007-2012 Mathieu Baudier
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.argeo.slc.ws.test.tree;
17
18 import org.apache.commons.logging.Log;
19 import org.apache.commons.logging.LogFactory;
20 import org.argeo.slc.core.test.tree.TreeTestResult;
21 import org.argeo.slc.msg.test.tree.CloseTreeTestResultRequest;
22 import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest;
23 import org.argeo.slc.msg.test.tree.ResultPartRequest;
24 import org.argeo.slc.test.TestResultListener;
25 import org.argeo.slc.test.TestResultPart;
26 import org.argeo.slc.ws.client.WebServiceUtils;
27 import org.springframework.ws.client.WebServiceIOException;
28 import org.springframework.ws.client.core.WebServiceTemplate;
29 import org.springframework.ws.soap.client.SoapFaultClientException;
30
31 public class WebServiceTreeTestResultNotifier implements
32 TestResultListener<TreeTestResult> {
33 private WebServiceTemplate template;
34 private Boolean onlyOnClose = false;
35
36 private Log log = LogFactory.getLog(getClass());
37
38 private Boolean cannotConnect = false;
39
40 public void resultPartAdded(TreeTestResult testResult,
41 TestResultPart testResultPart) {
42 if (onlyOnClose)
43 return;
44
45 if (cannotConnect)
46 return;
47
48 try {
49 if (testResult.getResultParts().size() == 1
50 && testResult.getResultParts().values().iterator().next()
51 .getParts().size() == 1) {
52 CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(
53 testResult);
54
55 if (log.isDebugEnabled())
56 log.debug("Send create result request for result "
57 + testResult.getUuid());
58
59 WebServiceUtils.marshalSendAndReceive(template, req);
60 } else {
61 ResultPartRequest req = new ResultPartRequest(testResult);
62
63 if (log.isDebugEnabled())
64 log.debug("Send result parts for result "
65 + testResult.getUuid());
66
67 WebServiceUtils.marshalSendAndReceive(template, req);
68 }
69 } catch (SoapFaultClientException e) {
70 WebServiceUtils.manageSoapException(e);
71
72 } catch (WebServiceIOException e) {
73 manageIoException(e);
74 }
75 }
76
77 public void close(TreeTestResult testResult) {
78 if (cannotConnect)
79 return;
80
81 try {
82 if (onlyOnClose) {
83 CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(
84 testResult);
85
86 if (log.isDebugEnabled())
87 log.debug("Send create result request for result "
88 + testResult.getUuid());
89
90 WebServiceUtils.marshalSendAndReceive(template, req);
91 } else {
92 CloseTreeTestResultRequest req = new CloseTreeTestResultRequest(
93 testResult);
94
95 if (log.isDebugEnabled())
96 log.debug("Send close result request for result "
97 + testResult.getUuid());
98
99 WebServiceUtils.marshalSendAndReceive(template, req);
100
101 }
102 } catch (SoapFaultClientException e) {
103 WebServiceUtils.manageSoapException(e);
104 } catch (WebServiceIOException e) {
105 manageIoException(e);
106 }
107 }
108
109 public void setTemplate(WebServiceTemplate template) {
110 this.template = template;
111 }
112
113 public void setOnlyOnClose(Boolean onlyOnClose) {
114 this.onlyOnClose = onlyOnClose;
115 }
116
117 protected void manageIoException(WebServiceIOException e) {
118 if (!cannotConnect) {
119 log.error("Cannot connect to " + template.getDefaultUri()
120 + ". Won't try again.", e);
121 cannotConnect = true;
122 }
123 }
124 }