2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Modifications Copyright (c) 2019 Samsung
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License")
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts
25 import org.onap.so.logger.LoggingAnchor
26 import org.onap.logging.filter.base.ErrorCode
28 import static org.apache.commons.lang3.StringUtils.*
30 import javax.xml.parsers.DocumentBuilder
31 import javax.xml.parsers.DocumentBuilderFactory
33 import org.apache.commons.lang3.*
34 import org.camunda.bpm.engine.delegate.BpmnError
35 import org.camunda.bpm.engine.delegate.DelegateExecution
36 import org.json.JSONArray
37 import org.json.JSONObject
38 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
39 import org.onap.so.bpmn.common.scripts.ExceptionUtil
40 import org.onap.so.bpmn.common.scripts.MsoUtils
41 import org.onap.so.bpmn.core.UrnPropertiesReader
42 import org.onap.so.bpmn.core.WorkflowException
43 import org.onap.so.bpmn.core.json.JsonUtils
44 import org.onap.so.logger.MessageEnum
45 import org.slf4j.Logger
46 import org.slf4j.LoggerFactory
47 import org.springframework.web.util.UriUtils
48 import org.w3c.dom.Document
49 import org.w3c.dom.Element
50 import org.w3c.dom.Node
51 import org.w3c.dom.NodeList
52 import org.xml.sax.InputSource
53 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
54 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
55 import org.onap.aaiclient.client.aai.AAIObjectType
56 import org.onap.aaiclient.client.aai.AAIResourcesClient
63 * This groovy class supports the <class>DoDeleteE2EServiceInstance.bpmn</class> process.
66 * @param - msoRequestId
67 * @param - globalSubscriberId - O
68 * @param - subscriptionServiceType - O
69 * @param - serviceInstanceId
70 * @param - serviceInstanceName - O
71 * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM)
72 * @param - sdncVersion
73 * @param - failNotFound - TODO
74 * @param - serviceInputParams - TODO
77 * @param - WorkflowException
81 public class DoCustomDeleteE2EServiceInstance extends AbstractServiceTaskProcessor {
82 private static final Logger logger = LoggerFactory.getLogger( DoCustomDeleteE2EServiceInstance.class)
85 String Prefix="DDELSI_"
86 ExceptionUtil exceptionUtil = new ExceptionUtil()
87 JsonUtils jsonUtil = new JsonUtils()
89 public void preProcessRequest (DelegateExecution execution) {
90 logger.trace("preProcessRequest ")
94 String requestId = execution.getVariable("msoRequestId")
95 execution.setVariable("prefix",Prefix)
98 //requestDetails.subscriberInfo. for AAI GET & PUT & SDNC assignToplology
99 String globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
100 if (globalSubscriberId == null)
102 execution.setVariable("globalSubscriberId", "")
105 //requestDetails.requestParameters. for AAI PUT & SDNC assignTopology
106 String serviceType = execution.getVariable("serviceType")
107 if (serviceType == null)
109 execution.setVariable("serviceType", "")
112 //Generated in parent for AAI PUT
113 String serviceInstanceId = execution.getVariable("serviceInstanceId")
114 if (isBlank(serviceInstanceId)){
115 msg = "Input serviceInstanceId is null"
117 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
120 String sdncCallbackUrl = UrnPropertiesReader.getVariable('mso.workflow.sdncadapter.callback',execution)
121 if (isBlank(sdncCallbackUrl)) {
122 msg = "URN_mso_workflow_sdncadapter_callback is null"
124 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
126 execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
127 logger.info("SDNC Callback URL: " + sdncCallbackUrl)
129 StringBuilder sbParams = new StringBuilder()
130 Map<String, String> paramsMap = execution.getVariable("serviceInputParams")
131 if (paramsMap != null)
133 sbParams.append("<service-input-parameters>")
134 for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
136 String paramName = entry.getKey()
137 String paramValue = entry.getValue()
140 <name>${MsoUtils.xmlEscape(paramName)}</name>
141 <value>${MsoUtils.xmlEscape(paramValue)}</value>
144 sbParams.append(paramsXml)
146 sbParams.append("</service-input-parameters>")
148 String siParamsXml = sbParams.toString()
149 if (siParamsXml == null)
151 execution.setVariable("siParamsXml", siParamsXml)
153 } catch (BpmnError e) {
155 } catch (Exception ex){
156 msg = "Exception in preProcessRequest " + ex.getMessage()
158 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
160 logger.trace("Exit preProcessRequest ")
164 public void preProcessVFCDelete (DelegateExecution execution) {
167 public void postProcessVFCDelete(DelegateExecution execution, String response, String method) {
170 public void preProcessSDNCDelete (DelegateExecution execution) {
171 logger.trace("preProcessSDNCDelete ")
175 def serviceInstanceId = execution.getVariable("serviceInstanceId")
176 def serviceInstanceName = execution.getVariable("serviceInstanceName")
177 def callbackURL = execution.getVariable("sdncCallbackUrl")
178 def requestId = execution.getVariable("msoRequestId")
179 def serviceId = execution.getVariable("productFamilyId")
180 def subscriptionServiceType = execution.getVariable("subscriptionServiceType")
181 def globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
183 String serviceModelInfo = execution.getVariable("serviceModelInfo")
184 def modelInvariantUuid = ""
185 def modelVersion = ""
188 if (!isBlank(serviceModelInfo))
190 modelInvariantUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantUuid")
191 modelVersion = jsonUtil.getJsonValue(serviceModelInfo, "modelVersion")
192 modelUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelUuid")
193 modelName = jsonUtil.getJsonValue(serviceModelInfo, "modelName")
195 if (modelInvariantUuid == null) {
196 modelInvariantUuid = ""
198 if (modelVersion == null) {
201 if (modelUuid == null) {
204 if (modelName == null) {
208 if (serviceInstanceName == null) {
209 serviceInstanceName = ""
211 if (serviceId == null) {
215 def siParamsXml = execution.getVariable("siParamsXml")
216 def serviceType = execution.getVariable("serviceType")
217 if (serviceType == null)
222 def sdncRequestId = UUID.randomUUID().toString()
225 """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
226 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
227 xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
228 <sdncadapter:RequestHeader>
229 <sdncadapter:RequestId>${MsoUtils.xmlEscape(sdncRequestId)}</sdncadapter:RequestId>
230 <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
231 <sdncadapter:SvcAction>delete</sdncadapter:SvcAction>
232 <sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>
233 <sdncadapter:CallbackUrl>${MsoUtils.xmlEscape(callbackURL)}</sdncadapter:CallbackUrl>
234 <sdncadapter:MsoAction>${MsoUtils.xmlEscape(serviceType)}</sdncadapter:MsoAction>
235 </sdncadapter:RequestHeader>
236 <sdncadapterworkflow:SDNCRequestData>
237 <request-information>
238 <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
243 <request-action>DeleteServiceInstance</request-action>
244 </request-information>
245 <service-information>
246 <service-id>${MsoUtils.xmlEscape(serviceId)}</service-id>
247 <subscription-service-type>${MsoUtils.xmlEscape(subscriptionServiceType)}</subscription-service-type>
248 <onap-model-information>
249 <model-invariant-uuid>${MsoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
250 <model-uuid>${MsoUtils.xmlEscape(modelUuid)}</model-uuid>
251 <model-version>${MsoUtils.xmlEscape(modelVersion)}</model-version>
252 <model-name>${MsoUtils.xmlEscape(modelName)}</model-name>
253 </onap-model-information>
254 <service-instance-id>${MsoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
256 <global-customer-id>${MsoUtils.xmlEscape(globalSubscriberId)}</global-customer-id>
257 </service-information>
258 <service-request-input>
259 <service-instance-name>${MsoUtils.xmlEscape(serviceInstanceName)}</service-instance-name>
261 </service-request-input>
262 </sdncadapterworkflow:SDNCRequestData>
263 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
265 sdncDelete = utils.formatXml(sdncDelete)
266 def sdncRequestId2 = UUID.randomUUID().toString()
267 String sdncDeactivate = sdncDelete.replace(">delete<", ">deactivate<").replace(">${sdncRequestId}<", ">${sdncRequestId2}<")
268 execution.setVariable("sdncDelete", sdncDelete)
269 execution.setVariable("sdncDeactivate", sdncDeactivate)
270 logger.info("sdncDeactivate:\n" + sdncDeactivate)
271 logger.info("sdncDelete:\n" + sdncDelete)
273 } catch (BpmnError e) {
275 } catch(Exception ex) {
276 msg = "Exception in preProcessSDNCDelete. " + ex.getMessage()
278 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Exception Occured in preProcessSDNCDelete.\n" + ex.getMessage())
280 logger.info(" *****Exit preProcessSDNCDelete *****")
283 public void postProcessSDNCDelete(DelegateExecution execution, String response, String method) {
285 logger.trace("postProcessSDNC " + method + " ")
289 WorkflowException workflowException = execution.getVariable("WorkflowException")
290 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
291 logger.info("SDNCResponse: " + response)
292 logger.info("workflowException: " + workflowException)
294 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
295 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
296 if(execution.getVariable(Prefix + 'sdncResponseSuccess') == "true"){
297 logger.info("Good response from SDNC Adapter for service-instance " + method + "response:\n" + response)
300 msg = "Bad Response from SDNC Adapter for service-instance " + method
302 exceptionUtil.buildAndThrowWorkflowException(execution, 3500, msg)
304 } catch (BpmnError e) {
306 } catch(Exception ex) {
307 msg = "Exception in postProcessSDNC " + method + " Exception:" + ex.getMessage()
309 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
311 logger.trace("Exit postProcessSDNC " + method + " ")
314 public void postProcessAAIGET(DelegateExecution execution) {
315 logger.trace("postProcessAAIGET ")
319 String serviceInstanceId = execution.getVariable("serviceInstanceId")
320 boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
321 String serviceType = ""
324 logger.info("Found Service-instance in AAI")
326 String siData = execution.getVariable("GENGS_service")
327 logger.info("SI Data")
330 msg = "Could not retrive ServiceInstance data from AAI to delete id:" + serviceInstanceId
332 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
336 logger.info("SI Data" + siData)
337 //Confirm there are no related service instances (vnf/network or volume)
338 if (utils.nodeExists(siData, "relationship-list")) {
339 logger.info("SI Data relationship-list exists:")
340 InputSource source = new InputSource(new StringReader(siData))
341 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance()
342 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
343 Document serviceXml = docBuilder.parse(source)
344 serviceXml.getDocumentElement().normalize()
346 NodeList nodeList = serviceXml.getElementsByTagName("relationship")
347 JSONArray jArray = new JSONArray()
348 for (int x = 0; x < nodeList.getLength(); x++) {
349 Node node = nodeList.item(x)
350 if (node.getNodeType() == Node.ELEMENT_NODE) {
351 Element eElement = (Element) node
352 def e = eElement.getElementsByTagName("related-to").item(0).getTextContent() //for ns
353 if(e.equals("service-instance")){
354 def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
355 logger.info("ServiceInstance Related NS :" + relatedObject)
356 NodeList dataList = node.getChildNodes()
357 if(null != dataList) {
358 JSONObject jObj = new JSONObject()
359 for (int i = 0; i < dataList.getLength(); i++) {
360 Node dNode = dataList.item(i)
361 if(dNode.getNodeName() == "relationship-data") {
362 Element rDataEle = (Element)dNode
363 def eKey = rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
364 def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
365 if(eKey.equals("service-instance.service-instance-id")){
366 jObj.put("resourceInstanceId", eValue)
369 else if(dNode.getNodeName() == "related-to-property"){
370 Element rDataEle = (Element)dNode
371 def eKey = rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
372 def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
373 if(eKey.equals("service-instance.service-instance-name")){
374 jObj.put("resourceType", eValue)
378 logger.info("Relationship related to Resource:" + jObj.toString())
381 //for overlay/underlay
382 }else if (e.equals("configuration")){
383 def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
384 logger.info("ServiceInstance Related Configuration :" + relatedObject)
385 NodeList dataList = node.getChildNodes()
386 if(null != dataList) {
387 JSONObject jObj = new JSONObject()
388 for (int i = 0; i < dataList.getLength(); i++) {
389 Node dNode = dataList.item(i)
390 if(dNode.getNodeName() == "relationship-data") {
391 Element rDataEle = (Element)dNode
392 def eKey = rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
393 def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
394 if(eKey.equals("configuration.configuration-id")){
395 jObj.put("resourceInstanceId", eValue)
398 else if(dNode.getNodeName() == "related-to-property"){
399 Element rDataEle = (Element)dNode
400 def eKey = rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
401 def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
402 if(eKey.equals("configuration.configuration-type")){
403 jObj.put("resourceType", eValue)
407 logger.info("Relationship related to Resource:" + jObj.toString())
413 execution.setVariable("serviceRelationShip", jArray.toString())
417 boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
419 logger.info("Error getting Service-instance from AAI", + serviceInstanceId)
420 WorkflowException workflowException = execution.getVariable("WorkflowException")
421 logger.debug("workflowException: " + workflowException)
422 if(workflowException != null){
423 exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
427 msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
429 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
433 logger.info("Service-instance NOT found in AAI. Silent Success")
435 }catch (BpmnError e) {
437 } catch (Exception ex) {
438 msg = "Exception in DoDeleteE2EServiceInstance.postProcessAAIGET. " + ex.getMessage()
440 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
442 logger.trace("Exit postProcessAAIGET ")
446 * Deletes the service instance in aai
448 public void deleteServiceInstance(DelegateExecution execution) {
449 logger.trace("Entered deleteServiceInstance")
451 String globalCustId = execution.getVariable("globalSubscriberId")
452 String serviceType = execution.getVariable("serviceType")
453 String serviceInstanceId = execution.getVariable("serviceInstanceId")
455 AAIResourcesClient resourceClient = new AAIResourcesClient()
456 AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalCustId, serviceType, serviceInstanceId)
457 resourceClient.delete(serviceInstanceUri)
459 logger.trace("Exited deleteServiceInstance")
461 logger.debug("Error occured within deleteServiceInstance method: " + e)
462 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Error occured during deleteServiceInstance from aai")
466 public void preInitResourcesOperStatus(DelegateExecution execution){
467 logger.trace("STARTED preInitResourcesOperStatus Process ")
469 String serviceId = execution.getVariable("serviceInstanceId")
470 String operationId = execution.getVariable("operationId")
471 String operationType = execution.getVariable("operationType")
472 String resourceTemplateUUIDs = ""
473 String result = "processing"
474 String progress = "0"
476 String operationContent = "Prepare service creation"
477 logger.info("Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId + " operationType:" + operationType)
478 serviceId = UriUtils.encode(serviceId,"UTF-8")
479 execution.setVariable("serviceInstanceId", serviceId)
480 execution.setVariable("operationId", operationId)
481 execution.setVariable("operationType", operationType)
482 // we use resource instance ids for delete flow as resourceTemplateUUIDs
485 "resourceInstanceId":"1111",
486 "resourceType":"vIMS"
489 "resourceInstanceId":"222",
490 "resourceType":"vEPC"
493 "resourceInstanceId":"3333",
494 "resourceType":"overlay"
497 "resourceInstanceId":"4444",
498 "resourceType":"underlay"
501 String serviceRelationShip = execution.getVariable("serviceRelationShip")
503 def jsonSlurper = new JsonSlurper()
504 def jsonOutput = new JsonOutput()
505 List relationShipList = jsonSlurper.parseText(serviceRelationShip)
507 if (relationShipList != null) {
508 relationShipList.each {
509 resourceTemplateUUIDs = resourceTemplateUUIDs + it.resourceInstanceId + ":"
513 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
514 execution.setVariable("URN_mso_adapters_openecomp_db_endpoint", dbAdapterEndpoint)
517 """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
518 xmlns:ns="http://org.onap.so/requestsdb">
521 <ns:initResourceOperationStatus xmlns:ns="http://org.onap.so/requestsdb">
522 <serviceId>${MsoUtils.xmlEscape(serviceId)}</serviceId>
523 <operationId>${MsoUtils.xmlEscape(operationId)}</operationId>
524 <operationType>${MsoUtils.xmlEscape(operationType)}</operationType>
525 <resourceTemplateUUIDs>${MsoUtils.xmlEscape(resourceTemplateUUIDs)}</resourceTemplateUUIDs>
526 </ns:initResourceOperationStatus>
528 </soapenv:Envelope>"""
530 payload = utils.formatXml(payload)
531 execution.setVariable("CVFMI_initResOperStatusRequest", payload)
532 logger.info("Outgoing initResourceOperationStatus: \n" + payload)
533 logger.debug("CreateVfModuleInfra Outgoing initResourceOperationStatus Request: " + payload)
536 logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(),
537 "Exception Occured Processing preInitResourcesOperStatus.", "BPMN",
538 ErrorCode.UnknownError.getValue(), e)
539 execution.setVariable("CVFMI_ErrorResponse", "Error Occurred during preInitResourcesOperStatus Method:\n" + e.getMessage())
541 logger.trace("COMPLETED preInitResourcesOperStatus Process ")
545 * prepare delete parameters
547 public void preResourceDelete(execution, resourceName){
548 // we use resource instance ids for delete flow as resourceTemplateUUIDs
551 "resourceInstanceId":"1111",
552 "resourceType":"vIMS"
555 "resourceInstanceId":"222",
556 "resourceType":"vEPC"
559 "resourceInstanceId":"3333",
560 "resourceType":"overlay"
563 "resourceInstanceId":"4444",
564 "resourceType":"underlay"
567 logger.trace("STARTED preResourceDelete Process ")
568 String serviceRelationShip = execution.getVariable("serviceRelationShip")
569 def jsonSlurper = new JsonSlurper()
570 def jsonOutput = new JsonOutput()
571 List relationShipList = jsonSlurper.parseText(serviceRelationShip)
573 if (relationShipList != null) {
574 relationShipList.each {
575 if(StringUtils.containsIgnoreCase(it.resourceType, resourceName)) {
576 String resourceInstanceUUID = it.resourceInstanceId
577 String resourceTemplateUUID = it.resourceInstanceId
578 execution.setVariable("resourceTemplateId", resourceTemplateUUID)
579 execution.setVariable("resourceInstanceId", resourceInstanceUUID)
580 execution.setVariable("resourceType", resourceName)
581 logger.info("Delete Resource Info resourceTemplate Id :" + resourceTemplateUUID + " resourceInstanceId: " + resourceInstanceUUID + " resourceType: " + resourceName)
585 logger.trace("END preResourceDelete Process ")
588 public void sequenceResource(execution){
589 logger.trace("STARTED sequenceResource Process ")
590 List<String> nsResources = new ArrayList<String>()
591 List<String> wanResources = new ArrayList<String>()
592 List<String> resourceSequence = new ArrayList<String>()
594 String serviceRelationShip = execution.getVariable("serviceRelationShip")
597 def jsonSlurper = new JsonSlurper()
598 def jsonOutput = new JsonOutput()
599 List relationShipList = jsonSlurper.parseText(serviceRelationShip)
601 if (relationShipList != null) {
602 relationShipList.each {
603 if(StringUtils.containsIgnoreCase(it.resourceType, "overlay") || StringUtils.containsIgnoreCase(it.resourceType, "underlay")){
604 wanResources.add(it.resourceType)
606 nsResources.add(it.resourceType)
610 resourceSequence.addAll(wanResources)
611 resourceSequence.addAll(nsResources)
612 String isContainsWanResource = wanResources.isEmpty() ? "false" : "true"
613 execution.setVariable("isContainsWanResource", isContainsWanResource)
614 execution.setVariable("currentResourceIndex", 0)
615 execution.setVariable("resourceSequence", resourceSequence)
616 logger.info("resourceSequence: " + resourceSequence)
617 execution.setVariable("wanResources", wanResources)
618 logger.trace("END sequenceResource Process ")
621 public void getCurrentResource(execution){
622 logger.trace("Start getCurrentResoure Process ")
623 def currentIndex = execution.getVariable("currentResourceIndex")
624 List<String> resourceSequence = execution.getVariable("resourceSequence")
625 List<String> wanResources = execution.getVariable("wanResources")
626 String resourceName = resourceSequence.get(currentIndex)
627 execution.setVariable("resourceType",resourceName)
628 if(wanResources.contains(resourceName)){
629 execution.setVariable("controllerInfo", "SDN-C")
631 execution.setVariable("controllerInfo", "VF-C")
633 logger.trace("COMPLETED getCurrentResoure Process ")
636 public void parseNextResource(execution){
637 logger.trace("Start parseNextResource Process ")
638 def currentIndex = execution.getVariable("currentResourceIndex")
639 def nextIndex = currentIndex + 1
640 execution.setVariable("currentResourceIndex", nextIndex)
641 List<String> resourceSequence = execution.getVariable("resourceSequence")
642 if(nextIndex >= resourceSequence.size()){
643 execution.setVariable("allResourceFinished", "true")
645 execution.setVariable("allResourceFinished", "false")
647 logger.trace("COMPLETED parseNextResource Process ")