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.NbiNotificationsImpl;
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 NbiNotificationsImpl nbiNotifications;
42 private final TopicManager topicManager;
44 public CreateNotificationSubscriptionServiceImpl(NbiNotificationsImpl nbiNotifications, TopicManager topicManager) {
45 this.nbiNotifications = nbiNotifications;
46 this.topicManager = topicManager;
50 public ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>> invoke(
51 CreateNotificationSubscriptionServiceInput input) {
52 for (Uuid uuid:input.getSubscriptionFilter().getRequestedObjectIdentifier()) {
53 LOG.info("Adding T-API topic: {} to Kafka server", uuid.getValue());
54 this.topicManager.addTapiTopic(uuid.getValue());
56 SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
57 .setName(input.getSubscriptionFilter().getName())
58 .setLocalId(input.getSubscriptionFilter().getLocalId())
59 .setIncludeContent(input.getSubscriptionFilter().getIncludeContent())
60 .setRequestedNotificationTypes(input.getSubscriptionFilter().getRequestedNotificationTypes())
61 .setRequestedLayerProtocols(input.getSubscriptionFilter().getRequestedLayerProtocols())
62 .setRequestedObjectIdentifier(input.getSubscriptionFilter().getRequestedObjectIdentifier())
63 .setRequestedObjectTypes(input.getSubscriptionFilter().getRequestedObjectTypes())
65 Uuid notifSubscriptionUuid = new Uuid(UUID.randomUUID().toString());
66 Map<SubscriptionFilterKey, SubscriptionFilter> sfmap = new HashMap<>();
67 sfmap.put(subscriptionFilter.key(), subscriptionFilter);
68 SubscriptionService subscriptionService = new SubscriptionServiceBuilder()
69 .setSubscriptionFilter(sfmap)
70 .setSubscriptionState(input.getSubscriptionState())
71 .setUuid(notifSubscriptionUuid)
74 NotifSubscriptionKey notifSubscriptionKey = new NotifSubscriptionKey(notifSubscriptionUuid);
75 NotifSubscription notifSubscription = 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 NotificationContext notificationContext = nbiNotifications.getNotificationContext();
85 Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>();
86 if (notificationContext != null && notificationContext.getNotifSubscription() != null) {
87 notifSubscriptions.putAll(notificationContext.getNotifSubscription());
89 notifSubscriptions.put(notifSubscriptionKey, notifSubscription);
90 NotificationContext notificationContext1 = new NotificationContextBuilder()
91 .setNotification(notificationContext == null ? new HashMap<>() : notificationContext.getNotification())
92 .setNotifSubscription(notifSubscriptions)
94 if (!nbiNotifications.updateNotificationContext(notificationContext1)) {
95 LOG.error("Failed to update Notification context");
96 return RpcResultBuilder.<CreateNotificationSubscriptionServiceOutput>failed()
97 .withError(ErrorType.RPC, "Failed to update notification context").buildFuture();
99 CreateNotificationSubscriptionServiceOutput serviceOutput =
100 new CreateNotificationSubscriptionServiceOutputBuilder()
101 .setSubscriptionService(subscriptionService)
103 return RpcResultBuilder.success(serviceOutput).buildFuture();