ead12ec75578aaf8b9b5e2ab1ceb43a2257d2835
[so.git] / bpmn / MSOMockServer / src / main / java / org / openecomp / mso / bpmn / mock / SDNCAdapterNetworkTopologyMockTransformer.java
1 /*- 
2  * ============LICENSE_START======================================================= 
3  * OPENECOMP - MSO 
4  * ================================================================================ 
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
6  * ================================================================================ 
7  * Licensed under the Apache License, Version 2.0 (the "License"); 
8  * you may not use this file except in compliance with the License. 
9  * You may obtain a copy of the License at 
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0 
12  * 
13  * Unless required by applicable law or agreed to in writing, software 
14  * distributed under the License is distributed on an "AS IS" BASIS, 
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
16  * See the License for the specific language governing permissions and 
17  * limitations under the License. 
18  * ============LICENSE_END========================================================= 
19  */ 
20
21 package org.openecomp.mso.bpmn.mock;
22
23 import org.jboss.resteasy.client.ClientRequest;
24 import org.jboss.resteasy.client.ClientResponse;
25
26 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
27 import com.github.tomakehurst.wiremock.common.FileSource;
28 import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
29 import com.github.tomakehurst.wiremock.http.Request;
30 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
31
32 public class SDNCAdapterNetworkTopologyMockTransformer extends ResponseTransformer {
33
34         private String callbackResponse;
35         private String requestId;
36         
37         public SDNCAdapterNetworkTopologyMockTransformer() {
38                 callbackResponse = ""; // FileUtil.readResourceFile("__files/sdncDeleteNetworkTopologySimResponse.xml");
39         }
40
41         public SDNCAdapterNetworkTopologyMockTransformer(String requestId) {
42                 this.requestId = requestId;
43         }
44         
45         public String name() {
46                 return "network-topology-operation-transformer";
47         }
48
49         @Override
50         public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource fileSource) {
51                 String requestBody = request.getBodyAsString();
52                 
53                 String callbackUrl = requestBody.substring(requestBody.indexOf("<sdncadapter:CallbackUrl>")+25, requestBody.indexOf("</sdncadapter:CallbackUrl>"));
54                 String requestId = requestBody.substring(requestBody.indexOf("<sdncadapter:RequestId>")+23, requestBody.indexOf("</sdncadapter:RequestId>"));
55                 System.out.println("request callbackUrl : " + callbackUrl);
56                 System.out.println("request requestId : " + requestId);
57                 
58                 System.out.println("file path/name : " + responseDefinition.getBodyFileName());
59                 callbackResponse = FileUtil.readResourceFile("__files/" + responseDefinition.getBodyFileName());                
60                 // extract Response responseRequestId
61                 String responseRequestId = callbackResponse.substring(callbackResponse.indexOf("<RequestId>")+11, callbackResponse.indexOf("</RequestId>"));
62                 System.out.println("response requestId: " + responseRequestId);         
63                 System.out.println("callbackResponse (before): " + callbackResponse);
64                 callbackResponse = callbackResponse.replace(responseRequestId, requestId);                              
65                 if (this.requestId != null) {
66                         callbackResponse = callbackResponse.replace(this.requestId, requestId);
67                 } else {
68                         callbackResponse = callbackResponse.replace(responseRequestId, requestId);
69                 }       
70                 System.out.println("callbackResponse (after):" + callbackResponse);             
71
72                 Object sdncDelay = MockResource.getMockProperties().get("sdnc_delay");
73                 int delay = 300;
74                 if (sdncDelay != null) {
75                         delay = Integer.parseInt(sdncDelay.toString());
76                 }
77                 
78                 //Kick off callback thread
79                 System.out.println("(NetworkTopologyMockTransformer) callback Url:" + callbackUrl + ":delay:" + delay);
80                 CallbackResponseThread calbackResponseThread = new CallbackResponseThread(callbackUrl,callbackResponse, delay);
81                 calbackResponseThread.start();
82                 
83                 //return 200 OK with body
84                 return ResponseDefinitionBuilder
85                 .like(responseDefinition).but()
86                 .withStatus(200).withBody(callbackResponse).withHeader("Content-Type", "text/xml")
87                 .build();
88         }
89
90         @Override
91         public boolean applyGlobally() {
92             return false;
93         }
94         
95         private class CallbackResponseThread extends Thread {
96                 
97                 private String callbackUrl;
98                 private String payLoad;
99                 private int delay;
100                 
101                 public CallbackResponseThread(String callbackUrl, String payLoad, int delay) {
102                         this.callbackUrl = callbackUrl;
103                         this.payLoad = payLoad;
104                         this.delay = delay;
105                 }
106                 
107                 public void run () {
108                         try {
109                                 //Delay sending callback response
110                                 sleep(delay);
111                         } catch (InterruptedException e1) {
112                                 // TODO Auto-generated catch block
113                                 e1.printStackTrace();
114                         }
115                         System.out.println("Sending callback response to url: " + callbackUrl);
116                         ClientRequest request = new ClientRequest(callbackUrl);
117                         request.body("text/xml", payLoad);
118                         //System.err.println(payLoad);
119                         try {
120                                 ClientResponse result = request.post();
121                                 System.out.println("Successfully posted callback? Status: " + result.getStatus());
122                         } catch (Exception e) {
123                                 // TODO Auto-generated catch block
124                                 System.out.println("catch error in - request.post() ");
125                                 e.printStackTrace();
126                         }
127                 }
128                 
129         }
130 }