Fix bugs found in TN Slicing integration involving OOF
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / AnNssmfutils.groovy
index da95847..eb7e89c 100644 (file)
@@ -153,6 +153,52 @@ public void createDomainWiseSliceProfiles(List<String> ranConstituentSliceProfil
 
 public void createSliceProfilesInAai(DelegateExecution execution) {
        
+       String serviceCategory = execution.getVariable("serviceCategory")
+       if (execution.getVariable("IsRANNfAlonePresent")) {
+               ServiceInstance ANNF_sliceProfileInstance = new ServiceInstance();
+               String ANNF_sliceProfileInstanceId = UUID.randomUUID().toString()
+               String ANNF_sliceProfileId = UUID.randomUUID().toString()
+               execution.setVariable("ANNF_sliceProfileInstanceId", ANNF_sliceProfileInstanceId)
+               execution.setVariable("ANNF_sliceProfileId", ANNF_sliceProfileId)
+               SliceProfiles ANNF_SliceProfiles = new SliceProfiles()
+               SliceProfile ANNF_SliceProfile = createSliceProfile("AN_NF", execution)
+               ANNF_SliceProfiles.getSliceProfile().add(ANNF_SliceProfile)
+               logger.debug("sliceProfiles : 1. " + ANNF_SliceProfiles.toString())
+               //ANNF slice profile instance creation
+               ANNF_sliceProfileInstance.setServiceInstanceId(ANNF_sliceProfileInstanceId)
+               String sliceInstanceName = "sliceprofile_" + ANNF_sliceProfileId
+               ANNF_sliceProfileInstance.setServiceInstanceName(sliceInstanceName)
+               String serviceType = execution.getVariable("sst") as String
+               ANNF_sliceProfileInstance.setServiceType(serviceType)
+               String serviceStatus = "deactivated"
+               ANNF_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
+               String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile") as String, "pLMNIdList")
+               ANNF_sliceProfileInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
+               String serviceRole = "slice-profile-instance"
+               ANNF_sliceProfileInstance.setServiceRole(serviceRole)
+               ArrayList<String> snssaiList = jsonUtil.StringArrayToList(execution.getVariable("snssaiList") as String)
+               String snssai = snssaiList.get(0)
+               ANNF_sliceProfileInstance.setEnvironmentContext(snssai)
+               ANNF_sliceProfileInstance.setWorkloadContext("AN_NF")
+               ANNF_sliceProfileInstance.setSliceProfiles(ANNF_SliceProfiles)
+               String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile") as String, "resourceSharingLevel")
+               ANNF_sliceProfileInstance.setServiceFunction(serviceFunctionAnnf)
+               logger.debug("completed ANNF sliceprofileinstance build : " + ANNF_sliceProfileInstance.toString())
+               String msg = ""
+               try {
+
+                       AAIResourcesClient client = new AAIResourcesClient()
+                       AAIResourceUri sliceProfileUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId") as String).serviceSubscription(execution.getVariable("subscriptionServiceType") as String).serviceInstance(ANNF_sliceProfileInstanceId))
+                       client.create(sliceProfileUri, ANNF_sliceProfileInstance)
+               } catch (BpmnError e) {
+                       throw e
+               } catch (Exception ex) {
+                       msg = "Exception in AnNssmfUtils.createSliceProfilesInAai " + ex.getMessage()
+                       logger.info(msg)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+               }
+       }
+else{
        org.onap.aai.domain.yang.ServiceInstance ANNF_sliceProfileInstance = new ServiceInstance();
        org.onap.aai.domain.yang.ServiceInstance TNFH_sliceProfileInstance = new ServiceInstance();
        org.onap.aai.domain.yang.ServiceInstance TNMH_sliceProfileInstance = new ServiceInstance();
@@ -163,12 +209,12 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        String TNFH_sliceProfileId = UUID.randomUUID().toString()
        String TNMH_sliceProfileInstanceId = UUID.randomUUID().toString()
        String TNMH_sliceProfileId = UUID.randomUUID().toString()
-       execution.setVariable("ANNF_sliceProfileInstanceId",ANNF_sliceProfileInstanceId)
-       execution.setVariable("ANNF_sliceProfileId",ANNF_sliceProfileId)
-       execution.setVariable("TNFH_sliceProfileInstanceId",TNFH_sliceProfileInstanceId)
-       execution.setVariable("TNFH_sliceProfileId",TNFH_sliceProfileId)
-       execution.setVariable("TNMH_sliceProfileInstanceId",TNMH_sliceProfileInstanceId)
-       execution.setVariable("TNMH_sliceProfileId",TNMH_sliceProfileId)
+       execution.setVariable("ANNF_sliceProfileInstanceId", ANNF_sliceProfileInstanceId)
+       execution.setVariable("ANNF_sliceProfileId", ANNF_sliceProfileId)
+       execution.setVariable("TNFH_sliceProfileInstanceId", TNFH_sliceProfileInstanceId)
+       execution.setVariable("TNFH_sliceProfileId", TNFH_sliceProfileId)
+       execution.setVariable("TNMH_sliceProfileInstanceId", TNMH_sliceProfileInstanceId)
+       execution.setVariable("TNMH_sliceProfileId", TNMH_sliceProfileId)
        //slice profiles assignment
        org.onap.aai.domain.yang.SliceProfiles ANNF_SliceProfiles = new SliceProfiles()
        org.onap.aai.domain.yang.SliceProfiles TNFH_SliceProfiles = new SliceProfiles()
@@ -176,35 +222,35 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        org.onap.aai.domain.yang.SliceProfile ANNF_SliceProfile = new SliceProfile()
        org.onap.aai.domain.yang.SliceProfile TNFH_SliceProfile = new SliceProfile()
        org.onap.aai.domain.yang.SliceProfile TNMH_SliceProfile = new SliceProfile()
-       ANNF_SliceProfile = createSliceProfile("AN-NF", execution)
-       TNFH_SliceProfile = createSliceProfile("TN-FH",execution)
-       TNMH_SliceProfile = createSliceProfile("TN-MH",execution)
-       
+       ANNF_SliceProfile = createSliceProfile("AN_NF", execution)
+       TNFH_SliceProfile = createSliceProfile("TN_FH", execution)
+       TNMH_SliceProfile = createSliceProfile("TN_MH", execution)
+
        ANNF_SliceProfiles.getSliceProfile().add(ANNF_SliceProfile)
        TNFH_SliceProfiles.getSliceProfile().add(TNFH_SliceProfile)
        TNMH_SliceProfiles.getSliceProfile().add(TNMH_SliceProfile)
-       
-       logger.debug("sliceProfiles : 1. "+ANNF_SliceProfiles.toString()+"\n 2. "+TNFH_SliceProfiles.toString()+"\n 3. "+TNMH_SliceProfiles.toString())
+
+       logger.debug("sliceProfiles : 1. " + ANNF_SliceProfiles.toString() + "\n 2. " + TNFH_SliceProfiles.toString() + "\n 3. " + TNMH_SliceProfiles.toString())
        //ANNF slice profile instance creation
        ANNF_sliceProfileInstance.setServiceInstanceId(ANNF_sliceProfileInstanceId)
-       String sliceInstanceName = "sliceprofile_"+ANNF_sliceProfileId
+       String sliceInstanceName = "sliceprofile_" + ANNF_sliceProfileId
        ANNF_sliceProfileInstance.setServiceInstanceName(sliceInstanceName)
        String serviceType = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "sST")
        ANNF_sliceProfileInstance.setServiceType(serviceType)
        String serviceStatus = "deactivated"
        ANNF_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
-       String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "plmnIdList")
-       ANNF_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
+       String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
+        ANNF_sliceProfileInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
        String serviceRole = "slice-profile-instance"
        ANNF_sliceProfileInstance.setServiceRole(serviceRole)
-        ArrayList<String> snssaiList = execution.getVariable("snssaiList")
+       ArrayList<String> snssaiList = jsonUtil.StringArrayToList(execution.getVariable("snssaiList") as String)
        String snssai = snssaiList.get(0)
        ANNF_sliceProfileInstance.setEnvironmentContext(snssai)
-       ANNF_sliceProfileInstance.setWorkloadContext("AN-NF")    
+       ANNF_sliceProfileInstance.setWorkloadContext("AN_NF")
        ANNF_sliceProfileInstance.setSliceProfiles(ANNF_SliceProfiles)
        String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
        ANNF_sliceProfileInstance.setServiceFunction(serviceFunctionAnnf)
-       logger.debug("completed ANNF sliceprofileinstance build : "+ ANNF_sliceProfileInstance.toString())
+       logger.debug("completed ANNF sliceprofileinstance build :  "+ ANNF_sliceProfileInstance.toString())
        
        //TNFH slice profile instance creation
        TNFH_sliceProfileInstance.setServiceInstanceId(TNFH_sliceProfileInstanceId)
@@ -213,15 +259,15 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        serviceType = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "sST")
        TNFH_sliceProfileInstance.setServiceType(serviceType)
        TNFH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
