From 75a86282d2ec71f53ca4e078762f0fae25dac8cd Mon Sep 17 00:00:00 2001 From: hetengjiao Date: Fri, 13 Nov 2020 15:18:59 +0800 Subject: fixed cs profile trans to ss profile Issue-ID: SO-2963 Signed-off-by: hetengjiao Change-Id: Ia5a40ac9126641479047a0a76c7d2fefc1d6f07d --- .../nssmf/manager/NssmfManagerBuilder.java | 6 + .../nssmf/manager/impl/BaseNssmfManager.java | 2 +- .../nssmf/manager/impl/ExternalNssmfManager.java | 6 +- .../nssmf/manager/impl/InternalNssmfManager.java | 2 +- .../so/adapters/nssmf/NssmfAdapterRestTest.java | 4 +- .../scripts/CreateCommunicationService.groovy | 62 ++++---- .../scripts/CreateSliceService.groovy | 2 + .../scripts/DoAllocateNSIandNSSI.groovy | 39 +++--- .../scripts/DoCreateSliceServiceOption.groovy | 65 +++++---- .../main/resources/process/CreateSliceService.bpmn | 156 +++++++++++++-------- .../org/onap/so/beans/nsmf/CnSliceProfile.java | 85 ++--------- .../onap/so/beans/nsmf/SliceProfileAdapter.java | 116 +++++++++++++++ .../onap/so/beans/nsmf/SliceTaskParamsAdapter.java | 74 +++++----- .../org/onap/so/beans/nsmf/TnSliceProfile.java | 9 ++ 14 files changed, 382 insertions(+), 246 deletions(-) create mode 100644 common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java index 0b332af607..e397201e4b 100644 --- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java +++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java @@ -77,6 +77,12 @@ public class NssmfManagerBuilder { return; } + if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.TRANSPORT.equals(networkType)) { + this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) + .setInitStatus("activated"); + return; + } + if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.ACCESS.equals(networkType)) { this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) .setInitStatus("activated"); diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java index acaa3945bd..2de6e01693 100644 --- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java +++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java @@ -193,7 +193,7 @@ public abstract class BaseNssmfManager implements NssmfManager { return doQuerySubnetCapability(nbiRequest.getSubnetCapabilityQuery()); } - protected abstract RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException; + protected abstract RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException; /** * send request to nssmf diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java index 9dcd2d4cfb..3c5be7eb39 100644 --- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java +++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java @@ -180,11 +180,11 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager { } @Override - protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { + protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { ObjectMapper oMapper = new ObjectMapper(); InputStream inputStream = TypeReference.class.getResourceAsStream("/subnetCapability.json"); - Map subnetCapability = new HashMap<>(); + Map subnetCapability = new HashMap<>(); try { subnetCapability = oMapper.readValue(inputStream, Map.class); } catch (Exception e) { @@ -201,7 +201,7 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager { try { response = oMapper.writeValueAsString(responseMap); } catch (JsonProcessingException e) { - logger.debug("Exception while converting subnet capability object to String {}", e); + logger.debug("Exception while converting subnet capability object to String {}", e.getMessage()); } RestResponse rsp = new RestResponse(); diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java index 296c30c1d8..e89160c4ae 100644 --- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java +++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java @@ -122,7 +122,7 @@ public abstract class InternalNssmfManager extends BaseNssmfManager { protected abstract String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; @Override - protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { + protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { // handler return sendRequest(marshal(req)); } diff --git a/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java b/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java index f150f47f4f..2d79544383 100644 --- a/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java +++ b/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java @@ -77,9 +77,9 @@ public class NssmfAdapterRestTest { private final static String ALLOCATE = "{\n" + " \"esrInfo\" : {\n" + " \"vendor\" : \"huawei\",\n" + " \"networkType\" : \"cn\"\n" + " },\n" + " \"allocateCnNssi\" : {\n" + " \"nssiId\" : \"NSST-C-001-HDBNJ-NSSMF-01-A-ZX\",\n" + " \"nssiName\" : \"eMBB-001\",\n" - + " \"sliceProfile\" : {\n" + " \"snssaiList\" : [ \"001-100001\" ],\n" + + " \"sliceProfile\" : {\n" + " \"sNSSAIList\" : [ \"001-100001\" ],\n" + " \"sliceProfileId\" : \"ab9af40f13f721b5f13539d87484098\",\n" - + " \"plmnIdList\" : [ \"460-00\", \"460-01\" ],\n" + " \"perfReq\" : {\n" + + " \"pLMNIdList\" : [ \"460-00\", \"460-01\" ],\n" + " \"perfReq\" : {\n" + " \"perfReqEmbbList\" : [ {\n" + " \"activityFactor\" : 50\n" + " } ]\n" + " },\n" + " \"maxNumberofUEs\" : 200,\n" + " \"coverageAreaTAList\" : [ \"1\", \"2\", \"3\" ],\n" + " \"latency\" : 6,\n" diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy index 67845910eb..bb6fe212b3 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy @@ -43,6 +43,7 @@ import org.onap.so.bpmn.core.json.JsonUtils import org.onap.so.db.request.beans.OperationStatus import org.slf4j.Logger import org.slf4j.LoggerFactory +import org.springframework.util.StringUtils import org.springframework.web.util.UriUtils import static org.apache.commons.lang3.StringUtils.isBlank @@ -317,14 +318,9 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor { Map csInputMap = new HashMap<>() for (String csInput : csInputs) { - def value - if (jsonUtil.getJsonValue(csInput, "type") == "integer") { - value = jsonUtil.getJsonValue(csInput, "default") - csInputMap.put(jsonUtil.getJsonValue(csInput, "name"), isBlank(value) ? 0 : (value as Integer)) - } else if (jsonUtil.getJsonValue(csInput, "type") == "string") { - csInputMap.put(jsonUtil.getJsonValue(csInput, "name"), - jsonUtil.getJsonValue(csInput, "default")) - } + String key = jsonUtil.getJsonValue(csInput, "name") + def value = jsonUtil.getJsonValue(csInput, "default") + csInputMap.put(key, getDefaultPropertiesByType(value, key)) } csInputMap.put("expDataRateDL", expDataRateDL) csInputMap.put("expDataRateUL", expDataRateUL) @@ -336,6 +332,7 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor { csInputMap.put("useInterval", useInterval) execution.setVariable("csInputMap", csInputMap) + logger.debug(Prefix + "csInputMap is = " + csInputMap.toString()) } catch (BpmnError e) { throw e } catch (Exception ex) { @@ -365,53 +362,45 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor { Map csInputMap = execution.getVariable("csInputMap") as Map Map e2eInputMap = new HashMap<>() - String key - def value - for (String e2eInput in e2eInputs) { - key = jsonUtil.getJsonValue(e2eInput, "name") + String key = jsonUtil.getJsonValue(e2eInput, "name") String type = jsonUtil.getJsonValue(e2eInput, "type") - if (type == "integer") { - def temp - value = csInputMap.containsKey(key) ? csInputMap.getOrDefault(key, 0) : (isBlank(temp = jsonUtil.getJsonValue(e2eInput, "default")) ? 0 : temp) - - e2eInputMap.put(key, value as Integer) - } else if(type == "string") { - e2eInputMap.put(key, csInputMap.containsKey(key) - ? csInputMap.getOrDefault(key, null) : (jsonUtil.getJsonValue(e2eInput, "default"))) + def value + if (csInputMap.containsKey(key)) { + value = csInputMap.get(key) + } else { + value = jsonUtil.getJsonValue(e2eInput, "default") } + e2eInputMap.put(key, getDefaultPropertiesByType(value, type)) } //TODO temp solution e2eInputMap.put("sNSSAI", execution.getVariable("sNSSAI_id")) e2eInputMap.put("sST", execution.getVariable("csServiceType")) - Integer activityFactor = 60 + Integer activityFactor = Integer.parseInt(e2eInputMap.get("activityFactor").toString()) Integer random = new Random().nextInt(5) + 2 Integer dLThptPerUE = Integer.parseInt(csInputMap.get("expDataRateDL").toString()) Integer uLThptPerUE = Integer.parseInt(csInputMap.get("expDataRateUL").toString()) - Integer maxNumberofUEs = Integer.parseInt(csInputMap.get("maxNumberofUEs").toString()) + Integer maxNumberofUEs = Integer.parseInt(e2eInputMap.get("maxNumberofUEs").toString()) Integer dLThptPerSlice = dLThptPerUE * maxNumberofUEs * activityFactor * random Integer uLThptPerSlice = uLThptPerUE * maxNumberofUEs * activityFactor * random Integer maxNumberofConns = maxNumberofUEs * activityFactor * 3 e2eInputMap.put("jitter", 10) - e2eInputMap.put("activityFactor", activityFactor) - e2eInputMap.put("maxNumberofUEs", maxNumberofUEs) e2eInputMap.put("dLThptPerUE", dLThptPerUE) e2eInputMap.put("uLThptPerUE", uLThptPerUE) e2eInputMap.put("dLThptPerSlice", dLThptPerSlice) e2eInputMap.put("uLThptPerSlice", uLThptPerSlice) e2eInputMap.put("maxNumberofConns", maxNumberofConns) - e2eInputMap.put("coverageAreaTAList", csInputMap.get("coverageAreaList")) execution.setVariable("e2eInputMap", e2eInputMap) execution.setVariable("e2eServiceType", e2eServiceDecomposition.getServiceType()) execution.setVariable("e2eModelInvariantUuid", e2eServiceDecomposition.getModelInfo().getModelInvariantUuid()) execution.setVariable("e2eModelUuid", e2eServiceDecomposition.getModelInfo().getModelUuid()) - + logger.debug(Prefix + "e2eInputMap is = " + e2eInputMap.toString()) } catch (BpmnError e) { throw e } catch (Exception ex) { @@ -423,6 +412,25 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor { logger.debug(Prefix + "generateE2EServiceProfile Exit") } + static def getDefaultPropertiesByType(def value, String type) { + + def defaultValue + switch (type) { + case "string": + defaultValue = "" + break + case "integer": + defaultValue = 0 + break + case "float": + defaultValue = 0.0 + break + default: + defaultValue = null + break + } + return StringUtils.isEmpty(value) ? defaultValue : value + } /** * call createE2EService get operation id, @@ -453,7 +461,7 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor { } """ execution.setVariable("CSMF_NSMFRequest", payload.replaceAll("\\s+", "")) - + logger.debug(Prefix + "Sent to NSMF Request = " + payload) } catch (BpmnError e) { throw e } catch (Exception ex) { diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy index c136d52b13..d59c0cf3b2 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy @@ -354,6 +354,8 @@ public class CreateSliceService extends AbstractServiceTaskProcessor { nstInfo.setName(nstSolution.get("NSTName") as String) sliceTaskParams.setNSTInfo(nstInfo) + sliceTaskParams.setNstId(nstSolution.get("UUID") as String) + sliceTaskParams.setNstName(nstSolution.get("NSTName") as String) execution.setVariable("sliceTaskParams", sliceTaskParams) diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy index 1d7acd31c1..4b020c7c7b 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy @@ -20,6 +20,7 @@ package org.onap.so.bpmn.infrastructure.scripts +import org.onap.so.beans.nsmf.SliceProfileAdapter import org.onap.so.beans.nsmf.oof.SubnetType import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor import javax.ws.rs.NotFoundException @@ -36,15 +37,12 @@ import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder import org.onap.so.beans.nsmf.AllocateAnNssi import org.onap.so.beans.nsmf.AllocateCnNssi import org.onap.so.beans.nsmf.AllocateTnNssi -import org.onap.so.beans.nsmf.AnSliceProfile -import org.onap.so.beans.nsmf.CnSliceProfile import org.onap.so.beans.nsmf.EsrInfo import org.onap.so.beans.nsmf.NssiResponse import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest import org.onap.so.beans.nsmf.ServiceInfo import org.onap.so.beans.nsmf.SliceTaskInfo import org.onap.so.beans.nsmf.SliceTaskParamsAdapter -import org.onap.so.beans.nsmf.TnSliceProfile import org.onap.so.bpmn.common.scripts.ExceptionUtil import org.onap.so.bpmn.core.json.JsonUtils import org.slf4j.Logger @@ -239,7 +237,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.anSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.anSliceTaskInfo sliceTaskInfo.setSliceInstanceId(serviceInstanceId) // create slice profile @@ -275,15 +273,15 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.anSliceTaskInfo - AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile + SliceTaskInfo sliceTaskInfo = sliceParams.anSliceTaskInfo + SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile String profileId = UUID.randomUUID().toString() anSliceProfile.setSliceProfileId(profileId) SliceProfile sliceProfile = new SliceProfile() sliceProfile.setProfileId(profileId) - sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String) + sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList) //todo:... AAIResourceUri uri = AAIUriFactory.createResourceUri( AAIFluentTypeBuilder.business().customer(globalSubscriberId) @@ -304,12 +302,16 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ //todo: SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.anSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.anSliceTaskInfo NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest() AllocateAnNssi allocateAnNssi = new AllocateAnNssi() - allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile + allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile() + allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID + allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId + allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name + allocateAnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId EsrInfo esrInfo = new EsrInfo() //todo: vendor and network @@ -354,7 +356,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.cnSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.cnSliceTaskInfo sliceTaskInfo.setSliceInstanceId(serviceInstanceId) // create slice profile @@ -392,8 +394,8 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.cnSliceTaskInfo - CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile + SliceTaskInfo sliceTaskInfo = sliceParams.cnSliceTaskInfo + SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile String profileId = UUID.randomUUID().toString() cnSliceProfile.setSliceProfileId(profileId) @@ -416,7 +418,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ //todo: SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.cnSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.cnSliceTaskInfo NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest() @@ -424,7 +426,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name - allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile + allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile() allocateCnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId EsrInfo esrInfo = new EsrInfo() @@ -469,7 +471,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.tnBHSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.tnBHSliceTaskInfo String serviceInstanceId = UUID.randomUUID().toString() sliceTaskInfo.setSliceInstanceId(serviceInstanceId) @@ -510,9 +512,9 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.tnBHSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.tnBHSliceTaskInfo - TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile + SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile String profileId = UUID.randomUUID().toString() tnSliceProfile.setSliceProfileId(profileId) @@ -534,7 +536,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ //todo: SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - SliceTaskInfo sliceTaskInfo = sliceParams.tnBHSliceTaskInfo + SliceTaskInfo sliceTaskInfo = sliceParams.tnBHSliceTaskInfo NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest() @@ -545,6 +547,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ allocateTnNssi.setNetworkSliceInfos() + //allocateTnNssi.networkSliceInfos EsrInfo esrInfo = new EsrInfo() diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy index 2cce68a2b6..9450227467 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy @@ -22,13 +22,12 @@ package org.onap.so.bpmn.infrastructure.scripts import com.fasterxml.jackson.databind.ObjectMapper import org.camunda.bpm.engine.delegate.DelegateExecution -import org.onap.so.beans.nsmf.AnSliceProfile -import org.onap.so.beans.nsmf.CnSliceProfile import org.onap.so.beans.nsmf.EsrInfo import org.onap.so.beans.nsmf.NetworkType import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest +import org.onap.so.beans.nsmf.QuerySubnetCapability +import org.onap.so.beans.nsmf.SliceProfileAdapter import org.onap.so.beans.nsmf.SliceTaskParamsAdapter -import org.onap.so.beans.nsmf.TnSliceProfile import org.onap.so.beans.nsmf.oof.SubnetCapability import org.onap.so.beans.nsmf.oof.SubnetType import org.onap.so.beans.nsmf.oof.TemplateInfo @@ -45,6 +44,7 @@ import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.util.StringUtils + class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ private static final Logger logger = LoggerFactory.getLogger(DoCreateSliceServiceOption.class) @@ -185,6 +185,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ execution.setVariable("sliceTaskParams", sliceParams) execution.setVariable("subnetCapabilities", subnetCapabilities) + execution.setVariable("queryNsiFirst", true) logger.debug("sliceTaskParams= " + sliceParams.toString()) } @@ -290,13 +291,12 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest() List subnetTypes = new ArrayList<>() - subnetTypes.add(subnetType.subnetType) - Map paramMap = new HashMap<>() - paramMap.put("subnetTypes", subnetTypes) + QuerySubnetCapability req = new QuerySubnetCapability() + req.setSubnetTypes(subnetTypes) - request.setSubnetCapabilityQuery(paramMap) + request.setSubnetCapabilityQuery(req) EsrInfo esrInfo = new EsrInfo() esrInfo.setVendor(vendor) @@ -362,66 +362,73 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ Map resMap = objectMapper.readValue(oofResponse, Map.class) String requestStatus = resMap.get("requestStatus") - if (StringUtils.isEmpty(requestStatus)) { + if (!StringUtils.isEmpty(requestStatus) && requestStatus == "error") { exceptionUtil.buildWorkflowException(execution, 7000, "get nsi from oof error: " + oofResponse) + return } List> nsiSolutions = (List>) resMap.get("solutions") Map solution = nsiSolutions.get(0) - String resourceSharingLevel = execution.getVariable("resourceSharingLevel") - Boolean isSharable = resourceSharingLevel == "shared" + //String resourceSharingLevel = execution.getVariable("resourceSharingLevel") + //Boolean isSharable = resourceSharingLevel == "shared" if (solution != null) { - if (isSharable && solution.get("existingNSI")) { - //sharedNSISolution - processSharedNSI(solution, sliceTaskParams) - execution.setVariable("needQuerySliceProfile", true) - } - else { - if(execution.getVariable("needQuerySliceProfile")){ + if (execution.getVariable("queryNsiFirst")) { + if (solution.get("existingNSI")) { + execution.setVariable("needQuerySliceProfile", true) + } else { + processNewNSI(solution, sliceTaskParams) execution.setVariable("needQuerySliceProfile", false) } - processNewNSI(solution, sliceTaskParams) + execution.setVariable("queryNsiFirst", false) + } else { + processSharedNSI(solution, sliceTaskParams) + execution.setVariable("needQuerySliceProfile", false) } } execution.setVariable("sliceTaskParams", sliceTaskParams) + logger.debug("after req to oof for nis select, sliceTaskParams = " + sliceTaskParams) logger.debug("*** Completed options Call to OOF ***") } - private void processSharedNSI(Map solution, SliceTaskParamsAdapter sliceParams) { + private static void processSharedNSI(Map solution, SliceTaskParamsAdapter sliceParams) { Map sharedNSISolution = solution.get("sharedNSISolution") as Map - String nsiId = sharedNSISolution.get("NSIId") String nsiName = sharedNSISolution.get("NSIName") sliceParams.setSuggestNsiId(nsiId) sliceParams.setSuggestNsiName(nsiName) + List sliceProfiles = sharedNSISolution.get("sliceProfiles") as List + handleSliceProfiles(sliceProfiles, sliceParams) } - private void processNewNSI(Map solution, SliceTaskParamsAdapter sliceParams) { + private static void processNewNSI(Map solution, SliceTaskParamsAdapter sliceParams) { Map newNSISolution = solution.get("newNSISolution") as Map List sliceProfiles = newNSISolution.get("sliceProfiles") as List + handleSliceProfiles(sliceProfiles, sliceParams) + } + + static def handleSliceProfiles(List sliceProfiles, SliceTaskParamsAdapter sliceParams) { for (Map sliceProfile : sliceProfiles) { String domainType = sliceProfile.get("domainType") + sliceProfile.remove("domainType") + SliceProfileAdapter adapter = objectMapper.readValue(objectMapper.writeValueAsString(sliceProfile), SliceProfileAdapter.class) switch (domainType.toLowerCase()) { case "tn-bh": - sliceParams.tnBHSliceTaskInfo.sliceProfile = sliceProfile as TnSliceProfile + sliceParams.tnBHSliceTaskInfo.sliceProfile = adapter break case "an-nf": case "an": - sliceParams.anSliceTaskInfo.sliceProfile = sliceProfile as AnSliceProfile + sliceParams.anSliceTaskInfo.sliceProfile = adapter break case "cn": - sliceParams.cnSliceTaskInfo.sliceProfile = sliceProfile as CnSliceProfile + sliceParams.cnSliceTaskInfo.sliceProfile = adapter break default: break } - - //todo - } } @@ -485,7 +492,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ String selection = resMap.get("selection") if ("NSMF".equalsIgnoreCase(selection)) { - execution.setVariable("NEED_CN_NSSI_SELECTION", true) + //execution.setVariable("NEED_CN_NSSI_SELECTION", true) } } @@ -597,7 +604,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ TemplateInfo nsstInfo = nssiNeedHandlerInfo.get("nsstInfo") as TemplateInfo Map profileInfo = nssiNeedHandlerInfo.get("sliceProfile") as Map - profileInfo.remove("profileId") + //profileInfo.remove("profileId") String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution) logger.debug( "get NSI option OOF Url: " + urlString) diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn index 9656c86ae5..a1f9a83190 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn @@ -5,7 +5,7 @@ SequenceFlow_03s744c - SequenceFlow_060j650 + SequenceFlow_0sub2c2 @@ -355,7 +355,6 @@ css.prepareCreateOrchestrationTask(execution) - SequenceFlow_12wo878 @@ -369,20 +368,12 @@ def css = new CreateSliceService() css.processNSTSolutions(execution) - - SequenceFlow_1vesvto + SequenceFlow_1fk2cn3 - - SequenceFlow_1vesvto - - PT2H - - - - SequenceFlow_060j650 + SequenceFlow_031cwkd SequenceFlow_0ti386y import org.onap.so.bpmn.infrastructure.scripts.* def css = new CreateSliceService() @@ -427,10 +418,36 @@ def css = new CreateSliceService() css.prepareSelectNSTRequest(execution) + + SequenceFlow_0sub2c2 + SequenceFlow_031cwkd + + SequenceFlow_0recnor + + + SequenceFlow_1htsa6t + + + SequenceFlow_0recnor + SequenceFlow_1htsa6t + + + + + + + SequenceFlow_1fk2cn3 + + PT2H + + + + + - + @@ -446,20 +463,20 @@ css.prepareSelectNSTRequest(execution) - + - - + + - + - - + + @@ -504,23 +521,23 @@ css.prepareSelectNSTRequest(execution) - - - + + + - + - - + + - + - - + + @@ -543,12 +560,12 @@ css.prepareSelectNSTRequest(execution) - + - + - + @@ -620,16 +637,16 @@ css.prepareSelectNSTRequest(execution) - + - + - + - + @@ -700,10 +717,6 @@ css.prepareSelectNSTRequest(execution) - - - - @@ -721,32 +734,22 @@ css.prepareSelectNSTRequest(execution) - - - - + - - - - - - - - + - - + + - + - - + + @@ -762,6 +765,47 @@ css.prepareSelectNSTRequest(execution) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java index 3bd155d512..d68a374cf0 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java @@ -21,100 +21,37 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) +@Data public class CnSliceProfile { + @JsonProperty(value = "sNSSAIList", required = true) private List snssaiList; private String sliceProfileId; + @JsonProperty(value = "pLMNIdList", required = true) private List plmnIdList; + @JsonProperty(value = "perfReq", required = true) private PerfReq perfReq; - @JsonInclude(JsonInclude.Include.NON_DEFAULT) + @JsonProperty(value = "maxNumberofUEs") private int maxNumberofUEs; + @JsonProperty(value = "coverageAreaTAList") private List coverageAreaTAList; - @JsonInclude(JsonInclude.Include.NON_DEFAULT) + @JsonProperty(value = "latency") private int latency; + @JsonProperty(value = "uEMobilityLevel") private UeMobilityLevel ueMobilityLevel; + @JsonProperty(value = "resourceSharingLevel") private ResourceSharingLevel resourceSharingLevel; - - public String getSliceProfileId() { - return sliceProfileId; - } - - public void setSliceProfileId(String sliceProfileId) { - this.sliceProfileId = sliceProfileId; - } - - public List getPlmnIdList() { - return plmnIdList; - } - - public void setPlmnIdList(List plmnIdList) { - this.plmnIdList = plmnIdList; - } - - public PerfReq getPerfReq() { - return perfReq; - } - - public void setPerfReq(PerfReq perfReq) { - this.perfReq = perfReq; - } - - public int getMaxNumberofUEs() { - return maxNumberofUEs; - } - - public void setMaxNumberofUEs(int maxNumberofUEs) { - this.maxNumberofUEs = maxNumberofUEs; - } - - public List getCoverageAreaTAList() { - return coverageAreaTAList; - } - - public void setCoverageAreaTAList(List coverageAreaTAList) { - this.coverageAreaTAList = coverageAreaTAList; - } - - public int getLatency() { - return latency; - } - - public void setLatency(int latency) { - this.latency = latency; - } - - public UeMobilityLevel getUeMobilityLevel() { - return ueMobilityLevel; - } - - public void setUeMobilityLevel(UeMobilityLevel ueMobilityLevel) { - this.ueMobilityLevel = ueMobilityLevel; - } - - public ResourceSharingLevel getResourceSharingLevel() { - return resourceSharingLevel; - } - - public void setResourceSharingLevel(ResourceSharingLevel resourceSharingLevel) { - this.resourceSharingLevel = resourceSharingLevel; - } - - public List getSnssaiList() { - return snssaiList; - } - - public void setSnssaiList(List snssaiList) { - this.snssaiList = snssaiList; - } } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java new file mode 100644 index 0000000000..c64af1d958 --- /dev/null +++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java @@ -0,0 +1,116 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.beans.nsmf; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.ToString; +import org.springframework.beans.BeanUtils; +import java.io.Serializable; +import java.util.Arrays; + +@Data +@ToString +public class SliceProfileAdapter implements Serializable { + + private static final long serialVersionUID = -6412175980642584804L; + + @JsonProperty(value = "sliceProfileId") + private String sliceProfileId; + + @JsonProperty(value = "sNSSAI") + private String sNSSAIList = ""; + + @JsonProperty(value = "pLMNIdList") + private String pLMNIdList = ""; + + @JsonProperty(value = "maxNumberofUEs") + private long maxNumberofUEs; + + @JsonProperty(value = "coverageAreaTAList") + private String coverageAreaTAList = ""; + + @JsonProperty(value = "latency") + private int latency; + + @JsonProperty(value = "uEMobilityLevel") + private String uEMobilityLevel; + + @JsonProperty(value = "resourceSharingLevel") + private String resourceSharingLevel; + + @JsonProperty(value = "maxBandwidth") + private String bandwidth; + + @JsonProperty(value = "sST") + private String sST; + + @JsonProperty(value = "activityFactor") + private String activityFactor; + + @JsonProperty(value = "survivalTime") + private String survivalTime; + + public AnSliceProfile trans2AnProfile() { + AnSliceProfile anSliceProfile = new AnSliceProfile(); + BeanUtils.copyProperties(this, anSliceProfile); + anSliceProfile.setSNSSAIList(Arrays.asList(this.sNSSAIList.split("\\|"))); + anSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|"))); + + String[] areas = this.coverageAreaTAList.split("\\|"); + Integer[] areasRes = new Integer[areas.length]; + for (int i = 0; i < areas.length; i++) { + areasRes[i] = str2Code(areas[i]); + } + anSliceProfile.setCoverageAreaTAList(Arrays.asList(areasRes)); + anSliceProfile.setUEMobilityLevel(UeMobilityLevel.fromString(this.uEMobilityLevel)); + anSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel)); + AnPerfReq anPerfReq = new AnPerfReq(); + // todo + anSliceProfile.setPerfReq(anPerfReq); + return anSliceProfile; + } + + private Integer str2Code(String area) { + return area.hashCode() >> 16; + } + + public CnSliceProfile trans2CnProfile() { + CnSliceProfile cnSliceProfile = new CnSliceProfile(); + BeanUtils.copyProperties(this, cnSliceProfile); + cnSliceProfile.setSnssaiList(Arrays.asList(this.sNSSAIList.split("\\|"))); + cnSliceProfile.setCoverageAreaTAList(Arrays.asList(this.coverageAreaTAList.split("\\|"))); + cnSliceProfile.setPlmnIdList(Arrays.asList(this.pLMNIdList.split("\\|"))); + cnSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel)); + PerfReq perfReq = new PerfReq(); + // todo + cnSliceProfile.setPerfReq(perfReq); + return cnSliceProfile; + } + + public TnSliceProfile trans2TnProfile() { + TnSliceProfile tnSliceProfile = new TnSliceProfile(); + BeanUtils.copyProperties(this, tnSliceProfile); + tnSliceProfile.setSNSSAIList(Arrays.asList(this.sNSSAIList.split("\\|"))); + tnSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|"))); + return tnSliceProfile; + } +} diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java index e97aa704eb..bfd4627b47 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java @@ -19,6 +19,7 @@ */ package org.onap.so.beans.nsmf; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.JsonObject; import lombok.*; @@ -56,15 +57,15 @@ public class SliceTaskParamsAdapter implements Serializable { private TemplateInfo NSTInfo = new TemplateInfo(); - private SliceTaskInfo tnBHSliceTaskInfo = new SliceTaskInfo<>(); + private SliceTaskInfo tnBHSliceTaskInfo = new SliceTaskInfo<>(); - private SliceTaskInfo tnMHSliceTaskInfo = new SliceTaskInfo<>(); + private SliceTaskInfo tnMHSliceTaskInfo = new SliceTaskInfo<>(); - private SliceTaskInfo tnFHSliceTaskInfo = new SliceTaskInfo<>(); + private SliceTaskInfo tnFHSliceTaskInfo = new SliceTaskInfo<>(); - private SliceTaskInfo cnSliceTaskInfo = new SliceTaskInfo<>(); + private SliceTaskInfo cnSliceTaskInfo = new SliceTaskInfo<>(); - private SliceTaskInfo anSliceTaskInfo = new SliceTaskInfo<>(); + private SliceTaskInfo anSliceTaskInfo = new SliceTaskInfo<>(); @SuppressWarnings("unchecked") public void convertFromJson(String jsonString) throws IOException { @@ -80,24 +81,24 @@ public class SliceTaskParamsAdapter implements Serializable { this.setServiceProfile(replaceHeader(paramMap, "ServiceProfile.")); - TnSliceProfile tnBHSliceProfile = mapper.readValue( - mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.BH.")), TnSliceProfile.class); + SliceProfileAdapter tnBHSliceProfile = mapper.readValue( + mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.BH.")), SliceProfileAdapter.class); this.tnBHSliceTaskInfo.setSliceProfile(tnBHSliceProfile); - TnSliceProfile tnMHSliceProfile = mapper.readValue( - mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.MH.")), TnSliceProfile.class); + SliceProfileAdapter tnMHSliceProfile = mapper.readValue( + mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.MH.")), SliceProfileAdapter.class); this.tnMHSliceTaskInfo.setSliceProfile(tnMHSliceProfile); - TnSliceProfile tnFHSliceProfile = mapper.readValue( - mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.FH.")), TnSliceProfile.class); + SliceProfileAdapter tnFHSliceProfile = mapper.readValue( + mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.FH.")), SliceProfileAdapter.class); this.tnFHSliceTaskInfo.setSliceProfile(tnFHSliceProfile); - CnSliceProfile cnSliceProfile = mapper.readValue( - mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.CN.")), CnSliceProfile.class); + SliceProfileAdapter cnSliceProfile = mapper.readValue( + mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.CN.")), SliceProfileAdapter.class); this.cnSliceTaskInfo.setSliceProfile(cnSliceProfile); - AnSliceProfile anSliceProfile = mapper.readValue( - mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.AN.")), AnSliceProfile.class); + SliceProfileAdapter anSliceProfile = mapper.readValue( + mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.AN.")), SliceProfileAdapter.class); this.anSliceTaskInfo.setSliceProfile(anSliceProfile); this.tnBHSliceTaskInfo.setSuggestNssiId(paramMap.get("TN.BH.SuggestNSSIId")); @@ -148,33 +149,31 @@ public class SliceTaskParamsAdapter implements Serializable { for (Map.Entry entry : serviceProfile.entrySet()) { jsonObject.addProperty("ServiceProfile." + entry.getKey(), entry.getValue().toString()); } - Map sliceProfileAn = bean2Map(anSliceTaskInfo.getSliceProfile()); - for (Map.Entry entry : sliceProfileAn.entrySet()) { - jsonObject.addProperty("SliceProfile.AN." + entry.getKey(), entry.getValue().toString()); + String value = entry.getValue() == null ? "" : entry.getValue().toString(); + jsonObject.addProperty("SliceProfile.AN." + entry.getKey(), value); } - Map sliceProfileCn = bean2Map(cnSliceTaskInfo.getSliceProfile()); for (Map.Entry entry : sliceProfileCn.entrySet()) { - jsonObject.addProperty("SliceProfile.CN." + entry.getKey(), entry.getValue().toString()); + String value = entry.getValue() == null ? "" : entry.getValue().toString(); + jsonObject.addProperty("SliceProfile.CN." + entry.getKey(), value); } - Map sliceProfileTnBH = bean2Map(tnBHSliceTaskInfo.getSliceProfile()); for (Map.Entry entry : sliceProfileTnBH.entrySet()) { - jsonObject.addProperty("SliceProfile.TN.BH." + entry.getKey(), entry.getValue().toString()); + String value = entry.getValue() == null ? "" : entry.getValue().toString(); + jsonObject.addProperty("SliceProfile.TN.BH." + entry.getKey(), value); } - Map sliceProfileTnMH = bean2Map(tnMHSliceTaskInfo.getSliceProfile()); for (Map.Entry entry : sliceProfileTnMH.entrySet()) { - jsonObject.addProperty("SliceProfile.TN.MH." + entry.getKey(), entry.getValue().toString()); + String value = entry.getValue() == null ? "" : entry.getValue().toString(); + jsonObject.addProperty("SliceProfile.TN.MH." + entry.getKey(), value); } - Map sliceProfileTnFH = bean2Map(tnFHSliceTaskInfo.getSliceProfile()); for (Map.Entry entry : sliceProfileTnFH.entrySet()) { - jsonObject.addProperty("SliceProfile.TN.FH." + entry.getKey(), entry.getValue().toString()); + String value = entry.getValue() == null ? "" : entry.getValue().toString(); + jsonObject.addProperty("SliceProfile.TN.FH." + entry.getKey(), value); } - jsonObject.addProperty("TN.BH.SuggestNSSIId", tnBHSliceTaskInfo.getSuggestNssiId()); jsonObject.addProperty("TN.BH.SuggestNSSIName", tnBHSliceTaskInfo.getSuggestNssiName()); jsonObject.addProperty("TN.BH.progress", tnBHSliceTaskInfo.getProgress()); @@ -182,7 +181,6 @@ public class SliceTaskParamsAdapter implements Serializable { jsonObject.addProperty("TN.BH.statusDescription", tnBHSliceTaskInfo.getStatusDescription()); jsonObject.addProperty("TN.BH.ScriptName", tnBHSliceTaskInfo.getScriptName()); - jsonObject.addProperty("TN.MH.SuggestNSSIId", tnMHSliceTaskInfo.getSuggestNssiId()); jsonObject.addProperty("TN.MH.SuggestNSSIName", tnMHSliceTaskInfo.getSuggestNssiName()); jsonObject.addProperty("TN.MH.progress", tnMHSliceTaskInfo.getProgress()); @@ -190,7 +188,6 @@ public class SliceTaskParamsAdapter implements Serializable { jsonObject.addProperty("TN.MH.statusDescription", tnMHSliceTaskInfo.getStatusDescription()); jsonObject.addProperty("TN.MH.ScriptName", tnMHSliceTaskInfo.getScriptName()); - jsonObject.addProperty("TN.FH.SuggestNSSIId", tnFHSliceTaskInfo.getSuggestNssiId()); jsonObject.addProperty("TN.FH.SuggestNSSIName", tnFHSliceTaskInfo.getSuggestNssiName()); jsonObject.addProperty("TN.FH.progress", tnFHSliceTaskInfo.getProgress()); @@ -198,7 +195,6 @@ public class SliceTaskParamsAdapter implements Serializable { jsonObject.addProperty("TN.FH.statusDescription", tnFHSliceTaskInfo.getStatusDescription()); jsonObject.addProperty("TN.FH.ScriptName", tnFHSliceTaskInfo.getScriptName()); - jsonObject.addProperty("CN.SuggestNSSIId", cnSliceTaskInfo.getSuggestNssiId()); jsonObject.addProperty("CN.SuggestNSSIName", cnSliceTaskInfo.getSuggestNssiName()); jsonObject.addProperty("CN.progress", cnSliceTaskInfo.getProgress()); @@ -206,7 +202,6 @@ public class SliceTaskParamsAdapter implements Serializable { jsonObject.addProperty("CN.statusDescription", cnSliceTaskInfo.getStatusDescription()); jsonObject.addProperty("CN.ScriptName", cnSliceTaskInfo.getScriptName()); - jsonObject.addProperty("AN.SuggestNSSIId", anSliceTaskInfo.getSuggestNssiId()); jsonObject.addProperty("AN.SuggestNSSIName", anSliceTaskInfo.getSuggestNssiName()); jsonObject.addProperty("AN.progress", anSliceTaskInfo.getProgress()); @@ -219,7 +214,7 @@ public class SliceTaskParamsAdapter implements Serializable { /** * change T t to {@link Map} - * + * * @param t input * @param Object * @return {@link Map} @@ -234,9 +229,18 @@ public class SliceTaskParamsAdapter implements Serializable { Field[] fields = t.getClass().getDeclaredFields(); for (Field field : fields) { String name = field.getName(); - Method method = t.getClass().getMethod("get" + name); + String key = name; + if (name == null || "".equals(name) || "serialVersionUID".equalsIgnoreCase(name)) { + continue; + } + JsonProperty annotation = field.getAnnotation(JsonProperty.class); + if (annotation != null && !annotation.value().equals(JsonProperty.USE_DEFAULT_NAME)) { + key = annotation.value(); + } + + Method method = t.getClass().getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1)); Object value = method.invoke(t); - resMap.put(name, value); + resMap.put(key, value); } } catch (Exception e) { @@ -247,7 +251,7 @@ public class SliceTaskParamsAdapter implements Serializable { /** * replace of slice profile - * + * * @param paramMap params map * @param header starts of key * @return Map diff --git a/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java index ccd6001957..1effb4e972 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java @@ -21,7 +21,9 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) @Data @@ -29,8 +31,15 @@ public class TnSliceProfile { private String sliceProfileId; + @JsonProperty(value = "maxBandwidth") private String bandwidth; @JsonInclude(JsonInclude.Include.NON_DEFAULT) private int latency; + + @JsonProperty(value = "sNSSAIList", required = true) + private List sNSSAIList; + + @JsonProperty(value = "pLMNIdList", required = true) + private List pLMNIdList; } -- cgit 1.2.3-korg