2 * Copyright © 2024 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.nbinotifications.impl.rpc;
10 import com.google.common.util.concurrent.ListenableFuture;
11 import java.util.HashMap;
13 import java.util.UUID;
14 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
15 import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
16 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
17 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionService;
18 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceInput;
19 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceOutput;
20 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceOutputBuilder;
21 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
22 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContextBuilder;
23 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.output.SubscriptionService;
24 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.output.SubscriptionServiceBuilder;
25 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscription;
26 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionKey;
28 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.Notification;
29 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotificationKey;
30 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilter;
31 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterBuilder;
32 import org.opendaylight.yangtools.yang.common.ErrorType;
33 import org.opendaylight.yangtools.yang.common.RpcResult;
34 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
39 public class CreateNotificationSubscriptionServiceImpl implements CreateNotificationSubscriptionService {
40 private static final Logger LOG = LoggerFactory.getLogger(CreateNotificationSubscriptionServiceImpl.class);
42 private NbiNotificationsProvider nbiNotifications;
43 private final TopicManager topicManager;
45 public CreateNotificationSubscriptionServiceImpl(NbiNotificationsProvider nbiNotifications,
46 TopicManager topicManager) {
47 this.nbiNotifications = nbiNotifications;
48 this.topicManager = topicManager;
52 public ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>> invoke(
53 CreateNotificationSubscriptionServiceInput input) {
54 for (Uuid uuid : input.getSubscriptionFilter().getRequestedObjectIdentifier()) {
55 LOG.info("Adding T-API topic: {} to Kafka server", uuid.getValue());
56 this.topicManager.addTapiTopic(uuid.getValue());
58 Uuid notifSubscriptionUuid = new Uuid(UUID.randomUUID().toString());
59 SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
60 .setName(input.getSubscriptionFilter().getName())
61 .setLocalId(input.getSubscriptionFilter().getLocalId())
62 .setIncludeContent(input.getSubscriptionFilter().getIncludeContent())
63 .setRequestedNotificationTypes(input.getSubscriptionFilter().getRequestedNotificationTypes())
64 .setRequestedLayerProtocols(input.getSubscriptionFilter().getRequestedLayerProtocols())
65 .setRequestedObjectIdentifier(input.getSubscriptionFilter().getRequestedObjectIdentifier())
66 .setRequestedObjectTypes(input.getSubscriptionFilter().getRequestedObjectTypes())
68 SubscriptionService subscriptionService = new SubscriptionServiceBuilder()
69 .setUuid(notifSubscriptionUuid)
70 .setSubscriptionFilter(new HashMap<>(Map.of(subscriptionFilter.key(), subscriptionFilter)))
71 .setSubscriptionState(input.getSubscriptionState())
73 Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>(Map.of(
74 new NotifSubscriptionKey(notifSubscriptionUuid),
75 new NotifSubscriptionBuilder()
76 .setSubscriptionState(subscriptionService.getSubscriptionState())
77 .setSubscriptionFilter(subscriptionService.getSubscriptionFilter())
78 .setUuid(notifSubscriptionUuid)
79 // Following 2 items are no more in notification-context with T-API 2.4
80 // .setSupportedNotificationTypes(notificationTypes)
81 // .setSupportedObjectTypes(objectTypes)
82 .setName(subscriptionService.getName())
84 Map<NotificationKey, Notification> notifications;
85 NotificationContext notificationContext = nbiNotifications.getNotificationContext();
86 if (notificationContext == null) {
87 notifications = new HashMap<>();
89 notifications = notificationContext.getNotification();
90 var subsc = notificationContext.getNotifSubscription();
92 notifSubscriptions.putAll(subsc);
95 if (nbiNotifications.updateNotificationContext(
96 new NotificationContextBuilder()
97 .setNotification(notifications)
98 .setNotifSubscription(notifSubscriptions)
100 return RpcResultBuilder
102 new CreateNotificationSubscriptionServiceOutputBuilder()
103 .setSubscriptionService(subscriptionService)
107 LOG.error("Failed to update Notification context");
108 return RpcResultBuilder.<CreateNotificationSubscriptionServiceOutput>failed()
109 .withError(ErrorType.RPC, "Failed to update notification context")