-       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "plmnIdList")
-       TNFH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
+       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "pLMNIdList")
+        TNFH_sliceProfileInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
        TNFH_sliceProfileInstance.setServiceRole(serviceRole)
        TNFH_sliceProfileInstance.setEnvironmentContext(snssai)
-       TNFH_sliceProfileInstance.setWorkloadContext("TN-FH")
+       TNFH_sliceProfileInstance.setWorkloadContext("TN_FH")
        TNFH_sliceProfileInstance.setSliceProfiles(TNFH_SliceProfiles)
        String serviceFunctionTnFH = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "resourceSharingLevel")
        TNFH_sliceProfileInstance.setServiceFunction(serviceFunctionTnFH)
-       logger.debug("completed TNFH sliceprofileinstance build : "+TNFH_sliceProfileInstance)
+       logger.debug("completed TNFH sliceprofileinstance build :   "+TNFH_sliceProfileInstance)
        
        //TNMH slice profile instance creation
        TNMH_sliceProfileInstance.setServiceInstanceId(TNMH_sliceProfileInstanceId)
@@ -230,15 +276,15 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        serviceType = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "sST")
        TNMH_sliceProfileInstance.setServiceType(serviceType)
        TNMH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
-       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "plmnIdList")
-       TNMH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
+       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "pLMNIdList")
+        TNMH_sliceProfileInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
        TNMH_sliceProfileInstance.setServiceRole(serviceRole)
        TNMH_sliceProfileInstance.setEnvironmentContext(snssai)
