2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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=========================================================
21 package org.onap.so.bpmn.infrastructure.aai.tasks;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Optional;
27 import org.modelmapper.ModelMapper;
28 import org.modelmapper.PropertyMap;
29 import org.onap.aai.domain.yang.NetworkPolicy;
30 import org.onap.aai.domain.yang.RouteTableReference;
31 import org.onap.aai.domain.yang.RouteTargets;
32 import org.onap.aai.domain.yang.VpnBinding;
33 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
34 import org.onap.so.bpmn.common.BuildingBlockExecution;
35 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
36 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
37 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
38 import org.onap.so.client.aai.AAIObjectType;
39 import org.onap.so.client.aai.entities.AAIResultWrapper;
40 import org.onap.so.client.aai.entities.Relationships;
41 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
42 import org.onap.so.client.exception.ExceptionBuilder;
43 import org.onap.so.client.orchestration.AAINetworkResources;
44 import org.onap.so.logger.MsoLogger;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.stereotype.Component;
49 public class AAIQueryTasks {
51 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, AAIQueryTasks.class);
52 private static final String NETWORK_RESULT_WRAPPER_KEY = "l3NetworkAAIResultWrapper";
53 private static final String ERROR_MSG = "No relationships were returned from AAIResultWrapper.getRelationships()";
55 private ExtractPojosForBB extractPojosForBB;
57 private ExceptionBuilder exceptionUtil;
59 private AAINetworkResources aaiNetworkResources;
60 private static final ModelMapper modelMapper = new ModelMapper();
63 * BPMN access method to query L3Network object in AAI by it's Id
68 public void getNetworkWrapperById(BuildingBlockExecution execution) {
70 L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID,
71 execution.getLookupMap().get(ResourceKey.NETWORK_ID));
72 AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
73 execution.setVariable(NETWORK_RESULT_WRAPPER_KEY, aaiResultWrapper);
74 } catch (Exception ex) {
75 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
80 * BPMN access method to query data for VPN bindings from the AAI result wrapper.
81 * The resulting VPN bindings are mapped to the corresponding bbobject and placed in the customer bbobject
86 public void queryNetworkVpnBinding(BuildingBlockExecution execution) {
88 org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID, execution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID));
90 AAIResultWrapper aaiResultWrapper = execution.getVariable(NETWORK_RESULT_WRAPPER_KEY);
91 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
92 if (!networkRelationships.isPresent()) {
93 throw (new Exception(ERROR_MSG));
95 List<AAIResourceUri> netBindingsUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING);
97 List<org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding> mappedVpnBindings = new ArrayList<>();
98 if(netBindingsUriList != null && !netBindingsUriList.isEmpty()) {
99 for(AAIResourceUri netBindingUri : netBindingsUriList) {
100 Optional<VpnBinding> oVpnBinding = aaiNetworkResources.getVpnBinding(netBindingUri);
101 if(oVpnBinding.isPresent()) {
102 org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding mappedVpnBinding =
103 modelMapper.map(oVpnBinding.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.VpnBinding.class);
104 if (oVpnBinding.get().getRouteTargets() != null){
105 mappedVpnBinding.getRouteTargets().addAll(mapRouteTargets(oVpnBinding.get().getRouteTargets().getRouteTarget()));
106 mappedVpnBindings.add(mappedVpnBinding);
111 execution.getGeneralBuildingBlock().getCustomer().getVpnBindings().addAll(mappedVpnBindings);
112 } catch(Exception ex) {
113 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
118 * BPMN access method to extract VPN Binding data from AAI result and populate proper fields into CreateNetworkRequest
120 public void getNetworkVpnBinding(BuildingBlockExecution execution) {
123 AAIResultWrapper aaiResultWrapper = execution.getVariable(NETWORK_RESULT_WRAPPER_KEY);
124 CreateNetworkRequest createNetworkRequest = execution.getVariable("createNetworkRequest");
126 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
127 if (!networkRelationships.isPresent()) {
128 throw (new Exception(ERROR_MSG));
130 List<AAIResourceUri> netBindingsUriList = networkRelationships.get()
131 .getRelatedAAIUris(AAIObjectType.VPN_BINDING);
132 List<org.onap.so.openstack.beans.RouteTarget> routeTargets = new ArrayList<>();
133 for (AAIResourceUri netBindingUri : netBindingsUriList) {
134 msoLogger.info("Get Route Targests");
135 Optional<VpnBinding> oVpnBinding = aaiNetworkResources.getVpnBinding(netBindingUri);
136 if (oVpnBinding.isPresent()) {
137 VpnBinding vpnBinding = oVpnBinding.get();
138 RouteTargets rts = vpnBinding.getRouteTargets();
140 List<org.onap.aai.domain.yang.RouteTarget> rtList = rts.getRouteTarget();
141 if (!rtList.isEmpty()) {
142 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>() {
144 protected void configure() {
145 map().setRouteTarget(source.getGlobalRouteTarget());
146 map(source.getRouteTargetRole(), destination.getRouteTargetRole());
149 modelMapper.addMappings(personMap);
150 for (org.onap.aai.domain.yang.RouteTarget rt : rtList) {
151 org.onap.so.openstack.beans.RouteTarget openstackRtBean = modelMapper.map(rt,
152 org.onap.so.openstack.beans.RouteTarget.class);
153 routeTargets.add(openstackRtBean);
159 // store route targets data in execution - to be used as part of
160 // Network adapter input
161 createNetworkRequest.getContrailNetwork().setRouteTargets(routeTargets);
162 execution.setVariable("createNetworkRequest", createNetworkRequest);
163 } catch (Exception ex) {
164 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
169 * BPMN access method to query data for network policies from the AAI result wrapper
170 * From the resulting network policy, the network policy fqdn parameter is added to
171 * the network bbobject contrail network policy fqdns list
175 public void queryNetworkPolicy(BuildingBlockExecution execution) {
177 L3Network l3Network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
179 AAIResultWrapper aaiResultWrapper = execution.getVariable(NETWORK_RESULT_WRAPPER_KEY);
180 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
181 if (!networkRelationships.isPresent()) {
182 throw (new Exception(ERROR_MSG));
184 List<AAIResourceUri> netPoliciesUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY);
186 if(!netPoliciesUriList.isEmpty()) {
187 for(AAIResourceUri netPolicyUri : netPoliciesUriList) {
188 Optional<NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
189 if(oNetPolicy.isPresent()) {
190 l3Network.getNetworkPolicies().add(modelMapper.map(oNetPolicy.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy.class));
194 } catch(Exception ex) {
195 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
200 * BPMN access method to query data for network table ref from the AAI result wrapper
201 * The resulting route table reference is mapped to the corresponding bbobject and added
202 * to the network bbobject contrail network route table references list
206 public void queryNetworkTableRef(BuildingBlockExecution execution) {
208 L3Network l3Network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID, execution.getLookupMap().get(ResourceKey.NETWORK_ID));
210 AAIResultWrapper aaiResultWrapper = execution.getVariable(NETWORK_RESULT_WRAPPER_KEY);
211 Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
212 if (!networkRelationships.isPresent()) {
213 throw (new Exception(ERROR_MSG));
215 List<AAIResourceUri> routeTableUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE);
217 if(!routeTableUriList.isEmpty()) {
218 for(AAIResourceUri routeTableUri : routeTableUriList) {
219 Optional<RouteTableReference> oRouteTableReference = aaiNetworkResources.getRouteTable(routeTableUri);
220 if(oRouteTableReference.isPresent()) {
221 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference mappedRouteTableReference = modelMapper.map(oRouteTableReference.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTableReference.class);
222 l3Network.getContrailNetworkRouteTableReferences().add(mappedRouteTableReference);
226 } catch(Exception ex) {
227 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
231 private List<org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget> mapRouteTargets(List<org.onap.aai.domain.yang.RouteTarget> routeTargets) {
232 List<org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget> mappedRouteTargets = new ArrayList<>();
233 if(!routeTargets.isEmpty()) {
234 for(org.onap.aai.domain.yang.RouteTarget routeTarget : routeTargets) {
235 org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget mappedRouteTarget = modelMapper.map(routeTarget, org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget.class);
236 mappedRouteTargets.add(mappedRouteTarget);
239 return mappedRouteTargets;