2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 # Copyright (c) 2020, CMCC Technologies Co., Ltd.
7 # Licensed under the Apache License, Version 2.0 (the "License")
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
11 # http://www.apache.org/licenses/LICENSE-2.0
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import com.fasterxml.jackson.databind.ObjectMapper
24 import org.camunda.bpm.engine.delegate.DelegateExecution
25 import org.onap.so.beans.nsmf.EsrInfo
26 import org.onap.so.beans.nsmf.NetworkType
27 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
28 import org.onap.so.beans.nsmf.QuerySubnetCapability
29 import org.onap.so.beans.nsmf.SliceProfileAdapter
30 import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
31 import org.onap.so.beans.nsmf.oof.SubnetCapability
32 import org.onap.so.beans.nsmf.oof.SubnetType
33 import org.onap.so.beans.nsmf.oof.TemplateInfo
34 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
35 import org.onap.so.bpmn.common.scripts.ExceptionUtil
36 import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
37 import org.onap.so.bpmn.common.scripts.OofUtils
38 import org.onap.so.bpmn.core.UrnPropertiesReader
39 import org.onap.so.bpmn.core.domain.AllottedResource
40 import org.onap.so.bpmn.core.domain.ModelInfo
41 import org.onap.so.bpmn.core.domain.ServiceDecomposition
42 import org.onap.so.bpmn.core.json.JsonUtils
43 import org.slf4j.Logger
44 import org.slf4j.LoggerFactory
45 import org.springframework.util.StringUtils
48 class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
50 private static final Logger logger = LoggerFactory.getLogger(DoCreateSliceServiceOption.class)
52 ExceptionUtil exceptionUtil = new ExceptionUtil()
54 JsonUtils jsonUtil = new JsonUtils()
56 OofUtils oofUtils = new OofUtils()
58 private static final ObjectMapper objectMapper = new ObjectMapper()
60 private NssmfAdapterUtils nssmfAdapterUtils = new NssmfAdapterUtils(httpClientFactory, jsonUtil)
62 private static final String QUERY_SUB_NET_CAPABILITY = "/api/rest/provMns/v1/NSS/subnetCapabilityQuery"
64 private static final String QUERY_NSSI_SELECTION_CAPABILITY = "/api/rest/provMns/v1/NSS/NSSISelectionCapability"
66 void preProcessRequest (DelegateExecution execution) {
70 * prepare the params for decompose nst
73 public void prepareDecomposeNST(DelegateExecution execution) {
75 SliceTaskParamsAdapter sliceTaskParams =
76 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
78 String modelUuid = sliceTaskParams.getNSTInfo().getUUID()
79 String modelInvariantUuid = sliceTaskParams.getNSTInfo().getInvariantUUID()
81 String serviceModelInfo = """{
82 "modelInvariantUuid":"${modelInvariantUuid}",
83 "modelUuid":"${modelUuid}",
86 execution.setVariable("nstServiceModelInfo", serviceModelInfo)
90 * process the result of NST Decomposition
93 public void processDecompositionNST(DelegateExecution execution) {
95 List<TemplateInfo> nsstInfos = new ArrayList<>()
96 ServiceDecomposition nstServiceDecomposition =
97 execution.getVariable("nstServiceDecomposition") as ServiceDecomposition
99 List<AllottedResource> allottedResources = nstServiceDecomposition.getAllottedResources()
100 for (AllottedResource allottedResource : allottedResources) {
101 TemplateInfo nsstInfo = new TemplateInfo()
102 nsstInfo.setUUID(allottedResource.getProvidingServiceModelUuid())
103 nsstInfo.setInvariantUUID(allottedResource.getProvidingServiceModelInvariantUuid())
104 nsstInfo.setName(allottedResource.getProvidingServiceModelName())
105 nsstInfos.add(nsstInfo)
107 execution.setVariable("nsstInfos", nsstInfos)
109 execution.setVariable("maxNsstIndex", allottedResources.size() - 1)
110 execution.setVariable("currentNsstIndex", 0)
112 List<ServiceDecomposition> nsstServiceDecompositions = new ArrayList<>()
113 execution.setVariable("nsstServiceDecompositions", nsstServiceDecompositions)
117 * prepare the params for decompose nsst
120 public void prepareDecomposeNSST(DelegateExecution execution) {
122 List<TemplateInfo> nsstInfos = execution.getVariable("nsstInfos") as List<TemplateInfo>
123 int index = execution.getVariable("currentNsstIndex") as Integer
125 String modelUuid = nsstInfos.get(index).getUUID()
126 String modelInvariantUuid = nsstInfos.get(index).getInvariantUUID()
128 String serviceModelInfo = """{
129 "modelInvariantUuid":"${modelInvariantUuid}",
130 "modelUuid":"${modelUuid}",
133 execution.setVariable("nsstServiceModelInfo", serviceModelInfo)
138 * process the result of NSST Decomposition
141 public void processDecompositionNSST(DelegateExecution execution) {
142 List<ServiceDecomposition> nsstServiceDecompositions =
143 execution.getVariable("nsstServiceDecompositions") as List<ServiceDecomposition>
145 ServiceDecomposition nsstServiceDecomposition =
146 execution.getVariable("nsstServiceDecomposition") as ServiceDecomposition
148 nsstServiceDecompositions.add(nsstServiceDecomposition)
150 execution.setVariable("nsstServiceDecompositions", nsstServiceDecompositions)
152 int num = execution.getVariable("maxNsstIndex") as Integer
153 int index = execution.getVariable("currentNsstIndex") as Integer
155 List<TemplateInfo> nsstInfos = execution.getVariable("nsstInfos") as List<TemplateInfo>
156 nsstInfos.get(index).name = nsstServiceDecomposition.modelInfo.modelName
157 execution.setVariable("nsstInfos", nsstInfos)
158 execution.setVariable("currentNsstIndex", index + 1)
161 execution.setVariable("nsstHandleContinue", false)
163 execution.setVariable("nsstHandleContinue", true)
169 * set nsst info to sliceTaskParams by type
172 public void handleNsstByType(DelegateExecution execution) {
174 SliceTaskParamsAdapter sliceParams =
175 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
177 List<ServiceDecomposition> nsstServiceDecompositions =
178 execution.getVariable("nsstServiceDecompositions") as List<ServiceDecomposition>
180 List<SubnetCapability> subnetCapabilities = new ArrayList<>()
182 for (ServiceDecomposition serviceDecomposition : nsstServiceDecompositions) {
183 handleByType(execution, serviceDecomposition, sliceParams, subnetCapabilities)
186 execution.setVariable("sliceTaskParams", sliceParams)
187 execution.setVariable("subnetCapabilities", subnetCapabilities)
188 execution.setVariable("queryNsiFirst", true)
189 logger.debug("sliceTaskParams= " + sliceParams.toString())
192 private void handleByType(DelegateExecution execution, ServiceDecomposition serviceDecomposition,
193 SliceTaskParamsAdapter sliceParams, List<SubnetCapability> subnetCapabilities) {
194 ModelInfo modelInfo = serviceDecomposition.getModelInfo()
195 String vendor = serviceDecomposition.getServiceRole()
196 SubnetType subnetType = convertServiceCategory(serviceDecomposition.getServiceCategory())
198 switch (subnetType) {
199 case SubnetType.TN_BH:
200 sliceParams.tnBHSliceTaskInfo.vendor = vendor
201 sliceParams.tnBHSliceTaskInfo.subnetType = subnetType
202 sliceParams.tnBHSliceTaskInfo.networkType = subnetType.networkType
203 sliceParams.tnBHSliceTaskInfo.NSSTInfo.UUID = modelInfo.getModelUuid()
204 sliceParams.tnBHSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
205 sliceParams.tnBHSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
207 case SubnetType.TN_MH:
208 sliceParams.tnMHSliceTaskInfo.vendor = vendor
209 sliceParams.tnMHSliceTaskInfo.subnetType = subnetType
210 sliceParams.tnMHSliceTaskInfo.networkType = subnetType.networkType
211 sliceParams.tnMHSliceTaskInfo.NSSTInfo.UUID = modelInfo.getModelUuid()
212 sliceParams.tnMHSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
213 sliceParams.tnMHSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
216 sliceParams.anSliceTaskInfo.vendor = vendor
217 sliceParams.anSliceTaskInfo.subnetType = subnetType
218 sliceParams.anSliceTaskInfo.networkType = subnetType.networkType
219 sliceParams.anSliceTaskInfo.NSSTInfo.UUID = modelInfo.getModelUuid()
220 sliceParams.anSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
221 sliceParams.anSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
224 sliceParams.cnSliceTaskInfo.vendor = vendor
225 sliceParams.cnSliceTaskInfo.subnetType = subnetType
226 sliceParams.cnSliceTaskInfo.networkType = subnetType.networkType
227 sliceParams.cnSliceTaskInfo.NSSTInfo.UUID = modelInfo.getModelUuid()
228 sliceParams.cnSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
229 sliceParams.cnSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
235 if (null == subnetType) {
236 def msg = "Get subnetType failed, modelUUId=" + modelInfo.getModelUuid()
238 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
240 String response = querySubnetCapability(execution, vendor, subnetType)
241 if (!StringUtils.isEmpty(response)) {
242 SubnetCapability subnetCapability = new SubnetCapability()
243 Map<String, Object> result = objectMapper.readValue(response, Map.class)
244 for (Map.Entry<String, Object> entry : result.entrySet()) {
245 subnetCapability.setDomainType(entry.getKey())
246 subnetCapability.setCapabilityDetails(entry.getValue())
248 subnetCapabilities.add(subnetCapability)
253 * get subnetType from serviceCategory
256 private SubnetType convertServiceCategory(String serviceCategory){
257 if(serviceCategory ==~ /CN.*/){
260 if (serviceCategory ==~ /AN.*NF.*/){
263 if (serviceCategory ==~ /TN.*BH.*/){
264 return SubnetType.TN_BH
266 if(serviceCategory ==~ /TN.*MH.*/){
267 return SubnetType.TN_MH
273 * query Subnet Capability of TN AN CN
276 private String querySubnetCapability(DelegateExecution execution, String vendor, SubnetType subnetType) {
278 String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, QUERY_SUB_NET_CAPABILITY,
279 buildQuerySubnetCapRequest(vendor, subnetType))
284 * build request body for querying Subnet Capability
290 private static NssmfAdapterNBIRequest buildQuerySubnetCapRequest(String vendor, SubnetType subnetType) {
291 NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest()
293 List<String> subnetTypes = new ArrayList<>()
294 subnetTypes.add(subnetType.subnetType)
296 QuerySubnetCapability req = new QuerySubnetCapability()
297 req.setSubnetTypes(subnetTypes)
299 request.setSubnetCapabilityQuery(req)
301 EsrInfo esrInfo = new EsrInfo()
302 esrInfo.setVendor(vendor)
303 esrInfo.setNetworkType(subnetType.networkType)
304 request.setEsrInfo(esrInfo)
311 * prepare select nsi request
314 public void preNSIRequest(DelegateExecution execution) {
315 boolean preferReuse = execution.getVariable("needQuerySliceProfile") ? false : true
317 String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
318 logger.debug( "get NSI option OOF Url: " + urlString)
320 String requestId = execution.getVariable("msoRequestId")
321 String messageType = "NSISelectionResponse"
323 execution.setVariable("nsiSelectionUrl", "/api/oof/selection/nsi/v1")
324 execution.setVariable("nsiSelection_messageType", messageType)
325 execution.setVariable("nsiSelection_correlator", requestId)
326 String timeout = UrnPropertiesReader.getVariable("mso.adapters.oof.timeout", execution)
327 execution.setVariable("nsiSelection_timeout", timeout)
329 SliceTaskParamsAdapter sliceParams =
330 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
332 Map<String, Object> profileInfo = sliceParams.getServiceProfile()
333 profileInfo.remove("profileId")
334 TemplateInfo nstInfo = sliceParams.getNSTInfo()
336 List<TemplateInfo> nsstInfos = execution.getVariable("nsstInfos") as List<TemplateInfo>
338 List<SubnetCapability> subnetCapabilities =
339 execution.getVariable("subnetCapabilities") as List<SubnetCapability>
341 String oofRequest = oofUtils.buildSelectNSIRequest(requestId, nstInfo, nsstInfos,
342 messageType, profileInfo, subnetCapabilities, 600, preferReuse)
344 execution.setVariable("nsiSelection_oofRequest", oofRequest)
345 logger.debug("Sending request to OOF: " + oofRequest)
350 * process select nsi response
353 public void processNSIResp(DelegateExecution execution) {
355 SliceTaskParamsAdapter sliceTaskParams =
356 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
358 String oofResponse = execution.getVariable("nsiSelection_oofResponse")
359 logger.debug("NSI oofResponse is: " + oofResponse)
360 execution.setVariable("oofResponse", oofResponse)
361 //This needs to be changed to derive a value when we add policy to decide the solution options.
363 Map<String, Object> resMap = objectMapper.readValue(oofResponse, Map.class)
364 String requestStatus = resMap.get("requestStatus")
365 if (!StringUtils.isEmpty(requestStatus) && requestStatus == "error") {
366 exceptionUtil.buildWorkflowException(execution, 7000, "get nsi from oof error: " + oofResponse)
370 List<Map<String, Object>> nsiSolutions = (List<Map<String, Object>>) resMap.get("solutions")
372 Map<String, Object> solution = nsiSolutions.get(0)
374 //String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
375 //Boolean isSharable = resourceSharingLevel == "shared"
377 if (solution != null) {
378 if (execution.getVariable("queryNsiFirst")) {
379 if (solution.get("existingNSI")) {
380 execution.setVariable("needQuerySliceProfile", true)
382 processNewNSI(solution, sliceTaskParams)
383 execution.setVariable("needQuerySliceProfile", false)
385 execution.setVariable("queryNsiFirst", false)
387 processSharedNSI(solution, sliceTaskParams)
388 execution.setVariable("needQuerySliceProfile", false)
391 execution.setVariable("sliceTaskParams", sliceTaskParams)
392 logger.debug("after req to oof for nis select, sliceTaskParams = " + sliceTaskParams)
393 logger.debug("*** Completed options Call to OOF ***")
396 private static void processSharedNSI(Map<String, Object> solution, SliceTaskParamsAdapter sliceParams) {
397 Map<String, Object> sharedNSISolution = solution.get("sharedNSISolution") as Map
398 String nsiId = sharedNSISolution.get("NSIId")
399 String nsiName = sharedNSISolution.get("NSIName")
400 sliceParams.setSuggestNsiId(nsiId)
401 sliceParams.setSuggestNsiName(nsiName)
403 List<Map> sliceProfiles = sharedNSISolution.get("sliceProfiles") as List<Map>
404 handleSliceProfiles(sliceProfiles, sliceParams)
407 private static void processNewNSI(Map<String, Object> solution, SliceTaskParamsAdapter sliceParams) {
408 Map<String, Object> newNSISolution = solution.get("newNSISolution") as Map
409 List<Map> sliceProfiles = newNSISolution.get("sliceProfiles") as List<Map>
410 handleSliceProfiles(sliceProfiles, sliceParams)
413 static def handleSliceProfiles(List<Map> sliceProfiles, SliceTaskParamsAdapter sliceParams) {
414 for (Map sliceProfile : sliceProfiles) {
415 String domainType = sliceProfile.get("domainType")
416 sliceProfile.remove("domainType")
417 SliceProfileAdapter adapter = objectMapper.readValue(objectMapper.writeValueAsString(sliceProfile), SliceProfileAdapter.class)
418 switch (domainType.toLowerCase()) {
420 sliceParams.tnBHSliceTaskInfo.sliceProfile = adapter
424 sliceParams.anSliceTaskInfo.sliceProfile = adapter
427 sliceParams.cnSliceTaskInfo.sliceProfile = adapter
436 * get NSSI Selection Capability for AN
439 public void getNSSISelectionCap4AN(DelegateExecution execution) {
441 def vendor = execution.getVariable("vendor") as String
443 String strRequest = buildNSSISelectionReq(vendor, NetworkType.ACCESS)
445 String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, QUERY_NSSI_SELECTION_CAPABILITY, strRequest)
447 Map<String, Object> resMap = objectMapper.readValue(response, Map.class)
449 String selection = resMap.get("selection")
452 if ("NSMF".equalsIgnoreCase(selection)) {
453 execution.setVariable("NEED_AN_NSSI_SELECTION", true)
458 * get NSSI Selection Capability for TN
461 public void getNSSISelectionCap4TN(DelegateExecution execution) {
463 def vendor = execution.getVariable("vendor") as String
465 String strRequest = buildNSSISelectionReq(vendor, NetworkType.TRANSPORT)
467 String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, QUERY_NSSI_SELECTION_CAPABILITY, strRequest)
469 Map<String, Object> resMap = objectMapper.readValue(response, Map.class)
471 String selection = resMap.get("selection")
473 if ("NSMF".equalsIgnoreCase(selection)) {
474 execution.setVariable("NEED_TN_NSSI_SELECTION", true)
479 * get NSSI Selection Capability for CN
482 public void getNSSISelectionCap4CN(DelegateExecution execution) {
484 def vendor = execution.getVariable("vendor") as String
486 String strRequest = buildNSSISelectionReq(vendor, NetworkType.CORE)
488 String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, QUERY_NSSI_SELECTION_CAPABILITY, strRequest)
490 Map<String, Object> resMap = objectMapper.readValue(response, Map.class)
492 String selection = resMap.get("selection")
494 if ("NSMF".equalsIgnoreCase(selection)) {
495 //execution.setVariable("NEED_CN_NSSI_SELECTION", true)
500 * build NSSI Selection Capability Request body to nssmf adapter
505 private static String buildNSSISelectionReq(String vendor, NetworkType networkType) {
506 NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest()
507 EsrInfo esrInfo = new EsrInfo()
508 esrInfo.setVendor(vendor)
509 esrInfo.setNetworkType(networkType)
510 request.setEsrInfo(esrInfo)
512 return objectMapper.writeValueAsString(request)
516 * if exist nssi need to select?
519 public void handleNssiSelect(DelegateExecution execution) {
521 SliceTaskParamsAdapter sliceTaskParams =
522 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
525 boolean needCnNssiSelection = execution.getVariable("NEED_CN_NSSI_SELECTION") as Boolean
526 boolean needAnNssiSelection = execution.getVariable("NEED_AN_NSSI_SELECTION") as Boolean
527 boolean needTnNssiSelection = execution.getVariable("NEED_TN_NSSI_SELECTION") as Boolean
532 * "subType": subtype,
533 * "nsstInfo": object,
534 * "sliceProfile": object
537 * "subType": subtype,
538 * "nsstInfo": object,
539 * "sliceProfile": object
543 List<Map> nssiNeedHandlerInfos = new ArrayList<>()
544 Map<String, Object> nssiNeedHandlerMap = new HashMap()
546 //List<TemplateInfo> nssiNeedHandlers = new ArrayList<>()
547 //List<Object> nssiProfileNeedHandlers = new ArrayList<>()
548 if (needCnNssiSelection) {
549 nssiNeedHandlerMap.put("subnetType", sliceTaskParams.cnSliceTaskInfo.subnetType)
550 nssiNeedHandlerMap.put("nsstInfo", sliceTaskParams.cnSliceTaskInfo.NSSTInfo)
551 nssiNeedHandlerMap.put("sliceProfile", sliceTaskParams.cnSliceTaskInfo.sliceProfile)
552 nssiNeedHandlerInfos.add(nssiNeedHandlerMap)
554 if (needAnNssiSelection) {
555 nssiNeedHandlerMap.clear()
556 nssiNeedHandlerMap.put("subnetType", sliceTaskParams.anSliceTaskInfo.subnetType)
557 nssiNeedHandlerMap.put("nsstInfo", sliceTaskParams.anSliceTaskInfo.NSSTInfo)
558 nssiNeedHandlerMap.put("sliceProfile", sliceTaskParams.anSliceTaskInfo.sliceProfile)
559 nssiNeedHandlerInfos.add(nssiNeedHandlerMap)
561 if (needTnNssiSelection) {
562 nssiNeedHandlerMap.clear()
563 nssiNeedHandlerMap.put("subnetType", sliceTaskParams.tnBHSliceTaskInfo.subnetType)
564 nssiNeedHandlerMap.put("nsstInfo", sliceTaskParams.tnBHSliceTaskInfo.NSSTInfo)
565 nssiNeedHandlerMap.put("sliceProfile", sliceTaskParams.tnBHSliceTaskInfo.sliceProfile)
566 nssiNeedHandlerInfos.add(nssiNeedHandlerMap)
568 nssiNeedHandlerMap.clear()
569 nssiNeedHandlerMap.put("subnetType", sliceTaskParams.tnMHSliceTaskInfo.subnetType)
570 nssiNeedHandlerMap.put("nsstInfo", sliceTaskParams.tnMHSliceTaskInfo.NSSTInfo)
571 nssiNeedHandlerMap.put("sliceProfile", sliceTaskParams.tnMHSliceTaskInfo.sliceProfile)
572 nssiNeedHandlerInfos.add(nssiNeedHandlerMap)
574 nssiNeedHandlerMap.clear()
575 nssiNeedHandlerMap.put("subnetType", sliceTaskParams.tnFHSliceTaskInfo.subnetType)
576 nssiNeedHandlerMap.put("nsstInfo", sliceTaskParams.tnFHSliceTaskInfo.NSSTInfo)
577 nssiNeedHandlerMap.put("sliceProfile", sliceTaskParams.tnFHSliceTaskInfo.sliceProfile)
578 nssiNeedHandlerInfos.add(nssiNeedHandlerMap)
582 if (nssiNeedHandlerInfos.size() > 0) {
583 execution.setVariable("needSelectNssi", true)
584 execution.setVariable("currNssiIndex", 0)
585 execution.setVariable("nssiNeedHandlerInfos", nssiNeedHandlerInfos)
587 execution.setVariable("needSelectNssi", false)
590 execution.setVariable("sliceTaskParams", sliceTaskParams)
594 * prepare select nssi request
597 public void preNSSIRequest(DelegateExecution execution) {
599 List<Map> nssiNeedHandlerInfos =
600 execution.getVariable("nssiNeedHandlerInfos") as List<Map>
602 int currNssiIndex = execution.getVariable("currNssiIndex") as Integer
603 Map nssiNeedHandlerInfo = nssiNeedHandlerInfos.get(currNssiIndex) as Map
605 TemplateInfo nsstInfo = nssiNeedHandlerInfo.get("nsstInfo") as TemplateInfo
606 Map<String, Object> profileInfo = nssiNeedHandlerInfo.get("sliceProfile") as Map
607 //profileInfo.remove("profileId")
609 String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
610 logger.debug( "get NSI option OOF Url: " + urlString)
612 String requestId = execution.getVariable("msoRequestId")
613 String messageType = "NSSISelectionResponse"
615 execution.setVariable("nssiSelectionUrl", "/api/oof/selection/nssi/v1")
616 execution.setVariable("nssiSelection_messageType", messageType)
617 execution.setVariable("nssiSelection_correlator", requestId)
618 String timeout = UrnPropertiesReader.getVariable("mso.adapters.oof.timeout", execution)
619 execution.setVariable("nssiSelection_timeout", timeout)
621 String oofRequest = oofUtils.buildSelectNSSIRequest(requestId, nsstInfo, messageType,
624 execution.setVariable("nssiSelection_oofRequest", oofRequest)
625 logger.debug("Sending request to OOF: " + oofRequest)
629 * process select nssi response
632 public void processNSSIResp(DelegateExecution execution) {
634 List<Map> nssiNeedHandlerInfos =
635 execution.getVariable("nssiNeedHandlerInfos") as List<Map>
637 int currNssiIndex = execution.getVariable("currNssiIndex") as Integer
638 Map nssiNeedHandlerInfo = nssiNeedHandlerInfos.get(currNssiIndex) as Map
639 SubnetType subnetType = nssiNeedHandlerInfo.get("subnetType") as SubnetType
641 SliceTaskParamsAdapter sliceTaskParams =
642 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
645 String OOFResponse = execution.getVariable("nssiSelection_oofResponse")
646 logger.debug("NSI OOFResponse is: " + OOFResponse)
647 execution.setVariable("OOFResponse", OOFResponse)
648 //This needs to be changed to derive a value when we add policy to decide the solution options.
650 Map<String, Object> resMap = objectMapper.readValue(OOFResponse, Map.class)
651 List<Map<String, Object>> nsiSolutions = (List<Map<String, Object>>) resMap.get("solutions")
652 Map<String, Object> solution = nsiSolutions.get(0)
654 String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
655 Boolean isSharable = resourceSharingLevel == "shared" //todo
657 if (isSharable && solution != null) {
658 processNssiResult(sliceTaskParams, subnetType, solution)
661 execution.setVariable("sliceTaskParams", sliceTaskParams)
662 //logger.debug("sliceTaskParams: "+ sliceTaskParams.convertToJson())
663 logger.debug("*** Completed options Call to OOF ***")
665 logger.debug("start parseServiceProfile")
666 //parseServiceProfile(execution)
667 logger.debug("end parseServiceProfile")
669 if (currNssiIndex >= nssiNeedHandlerInfos.size() - 1) {
670 execution.setVariable("needSelectNssi", false)
672 execution.setVariable("currNssiIndex", currNssiIndex + 1)
673 execution.setVariable("needSelectNssi", true)
678 private void processNssiResult(SliceTaskParamsAdapter sliceTaskParams, SubnetType subnetType,
679 Map<String, Object> solution) {
680 switch (subnetType) {
682 sliceTaskParams.cnSliceTaskInfo.suggestNssiId = solution.get("NSSIId")
683 sliceTaskParams.cnSliceTaskInfo.suggestNssiName = solution.get("NSSIName")
686 sliceTaskParams.anSliceTaskInfo.suggestNssiId = solution.get("NSSIId")
687 sliceTaskParams.anSliceTaskInfo.suggestNssiName = solution.get("NSSIName")
689 case SubnetType.TN_BH:
690 sliceTaskParams.tnBHSliceTaskInfo.suggestNssiId = solution.get("NSSIId")
691 sliceTaskParams.tnBHSliceTaskInfo.suggestNssiName = solution.get("NSSIName")
693 case SubnetType.TN_FH:
694 sliceTaskParams.tnFHSliceTaskInfo.suggestNssiId = solution.get("NSSIId")
695 sliceTaskParams.tnFHSliceTaskInfo.suggestNssiName = solution.get("NSSIName")
697 case SubnetType.TN_MH:
698 sliceTaskParams.tnMHSliceTaskInfo.suggestNssiId = solution.get("NSSIId")
699 sliceTaskParams.tnMHSliceTaskInfo.suggestNssiName = solution.get("NSSIName")