-       TNMH_sliceProfileInstance.setWorkloadContext("TN-MH")
+       TNMH_sliceProfileInstance.setWorkloadContext("TN_MH")
        TNMH_sliceProfileInstance.setSliceProfiles(TNMH_SliceProfiles)
        String serviceFunctionTnMH = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "resourceSharingLevel")
        TNMH_sliceProfileInstance.setServiceFunction(serviceFunctionTnMH)
-       logger.debug("completed TNMH sliceprofileinstance build : "+TNMH_sliceProfileInstance)
+       logger.debug("completed TNMH sliceprofileinstance build :   "+TNMH_sliceProfileInstance)
        
        String msg = ""
        try {
@@ -260,6 +306,7 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
                logger.info(msg)
                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
        }
+       }
 
 }
 private SliceProfile createSliceProfile(String domainType, DelegateExecution execution) {
@@ -267,35 +314,40 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
        SliceProfile result = new SliceProfile()
        Map<String,Object> profile
        switch(domainType) {
-               case "AN-NF":
-                       profile = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)//pending fields - maxBandwidth, sST, plmnIdList, cSReliabilityMeanTime, 
-                                                                                                                                                                                                       //msgSizeByte, maxNumberofPDUSessions,overallUserDensity,transferIntervalTarget
+               case "AN_NF":
+                       profile = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)//pending fields - cSReliabilityMeanTime, cSAvailabilityTarget, terminalDensity, msgSizeByte
                        result.setJitter(profile.get("jitter"))
                        result.setLatency(profile.get("latency"))
+                        result.setMaxBandwidth(profile.get("maxbandwidth"))
                        result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
                        result.setUeMobilityLevel(profile.get("uEMobilityLevel"))
                        result.setMaxNumberOfUEs(profile.get("maxNumberofUEs"))
                        result.setActivityFactor(profile.get("activityFactor"))
-                       result.setCoverageAreaTAList(profile.get("coverageAreaTAList"))
+                       result.setCoverageAreaTAList(profile.get("coverageAreaTAList").toString())
                        result.setExpDataRateDL(profile.get("expDataRateDL"))
                        result.setExpDataRateUL(profile.get("expDataRateUL"))
                        result.setSurvivalTime(profile.get("survivalTime"))
+                       result.setMaxNumberOfPDUSession(profile.get("maxNumberofPDUSession"))
                        result.setAreaTrafficCapDL(profile.get("areaTrafficCapDL"))
                        result.setAreaTrafficCapUL(profile.get("areaTrafficCapUL"))
+                       result.setOverallUserDensity(profile.get("overallUserDensity")) 
+                       result.setTransferIntervalTarget(profile.get("transferIntervalTarget"))
                        result.setExpDataRate(profile.get("expDataRate"))
                        result.setProfileId(execution.getVariable("ANNF_sliceProfileId"))
                        break
-               case "TN-FH":
-                       profile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class) //pending fields - maxBandwidth, sST, plmnIdList
+               case "TN_FH":
+                       profile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class) 
                        result.setJitter(profile.get("jitter"))
                        result.setLatency(profile.get("latency"))
