import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender;
import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperationsImpl;
RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(
deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
lgServBDB,
- lgServBNPS,
- portMapping);
+ new NotificationSender(lgServBNPS),
+ portMapping
+ );
ServiceDataStoreOperations serviceDataStoreOperations =
new ServiceDataStoreOperationsImpl(lgServBDB);
RendererNotificationHandler rendererNotificationHandler =
otnDeviceRendererService,
olmPowerServiceRpc,
lightyServices.getBindingDataBroker(),
- lightyServices.getBindingNotificationPublishService(),
- portMapping),
+ new NotificationSender(
+ lightyServices.getBindingNotificationPublishService()
+ ),
+ portMapping
+ ),
lightyServices.getRpcProviderService())
.getRegisteredRpc());
}
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.common.ResponseCodes;
import org.opendaylight.transportpce.common.StringConstants;
import org.opendaylight.transportpce.common.service.ServiceTypes;
import org.opendaylight.transportpce.renderer.ModelMappingUtils;
import org.opendaylight.transportpce.renderer.ServicePathInputData;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.Notification;
import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.DeviceRenderingRollbackTask;
import org.opendaylight.transportpce.renderer.provisiondevice.tasks.DeviceRenderingTask;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
-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.RendererRpcResultSpBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.Nodes;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
private final OtnDeviceRendererService otnDeviceRenderer;
private final TransportpceOlmService olmService;
private final DataBroker dataBroker;
- private final NotificationPublishService notificationPublishService;
+ private final Notification notification;
private final PortMapping portMapping;
private ListeningExecutorService executor;
@Reference OtnDeviceRendererService otnDeviceRenderer,
@Reference TransportpceOlmService olmService,
@Reference DataBroker dataBroker,
- @Reference NotificationPublishService notificationPublishService,
+ @Reference Notification notification,
@Reference PortMapping portMapping) {
this.deviceRenderer = deviceRenderer;
this.otnDeviceRenderer = otnDeviceRenderer;
this.olmService = olmService;
this.dataBroker = dataBroker;
- this.notificationPublishService = notificationPublishService;
+ this.notification = notification;
this.portMapping = portMapping;
this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUMBER_OF_THREADS));
LOG.debug("RendererServiceOperationsImpl instantiated");
String serviceName,
RpcStatusEx rpcStatusEx,
String message) {
- send(
- buildNotification(servicePathNotificationTypes, serviceName, rpcStatusEx, message,
- null, null, null, null));
+
+ notification.send(
+ servicePathNotificationTypes,
+ serviceName,
+ rpcStatusEx,
+ message
+ );
}
/**
Link notifLink,
Set<String> supportedLinks,
String serviceType) {
- send(
- buildNotification(servicePathNotificationTypes, serviceName, rpcStatusEx, message,
- pathDescription, notifLink, supportedLinks, serviceType));
- }
- /**
- * Build notification containing path description information.
- * @param servicePathNotificationTypes ServicePathNotificationTypes
- * @param serviceName String
- * @param rpcStatusEx RpcStatusEx
- * @param message String
- * @param pathDescription PathDescription
- * @return notification with RendererRpcResultSp type.
- */
- private RendererRpcResultSp buildNotification(
- ServicePathNotificationTypes servicePathNotificationTypes,
- String serviceName,
- RpcStatusEx rpcStatusEx,
- String message,
- PathDescription pathDescription,
- Link notifLink,
- Set<String> supportedLinks,
- String serviceType) {
- RendererRpcResultSpBuilder builder =
- new RendererRpcResultSpBuilder()
- .setNotificationType(servicePathNotificationTypes).setServiceName(serviceName).setStatus(rpcStatusEx)
- .setStatusMessage(message)
- .setServiceType(serviceType);
- if (pathDescription != null) {
- builder
- .setAToZDirection(pathDescription.getAToZDirection())
- .setZToADirection(pathDescription.getZToADirection());
- }
- if (notifLink != null) {
- builder.setLink(notifLink);
- }
- if (supportedLinks != null) {
- builder.setLinkId(supportedLinks);
- }
- return builder.build();
- }
-
- /**
- * Send renderer notification.
- * @param notification Notification
- */
- private void send(Notification<?> notification) {
- try {
- LOG.info("Sending notification {}", notification);
- notificationPublishService.putNotification(notification);
- } catch (InterruptedException e) {
- LOG.info("notification offer rejected: ", e);
- Thread.currentThread().interrupt();
- }
+ notification.send(
+ notification.buildNotification(
+ servicePathNotificationTypes,
+ serviceName,
+ rpcStatusEx,
+ message,
+ pathDescription,
+ notifLink,
+ supportedLinks,
+ serviceType
+ )
+ );
}
private Link createLinkForNotif(List<LinkTp> otnLinkTerminationPoints) {
--- /dev/null
+/*
+ * Copyright © 2024 Smartoptics and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.notification;
+
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+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.RendererRpcResultSpBuilder;
+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.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component
+public class NotificationSender implements Notification {
+
+ private final NotificationPublishService notificationPublishService;
+
+ private static final Logger LOG = LoggerFactory.getLogger(NotificationSender.class);
+
+ @Activate
+ public NotificationSender(@Reference NotificationPublishService notificationPublishService) {
+ this.notificationPublishService = notificationPublishService;
+ }
+
+ /**
+ * Send renderer notification.
+ */
+ public void send(ServicePathNotificationTypes servicePathNotificationTypes,
+ String serviceName,
+ RpcStatusEx rpcStatusEx,
+ String message) {
+
+ send(
+ buildNotification(
+ servicePathNotificationTypes,
+ serviceName,
+ rpcStatusEx,
+ message,
+ null,
+ null,
+ null,
+ null
+ )
+ );
+ }
+
+ /**
+ * Send renderer notification.
+ * @param notification Notification
+ */
+ public void send(org.opendaylight.yangtools.yang.binding.Notification notification) {
+ try {
+ LOG.info("Sending notification {}", notification);
+ notificationPublishService.putNotification(notification);
+ } catch (InterruptedException e) {
+ LOG.info("notification offer rejected: ", e);
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ /**
+ * Build notification containing path description information.
+ * @param servicePathNotificationTypes ServicePathNotificationTypes
+ * @param serviceName String
+ * @param rpcStatusEx RpcStatusEx
+ * @param message String
+ * @param pathDescription PathDescription
+ * @return notification with RendererRpcResultSp type.
+ */
+ @Override
+ public RendererRpcResultSp buildNotification(ServicePathNotificationTypes servicePathNotificationTypes,
+ String serviceName,
+ RpcStatusEx rpcStatusEx,
+ String message,
+ PathDescription pathDescription,
+ Link notifLink,
+ Set<String> supportedLinks,
+ String serviceType) {
+
+ RendererRpcResultSpBuilder builder =
+ new RendererRpcResultSpBuilder()
+ .setNotificationType(servicePathNotificationTypes).setServiceName(serviceName).setStatus(rpcStatusEx)
+ .setStatusMessage(message)
+ .setServiceType(serviceType);
+ if (pathDescription != null) {
+ builder
+ .setAToZDirection(pathDescription.getAToZDirection())
+ .setZToADirection(pathDescription.getZToADirection());
+ }
+ if (notifLink != null) {
+ builder.setLink(notifLink);
+ }
+ if (supportedLinks != null) {
+ builder.setLinkId(supportedLinks);
+ }
+ return builder.build();
+ }
+}
import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
import org.opendaylight.transportpce.common.mapping.PortMapping;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender;
import org.opendaylight.transportpce.renderer.stub.OlmServiceStub;
import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock;
import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils;
this.olmService = spy(this.olmService);
NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
this.rendererServiceOperations = new RendererServiceOperationsImpl(deviceRenderer,
- otnDeviceRendererService, olmService, getDataBroker(), notificationPublishService, portMapping);
+ otnDeviceRendererService, olmService, getDataBroker(), new NotificationSender(notificationPublishService),
+ portMapping);
}
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender;
import org.opendaylight.transportpce.renderer.stub.OlmServiceStub;
import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock;
import org.opendaylight.transportpce.renderer.utils.ServiceDataUtils;
NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
this.olmService = spy(this.olmService);
this.rendererServiceOperations = new RendererServiceOperationsImpl(deviceRenderer, otnDeviceRendererService,
- this.olmService, getDataBroker(), notificationPublishService, portMapping);
+ this.olmService, getDataBroker(), new NotificationSender(notificationPublishService), portMapping);
}
@Test