2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
21 package org.openecomp.mso.bpmn.common.scripts
\r
23 import javax.xml.parsers.DocumentBuilder
\r
24 import javax.xml.parsers.DocumentBuilderFactory
\r
26 import org.apache.commons.lang3.*
\r
27 import org.camunda.bpm.engine.delegate.BpmnError
\r
28 import org.camunda.bpm.engine.runtime.Execution
\r
29 import org.openecomp.mso.bpmn.core.WorkflowException
\r
30 import org.openecomp.mso.rest.APIResponse
\r
31 import org.w3c.dom.Document
\r
32 import org.w3c.dom.Element
\r
33 import org.w3c.dom.Node
\r
34 import org.w3c.dom.NodeList
\r
35 import org.xml.sax.InputSource
\r
39 * Vnf Module Subflow for confirming the volume group belongs
\r
43 * @param volumeGroupId
\r
46 class ConfirmVolumeGroupTenant extends AbstractServiceTaskProcessor{
\r
48 String Prefix="CVGT_"
\r
49 ExceptionUtil exceptionUtil = new ExceptionUtil()
\r
51 public void preProcessRequest(Execution execution){
\r
52 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
\r
53 execution.setVariable("prefix", Prefix)
\r
54 utils.log("DEBUG", " ======== STARTED Confirm Volume Group Tenant Subflow ======== ", isDebugEnabled)
\r
55 String processKey = getProcessKey(execution);
\r
57 utils.log("DEBUG", " === Started QueryAAIForVolumeGroup Process === ", isDebugEnabled)
\r
59 String volumeGroupId = execution.getVariable("volumeGroupId")
\r
60 String incomingGroupName = execution.getVariable("volumeGroupName")
\r
61 String incomingTenantId = execution.getVariable("tenantId")
\r
62 def aicCloudRegion = execution.getVariable("aicCloudRegion")
\r
63 String aai = execution.getVariable("URN_aai_endpoint")
\r
65 AaiUtil aaiUriUtil = new AaiUtil(this)
\r
66 def aai_uri = aaiUriUtil.getCloudInfrastructureCloudRegionUri(execution)
\r
67 logDebug('AAI URI is: ' + aai_uri, isDebugEnabled)
\r
69 String path = aai + "${aai_uri}/${aicCloudRegion}/volume-groups/volume-group/" + volumeGroupId
\r
71 APIResponse queryAAIForVolumeGroupResponse = aaiUriUtil.executeAAIGetCall(execution, path)
\r
73 def responseCode = queryAAIForVolumeGroupResponse.getStatusCode()
\r
74 execution.setVariable("queryVolumeGroupResponseCode", responseCode)
\r
75 String response = queryAAIForVolumeGroupResponse.getResponseBodyAsString()
\r
76 response = StringEscapeUtils.unescapeXml(response)
\r
78 utils.logAudit("ConfirmVolumeGroup Response: " + response)
\r
79 utils.logAudit("ConfirmVolumeGroup Response Code: " + responseCode)
\r
81 if(responseCode == 200 && response != null){
\r
82 execution.setVariable("queryAAIVolumeGroupResponse", response)
\r
83 utils.log("DEBUG", "QueryAAIForVolumeGroup Received a Good REST Response is: \n" + response, isDebugEnabled)
\r
85 String volumeGroupTenantId = ""
\r
86 InputSource source = new InputSource(new StringReader(response));
\r
87 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
\r
88 docFactory.setNamespaceAware(true)
\r
89 DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
\r
90 Document createVCERequestXml = docBuilder.parse(source)
\r
91 NodeList nodeList = createVCERequestXml.getElementsByTagNameNS("*", "relationship")
\r
92 for (int x = 0; x < nodeList.getLength(); x++) {
\r
93 Node node = nodeList.item(x)
\r
94 if (node.getNodeType() == Node.ELEMENT_NODE) {
\r
95 Element eElement = (Element) node
\r
96 String e = eElement.getElementsByTagNameNS("*", "related-to").item(0).getTextContent()
\r
97 if(e.equals("tenant")){
\r
98 NodeList relationDataList = eElement.getElementsByTagNameNS("*", "relationship-data")
\r
99 for (int d = 0; d < relationDataList.getLength(); d++) {
\r
100 Node dataNode = relationDataList.item(d)
\r
101 if (dataNode.getNodeType() == Node.ELEMENT_NODE) {
\r
102 Element dElement = (Element) dataNode
\r
103 String key = dElement.getElementsByTagNameNS("*", "relationship-key").item(0).getTextContent()
\r
104 if(key.equals("tenant.tenant-id")){
\r
105 volumeGroupTenantId = dElement.getElementsByTagNameNS("*", "relationship-value").item(0).getTextContent()
\r
113 //Determine if Tenant Ids match
\r
114 if(incomingTenantId.equals(volumeGroupTenantId)){
\r
115 utils.log("DEBUG", "Tenant Ids Match", isDebugEnabled)
\r
116 execution.setVariable("tenantIdsMatch", true)
\r
118 utils.log("DEBUG", "Tenant Ids DO NOT Match", isDebugEnabled)
\r
119 execution.setVariable("tenantIdsMatch", false)
\r
122 //Determine if Volume Group Names match
\r
123 String volumeGroupName = utils.getNodeText1(response, "volume-group-name")
\r
124 if(incomingGroupName == null || incomingGroupName.length() < 1){
\r
125 utils.log("DEBUG", "Incoming Volume Group Name is NOT Provided.", isDebugEnabled)
\r
126 execution.setVariable("groupNamesMatch", true)
\r
128 utils.log("DEBUG", "Incoming Volume Group Name is: " + incomingGroupName, isDebugEnabled)
\r
129 if(volumeGroupName.equals(incomingGroupName)){
\r
130 utils.log("DEBUG", "Volume Group Names Match.", isDebugEnabled)
\r
131 execution.setVariable("groupNamesMatch", true)
\r
133 utils.log("DEBUG", "Volume Group Names DO NOT Match.", isDebugEnabled)
\r
134 execution.setVariable("groupNamesMatch", false)
\r
138 utils.log("DEBUG", "QueryAAIForVolumeGroup Bad REST Response!", isDebugEnabled)
\r
139 exceptionUtil.buildAndThrowWorkflowException(execution, 1, "Error Searching AAI for Volume Group. Received a Bad Response.")
\r
142 }catch(BpmnError b){
\r
144 }catch(Exception e){
\r
145 utils.log("ERROR", "Exception Occured Processing queryAAIForVolumeGroup. Exception is:\n" + e, isDebugEnabled)
\r
146 exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "Internal Error - Occured in preProcessRequest.")
\r
148 utils.log("DEBUG", "=== COMPLETED queryAAIForVolumeGroup Process === ", isDebugEnabled)
\r
151 public void assignVolumeHeatId(Execution execution){
\r
152 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
\r
153 execution.setVariable("prefix", Prefix)
\r
155 utils.log("DEBUG", " === Started assignVolumeHeatId Process === ", isDebugEnabled)
\r
157 String response = execution.getVariable("queryAAIVolumeGroupResponse")
\r
158 String heatStackId = utils.getNodeText1(response, "heat-stack-id")
\r
159 execution.setVariable("volumeHeatStackId", heatStackId)
\r
160 execution.setVariable("ConfirmVolumeGroupTenantResponse", heatStackId)
\r
161 // TODO: Should deprecate use of processKey+Response variable for the response. Will use "WorkflowResponse" instead
\r
162 execution.setVariable("WorkflowResponse", heatStackId)
\r
163 utils.log("DEBUG", "Volume Heat Stack Id is: " + heatStackId, isDebugEnabled)
\r
165 }catch(Exception e){
\r
166 utils.log("ERROR", "Exception Occured Processing assignVolumeHeatId. Exception is:\n" + e, isDebugEnabled)
\r
167 exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "Internal Error - Occured in assignVolumeHeatId.")
\r
169 utils.log("DEBUG", "=== COMPLETED assignVolumeHeatId Process === ", isDebugEnabled)
\r
170 utils.log("DEBUG", "======== COMPLETED Confirm Volume Group Tenant Subflow ======== ", isDebugEnabled)
\r
173 public void assignWorkflowException(Execution execution, String message){
\r
174 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
\r
175 execution.setVariable("prefix", Prefix)
\r
176 String processKey = getProcessKey(execution);
\r
177 utils.log("DEBUG", " === STARTED Assign Workflow Exception === ", isDebugEnabled)
\r
179 String volumeGroupId = execution.getVariable("volumeGroupId")
\r
181 String errorMessage = "Volume Group " + volumeGroupId + " " + message
\r
183 exceptionUtil.buildWorkflowException(execution, errorCode, errorMessage)
\r
184 }catch(Exception e){
\r
185 utils.log("ERROR", "Exception Occured Processing assignWorkflowException. Exception is:\n" + e, isDebugEnabled)
\r
187 utils.log("DEBUG", "=== COMPLETED Assign Workflow Exception ==== ", isDebugEnabled)
\r