+                        result.setMaxBandwidth(profile.get("maxbandwidth"))
                        result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
                        result.setProfileId(execution.getVariable("TNFH_sliceProfileId"))
                        break
-               case "TN-MH":
-                       profile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)//pending fields - maxBandwidth, sST, plmnIdList
+               case "TN_MH":
+                       profile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)
                        result.setJitter(profile.get("jitter"))
                        result.setLatency(profile.get("latency"))
+                        result.setMaxBandwidth(profile.get("maxbandwidth"))
                        result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
                        result.setProfileId(execution.getVariable("TNMH_sliceProfileId"))
                        break
@@ -351,11 +403,16 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                JsonArray connectionLinksList = new JsonArray()
                JsonObject connectionLinks = new JsonObject()
                Gson jsonConverter = new Gson()
+               String TNFH_nssiInstanceId = UUID.randomUUID().toString()
+                String TNMH_nssiInstanceId = UUID.randomUUID().toString()
+
                if(action.equals("allocate")){
                        JsonObject endpoints = new JsonObject()
                        if(domainType.equals("TN_FH")) {
                                serviceInfo.addProperty("serviceInvariantUuid", execution.getVariable("TNFH_modelInvariantUuid"))
                                serviceInfo.addProperty("serviceUuid", execution.getVariable("TNFH_modelUuid"))
+                               serviceInfo.addProperty("nssiName", "nssi_tn_fh_"+TNFH_nssiInstanceId)
+                               serviceInfo.addProperty("sst",  execution.getVariable("sst"))
                                allocateTnNssi.addProperty("nsstId", execution.getVariable("TNFH_modelUuid"))
                                allocateTnNssi.addProperty("nssiName", execution.getVariable("TNFH_modelName"))
                                Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class)
@@ -367,6 +424,8 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                        }else if(domainType.equals("TN_MH")) {
                                serviceInfo.addProperty("serviceInvariantUuid", execution.getVariable("TNMH_modelInvariantUuid"))
                                serviceInfo.addProperty("serviceUuid", execution.getVariable("TNMH_modelUuid"))
+                               serviceInfo.addProperty("nssiName", "nssi_tn_mh_"+TNMH_nssiInstanceId)
+                               serviceInfo.addProperty("sst",  execution.getVariable("sst"))
                                allocateTnNssi.addProperty("nsstId", execution.getVariable("TNMH_modelUuid"))
                                allocateTnNssi.addProperty("nssiName", execution.getVariable("TNMH_modelName"))
                                Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)
@@ -376,24 +435,40 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                                endpoints.addProperty("transportEndpointB", execution.getVariable("tranportEp_ID_CUIN"))
                                connectionLinksList.add(endpoints)
                        }
-                       
-                       //Connection links
-                       connectionLinks.add("connectionLinks", connectionLinksList)
-                       transportSliceNetworksList.add(connectionLinks)
-                       allocateTnNssi.add("transportSliceNetworks", transportSliceNetworksList)
                }else if(action.equals("modify-allocate")) {
+                        JsonObject endpoints = new JsonObject()
                        if(domainType.equals("TN_FH")) {
                                allocateTnNssi.addProperty("nssiName", execution.getVariable("TNFH_nssiName"))
                                allocateTnNssi.addProperty("sliceProfileId", execution.getVariable("TNFH_sliceProfileInstanceId"))
                                allocateTnNssi.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
                                serviceInfo.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
+                                serviceInfo.addProperty("nssiName", execution.getVariable("TNFH_nssiName"))
+                                Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("tnFhSliceProfile"), Map.class)
+                                sliceProfile.put("sliceProfileId", execution.getVariable("TNFH_sliceProfileInstanceId"))
+                                allocateTnNssi.add("sliceProfile", jsonConverter.toJsonTree(sliceProfile))
+                                endpoints.addProperty("transportEndpointA", execution.getVariable("tranportEp_ID_RU"))
+                                endpoints.addProperty("transportEndpointB", execution.getVariable("tranportEp_ID_DUIN"))
+                                connectionLinksList.add(endpoints)
                        }else if(domainType.equals("TN_MH")) {
                                allocateTnNssi.addProperty("nssiName", execution.getVariable("TNMH_nssiName"))
                                allocateTnNssi.addProperty("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
                                allocateTnNssi.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
                                serviceInfo.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
+                                serviceInfo.addProperty("nssiName", execution.getVariable("TNMH_nssiName"))
+                                Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("tnMhSliceProfile"), Map.class)
+                                sliceProfile.put("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
+                                allocateTnNssi.add("sliceProfile", jsonConverter.toJsonTree(sliceProfile))
+                                endpoints.addProperty("transportEndpointA", execution.getVariable("tranportEp_ID_DUEG"))
+                                endpoints.addProperty("transportEndpointB", execution.getVariable("tranportEp_ID_CUIN"))
+                                connectionLinksList.add(endpoints)
                        }
                }
