Code changes in BPMN infra for RAN Slice Use case
[so.git] / bpmn / so-bpmn-moi / src / main / java / org / onap / so / bpmn / moi / tasks / ModifyRANNssiBBTask.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21
22 package org.onap.so.bpmn.moi.tasks;
23
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;
41 import java.util.Map;
42 import java.util.Optional;
43
44
45 @Component
46 public class ModifyRANNssiBBTask {
47     private static final Logger LOGGER = LoggerFactory.getLogger(ModifyRANNssiBBTask.class);
48
49     @Autowired
50     private InjectionHelper injectionHelper;
51
52     @Autowired
53     private AAISliceProfileUtil aaiSliceProfileUtil;
54
55     private AAIRestClientImpl aaiRestClient = new AAIRestClientImpl();
56
57     private static final ObjectMapper mapper = new ObjectMapper();
58
59
60     public void modifyNssi(BuildingBlockExecution execution) throws JsonProcessingException {
61         LOGGER.info("Modify NSSI");
62         GeneralBuildingBlock gBB = execution.getGeneralBuildingBlock();
63
64         String serviceInstanceId = gBB.getServiceInstance().getServiceInstanceId();
65         List<Map<String, Object>> sliceProfilesData = gBB.getRequestContext().getRequestParameters().getUserParams();
66
67         SliceProfile updatedSliceProfile = mapUserParamsToSliceProfile(sliceProfilesData);
68         String sliceProfileIdFromRequest = getSliceProfileIdFromReq(sliceProfilesData);
69         aaiSliceProfileUtil.updateSliceProfile(execution, sliceProfileIdFromRequest, updatedSliceProfile);
70
71
72
73     }
74
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);
79
80         // update administrative State
81         String administrativeState = (String) mapParam.get("administrativeState");
82         LOGGER.info(">>> administrativeState: {}", administrativeState);
83         sliceProfileServiceInstanceObj.setOperationalStatus(administrativeState);
84
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());
89
90         // PlmnInfoList
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());
100             }
101         }
102         return sliceProfileServiceInstanceObj;
103     }
104
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);
110
111         List<Object> list = (ArrayList<Object>) mapParam.get("sliceProfileList");
112
113         Map<String, Object> idMap = (Map<String, Object>) list.get(0);
114
115         String sliceProfileId = (String) idMap.get("sliceProfileId");
116
117         sliceProfile.setProfileId(sliceProfileId);
118         RANSliceSubnetProfile ranSliceSubnetProfile = mapper.convertValue(mapParam, RANSliceSubnetProfile.class);
119
120
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);
129                     switch (k) {
130                         case "coverageAreaTAList":
131                             Integer coverageAreaTAList = (Integer) ranMap.get(k);
132                             LOGGER.info("coverageAreaTAList {}", coverageAreaTAList);
133                             sliceProfile.setCoverageAreaTAList(coverageAreaTAList.toString());
134                             break;
135
136                         case "latency":
137                             Integer latency = (Integer) ranMap.get(k);
138                             LOGGER.info("latency {}", latency);
139                             sliceProfile.setLatency(latency);
140                             break;
141
142                         case "dLLatency":
143                             Integer dLLatency = (Integer) ranMap.get(k);
144                             LOGGER.info("dLLatency {}", dLLatency);
145                             sliceProfile.setLatency(dLLatency);
146                             break;
147
148                         case "areaTrafficCapDL":
149                             Integer areaTrafficCapDL = (Integer) ranMap.get(k);
150                             LOGGER.info("areaTrafficCapDL {}", areaTrafficCapDL);
151                             sliceProfile.setAreaTrafficCapDL(areaTrafficCapDL);
152                             break;
153
154                         case "resourceSharingLevel":
155                             String resourceSharingLevel = (String) ranMap.get(k);
156                             LOGGER.info("resourceSharingLevel {}", resourceSharingLevel);
157                             sliceProfile.setResourceSharingLevel(resourceSharingLevel);
158                             break;
159
160                         case "maxNumberofUEs":
161                             Integer maxNumberofUEs = (Integer) ranMap.get(k);
162                             LOGGER.info("maxNumberofUEs {}", maxNumberofUEs);
163                             sliceProfile.setMaxNumberOfUEs(maxNumberofUEs);
164                             break;
165
166                     }
167                 });
168             }
169         }
170         return sliceProfile;
171     }
172
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");
176
177         List<Object> list = (ArrayList<Object>) mapParam.get("sliceProfileList");
178
179         Map<String, Object> idMap = (Map<String, Object>) list.get(0);
180         String sliceProfileId = (String) idMap.get("sliceProfileId");
181
182         return sliceProfileId;
183     }
184
185
186 }