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.subscription.service.SubscriptionFilter;
29 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterBuilder;
30 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterKey;
31 import org.opendaylight.yangtools.yang.common.ErrorType;
32 import org.opendaylight.yangtools.yang.common.RpcResult;
33 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
38 public class CreateNotificationSubscriptionServiceImpl implements CreateNotificationSubscriptionService {
39 private static final Logger LOG = LoggerFactory.getLogger(CreateNotificationSubscriptionServiceImpl.class);
41 private NbiNotificationsProvider nbiNotifications;
42 private final TopicManager topicManager;
44 public CreateNotificationSubscriptionServiceImpl(NbiNotificationsProvider nbiNotifications,
45 TopicManager topicManager) {
46 this.nbiNotifications = nbiNotifications;
47 this.topicManager = topicManager;
51 public ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>> invoke(
52 CreateNotificationSubscriptionServiceInput input) {
53 for (Uuid uuid:input.getSubscriptionFilter().getRequestedObjectIdentifier()) {
54 LOG.info("Adding T-API topic: {} to Kafka server", uuid.getValue());
55 this.topicManager.addTapiTopic(uuid.getValue());
57 SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
58 .setName(input.getSubscriptionFilter().getName())
59 .setLocalId(input.getSubscriptionFilter().getLocalId())
60 .setIncludeContent(input.getSubscriptionFilter().getIncludeContent())
61 .setRequestedNotificationTypes(input.getSubscriptionFilter().getRequestedNotificationTypes())
62 .setRequestedLayerProtocols(input.getSubscriptionFilter().getRequestedLayerProtocols())
63 .setRequestedObjectIdentifier(input.getSubscriptionFilter().getRequestedObjectIdentifier())
64 .setRequestedObjectTypes(input.getSubscriptionFilter().getRequestedObjectTypes())
66 Uuid notifSubscriptionUuid = new Uuid(UUID.randomUUID().toString());
67 Map<SubscriptionFilterKey, SubscriptionFilter> sfmap = new HashMap<>();
68 sfmap.put(subscriptionFilter.key(), subscriptionFilter);
69 SubscriptionService subscriptionService = new SubscriptionServiceBuilder()
70 .setSubscriptionFilter(sfmap)
71 .setSubscriptionState(input.getSubscriptionState())
72 .setUuid(notifSubscriptionUuid)
75 NotifSubscriptionKey notifSubscriptionKey = new NotifSubscriptionKey(notifSubscriptionUuid);
76 NotifSubscription notifSubscription = new NotifSubscriptionBuilder()
77 .setSubscriptionState(subscriptionService.getSubscriptionState())
78 .setSubscriptionFilter(subscriptionService.getSubscriptionFilter())
79 .setUuid(notifSubscriptionUuid)
80 // Following 2 items are no more in notification-context with T-API 2.4
81 // .setSupportedNotificationTypes(notificationTypes)
82 // .setSupportedObjectTypes(objectTypes)
83 .setName(subscriptionService.getName())
85 NotificationContext notificationContext = nbiNotifications.getNotificationContext();
86 Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>();
87 if (notificationContext != null && notificationContext.getNotifSubscription() != null) {
88 notifSubscriptions.putAll(notificationContext.getNotifSubscription());
90 notifSubscriptions.put(notifSubscriptionKey, notifSubscription);
91 NotificationContext notificationContext1 = new NotificationContextBuilder()
92 .setNotification(notificationContext == null ? new HashMap<>() : notificationContext.getNotification())
93 .setNotifSubscription(notifSubscriptions)
95 if (!nbiNotifications.updateNotificationContext(notificationContext1)) {
96 LOG.error("Failed to update Notification context");
97 return RpcResultBuilder.<CreateNotificationSubscriptionServiceOutput>failed()
98 .withError(ErrorType.RPC, "Failed to update notification context").buildFuture();
100 CreateNotificationSubscriptionServiceOutput serviceOutput =
101 new CreateNotificationSubscriptionServiceOutputBuilder()
102 .setSubscriptionService(subscriptionService)
104 return RpcResultBuilder.success(serviceOutput).buildFuture();