2 * ============LICENSE_START=======================================================
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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 * ============LICENSE_END=========================================================
17 package org.onap.so.bpmn.infrastructure.scripts
19 import org.camunda.bpm.engine.delegate.DelegateExecution
20 import org.onap.aai.domain.yang.ServiceInstance
21 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
22 import org.onap.so.bpmn.common.scripts.ExceptionUtil
23 import org.onap.so.bpmn.core.domain.Resource
24 import org.onap.so.bpmn.core.domain.ServiceDecomposition
25 import org.onap.so.bpmn.core.json.JsonUtils
26 import org.onap.so.bpmn.infrastructure.workflow.service.ServicePluginFactory
27 import org.slf4j.Logger
28 import org.slf4j.LoggerFactory
30 * This groovy class supports the <class>DoCompareServiceInstanceData.bpmn</class> process.
33 * @param - serviceInstanceData-original
34 * @param - serviceInstanceId
36 * @param - model-invariant-id-original
37 * @param - model-version-id-original
38 * @param - msoRequestId
39 * @param - isDebugLogEnabled
42 * @param - addResourceList
43 * @param - delResourceList
44 * @param - uuiRequest-add
45 * @param - uuiRequest-del
48 public class DoCompareServiceInstanceData extends AbstractServiceTaskProcessor {
50 ExceptionUtil exceptionUtil = new ExceptionUtil()
51 JsonUtils jsonUtil = new JsonUtils()
52 private static final Logger logger = LoggerFactory.getLogger( DoCompareServiceInstanceData.class);
54 public void preProcessRequest (DelegateExecution execution) {
55 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
56 logger.info("INFO"," ***** preProcessRequest *****", isDebugEnabled)
58 checkInput("serviceInstanceData-original", execution, isDebugEnabled)
59 checkInput("serviceInstanceId", execution, isDebugEnabled)
60 checkInput("uuiRequest", execution, isDebugEnabled)
61 checkInput("model-invariant-id-original", execution, isDebugEnabled)
62 checkInput("model-version-id-original", execution, isDebugEnabled)
63 checkInput("msoRequestId", execution, isDebugEnabled)
64 } catch (Exception ex){
65 String msg = "Exception in preProcessRequest " + ex.getMessage()
66 logger.info("INFO", msg, isDebugEnabled)
67 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
69 logger.info("INFO"," ***** Exit preProcessRequest *****", isDebugEnabled)
72 private void checkInput(String inputName, DelegateExecution execution, isDebugEnabled) {
74 Object inputValue = execution.getVariable(inputName)
75 if (inputValue == null) {
76 msg = "Input" + inputName + "is null"
77 logger.info("INFO", msg, isDebugEnabled)
78 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
83 public void prepareDecomposeService_Original(DelegateExecution execution) {
84 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
87 logger.debug( " ***** Inside prepareDecomposeService_Original of update generic e2e service ***** ")
88 String modelInvariantUuid = execution.getVariable("model-invariant-id-original")
89 String modelUuid = execution.getVariable("model-version-id-original")
90 //here modelVersion is not set, we use modelUuid to decompose the service.
91 String serviceModelInfo = """{
92 "modelInvariantUuid":"${modelInvariantUuid}",
93 "modelUuid":"${modelUuid}",
97 execution.setVariable("serviceModelInfo_Original", serviceModelInfo)
99 logger.debug( " ***** Completed prepareDecomposeService_Original of update generic e2e service ***** ")
100 } catch (Exception ex) {
101 // try error in method block
102 String exceptionMessage = "Bpmn error encountered in update generic e2e service flow. Unexpected Error from method prepareDecomposeService_Original() - " + ex.getMessage()
103 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
107 public void processDecomposition_Original(DelegateExecution execution) {
108 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
110 logger.debug( " ***** Inside processDecomposition_Original() of update generic e2e service flow ***** ")
112 ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
113 execution.setVariable("serviceDecomposition_Original", serviceDecomposition)
114 } catch (Exception ex) {
115 String exceptionMessage = "Bpmn error encountered in update generic e2e service flow. processDecomposition_Original() - " + ex.getMessage()
116 logger.debug( exceptionMessage)
117 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
121 public void doCompareUuiRquestInput(DelegateExecution execution) {
123 def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
124 logger.info("INFO", "======== Start doCompareUuiRquestInput Process ======== ", isDebugEnabled)
126 String uuiRequest_Target = execution.getVariable("uuiRequest")
127 Map<String, Object> serviceParametersObject_Target = getServiceParametersObject(uuiRequest_Target)
128 Map<String, Object> serviceRequestInputs_Target = (Map<String, Object>) serviceParametersObject_Target.get("requestInputs")
129 List<Object> resources_Target = (List<Object>) serviceParametersObject_Target.get("resources")
131 String uuiRequest_Original = ((ServiceInstance) execution.getVariable("serviceInstanceData-original")).getInputParameters()
132 Map<String, Object> serviceParametersObject_Original = getServiceParametersObject(uuiRequest_Original)
133 Map<String, Object> serviceRequestInputs_Original = (Map<String, Object>) serviceParametersObject_Original.get("requestInputs")
134 List<Object> resources_Original = (List<Object>) serviceParametersObject_Original.get("resources")
136 logger.info("INFO", "uuiRequest is: " + uuiRequest_Target, isDebugEnabled)
138 //the resources which are included by resources_Target but resources_Original are the resources going to be added
139 ArrayList<Object> resourceList_Add = findResourceListIncluded(resources_Target, resources_Original)
140 HashMap<String, Object> serviceRequestInputs_Add = getServiceRequestInputsIncluded(resourceList_Add, serviceRequestInputs_Target, serviceParametersObject_Target)
141 String uuiRequest_add = loadUuiRequestJsonString(uuiRequest_Target, resourceList_Add, serviceRequestInputs_Add)
142 execution.setVariable("uuiRequest", uuiRequest_add)
143 logger.info("INFO", "uuiRequest will be changed to: " + uuiRequest_add, isDebugEnabled)
145 //the resources which are included by resources_Original but resources_Target are the resources going to be deleted
146 ArrayList<Object> resourceList_Del = findResourceListIncluded(resources_Original, resources_Target)
147 HashMap<String, Object> serviceRequestInputs_Del = getServiceRequestInputsIncluded(resourceList_Del, serviceRequestInputs_Original, serviceParametersObject_Original)
148 String uuiRequest_del = loadUuiRequestJsonString(uuiRequest_Original, resourceList_Del, serviceRequestInputs_Del)
149 execution.setVariable("uuiRequest-del", uuiRequest_del)
150 logger.info("INFO", "uuiRequest-del: " + uuiRequest_del, isDebugEnabled)
152 List<Resource> addResourceList = findResourceList(resourceList_Add, execution)
153 execution.setVariable("addResourceList", addResourceList)
154 logger.info("INFO", "addResourceList: " + addResourceList, isDebugEnabled)
156 List<Resource> delResourceList = findResourceList(resourceList_Del, execution)
157 execution.setVariable("delResourceList", delResourceList)
158 logger.info("INFO", "delResourceList: " + delResourceList, isDebugEnabled)
160 logger.info("INFO", "======== COMPLETED doCompareUuiRquestInput Process ======== ", isDebugEnabled)
163 private List<Resource> findResourceList(ArrayList<Object> uuiResourceList, DelegateExecution execution) {
164 HashSet<String> addResourceCustomizationUuidSet = getCustomizationUuidSet(uuiResourceList)
165 Set<Resource> resourceSet = new HashSet<>()
166 ServiceDecomposition serviceDecomposition_Original = execution.getVariable("serviceDecomposition_Original")
167 List<Resource> allSR_original = serviceDecomposition_Original.getServiceResources()
168 for (Resource resource : allSR_original) {
169 if (addResourceCustomizationUuidSet.contains(resource.getModelInfo().getModelCustomizationUuid())) {
170 resourceSet.add(resource)
173 List<Resource> resourceList = new ArrayList<String>(resourceSet)
177 private HashSet<String> getCustomizationUuidSet(ArrayList<Object> resourceList_Add) {
178 Set<String> addRsourceCustomizationUuidSet = new HashSet<>()
179 for (Map<String, Object> resourceAdded : resourceList_Add) {
180 addRsourceCustomizationUuidSet.add(resourceAdded.get("rsourceCustomizationUuid"))
182 addRsourceCustomizationUuidSet
185 private String loadUuiRequestJsonString(String uuiRequest_Target, ArrayList<Object> resourceList_Add, HashMap<String, Object> serviceRequestInputs_Add) {
186 Map<String, Object> uuiObject = ServicePluginFactory.getInstance().getJsonObject(uuiRequest_Target, Map.class)
187 Map<String, Object> serviceObject = (Map<String, Object>) uuiObject.get("service")
188 Map<String, Object> serviceParametersObject = (Map<String, Object>) serviceObject.get("parameters")
189 serviceParametersObject.put("resources", resourceList_Add)
190 serviceParametersObject.put("requestInputs", serviceRequestInputs_Add)
191 String uuiRequest_add = ServicePluginFactory.getInstance().getJsonString(serviceObject)
195 private HashMap<String, Object> getServiceRequestInputsIncluded(ArrayList<Object> resourceList_Add, Map<String, Object> serviceRequestInputs_Target, Map<String, Object> serviceParametersObject_Target) {
196 ArrayList<String> newResourceNames = getNewResourceNames(resourceList_Add)
197 Map<String, Object> serviceRequestInputs_Add = new HashMap<String, Object>()
198 for (String inputKey : serviceRequestInputs_Target.keySet()) {
199 String resourceName = (inputKey.split("_"))[0]
200 if (newResourceNames.contains(resourceName)) {
201 serviceRequestInputs_Add.put(inputKey, serviceParametersObject_Target.get(inputKey))
204 serviceRequestInputs_Add
207 private ArrayList<String> getNewResourceNames(ArrayList<Object> addResourceList) {
208 Set<String> newResourceNames = new ArrayList<String>()
209 for (Object resourceObject : addResourceList) {
210 Map<String, Object> resourceAdded = (Map<String, Object>) resourceObject
211 String resName = new String(resourceAdded.get("resourceName"))
212 normalizeName(resName)
213 newResourceNames.add(resName)
218 private void normalizeName(String resName) {
219 resName.replaceAll("_", "")
220 resName.replaceAll(" ", "")
221 resName.toLowerCase()
224 private ArrayList<Object> findResourceListIncluded(List<Object> resources_Target, List<Object> resources_Original) {
225 List<Object> addResourceList = new ArrayList<Object>()
226 for (Object resource_Target : resources_Target) {
227 Map<String, Object> resourceObject_Target = (Map<String, Object>) resource_Target
228 boolean isNewResourceInstance = isNewResourceInstance(resourceObject_Target, resources_Original)
229 if (isNewResourceInstance) {
230 addResourceList.add(resource_Target)
236 private boolean isNewResourceInstance(Map<String, Object> resourceObject_Target, List<Object> resources_Original) {
237 String resourceIndex_Target = null
238 if (resourceObject_Target.keySet().contains("resourceIndex")) {
239 resourceIndex_Target = resourceObject_Target.get("resourceIndex")
241 String resourceName_Target = resourceObject_Target.get("resourceName")
242 boolean isNewResourceInstance = true
243 for (Object resource_Original : resources_Original) {
244 Map<String, Object> resourceObject_Original = (Map<String, Object>) resource_Original
245 String resourceIndex_Original = null
246 if (resourceObject_Original.keySet().contains("resourceIndex")) {
247 resourceIndex_Original = resourceObject_Original.get("resourceIndex")
249 String resourceName_Original = resourceObject_Original.get("resourceName")
250 if (resourceName_Target.equals(resourceName_Original)) {
251 if (resourceIndex_Target != null && resourceIndex_Original != null) {
252 if (resourceIndex_Target.equals(resourceIndex_Original)) {
253 isNewResourceInstance = false
256 isNewResourceInstance = false
260 isNewResourceInstance
263 private Map<String, Object> getServiceParametersObject(String uuiRequest_Target) {
264 Map<String, Object> uuiObject = ServicePluginFactory.getInstance().getJsonObject(uuiRequest_Target, Map.class)
265 Map<String, Object> serviceObject = (Map<String, Object>) uuiObject.get("service")
266 Map<String, Object> serviceParametersObject = (Map<String, Object>) serviceObject.get("parameters")
267 serviceParametersObject