[SO] Macro flow for PNF-Modify operation
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / client / aai / mapper / AAIObjectMapper.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2020 Nokia
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.client.aai.mapper;
24
25 import java.util.List;
26 import org.modelmapper.Converter;
27 import org.modelmapper.ModelMapper;
28 import org.modelmapper.PropertyMap;
29 import org.modelmapper.spi.MappingContext;
30 import org.onap.aai.domain.yang.RouteTargets;
31 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
32 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
33 import org.onap.so.bpmn.servicedecomposition.bbobjects.CtagAssignment;
34 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
35 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
36 import org.onap.so.bpmn.servicedecomposition.bbobjects.HostRoute;
37 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
38 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
39 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
40 import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity;
41 import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
42 import org.onap.so.bpmn.servicedecomposition.bbobjects.Project;
43 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget;
44 import org.onap.so.bpmn.servicedecomposition.bbobjects.SegmentationAssignment;
45 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
46 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceSubscription;
47 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
48 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
49 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
50 import org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding;
51 import org.springframework.stereotype.Component;
52
53 @Component
54 public class AAIObjectMapper {
55     private final ModelMapper modelMapper = new ModelMapper();
56
57     public org.onap.aai.domain.yang.ServiceInstance mapServiceInstance(ServiceInstance serviceInstance) {
58         if (modelMapper.getTypeMap(ServiceInstance.class, org.onap.aai.domain.yang.ServiceInstance.class) == null) {
59             modelMapper.addMappings(new PropertyMap<ServiceInstance, org.onap.aai.domain.yang.ServiceInstance>() {
60                 @Override
61                 protected void configure() {
62                     map().setServiceType(source.getModelInfoServiceInstance().getServiceType());
63                     map().setServiceRole(source.getModelInfoServiceInstance().getServiceRole());
64                     map().setServiceFunction(source.getModelInfoServiceInstance().getServiceFunction());
65                     map().setModelInvariantId(source.getModelInfoServiceInstance().getModelInvariantUuid());
66                     map().setModelVersionId(source.getModelInfoServiceInstance().getModelUuid());
67                     map().setEnvironmentContext(source.getModelInfoServiceInstance().getEnvironmentContext());
68                     map().setWorkloadContext(source.getModelInfoServiceInstance().getWorkloadContext());
69                 }
70             });
71         }
72
73         return modelMapper.map(serviceInstance, org.onap.aai.domain.yang.ServiceInstance.class);
74     }
75
76     public org.onap.aai.domain.yang.Project mapProject(Project project) {
77         return modelMapper.map(project, org.onap.aai.domain.yang.Project.class);
78     }
79
80     public org.onap.aai.domain.yang.ServiceSubscription mapServiceSubscription(
81             ServiceSubscription serviceSubscription) {
82         return modelMapper.map(serviceSubscription, org.onap.aai.domain.yang.ServiceSubscription.class);
83     }
84
85     public org.onap.aai.domain.yang.OwningEntity mapOwningEntity(OwningEntity owningEntity) {
86         return modelMapper.map(owningEntity, org.onap.aai.domain.yang.OwningEntity.class);
87     }
88
89     public org.onap.aai.domain.yang.GenericVnf mapVnf(GenericVnf vnf) {
90         if (modelMapper.getTypeMap(GenericVnf.class, org.onap.aai.domain.yang.GenericVnf.class) == null) {
91             modelMapper.addMappings(new PropertyMap<GenericVnf, org.onap.aai.domain.yang.GenericVnf>() {
92                 @Override
93                 protected void configure() {
94                     map().setModelCustomizationId(source.getModelInfoGenericVnf().getModelCustomizationUuid());
95                     map().setModelInvariantId(source.getModelInfoGenericVnf().getModelInvariantUuid());
96                     map().setModelVersionId(source.getModelInfoGenericVnf().getModelUuid());
97                     map().setNfRole(source.getModelInfoGenericVnf().getNfRole());
98                     map().setNfType(source.getModelInfoGenericVnf().getNfType());
99                     map().setNfFunction(source.getModelInfoGenericVnf().getNfFunction());
100                     map().setNfNamingCode(source.getModelInfoGenericVnf().getNfNamingCode());
101                 }
102             });
103         }
104
105         return modelMapper.map(vnf, org.onap.aai.domain.yang.GenericVnf.class);
106     }
107
108     public org.onap.aai.domain.yang.Pnf mapPnf(Pnf pnf) {
109         if (modelMapper.getTypeMap(Pnf.class, org.onap.aai.domain.yang.Pnf.class) == null) {
110             modelMapper.addMappings(new PropertyMap<Pnf, org.onap.aai.domain.yang.Pnf>() {
111                 @Override
112                 protected void configure() {
113                     map().setModelCustomizationId(source.getModelInfoPnf().getModelCustomizationUuid());
114                     map().setModelInvariantId(source.getModelInfoPnf().getModelInvariantUuid());
115                     map().setModelVersionId(source.getModelInfoPnf().getModelUuid());
116                     map().setNfType(source.getModelInfoPnf().getNfType());
117                     map().setInMaint(source.isInMaint());
118                 }
119             });
120         }
121
122         return modelMapper.map(pnf, org.onap.aai.domain.yang.Pnf.class);
123     }
124
125     public org.onap.aai.domain.yang.VfModule mapVfModule(VfModule vfModule) {
126         if (modelMapper.getTypeMap(VfModule.class, org.onap.aai.domain.yang.VfModule.class) == null) {
127             modelMapper.addMappings(new PropertyMap<VfModule, org.onap.aai.domain.yang.VfModule>() {
128                 @Override
129                 protected void configure() {
130                     map().setModelCustomizationId(source.getModelInfoVfModule().getModelCustomizationUUID());
131                     map().setModelInvariantId(source.getModelInfoVfModule().getModelInvariantUUID());
132                     map().setModelVersionId(source.getModelInfoVfModule().getModelUUID());
133                     map().setPersonaModelVersion(source.getModelInfoVfModule().getModelInvariantUUID());
134                     map().setIsBaseVfModule(source.getModelInfoVfModule().getIsBaseBoolean());
135
136                 }
137             });
138         }
139
140         return modelMapper.map(vfModule, org.onap.aai.domain.yang.VfModule.class);
141     }
142
143     public org.onap.aai.domain.yang.VolumeGroup mapVolumeGroup(VolumeGroup volumeGroup) {
144         if (modelMapper.getTypeMap(VolumeGroup.class, org.onap.aai.domain.yang.VolumeGroup.class) == null) {
145             modelMapper.addMappings(new PropertyMap<VolumeGroup, org.onap.aai.domain.yang.VolumeGroup>() {
146                 @Override
147                 protected void configure() {
148                     map().setModelCustomizationId(source.getModelInfoVfModule().getModelCustomizationUUID());
149                     map().setVfModuleModelCustomizationId(source.getModelInfoVfModule().getModelCustomizationUUID());
150                 }
151             });
152         }
153         return modelMapper.map(volumeGroup, org.onap.aai.domain.yang.VolumeGroup.class);
154     }
155
156     public org.onap.aai.domain.yang.L3Network mapNetwork(L3Network l3Network) {
157         if (modelMapper.getTypeMap(L3Network.class, org.onap.aai.domain.yang.L3Network.class) == null) {
158             modelMapper.addMappings(new PropertyMap<L3Network, org.onap.aai.domain.yang.L3Network>() {
159                 @Override
160                 protected void configure() {
161                     map().setModelCustomizationId(source.getModelInfoNetwork().getModelCustomizationUUID());
162                     map().setModelInvariantId(source.getModelInfoNetwork().getModelInvariantUUID());
163                     map().setModelVersionId(source.getModelInfoNetwork().getModelUUID());
164                     map().setNetworkType(source.getModelInfoNetwork().getNetworkType());
165                     map().setNetworkRole(source.getModelInfoNetwork().getNetworkRole());
166                     map().setNetworkTechnology(source.getModelInfoNetwork().getNetworkTechnology());
167                     modelMapper.addConverter(convertSubnets);
168                     modelMapper.addConverter(convertCtagAssignments);
169                     modelMapper.addConverter(convertSegmentationAssignments);
170                 }
171             });
172         }
173         return modelMapper.map(l3Network, org.onap.aai.domain.yang.L3Network.class);
174     }
175
176     public org.onap.aai.domain.yang.InstanceGroup mapInstanceGroup(InstanceGroup instanceGroup) {
177         if (modelMapper.getTypeMap(InstanceGroup.class, org.onap.aai.domain.yang.InstanceGroup.class) == null) {
178             modelMapper.addMappings(new PropertyMap<InstanceGroup, org.onap.aai.domain.yang.InstanceGroup>() {
179                 @Override
180                 protected void configure() {
181                     map().setInstanceGroupRole(source.getModelInfoInstanceGroup().getInstanceGroupRole());
182                     map().setModelInvariantId(source.getModelInfoInstanceGroup().getModelInvariantUUID());
183                     map().setModelVersionId(source.getModelInfoInstanceGroup().getModelUUID());
184                     map().setInstanceGroupType(source.getModelInfoInstanceGroup().getType());
185                     map().setDescription(source.getModelInfoInstanceGroup().getDescription());
186                     map().setInstanceGroupFunction(source.getModelInfoInstanceGroup().getFunction());
187                 }
188             });
189         }
190         return modelMapper.map(instanceGroup, org.onap.aai.domain.yang.InstanceGroup.class);
191     }
192
193     public org.onap.aai.domain.yang.Customer mapCustomer(Customer customer) {
194         return modelMapper.map(customer, org.onap.aai.domain.yang.Customer.class);
195     }
196
197     private Converter<List<Subnet>, org.onap.aai.domain.yang.Subnets> convertSubnets =
198             new Converter<List<Subnet>, org.onap.aai.domain.yang.Subnets>() {
199                 @Override
200                 public org.onap.aai.domain.yang.Subnets convert(
201                         MappingContext<List<Subnet>, org.onap.aai.domain.yang.Subnets> context) {
202                     return mapToAAISubNets(context.getSource());
203                 }
204             };
205
206     private Converter<List<CtagAssignment>, org.onap.aai.domain.yang.CtagAssignments> convertCtagAssignments =
207             new Converter<List<CtagAssignment>, org.onap.aai.domain.yang.CtagAssignments>() {
208                 @Override
209                 public org.onap.aai.domain.yang.CtagAssignments convert(
210                         MappingContext<List<CtagAssignment>, org.onap.aai.domain.yang.CtagAssignments> context) {
211                     return mapToAAICtagAssignmentList(context.getSource());
212                 }
213             };
214
215     private Converter<List<SegmentationAssignment>, org.onap.aai.domain.yang.SegmentationAssignments> convertSegmentationAssignments =
216             new Converter<List<SegmentationAssignment>, org.onap.aai.domain.yang.SegmentationAssignments>() {
217                 @Override
218                 public org.onap.aai.domain.yang.SegmentationAssignments convert(
219                         MappingContext<List<SegmentationAssignment>, org.onap.aai.domain.yang.SegmentationAssignments> context) {
220                     return mapToAAISegmentationAssignmentList(context.getSource());
221                 }
222             };
223
224     public org.onap.aai.domain.yang.Subnets mapToAAISubNets(List<Subnet> subnetList) {
225         org.onap.aai.domain.yang.Subnets subnets = null;
226
227         if (!subnetList.isEmpty()) {
228             subnets = new org.onap.aai.domain.yang.Subnets();
229             org.onap.aai.domain.yang.Subnet subnet = null;
230             for (Subnet subnetSource : subnetList) {
231                 subnet = new org.onap.aai.domain.yang.Subnet();
232                 subnet.setSubnetId(subnetSource.getSubnetId());
233                 subnet.setSubnetName(subnetSource.getSubnetName());
234                 subnet.setNeutronSubnetId(subnetSource.getNeutronSubnetId());
235                 subnet.setGatewayAddress(subnetSource.getGatewayAddress());
236                 subnet.setCidrMask(subnetSource.getCidrMask());
237                 subnet.setIpVersion(subnetSource.getIpVersion());
238                 subnet.setOrchestrationStatus(subnetSource.getOrchestrationStatus().toString());
239                 subnet.setCidrMask(subnetSource.getCidrMask());
240                 subnet.setDhcpEnabled(subnetSource.isDhcpEnabled());
241                 subnet.setDhcpStart(subnetSource.getDhcpStart());
242                 subnet.setDhcpEnd(subnetSource.getDhcpEnd());
243                 subnet.setSubnetRole(subnetSource.getSubnetRole());
244                 subnet.setIpAssignmentDirection(subnetSource.getIpAssignmentDirection());
245                 subnet.setSubnetSequence(subnetSource.getSubnetSequence());
246
247                 org.onap.aai.domain.yang.HostRoutes hostRoutes = new org.onap.aai.domain.yang.HostRoutes();
248                 org.onap.aai.domain.yang.HostRoute hostRoute = null;
249                 for (HostRoute hostRouteSource : subnetSource.getHostRoutes()) {
250                     hostRoute = new org.onap.aai.domain.yang.HostRoute();
251                     hostRoute.setHostRouteId(hostRouteSource.getHostRouteId());
252                     hostRoute.setRoutePrefix(hostRouteSource.getRoutePrefix());
253                     hostRoute.setNextHop(hostRouteSource.getNextHop());
254                     hostRoute.setNextHopType(hostRouteSource.getNextHopType());
255                     hostRoutes.getHostRoute().add(hostRoute);
256                 }
257                 subnet.setHostRoutes(hostRoutes);
258                 subnets.getSubnet().add(subnet);
259             }
260         }
261         return subnets;
262     }
263
264     public org.onap.aai.domain.yang.CtagAssignments mapToAAICtagAssignmentList(
265             List<CtagAssignment> ctagAssignmentsList) {
266         org.onap.aai.domain.yang.CtagAssignments ctagAssignments = null;
267         if (!ctagAssignmentsList.isEmpty()) {
268             ctagAssignments = new org.onap.aai.domain.yang.CtagAssignments();
269
270             org.onap.aai.domain.yang.CtagAssignment ctagAssignment = null;
271             for (CtagAssignment ctagAssignmentSource : ctagAssignmentsList) {
272                 ctagAssignment = new org.onap.aai.domain.yang.CtagAssignment();
273                 ctagAssignment.setVlanIdInner(ctagAssignmentSource.getVlanIdInner());
274                 ctagAssignments.getCtagAssignment().add(ctagAssignment);
275             }
276         }
277         return ctagAssignments;
278     }
279
280     public org.onap.aai.domain.yang.SegmentationAssignments mapToAAISegmentationAssignmentList(
281             List<SegmentationAssignment> segmentationAssignmentList) {
282         org.onap.aai.domain.yang.SegmentationAssignments segmentationAssignments = null;
283         if (!segmentationAssignmentList.isEmpty()) {
284             segmentationAssignments = new org.onap.aai.domain.yang.SegmentationAssignments();
285             org.onap.aai.domain.yang.SegmentationAssignment segmentationAssignment = null;
286             for (SegmentationAssignment segmentationAssignmentSource : segmentationAssignmentList) {
287                 segmentationAssignment = new org.onap.aai.domain.yang.SegmentationAssignment();
288                 segmentationAssignment.setSegmentationId(segmentationAssignmentSource.getSegmentationId());
289                 segmentationAssignments.getSegmentationAssignment().add(segmentationAssignment);
290             }
291         }
292         return segmentationAssignments;
293     }
294
295     public org.onap.aai.domain.yang.Configuration mapConfiguration(Configuration configuration) {
296         if (null == modelMapper.getTypeMap(Configuration.class, org.onap.aai.domain.yang.Configuration.class)) {
297             modelMapper.addMappings(new PropertyMap<Configuration, org.onap.aai.domain.yang.Configuration>() {
298                 @Override
299                 protected void configure() {
300                     map().setModelCustomizationId(source.getModelInfoConfiguration().getModelCustomizationId());
301                     map().setModelVersionId(source.getModelInfoConfiguration().getModelVersionId());
302                     map().setModelInvariantId(source.getModelInfoConfiguration().getModelInvariantId());
303                     map().setConfigurationType(source.getModelInfoConfiguration().getConfigurationType());
304                     map().setConfigurationSubType(source.getModelInfoConfiguration().getConfigurationRole());
305                     map().setConfigPolicyName(source.getModelInfoConfiguration().getPolicyName());
306                     skip().setConfigurationRole(null);
307                 }
308             });
309         }
310         return modelMapper.map(configuration, org.onap.aai.domain.yang.Configuration.class);
311     }
312
313     public org.onap.aai.domain.yang.Collection mapCollection(Collection networkCollection) {
314         if (modelMapper.getTypeMap(Collection.class, org.onap.aai.domain.yang.Collection.class) == null) {
315             modelMapper.addMappings(new PropertyMap<Collection, org.onap.aai.domain.yang.Collection>() {
316                 @Override
317                 protected void configure() {
318                     map().setModelInvariantId(source.getModelInfoCollection().getModelInvariantUUID());
319                     map().setModelVersionId(source.getModelInfoCollection().getModelVersionId());
320                     map().setCollectionCustomizationId(source.getModelInfoCollection().getModelCustomizationUUID());
321                     map().setCollectionFunction(source.getModelInfoCollection().getCollectionFunction());
322                     map().setCollectionRole(source.getModelInfoCollection().getCollectionRole());
323                     map().setCollectionType(source.getModelInfoCollection().getCollectionType());
324                     map().setCollectionName(source.getName());
325                 }
326             });
327         }
328         return modelMapper.map(networkCollection, org.onap.aai.domain.yang.Collection.class);
329     }
330
331
332     public org.onap.aai.domain.yang.VpnBinding mapVpnBinding(VpnBinding vpnBinding) {
333         org.onap.aai.domain.yang.VpnBinding aaiVpnBinding =
334                 modelMapper.map(vpnBinding, org.onap.aai.domain.yang.VpnBinding.class);
335         mapRouteTargetToVpnBinding(aaiVpnBinding, vpnBinding);
336         return aaiVpnBinding;
337     }
338
339     public org.onap.aai.domain.yang.RouteTarget mapRouteTarget(RouteTarget routeTarget) {
340         return modelMapper.map(routeTarget, org.onap.aai.domain.yang.RouteTarget.class);
341     }
342
343     private void mapRouteTargetToVpnBinding(org.onap.aai.domain.yang.VpnBinding aaiVpnBinding, VpnBinding vpnBinding) {
344         if (vpnBinding.getRouteTargets() != null && !vpnBinding.getRouteTargets().isEmpty()) {
345             RouteTargets routeTargets = new RouteTargets();
346             for (RouteTarget routeTarget : vpnBinding.getRouteTargets()) {
347                 routeTargets.getRouteTarget().add(mapRouteTarget(routeTarget));
348             }
349             aaiVpnBinding.setRouteTargets(routeTargets);
350         }
351     }
352
353     public org.onap.aai.domain.yang.Subnet mapSubnet(Subnet subnet) {
354         return modelMapper.map(subnet, org.onap.aai.domain.yang.Subnet.class);
355     }
356
357     public org.onap.aai.domain.yang.NetworkPolicy mapNetworkPolicy(NetworkPolicy networkPolicy) {
358         return modelMapper.map(networkPolicy, org.onap.aai.domain.yang.NetworkPolicy.class);
359     }
360 }