import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperationsImpl;
+import org.opendaylight.transportpce.servicehandler.impl.ServiceHandlerProvider;
import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
-import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
// network model beans
private final NetworkModelProvider networkModelProvider;
// service-handler beans
- private final ServicehandlerProvider servicehandlerProvider;
+ private final ServiceHandlerProvider servicehandlerProvider;
// T-api
private TapiProvider tapiProvider;
// nbi-notifications beans
portMapping);
ServiceDataStoreOperations serviceDataStoreOperations =
new ServiceDataStoreOperationsImpl(lgServBDB);
- RendererListenerImpl rendererListenerImpl =
- new RendererListenerImpl(pathComputationService, lgServBNPS, networkModelService);
- PceListenerImpl pceListenerImpl = new PceListenerImpl(
+ RendererNotificationHandler rendererNotificationHandler =
+ new RendererNotificationHandler(pathComputationService, lgServBNPS, networkModelService);
+ PceNotificationHandler pceListenerImpl = new PceNotificationHandler(
rendererServiceOperations, pathComputationService,
lgServBNPS, serviceDataStoreOperations);
- NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
+ NetworkModelNotificationHandler networkModelNotificationHandler = new NetworkModelNotificationHandler(
lgServBNPS, serviceDataStoreOperations);
ServicehandlerImpl servicehandler = new ServicehandlerImpl(lgServRPS,
pathComputationService, rendererServiceOperations,
lgServBNPS, pceListenerImpl,
- rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations,
+ rendererNotificationHandler, networkModelNotificationHandler, serviceDataStoreOperations,
new CatalogDataStoreOperationsImpl(networkTransaction));
rpcRegistrations.add(servicehandler.getRegisteredRpc());
- servicehandlerProvider = new ServicehandlerProvider(
+ servicehandlerProvider = new ServiceHandlerProvider(
lgServBDB,
lgServNS, serviceDataStoreOperations, pceListenerImpl,
- rendererListenerImpl, networkModelListenerImpl, lgServBNPS,
- servicehandler,
+ rendererNotificationHandler, networkModelNotificationHandler,
new ServiceListener(
servicehandler, serviceDataStoreOperations, lgServBNPS));
if (activateTapi) {
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
-import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.binding.api.NotificationService;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OrgOpenroadmServiceService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
*
*/
@Component
-public class ServicehandlerProvider {
+public class ServiceHandlerProvider {
- private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerProvider.class);
+ private static final Logger LOG = LoggerFactory.getLogger(ServiceHandlerProvider.class);
private static final InstanceIdentifier<Services> SERVICE = InstanceIdentifier.builder(ServiceList.class)
.child(Services.class).build();
- private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
+ private final Registration pcelistenerRegistration;
private ListenerRegistration<DataTreeChangeListener<Services>> serviceDataTreeChangeListenerRegistration;
- private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
- private ListenerRegistration<TransportpceNetworkmodelListener> networkmodellistenerRegistration;
+ private final Registration rendererlistenerRegistration;
+ private final Registration networkmodellistenerRegistration;
private ServiceDataStoreOperations serviceDataStoreOperations;
@Activate
- public ServicehandlerProvider(@Reference final DataBroker dataBroker,
+ public ServiceHandlerProvider(@Reference final DataBroker dataBroker,
@Reference NotificationService notificationService,
@Reference ServiceDataStoreOperations serviceDataStoreOperations,
- @Reference TransportpcePceListener pceListenerImpl,
- @Reference TransportpceRendererListener rendererListenerImpl,
- @Reference TransportpceNetworkmodelListener networkModelListenerImpl,
- @Reference NotificationPublishService notificationPublishService,
- @Reference OrgOpenroadmServiceService servicehandler,
+ @Reference PceNotificationHandler pceNotificationHandler,
+ @Reference RendererNotificationHandler rendererNotificationHandler,
+ @Reference NetworkModelNotificationHandler networkModelNotificationHandler,
@Reference DataTreeChangeListener<Services> serviceListener) {
this.serviceDataStoreOperations = serviceDataStoreOperations;
this.serviceDataStoreOperations.initialize();
- pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
- rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
- networkmodellistenerRegistration = notificationService.registerNotificationListener(networkModelListenerImpl);
+ pcelistenerRegistration = notificationService
+ .registerCompositeListener(pceNotificationHandler.getCompositeListener());
+ rendererlistenerRegistration = notificationService
+ .registerCompositeListener(rendererNotificationHandler.getCompositeListener());
+ networkmodellistenerRegistration = notificationService
+ .registerCompositeListener(networkModelNotificationHandler.getCompositeListener());
serviceDataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, SERVICE), serviceListener);
LOG.info("ServicehandlerProvider Session Initiated");
rendererlistenerRegistration.close();
networkmodellistenerRegistration.close();
}
-}
\ No newline at end of file
+}
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TopologyUpdateResult;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TopologyUpdateResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChanges;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Component
-public class NetworkModelListenerImpl implements TransportpceNetworkmodelListener, NetworkListener {
+@Component(service = {NetworkModelNotificationHandler.class, NetworkListener.class})
+public class NetworkModelNotificationHandler implements NetworkListener {
- private static final Logger LOG = LoggerFactory.getLogger(NetworkModelListenerImpl.class);
+ private static final Logger LOG = LoggerFactory.getLogger(NetworkModelNotificationHandler.class);
private ServiceDataStoreOperations serviceDataStoreOperations;
private TopologyUpdateResult topologyUpdateResult;
@Activate
- public NetworkModelListenerImpl(@Reference NotificationPublishService notificationPublishService,
+ public NetworkModelNotificationHandler(@Reference NotificationPublishService notificationPublishService,
@Reference ServiceDataStoreOperations serviceDataStoreOperations) {
this.serviceDataStoreOperations = serviceDataStoreOperations;
}
- @Override
- public void onTopologyUpdateResult(TopologyUpdateResult notification) {
+ public CompositeListener getCompositeListener() {
+ return new CompositeListener(Set.of(
+ new CompositeListener.Component<>(TopologyUpdateResult.class, this::onTopologyUpdateResult)));
+ }
+
+ void onTopologyUpdateResult(TopologyUpdateResult notification) {
LOG.debug("Topology update notification: {}", notification);
if (compareTopologyUpdateResult(notification)) {
LOG.warn("TopologyUpdateResult already wired !");
package org.opendaylight.transportpce.servicehandler.listeners;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Set;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Component
-public class PceListenerImpl implements TransportpcePceListener, PceListener {
+@Component(service = {PceNotificationHandler.class, PceListener.class})
+public class PceNotificationHandler implements PceListener {
- private static final Logger LOG = LoggerFactory.getLogger(PceListenerImpl.class);
+ private static final Logger LOG = LoggerFactory.getLogger(PceNotificationHandler.class);
private static final String PUBLISHER = "PceListener";
private ServicePathRpcResult servicePathRpcResult;
private NotificationPublishService notificationPublishService;
@Activate
- public PceListenerImpl(
+ public PceNotificationHandler(
@Reference RendererServiceOperations rendererServiceOperations,
@Reference PathComputationService pathComputationService,
@Reference NotificationPublishService notificationPublishService,
this.notificationPublishService = notificationPublishService;
}
- @Override
- public void onServicePathRpcResult(ServicePathRpcResult notification) {
+ public CompositeListener getCompositeListener() {
+ return new CompositeListener(Set.of(
+ new CompositeListener.Component<>(ServicePathRpcResult.class, this::onServicePathRpcResult)));
+ }
+
+ private void onServicePathRpcResult(ServicePathRpcResult notification) {
if (compareServicePathRpcResult(notification)) {
LOG.warn("ServicePathRpcResult already wired !");
return;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.common.StringConstants;
import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
* @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
*
*/
-@Component
-public class RendererListenerImpl implements TransportpceRendererListener, RendererListener {
+@Component(service = {RendererNotificationHandler.class, RendererListener.class})
+public class RendererNotificationHandler implements RendererListener {
private static final String PUBLISHER = "RendererListener";
- private static final Logger LOG = LoggerFactory.getLogger(RendererListenerImpl.class);
+ private static final Logger LOG = LoggerFactory.getLogger(RendererNotificationHandler.class);
private RendererRpcResultSp serviceRpcResultSp;
private ServiceDataStoreOperations serviceDataStoreOperations;
private ServiceInput input;
private NotificationPublishService notificationPublishService;
private final NetworkModelService networkModelService;
-
@Activate
- public RendererListenerImpl(@Reference PathComputationService pathComputationService,
+ public RendererNotificationHandler(@Reference PathComputationService pathComputationService,
@Reference NotificationPublishService notificationPublishService,
@Reference NetworkModelService networkModelService) {
this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
this.networkModelService = networkModelService;
}
- @Override
- public void onRendererRpcResultSp(RendererRpcResultSp notification) {
+ public CompositeListener getCompositeListener() {
+ return new CompositeListener(Set.of(
+ new CompositeListener.Component<>(RendererRpcResultSp.class, this::onRendererRpcResultSp)));
+ }
+
+ private void onRendererRpcResultSp(RendererRpcResultSp notification) {
if (compareServiceRpcResultSp(notification)) {
LOG.warn("ServiceRpcResultSp already wired !");
return;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
+import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OrgOpenroadmServiceService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
@ExtendWith(MockitoExtension.class)
-public class ServicehandlerProviderTest extends AbstractTest {
+public class ServiceHandlerProviderTest extends AbstractTest {
@Mock
- DataBroker dataBroker;
+ RendererServiceOperations rendererServiceOperations;
@Mock
- ServiceDataStoreOperations serviceDataStoreOperations;
+ PathComputationService pathComputationService;
@Mock
- TransportpcePceListener pceListenerImpl;
+ NetworkModelService networkModelService;
@Mock
- TransportpceRendererListener rendererListenerImpl;
+ DataBroker dataBroker;
@Mock
- TransportpceNetworkmodelListener networkModelListenerImpl;
+ ServiceDataStoreOperations serviceDataStoreOperations;
@Mock
NotificationPublishService notificationPublishService;
@Mock
- OrgOpenroadmServiceService servicehandler;
- @Mock
DataTreeChangeListener<Services> serviceListener;
+ private final PceNotificationHandler pceNotificationHandler = new PceNotificationHandler(rendererServiceOperations,
+ pathComputationService, notificationPublishService, serviceDataStoreOperations);
+ private final RendererNotificationHandler rendererNotificationHandler = new RendererNotificationHandler(
+ pathComputationService, notificationPublishService, networkModelService);
+ private final NetworkModelNotificationHandler networkModelNotificationHandler = new NetworkModelNotificationHandler(
+ notificationPublishService, serviceDataStoreOperations);
+
@Test
void testInitRegisterServiceHandlerToRpcRegistry() {
- new ServicehandlerProvider(dataBroker, getNotificationService() ,
- serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
- notificationPublishService, servicehandler, serviceListener);
-
+ new ServiceHandlerProvider(dataBroker, getNotificationService(),
+ serviceDataStoreOperations, pceNotificationHandler, rendererNotificationHandler,
+ networkModelNotificationHandler, serviceListener);
verify(dataBroker, times(1)).registerDataTreeChangeListener(any(), any());
}
-}
\ No newline at end of file
+}
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
@ExtendWith(MockitoExtension.class)
-public class NetworkModelListenerImplTest {
+public class NetworkModelNotificationHandlerTest {
@Mock
private NotificationPublishService notificationPublishService;
@Mock
private ServiceDataStoreOperations serviceDataStoreOperations;
private static PathDescription pathDescription;
- private NetworkModelListenerImpl networkModelListener;
+ private NetworkModelNotificationHandler networkModelListener;
@BeforeEach
void setUp() {
.setAToZDirection(new AToZDirectionBuilder().setAToZ(new HashMap<>(createMapAtoZ())).build())
.setZToADirection(new ZToADirectionBuilder().setZToA(new HashMap<>(createMapZtoA())).build())
.build();
- networkModelListener = new NetworkModelListenerImpl(notificationPublishService,
+ networkModelListener = new NetworkModelNotificationHandler(notificationPublishService,
serviceDataStoreOperations);
}
@Test
void testOnTopologyUpdateResultWhenNeverWired() {
- NetworkModelListenerImpl networkModelListenerMocked = Mockito.mock(NetworkModelListenerImpl.class);
+ NetworkModelNotificationHandler networkModelListenerMocked = Mockito.mock(
+ NetworkModelNotificationHandler.class);
doCallRealMethod().when(networkModelListenerMocked).onTopologyUpdateResult(any(TopologyUpdateResult.class));
Map<TopologyChangesKey, TopologyChanges> topologyChanges1 = Map.of(
@Test
void testOnTopologyUpdateResultWhenAlreadyWired() {
- NetworkModelListenerImpl networkModelListenerMocked = Mockito.mock(NetworkModelListenerImpl.class);
+ NetworkModelNotificationHandler networkModelListenerMocked = Mockito.mock(
+ NetworkModelNotificationHandler.class);
doCallRealMethod().when(networkModelListenerMocked).onTopologyUpdateResult(any(TopologyUpdateResult.class));
Map<TopologyChangesKey, TopologyChanges> topologyChanges = Map.of(