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;
28 import org.modelmapper.ModelMapper;
29 import org.modelmapper.PropertyMap;
30 import org.onap.aai.domain.yang.NetworkPolicy;
31 import org.onap.aai.domain.yang.RouteTableReference;
32 import org.onap.aai.domain.yang.RouteTargets;
33 import org.onap.aai.domain.yang.Subnet;
34 import org.onap.aai.domain.yang.VpnBinding;
35 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
36 import org.onap.so.bpmn.common.BuildingBlockExecution;
37 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
38 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
39 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
40 import org.onap.so.client.aai.AAIObjectType;
41 import org.onap.so.client.aai.entities.AAIResultWrapper;
42 import org.onap.so.client.aai.entities.Relationships;
43 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
44 import org.onap.so.client.exception.ExceptionBuilder;
45 import org.onap.so.client.orchestration.AAINetworkResources;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48 import org.springframework.beans.factory.annotation.Autowired;
49 import org.springframework.stereotype.Component;
52 public class AAIQueryTasks {
54 private static final Logger logger = LoggerFactory.getLogger(AAIQueryTasks.class);
55 private static final String ERROR_MSG = "No relationships were returned from AAIResultWrapper.getRelationships()";
57 private ExtractPojosForBB extractPojosForBB;
59 private ExceptionBuilder exceptionUtil;
61 private AAINetworkResources aaiNetworkResources;
62 private static final ModelMapper modelMapper = new ModelMapper();
65 * BPMN access method to query data for VPN bindings from the AAI result wrapper. The resulting VPN bindings are
66 * mapped to the corresponding bbobject and placed in the customer bbobject
71 public void queryNetworkVpnBinding(BuildingBlockExecution execution) {
73 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
74 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
75 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
76 if (!networkRelationships.isPresent()) {
77 throw (new Exception(ERROR_MSG));
79 List<AAIResourceUri> netBindingsUriList =
80 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 = modelMapper.map(
88 oVpnBinding.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding.class);
89 if (oVpnBinding.get().getRouteTargets() != null) {
90 mappedVpnBinding.getRouteTargets()
91 .addAll(mapRouteTargets(oVpnBinding.get().getRouteTargets().getRouteTarget()));
92 mappedVpnBindings.add(mappedVpnBinding);
97 execution.getGeneralBuildingBlock().getCustomer().getVpnBindings().addAll(mappedVpnBindings);
98 } catch (Exception ex) {
99 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
104 * BPMN access method to extract VPN Binding data from AAI result and populate proper fields into
105 * CreateNetworkRequest
107 public void getNetworkVpnBinding(BuildingBlockExecution execution) {
110 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
111 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
112 CreateNetworkRequest createNetworkRequest = execution.getVariable("createNetworkRequest");
114 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
115 if (!networkRelationships.isPresent()) {
116 throw (new Exception(ERROR_MSG));
118 List<AAIResourceUri> netBindingsUriList =
119 networkRelationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING);
120 List<org.onap.so.openstack.beans.RouteTarget> routeTargets = new ArrayList<>();
121 for (AAIResourceUri netBindingUri : netBindingsUriList) {
122 logger.info("Get Route Targests");
123 Optional<VpnBinding> oVpnBinding = aaiNetworkResources.getVpnBinding(netBindingUri);
124 if (oVpnBinding.isPresent()) {
125 VpnBinding vpnBinding = oVpnBinding.get();
126 RouteTargets rts = vpnBinding.getRouteTargets();
128 List<org.onap.aai.domain.yang.RouteTarget> rtList = rts.getRouteTarget();
129 if (!rtList.isEmpty()) {
130 PropertyMap<org.onap.aai.domain.yang.RouteTarget, org.onap.so.openstack.beans.RouteTarget> personMap =
131 new PropertyMap<org.onap.aai.domain.yang.RouteTarget, org.onap.so.openstack.beans.RouteTarget>() {
133 protected void configure() {
134 map().setRouteTarget(source.getGlobalRouteTarget());
135 map(source.getRouteTargetRole(), destination.getRouteTargetRole());
138 modelMapper.addMappings(personMap);
139 for (org.onap.aai.domain.yang.RouteTarget rt : rtList) {
140 org.onap.so.openstack.beans.RouteTarget openstackRtBean =
141 modelMapper.map(rt, org.onap.so.openstack.beans.RouteTarget.class);
142 routeTargets.add(openstackRtBean);
148 // store route targets data in execution - to be used as part of
149 // Network adapter input
150 createNetworkRequest.getContrailNetwork().setRouteTargets(routeTargets);
151 execution.setVariable("createNetworkRequest", createNetworkRequest);
152 } catch (Exception ex) {
153 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
158 * BPMN access method to query data for network policies from the AAI result wrapper From the resulting network
159 * policy, the network policy fqdn parameter is added to the network bbobject contrail network policy fqdns list
163 public void queryNetworkPolicy(BuildingBlockExecution execution) {
165 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
166 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
167 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
168 if (!networkRelationships.isPresent()) {
169 throw (new Exception(ERROR_MSG));
171 List<AAIResourceUri> netPoliciesUriList =
172 networkRelationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY);
174 if (!netPoliciesUriList.isEmpty()) {
175 for (AAIResourceUri netPolicyUri : netPoliciesUriList) {
176 Optional<NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
177 if (oNetPolicy.isPresent()) {
178 l3network.getNetworkPolicies().add(modelMapper.map(oNetPolicy.get(),
179 org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy.class));
183 } catch (Exception ex) {
184 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
189 * BPMN access method to query data for network table ref from the AAI result wrapper The resulting route table
190 * reference is mapped to the corresponding bbobject and added to the network bbobject contrail network route table
195 public void queryNetworkTableRef(BuildingBlockExecution execution) {
197 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
198 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
199 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
200 if (!networkRelationships.isPresent()) {
201 throw (new Exception(ERROR_MSG));
203 List<AAIResourceUri> routeTableUriList =
204 networkRelationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE);
206 if (!routeTableUriList.isEmpty()) {
207 for (AAIResourceUri routeTableUri : routeTableUriList) {
208 Optional<RouteTableReference> oRouteTableReference =
209 aaiNetworkResources.getRouteTable(routeTableUri);
210 if (oRouteTableReference.isPresent()) {
211 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference mappedRouteTableReference =
212 modelMapper.map(oRouteTableReference.get(),
213 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference.class);
214 l3network.getContrailNetworkRouteTableReferences().add(mappedRouteTableReference);
218 } catch (Exception ex) {
219 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
223 private List<org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget> mapRouteTargets(
224 List<org.onap.aai.domain.yang.RouteTarget> routeTargets) {
225 List<org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget> mappedRouteTargets = new ArrayList<>();
226 if (!routeTargets.isEmpty()) {
227 for (org.onap.aai.domain.yang.RouteTarget routeTarget : routeTargets) {
228 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget mappedRouteTarget =
229 modelMapper.map(routeTarget, org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget.class);
230 mappedRouteTargets.add(mappedRouteTarget);
233 return mappedRouteTargets;
236 public void querySubnet(BuildingBlockExecution execution) {
238 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
239 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
240 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
241 if (!networkRelationships.isPresent()) {
242 throw (new Exception(ERROR_MSG));
244 List<AAIResourceUri> subnetsUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.SUBNET);
246 if (!subnetsUriList.isEmpty()) {
247 for (AAIResourceUri subnetUri : subnetsUriList) {
248 Optional<Subnet> oSubnet = aaiNetworkResources.getSubnet(subnetUri);
249 if (oSubnet.isPresent()) {
250 l3network.getSubnets().add(modelMapper.map(oSubnet.get(),
251 org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet.class));
255 } catch (Exception ex) {
256 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);