2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
23 package org.onap.so.bpmn.infrastructure.aai.tasks;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Optional;
29 import org.modelmapper.ModelMapper;
30 import org.modelmapper.PropertyMap;
31 import org.onap.aai.domain.yang.NetworkPolicy;
32 import org.onap.aai.domain.yang.RouteTableReference;
33 import org.onap.aai.domain.yang.RouteTargets;
34 import org.onap.aai.domain.yang.Subnet;
35 import org.onap.aai.domain.yang.VpnBinding;
36 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
37 import org.onap.so.bpmn.common.BuildingBlockExecution;
38 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
39 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
40 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
41 import org.onap.so.client.aai.AAIObjectType;
42 import org.onap.so.client.aai.entities.AAIResultWrapper;
43 import org.onap.so.client.aai.entities.Relationships;
44 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
45 import org.onap.so.client.exception.ExceptionBuilder;
46 import org.onap.so.client.orchestration.AAINetworkResources;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49 import org.springframework.beans.factory.annotation.Autowired;
50 import org.springframework.stereotype.Component;
53 public class AAIQueryTasks {
55 private static final Logger logger = LoggerFactory.getLogger(AAIQueryTasks.class);
56 private static final String ERROR_MSG = "No relationships were returned from AAIResultWrapper.getRelationships()";
58 private ExtractPojosForBB extractPojosForBB;
60 private ExceptionBuilder exceptionUtil;
62 private AAINetworkResources aaiNetworkResources;
63 private static final ModelMapper modelMapper = new ModelMapper();
66 * BPMN access method to query data for VPN bindings from the AAI result wrapper.
67 * The resulting VPN bindings are mapped to the corresponding bbobject and placed in the customer bbobject
72 public void queryNetworkVpnBinding(BuildingBlockExecution execution) {
74 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
75 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
76 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
77 if (!networkRelationships.isPresent()) {
78 throw (new Exception(ERROR_MSG));
80 List<AAIResourceUri> netBindingsUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING);
82 List<org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding> mappedVpnBindings = new ArrayList<>();
83 if(netBindingsUriList != null && !netBindingsUriList.isEmpty()) {
84 for(AAIResourceUri netBindingUri : netBindingsUriList) {
85 Optional<VpnBinding> oVpnBinding = aaiNetworkResources.getVpnBinding(netBindingUri);
86 if(oVpnBinding.isPresent()) {
87 org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding mappedVpnBinding =
88 modelMapper.map(oVpnBinding.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding.class);
89 if (oVpnBinding.get().getRouteTargets() != null){
90 mappedVpnBinding.getRouteTargets().addAll(mapRouteTargets(oVpnBinding.get().getRouteTargets().getRouteTarget()));
91 mappedVpnBindings.add(mappedVpnBinding);
96 execution.getGeneralBuildingBlock().getCustomer().getVpnBindings().addAll(mappedVpnBindings);
97 } catch(Exception ex) {
98 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
103 * BPMN access method to extract VPN Binding data from AAI result and populate proper fields into CreateNetworkRequest
105 public void getNetworkVpnBinding(BuildingBlockExecution execution) {
108 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
109 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
110 CreateNetworkRequest createNetworkRequest = execution.getVariable("createNetworkRequest");
112 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
113 if (!networkRelationships.isPresent()) {
114 throw (new Exception(ERROR_MSG));
116 List<AAIResourceUri> netBindingsUriList = networkRelationships.get()
117 .getRelatedAAIUris(AAIObjectType.VPN_BINDING);
118 List<org.onap.so.openstack.beans.RouteTarget> routeTargets = new ArrayList<>();
119 for (AAIResourceUri netBindingUri : netBindingsUriList) {
120 logger.info("Get Route Targests");
121 Optional<VpnBinding> oVpnBinding = aaiNetworkResources.getVpnBinding(netBindingUri);
122 if (oVpnBinding.isPresent()) {
123 VpnBinding vpnBinding = oVpnBinding.get();
124 RouteTargets rts = vpnBinding.getRouteTargets();
126 List<org.onap.aai.domain.yang.RouteTarget> rtList = rts.getRouteTarget();
127 if (!rtList.isEmpty()) {
128 PropertyMap<org.onap.aai.domain.yang.RouteTarget, org.onap.so.openstack.beans.RouteTarget> personMap = new PropertyMap<org.onap.aai.domain.yang.RouteTarget, org.onap.so.openstack.beans.RouteTarget>() {
130 protected void configure() {
131 map().setRouteTarget(source.getGlobalRouteTarget());
132 map(source.getRouteTargetRole(), destination.getRouteTargetRole());
135 modelMapper.addMappings(personMap);
136 for (org.onap.aai.domain.yang.RouteTarget rt : rtList) {
137 org.onap.so.openstack.beans.RouteTarget openstackRtBean = modelMapper.map(rt,
138 org.onap.so.openstack.beans.RouteTarget.class);
139 routeTargets.add(openstackRtBean);
145 // store route targets data in execution - to be used as part of
146 // Network adapter input
147 createNetworkRequest.getContrailNetwork().setRouteTargets(routeTargets);
148 execution.setVariable("createNetworkRequest", createNetworkRequest);
149 } catch (Exception ex) {
150 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
155 * BPMN access method to query data for network policies from the AAI result wrapper
156 * From the resulting network policy, the network policy fqdn parameter is added to
157 * the network bbobject contrail network policy fqdns list
161 public void queryNetworkPolicy(BuildingBlockExecution execution) {
163 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
164 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
165 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
166 if (!networkRelationships.isPresent()) {
167 throw (new Exception(ERROR_MSG));
169 List<AAIResourceUri> netPoliciesUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY);
171 if(!netPoliciesUriList.isEmpty()) {
172 for(AAIResourceUri netPolicyUri : netPoliciesUriList) {
173 Optional<NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
174 if(oNetPolicy.isPresent()) {
175 l3network.getNetworkPolicies().add(modelMapper.map(oNetPolicy.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy.class));
179 } catch(Exception ex) {
180 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
185 * BPMN access method to query data for network table ref from the AAI result wrapper
186 * The resulting route table reference is mapped to the corresponding bbobject and added
187 * to the network bbobject contrail network route table references list
191 public void queryNetworkTableRef(BuildingBlockExecution execution) {
193 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
194 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
195 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
196 if (!networkRelationships.isPresent()) {
197 throw (new Exception(ERROR_MSG));
199 List<AAIResourceUri> routeTableUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE);
201 if(!routeTableUriList.isEmpty()) {
202 for(AAIResourceUri routeTableUri : routeTableUriList) {
203 Optional<RouteTableReference> oRouteTableReference = aaiNetworkResources.getRouteTable(routeTableUri);
204 if(oRouteTableReference.isPresent()) {
205 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference mappedRouteTableReference = modelMapper.map(oRouteTableReference.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference.class);
206 l3network.getContrailNetworkRouteTableReferences().add(mappedRouteTableReference);
210 } catch(Exception ex) {
211 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
215 private List<org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget> mapRouteTargets(List<org.onap.aai.domain.yang.RouteTarget> routeTargets) {
216 List<org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget> mappedRouteTargets = new ArrayList<>();
217 if(!routeTargets.isEmpty()) {
218 for(org.onap.aai.domain.yang.RouteTarget routeTarget : routeTargets) {
219 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget mappedRouteTarget = modelMapper.map(routeTarget, org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget.class);
220 mappedRouteTargets.add(mappedRouteTarget);
223 return mappedRouteTargets;
226 public void querySubnet(BuildingBlockExecution execution) {
228 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
229 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
230 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
231 if (!networkRelationships.isPresent()) {
232 throw (new Exception(ERROR_MSG));
234 List<AAIResourceUri> subnetsUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.SUBNET);
236 if(!subnetsUriList.isEmpty()) {
237 for(AAIResourceUri subnetUri : subnetsUriList) {
238 Optional<Subnet> oSubnet = aaiNetworkResources.getSubnet(subnetUri);
239 if(oSubnet.isPresent()) {
240 l3network.getSubnets().add(modelMapper.map(oSubnet.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet.class));
244 } catch(Exception ex) {
245 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);