1 package org.openecomp.mso.bpmn.common.scripts
\r
3 import org.apache.commons.lang3.StringEscapeUtils;
\r
4 import org.camunda.bpm.engine.delegate.BpmnError
\r
5 import org.camunda.bpm.engine.runtime.Execution;
\r
6 import org.openecomp.mso.bpmn.core.WorkflowException
\r
7 import org.openecomp.mso.rest.APIResponse;
\r
9 class AllottedResourceUtils {
\r
11 private AbstractServiceTaskProcessor taskProcessor
\r
12 ExceptionUtil exceptionUtil = new ExceptionUtil()
\r
15 public AllottedResourceUtils(AbstractServiceTaskProcessor taskProcessor) {
\r
16 this.taskProcessor = taskProcessor
\r
17 this.utils = taskProcessor.utils
\r
20 /*Used on Create - called from DoCreate
\r
21 * Using Consuming ServiceInstanceId get related Allotted Resources Orchestration status from AAI
\r
22 * 1) get related AR links for CSI 2) get AR from AR links
\r
23 * return: null -> AR Not found
\r
24 * return: " " -> AR found with empty orchStatus
\r
25 * return: orchStatus - > AR found with this orchStatus
\r
26 * setsVariable aaiARGetResponse
\r
28 public String getAROrchStatus (Execution execution) {
\r
30 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
\r
31 utils.log("DEBUG"," ***** getAROrchStatus *****", isDebugEnabled)
\r
33 String serviceInstanceId = execution.getVariable("serviceInstanceId")
\r
34 String arType = execution.getVariable("allottedResourceType")
\r
35 String arRole = execution.getVariable("allottedResourceRole")
\r
36 String siXml = execution.getVariable("CSI_service")
\r
38 String orchStatus = null
\r
39 XmlParser xmlParser = new XmlParser()
\r
40 utils.log("DEBUG","getAROrchStatus siXml:" + siXml, isDebugEnabled)
\r
42 if (!isBlank(siXml)) {
\r
43 def groovy.util.Node siNode = xmlParser.parseText(siXml)
\r
44 def groovy.util.Node relationshipList = utils.getChildNode(siNode, 'relationship-list')
\r
45 if (relationshipList != null) {
\r
46 def groovy.util.NodeList relationships = utils.getIdenticalChildren(relationshipList, 'relationship')
\r
47 for (groovy.util.Node relationship in relationships) {
\r
48 def groovy.util.Node relatedTo = utils.getChildNode(relationship, 'related-to')
\r
49 if ((relatedTo != null) && (relatedTo.text().equals('allotted-resource'))) {
\r
50 utils.log("DEBUG","getARORchStatus AR found", isDebugEnabled)
\r
51 def groovy.util.Node relatedLink = utils.getChildNode(relationship, 'related-link')
\r
52 if (relatedLink != null){
\r
53 ar = getARbyLink(execution, relatedLink.text(), arRole)
\r
56 orchStatus = execution.getVariable("aaiAROrchStatus")
\r
64 }catch(Exception e){
\r
65 utils.log("DEBUG", " Error encountered in getAROrchStatus" + e.getMessage(), isDebugEnabled)
\r
66 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error in getAROrchStatus" + e.getMessage())
\r
68 utils.log("DEBUG"," *****Exit getAROrchStatus **** OrchStatus:" + orchStatus, isDebugEnabled)
\r
72 // get Allotted Resource by AllottedResourceId
\r
73 // used on Delete - called from doDeleteAR
\r
74 // setsVariable aaiARGetResponse
\r
75 public String getARbyId (Execution execution, String allottedResourceId) {
\r
76 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
\r
77 utils.log("DEBUG", " ***** getARbyId ***** ", isDebugEnabled)
\r
78 String arLink = getARLinkbyId(execution, allottedResourceId)
\r
80 if (!isBlank(arLink))
\r
82 ar = getARbyLink(execution, arLink, "")
\r
84 utils.log("DEBUG", " ***** Exit GetARbyId ***** AR:" + ar, isDebugEnabled)
\r
88 // get Allotted Resource Link by AllottedResourceId using Nodes Query
\r
89 // used on Delete - called from getARbyId
\r
90 public String getARLinkbyId (Execution execution, String allottedResourceId) {
\r
91 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
\r
92 utils.log("DEBUG", " ***** getARLinkbyId ***** ", isDebugEnabled)
\r
93 String arLink = null
\r
95 AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
\r
96 String aaiNQUri = aaiUriUtil.getSearchNodesQueryEndpoint(execution)
\r
97 String aaiEndpoint = execution.getVariable("URN_aai_endpoint")
\r
98 String aaiUrl = "${aaiNQUri}?search-node-type=allotted-resource&filter=id:EQUALS:${allottedResourceId}"
\r
100 utils.log("DEBUG", "getARLinkbyId url: \n" + aaiUrl, isDebugEnabled)
\r
102 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, aaiUrl)
\r
103 int responseCode = response.getStatusCode()
\r
104 utils.log("DEBUG", " GET AR response code is: " + responseCode, isDebugEnabled)
\r
106 String aaiResponse = response.getResponseBodyAsString()
\r
107 aaiResponse = StringEscapeUtils.unescapeXml(aaiResponse)
\r
108 utils.log("DEBUG", "GET AR:" + aaiResponse, isDebugEnabled)
\r
109 if(responseCode == 200 || responseCode == 202){
\r
110 utils.log("DEBUG", "GET AR Received a Good Response Code", isDebugEnabled)
\r
111 if(utils.nodeExists(aaiResponse, "result-data")){
\r
112 utils.log("DEBUG", "Query for AllottedResource Url Response Does Contain Data" , isDebugEnabled)
\r
113 arLink = utils.getNodeText1(aaiResponse, "resource-link")
\r
115 utils.log("DEBUG", "GET AR Response Does NOT Contain Data" , isDebugEnabled)
\r
117 }else if(responseCode == 404){
\r
118 utils.log("DEBUG", "GET AR received a Not Found (404) Response", isDebugEnabled)
\r
121 utils.log("DEBUG", " GET AR received a Bad Response: \n" + aaiResponse, isDebugEnabled)
\r
122 buildAAIErrorResponse(execution, aaiResponse, "Error retrieving AR from AAI")
\r
124 }catch(Exception e){
\r
125 utils.log("DEBUG", " Error encountered within GetAaiAR" + e.getMessage(), isDebugEnabled)
\r
126 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error in GetARbyId" + e.getMessage())
\r
128 utils.log("DEBUG", " ***** Exit GetARLinkbyId ***** Link:" + arLink, isDebugEnabled)
\r
132 // get Allotted resource using Link
\r
133 // used on Create called from getARORchStatus
\r
134 // used on Delete called from getARbyId
\r
135 // setsVariable aaiARPath - used for Patch in create
\r
136 public String getARbyLink (Execution execution, String link, String role) {
\r
137 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
\r
138 utils.log("DEBUG", " ***** getARbyLink ***** ", isDebugEnabled)
\r
140 String arUrl = null
\r
142 AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
\r
143 String aai_endpoint = execution.getVariable("URN_aai_endpoint")
\r
144 String arEndpoint = ""
\r
146 if(!isBlank(link)) {
\r
147 utils.log("DEBUG", "Incoming AR Resource Link is: " + link, isDebugEnabled)
\r
148 String[] split = link.split("/aai/")
\r
149 arEndpoint = "/aai/" + split[1]
\r
152 arUrl = "${aai_endpoint}" + arEndpoint
\r
154 utils.log("DEBUG", "GET AR Aai Path is: \n" + arUrl, isDebugEnabled)
\r
156 APIResponse response = aaiUriUtil.executeAAIGetCall(execution, arUrl)
\r
157 int responseCode = response.getStatusCode()
\r
158 utils.log("DEBUG", " GET AR response code is: " + responseCode, isDebugEnabled)
\r
160 String aaiResponse = response.getResponseBodyAsString()
\r
161 aaiResponse = StringEscapeUtils.unescapeXml(aaiResponse)
\r
162 utils.log("DEBUG", "GET AR:" + aaiResponse, isDebugEnabled)
\r
163 if(responseCode == 200 || responseCode == 202){
\r
164 utils.log("DEBUG", "GET AR Received a Good Response Code", isDebugEnabled)
\r
165 if(utils.nodeExists(aaiResponse, "allotted-resource")){
\r
166 if (!isBlank(role))
\r
168 if (utils.nodeExists(aaiResponse, "role") && role.equals(utils.getNodeText1(aaiResponse, "role"))) {
\r
171 utils.log("DEBUG", "AAI AR does not match input role:" + role, isDebugEnabled)
\r
181 utils.log("DEBUG", "GET AR Does NOT Contain Data" , isDebugEnabled)
\r
183 }else if(responseCode == 404){
\r
184 utils.log("DEBUG", "GET AR received a Not Found (404) Response", isDebugEnabled)
\r
187 utils.log("DEBUG", " GET AR received a Bad Response: \n" + aaiResponse, isDebugEnabled)
\r
188 buildAAIErrorResponse(execution, aaiResponse, "Error retrieving AR from AAI")
\r
190 }catch(Exception e){
\r
191 utils.log("DEBUG", " Error encountered within GetAaiAR" + e.getMessage(), isDebugEnabled)
\r
192 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error in GetAaiAR" + e.getMessage())
\r
196 execution.setVariable("aaiARGetResponse", ar)
\r
197 execution.setVariable("aaiARPath", arUrl)
\r
199 String resourceVersion = null
\r
200 if (utils.nodeExists(ar, "resource-version")) {
\r
201 resourceVersion = utils.getNodeText1(ar, "resource-version")
\r
202 execution.setVariable("aaiARResourceVersion", resourceVersion)
\r
205 String orchStatus = null
\r
206 if (utils.nodeExists(ar, "orchestration-status")) {
\r
207 orchStatus= utils.getNodeText1(ar, "orchestration-status")
\r
213 execution.setVariable("aaiAROrchStatus", orchStatus)
\r
215 utils.log("DEBUG", " ***** Exit GetARbyLink ***** AR:" + ar, isDebugEnabled)
\r
219 public void updateAROrchStatus(Execution execution, String status, String aaiARPath){
\r
220 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
\r
221 utils.log("DEBUG", " *** updaAROrchStatus *** ", isDebugEnabled)
\r
224 String updateReq = """
\r
226 "orchestration-status": "Created""
\r
230 utils.log("DEBUG", 'AAI AR URI: ' + aaiARPath, isDebugEnabled)
\r
232 AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
\r
233 APIResponse apiResponse = aaiUriUtil.executeAAIPatchCall(execution, aaiARPath, updateReq)
\r
234 def aaiResponse = StringEscapeUtils.unescapeXml(apiResponse.getResponseBodyAsString())
\r
235 def responseCode = apiResponse.getStatusCode()
\r
237 utils.logAudit("AAI Response Code: " + responseCode)
\r
238 utils.logAudit("AAI Response: " + aaiResponse)
\r
239 if(responseCode == 200){
\r
240 utils.log("DEBUG", "UpdateAR Good REST Response is: " + "\n" + aaiResponse, isDebugEnabled)
\r
242 utils.log("DEBUG", "UpdateAROrchStatus Bad REST Response!", isDebugEnabled)
\r
243 buildAAIErrorResponse(execution, aaiResponse, "Error updating AR OrchStatus in AAI")
\r
246 }catch(BpmnError b){
\r
247 utils.log("DEBUG", "Rethrowing MSOWorkflowException ", isDebugEnabled)
\r
249 }catch(Exception e){
\r
250 utils.log("ERROR", "Exception in updateAR. Exception is:\n" + e.getMessage(), isDebugEnabled)
\r
251 exceptionUtil.buildAndThrowWorkflowException(execution, 500, 'Internal Error in updateAROrchStatus.' + e.getMessage())
\r
253 utils.log("DEBUG", " *** Exit updateAROrchStatus *** ", isDebugEnabled)
\r
256 //Sets Variable "wasDeleted"
\r
257 public void deleteAR(Execution execution, String aaiARPath){
\r
258 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
\r
259 utils.log("DEBUG", " *** deleteAR *** aaiARPath:" + aaiARPath, isDebugEnabled)
\r
261 AaiUtil aaiUriUtil = new AaiUtil(taskProcessor)
\r
262 APIResponse response = aaiUriUtil.executeAAIDeleteCall(execution, aaiARPath)
\r
263 int responseCode = response.getStatusCode()
\r
264 execution.setVariable("deleteARResponseCode", responseCode)
\r
266 utils.log("DEBUG", " Delete AR response code:" + responseCode, isDebugEnabled)
\r
268 String aaiResponse = response.getResponseBodyAsString()
\r
269 aaiResponse = StringEscapeUtils.unescapeXml(aaiResponse)
\r
270 execution.setVariable("aaiARDeleteResponse", aaiResponse)
\r
272 utils.log("DEBUG", "Delete AR Response:" + aaiResponse)
\r
274 if(responseCode == 204){
\r
275 utils.log("DEBUG", " Delete AR Received a Good Response", isDebugEnabled)
\r
276 execution.setVariable("wasDeleted", "true")
\r
277 }else if(responseCode == 404){
\r
278 utils.log("DEBUG", " Delete AR Received a Not Found (404) Response", isDebugEnabled)
\r
279 }else if(responseCode == 412){
\r
280 utils.log("DEBUG", "Delete AR Received a Resource Version Mismatch Error: \n" + aaiResponse, isDebugEnabled)
\r
281 exceptionUtil.buildAndThrowWorkflowException(execution, 412, "DeleteAR Received a resource-version Mismatch Error Response from AAI")
\r
283 utils.log("DEBUG", "Delete AR Received a BAD REST Response: \n" + aaiResponse, isDebugEnabled)
\r
284 buildAAIErrorResponse(execution, aaiResponse, "Error deleting AR in AAI")
\r
285 exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
\r
287 }catch(BpmnError b){
\r
288 utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled)
\r
290 }catch(Exception e){
\r
291 utils.log("DEBUG", " Error encountered in deleteAR!" + e, isDebugEnabled)
\r
292 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured During Delete AR")
\r
294 utils.log("DEBUG", " *** Exit deleteAR *** ", isDebugEnabled)
\r
297 public void buildAAIErrorResponse(Execution execution, String response, String errorMessage){
\r
298 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
\r
299 utils.log("DEBUG", " *** BuildAAIErrorResponse*** ", isDebugEnabled)
\r
301 if((response != null) && (response.contains("Fault") || response.contains("RESTFault"))){
\r
302 WorkflowException workflowException = exceptionUtil.MapAAIExceptionToWorkflowException(response, execution)
\r
303 execution.setVariable("WorkflowException", workflowException)
\r
305 exceptionUtil.buildWorkflowException(execution, 500, errorMessage)
\r
308 utils.log("DEBUG", " *** Exit BuildAAIErrorResponse Process*** ", isDebugEnabled)
\r
309 throw new BpmnError("MSOWorkflowException")
\r