2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (c) 2022 Deutsche telekom
6 * ================================================================================
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=========================================================
22 package org.onap.so.bpmn.moi.tasks;
24 import com.fasterxml.jackson.core.JsonProcessingException;
25 import com.fasterxml.jackson.databind.ObjectMapper;
26 import org.onap.aai.domain.yang.ServiceInstance;
27 import org.onap.aai.domain.yang.SliceProfile;
28 import org.onap.aaiclient.client.aai.AAIRestClientImpl;
29 import org.onap.so.bpmn.common.BuildingBlockExecution;
30 import org.onap.so.bpmn.common.InjectionHelper;
31 import org.onap.so.bpmn.moi.util.AAISliceProfileUtil;
32 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
33 import org.onap.so.moi.PlmnInfo;
34 import org.onap.so.moi.RANSliceSubnetProfile;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37 import org.springframework.beans.factory.annotation.Autowired;
38 import org.springframework.stereotype.Component;
39 import java.util.ArrayList;
40 import java.util.List;
42 import java.util.Optional;
46 public class ModifyRANNssiBBTask {
47 private static final Logger LOGGER = LoggerFactory.getLogger(ModifyRANNssiBBTask.class);
50 private InjectionHelper injectionHelper;
53 private AAISliceProfileUtil aaiSliceProfileUtil;
55 private AAIRestClientImpl aaiRestClient = new AAIRestClientImpl();
57 private static final ObjectMapper mapper = new ObjectMapper();
60 public void modifyNssi(BuildingBlockExecution execution) throws JsonProcessingException {
61 LOGGER.info("Modify NSSI");
62 GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock();
64 String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId();
65 List<Map<String, Object>> sliceProfilesData = gBB.getRequestContext().getRequestParameters().getUserParams();
67 SliceProfile updatedSliceProfile = mapUserParamsToSliceProfile(sliceProfilesData);
68 String sliceProfileIdFromRequest = getSliceProfileIdFromReq(sliceProfilesData);
69 aaiSliceProfileUtil.updateSliceProfile(execution, sliceProfileIdFromRequest, updatedSliceProfile);
75 private ServiceInstance mapUserParamsToServiceInstance(ServiceInstance sliceProfileServiceInstanceObj,
76 List<Map<String, Object>> sliceProfilesData) {
77 Map<String, Object> mapParam = (Map<String, Object>) sliceProfilesData.get(0).get("nssi");
78 LOGGER.info(">>> mapParam: {}", mapParam);
80 // update administrative State
81 String administrativeState = (String) mapParam.get("administrativeState");
82 LOGGER.info(">>> administrativeState: {}", administrativeState);
83 sliceProfileServiceInstanceObj.setOperationalStatus(administrativeState);
85 List<Object> list = (ArrayList<Object>) mapParam.get("sliceProfileList");
86 LOGGER.info(">>> sliceProfile List: {}", list);
87 Map<String, Object> idMap = (Map<String, Object>) list.get(0);
88 LOGGER.info("Keys of Id Map {} ", idMap.keySet());
91 for (String key : idMap.keySet()) {
92 if (key.equalsIgnoreCase("plmnInfoList")) {
93 PlmnInfo plmnInfo = mapper.convertValue(mapParam, PlmnInfo.class);
94 LOGGER.info("PlmnInfo {}", plmnInfo.getPlmnId().getMcc() + "-" + plmnInfo.getPlmnId().getMnc());
95 LOGGER.info("Snssai {} ", plmnInfo.getSnssai().getSst() + "-" + plmnInfo.getSnssai().getSd());
96 sliceProfileServiceInstanceObj.setServiceInstanceLocationId(
97 plmnInfo.getPlmnId().getMcc() + "-" + plmnInfo.getPlmnId().getMnc());
98 sliceProfileServiceInstanceObj
99 .setEnvironmentContext(plmnInfo.getSnssai().getSst() + "-" + plmnInfo.getSnssai().getSd());
102 return sliceProfileServiceInstanceObj;
105 SliceProfile mapUserParamsToSliceProfile(List<Map<String, Object>> sliceProfilesData)
106 throws JsonProcessingException {
107 SliceProfile sliceProfile = new SliceProfile();
108 Map<String, Object> mapParam = (Map<String, Object>) sliceProfilesData.get(0).get("nssi");
109 LOGGER.info(">>> mapParam in map: {}", mapParam);
111 List<Object> list = (ArrayList<Object>) mapParam.get("sliceProfileList");
113 Map<String, Object> idMap = (Map<String, Object>) list.get(0);
115 String sliceProfileId = (String) idMap.get("sliceProfileId");
117 sliceProfile.setProfileId(sliceProfileId);
118 RANSliceSubnetProfile ranSliceSubnetProfile = mapper.convertValue(mapParam, RANSliceSubnetProfile.class);
121 for (String key : idMap.keySet()) {
122 if (key.equalsIgnoreCase("RANSliceSubnetProfile")) {
123 RANSliceSubnetProfile RANSliceSubnetProfile =
124 mapper.convertValue(mapParam, RANSliceSubnetProfile.class);
125 LOGGER.info("RANSliceSubnetProfile inside {}", RANSliceSubnetProfile);
126 Map<String, Object> ranMap = (Map<String, Object>) idMap.get(key);
127 ranMap.forEach((k, v) -> {
128 LOGGER.info("Key : {}", k);
130 case "coverageAreaTAList":
131 Integer coverageAreaTAList = (Integer) ranMap.get(k);
132 LOGGER.info("coverageAreaTAList {}", coverageAreaTAList);
133 sliceProfile.setCoverageAreaTAList(coverageAreaTAList.toString());
137 Integer latency = (Integer) ranMap.get(k);
138 LOGGER.info("latency {}", latency);
139 sliceProfile.setLatency(latency);
143 Integer dLLatency = (Integer) ranMap.get(k);
144 LOGGER.info("dLLatency {}", dLLatency);
145 sliceProfile.setLatency(dLLatency);
148 case "areaTrafficCapDL":
149 Integer areaTrafficCapDL = (Integer) ranMap.get(k);
150 LOGGER.info("areaTrafficCapDL {}", areaTrafficCapDL);
151 sliceProfile.setAreaTrafficCapDL(areaTrafficCapDL);
154 case "resourceSharingLevel":
155 String resourceSharingLevel = (String) ranMap.get(k);
156 LOGGER.info("resourceSharingLevel {}", resourceSharingLevel);
157 sliceProfile.setResourceSharingLevel(resourceSharingLevel);
160 case "maxNumberofUEs":
161 Integer maxNumberofUEs = (Integer) ranMap.get(k);
162 LOGGER.info("maxNumberofUEs {}", maxNumberofUEs);
163 sliceProfile.setMaxNumberOfUEs(maxNumberofUEs);
173 private String getSliceProfileIdFromReq(List<Map<String, Object>> sliceProfilesData)
174 throws JsonProcessingException {
175 Map<String, Object> mapParam = (Map<String, Object>) sliceProfilesData.get(0).get("nssi");
177 List<Object> list = (ArrayList<Object>) mapParam.get("sliceProfileList");
179 Map<String, Object> idMap = (Map<String, Object>) list.get(0);
180 String sliceProfileId = (String) idMap.get("sliceProfileId");
182 return sliceProfileId;