+
+                //Connection links
+                connectionLinks.add("connectionLinks", connectionLinksList)
+                transportSliceNetworksList.add(connectionLinks)
+                allocateTnNssi.add("transportSliceNetworks", transportSliceNetworksList)
+
                JsonParser parser = new JsonParser()
                String nsiInfo = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "nsiInfo")
                allocateTnNssi.add("nsiInfo",(JsonObject) parser.parse(nsiInfo))
@@ -410,37 +485,58 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
        public String buildDeallocateNssiRequest(DelegateExecution execution,String domainType) {
                String globalSubscriberId = execution.getVariable("globalSubscriberId")
                String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+
+                List<String> sNssaiList =  execution.getVariable("snssaiList") as List<String>
+
+               DeAllocateNssi deallocateNssi = new DeAllocateNssi()
+               deallocateNssi.setNsiId(execution.getVariable("nsiId") as String)
+               deallocateNssi.setScriptName("TN1")
+               deallocateNssi.setSnssaiList(sNssaiList)
+                deallocateNssi.setTerminateNssiOption(0)
           
-               JsonObject deAllocateNssi = new JsonObject()
-               deAllocateNssi.addProperty("snssaiList", execution.getVariable("snssaiList"))
-               deAllocateNssi.addProperty("nsiId", execution.getVariable("nsiId"))
-               deAllocateNssi.addProperty("modifyAction", true)
-               deAllocateNssi.addProperty("terminateNssiOption", 0)
-               deAllocateNssi.addProperty("scriptName", "TN1")
-               
-               if(domainType.equals("TN_FH")) {
-                       deAllocateNssi.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
-                       deAllocateNssi.addProperty("sliceProfileId", execution.getVariable("TNFH_sliceProfileInstanceId"))
-               }else if(domainType.equals("TN_MH")) {
-                       deAllocateNssi.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
-                       deAllocateNssi.addProperty("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
-               }
-               
                JsonObject esrInfo = new JsonObject()
-           esrInfo.addProperty("networkType", "tn")
-           esrInfo.addProperty("vendor", "ONAP_internal")
+               esrInfo.addProperty("networkType", "tn")
+               esrInfo.addProperty("vendor", "ONAP_internal")
           
                JsonObject serviceInfo = new JsonObject()
-               serviceInfo.addProperty("serviceInvariantUuid", null)
-               serviceInfo.addProperty("serviceUuid", null)
                serviceInfo.addProperty("globalSubscriberId", globalSubscriberId)
                serviceInfo.addProperty("subscriptionServiceType", subscriptionServiceType)
-          
+                       serviceInfo.addProperty("modifyAction", true)
+
+                if(domainType.equals("TN_FH")) {
+                       deallocateNssi.setNssiId(execution.getVariable("TNFH_NSSI") as String)
+                       deallocateNssi.setSliceProfileId(execution.getVariable("TNFH_sliceProfileInstanceId") as String)
+                        serviceInfo.addProperty("nssiId", execution.getVariable("TNFH_NSSI") as String)
+                }else if(domainType.equals("TN_MH")) {
+                       deallocateNssi.setNssiId(execution.getVariable("TNMH_NSSI") as String)
+                       deallocateNssi.setSliceProfileId(execution.getVariable("TNMH_sliceProfileInstanceId") as String)
+                        serviceInfo.addProperty("nssiId", execution.getVariable("TNMH_NSSI") as String)
+                }
+
                JsonObject json = new JsonObject()
-               json.add("deAllocateNssi", deAllocateNssi)
+                Gson jsonConverter = new Gson()
+                json.add("deAllocateNssi", jsonConverter.toJsonTree(deallocateNssi))
                json.add("esrInfo", esrInfo)
                json.add("serviceInfo", serviceInfo)
                return json.toString()
           
        }
+
+        public String getModelUuid(DelegateExecution execution, String instanceId) {
+               String globalSubscriberId = execution.getVariable("globalSubscriberId")
+               String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+               ServiceInstance serviceInstance = new ServiceInstance()
+               AAIResourcesClient client = new AAIResourcesClient()
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(instanceId))
+               if (!client.exists(uri)) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai : ${instanceId}")
+               }
+               AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
+               Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
+               
+               if(si.isPresent()) {
+                       serviceInstance = si.get()
+               }
+               return serviceInstance.getModelVersionId()
+       }
 }