2 * Copyright © 2018 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.tapi.impl;
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.List;
13 import org.opendaylight.mdsal.binding.api.DataBroker;
14 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
15 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
16 import org.opendaylight.mdsal.binding.api.NotificationService;
17 import org.opendaylight.mdsal.binding.api.RpcProviderService;
18 import org.opendaylight.mdsal.binding.api.RpcService;
19 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
20 import org.opendaylight.transportpce.common.InstanceIdentifiers;
21 import org.opendaylight.transportpce.common.NetworkUtils;
22 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
23 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
24 import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
25 import org.opendaylight.transportpce.tapi.impl.rpc.CreateConnectivityServiceImpl;
26 import org.opendaylight.transportpce.tapi.impl.rpc.DeleteConnectivityServiceImpl;
27 import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectionDetailsImpl;
28 import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectivityServiceDetailsImpl;
29 import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectivityServiceListImpl;
30 import org.opendaylight.transportpce.tapi.impl.rpc.GetLinkDetailsImpl;
31 import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeDetailsImpl;
32 import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeEdgePointDetailsImpl;
33 import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointDetailsImpl;
34 import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointListImpl;
35 import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyDetailsImpl;
36 import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyListImpl;
37 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelNotificationHandler;
38 import org.opendaylight.transportpce.tapi.listeners.TapiPceNotificationHandler;
39 import org.opendaylight.transportpce.tapi.listeners.TapiRendererNotificationHandler;
40 import org.opendaylight.transportpce.tapi.listeners.TapiServiceNotificationHandler;
41 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
42 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
43 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
44 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
45 import org.opendaylight.transportpce.tapi.topology.TopologyUtils;
46 import org.opendaylight.transportpce.tapi.utils.TapiContext;
47 import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
48 import org.opendaylight.transportpce.tapi.utils.TapiLink;
49 import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
50 import org.opendaylight.transportpce.tapi.utils.TapiListener;
51 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
52 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.ServiceInterfacePoints;
59 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
60 import org.opendaylight.yangtools.concepts.Registration;
61 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
62 import org.osgi.service.component.annotations.Activate;
63 import org.osgi.service.component.annotations.Component;
64 import org.osgi.service.component.annotations.Deactivate;
65 import org.osgi.service.component.annotations.Reference;
66 import org.slf4j.Logger;
67 import org.slf4j.LoggerFactory;
70 * Class to register TAPI interface Service and Notification.
72 * @author Gilles Thouenon (gilles.thouenon@orange.com) on behalf of Orange
76 public class TapiProvider {
78 private static final Logger LOG = LoggerFactory.getLogger(TapiProvider.class);
80 private static final InstanceIdentifier<Nodes> MAPPING_II = InstanceIdentifier.create(Network.class)
81 .child(org.opendaylight.yang.gen.v1.http
82 .org.opendaylight.transportpce.portmapping.rev231221.network.Nodes.class);
83 private static final InstanceIdentifier<Link> LINK_II = InstanceIdentifier.create(Networks.class).child(
84 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network.class,
85 new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class)
87 private final DataBroker dataBroker;
88 private final NetworkTransactionService networkTransactionService;
89 private final ServiceDataStoreOperations serviceDataStoreOperations;
90 private List<Registration> listeners;
91 private Registration rpcRegistration;
92 private Registration pcelistenerRegistration;
93 private Registration rendererlistenerRegistration;
94 private Registration servicehandlerlistenerRegistration;
95 private Registration tapinetworkmodellistenerRegistration;
98 public TapiProvider(@Reference DataBroker dataBroker,
99 @Reference RpcProviderService rpcProviderService,
100 @Reference RpcService rpcService,
101 @Reference NotificationService notificationService,
102 @Reference NotificationPublishService notificationPublishService,
103 @Reference NetworkTransactionService networkTransactionService,
104 @Reference ServiceDataStoreOperations serviceDataStoreOperations,
105 @Reference TapiNetworkModelNotificationHandler tapiNetworkModelNotificationHandler,
106 @Reference TapiNetworkModelService tapiNetworkModelServiceImpl) {
107 this.dataBroker = dataBroker;
108 this.networkTransactionService = networkTransactionService;
109 this.serviceDataStoreOperations = serviceDataStoreOperations;
110 LOG.info("TapiProvider Session Initiated");
111 TapiContext tapiContext = new TapiContext(this.networkTransactionService);
112 LOG.info("Empty TAPI context created: {}", tapiContext.getTapiContext());
113 TapiLink tapiLink = new TapiLinkImpl(this.networkTransactionService);
114 TopologyUtils topologyUtils = new TopologyUtils(this.networkTransactionService, this.dataBroker, tapiLink);
115 ConnectivityUtils connectivityUtils = new ConnectivityUtils(this.serviceDataStoreOperations, new HashMap<>(),
116 tapiContext, this.networkTransactionService);
117 TapiInitialORMapping tapiInitialORMapping = new TapiInitialORMapping(topologyUtils, connectivityUtils,
118 tapiContext, this.serviceDataStoreOperations);
119 tapiInitialORMapping.performTopoInitialMapping();
120 tapiInitialORMapping.performServInitialMapping();
121 TapiPceNotificationHandler pceListenerImpl = new TapiPceNotificationHandler(dataBroker, connectivityUtils);
122 TapiRendererNotificationHandler rendererListenerImpl = new TapiRendererNotificationHandler(dataBroker,
123 notificationPublishService);
125 rpcRegistration = rpcProviderService.registerRpcImplementations(
126 new CreateConnectivityServiceImpl(rpcService, tapiContext, connectivityUtils, pceListenerImpl,
127 rendererListenerImpl),
128 new GetConnectivityServiceDetailsImpl(tapiContext),
129 new GetConnectionDetailsImpl(tapiContext),
130 new DeleteConnectivityServiceImpl(rpcService, tapiContext, networkTransactionService),
131 new GetConnectivityServiceListImpl(tapiContext),
132 new GetNodeDetailsImpl(tapiContext),
133 new GetTopologyDetailsImpl(tapiContext, topologyUtils, tapiLink, networkTransactionService),
134 new GetNodeEdgePointDetailsImpl(tapiContext),
135 new GetLinkDetailsImpl(tapiContext),
136 new GetTopologyListImpl(tapiContext),
137 new GetServiceInterfacePointDetailsImpl(tapiContext),
138 new GetServiceInterfacePointListImpl(tapiContext));
140 this.listeners = new ArrayList<>();
141 TapiNetconfTopologyListener topologyListener = new TapiNetconfTopologyListener(tapiNetworkModelServiceImpl);
142 TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransactionService);
143 TapiPortMappingListener tapiPortMappingListener = new TapiPortMappingListener(tapiNetworkModelServiceImpl);
144 listeners.add(dataBroker.registerTreeChangeListener(
145 DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, LINK_II), orLinkListener));
146 listeners.add(dataBroker.registerTreeChangeListener(
147 DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifiers.NETCONF_TOPOLOGY_II
150 listeners.add(dataBroker.registerTreeChangeListener(
151 DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, MAPPING_II), tapiPortMappingListener));
152 TapiListener tapiListener = new TapiListener();
153 listeners.add(dataBroker.registerTreeChangeListener(
154 DataTreeIdentifier.of(
155 LogicalDatastoreType.CONFIGURATION,
156 InstanceIdentifier.create(ServiceInterfacePoints.class)),
158 // Notification Listener
159 pcelistenerRegistration = notificationService.registerCompositeListener(pceListenerImpl.getCompositeListener());
160 rendererlistenerRegistration = notificationService
161 .registerCompositeListener(rendererListenerImpl.getCompositeListener());
162 TapiServiceNotificationHandler serviceHandlerListenerImpl = new TapiServiceNotificationHandler(dataBroker);
163 servicehandlerlistenerRegistration = notificationService
164 .registerCompositeListener(serviceHandlerListenerImpl.getCompositeListener());
165 tapinetworkmodellistenerRegistration = notificationService
166 .registerCompositeListener(tapiNetworkModelNotificationHandler.getCompositeListener());
170 * Method called when the blueprint container is destroyed.
173 public void close() {
174 listeners.forEach(lis -> lis.close());
176 pcelistenerRegistration.close();
177 rendererlistenerRegistration.close();
178 servicehandlerlistenerRegistration.close();
179 tapinetworkmodellistenerRegistration.close();
180 rpcRegistration.close();
181 LOG.info("TapiProvider Session Closed");
184 public Registration getRegisteredRpcs() {
185 return rpcRegistration;