772fb20aeecd63d3c0980c8490a5d2563f0423c8
[transportpce.git] / nbinotifications / src / main / java / org / opendaylight / transportpce / nbinotifications / impl / rpc / CreateNotificationSubscriptionServiceImpl.java
1 /*
2  * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.transportpce.nbinotifications.impl.rpc;
9
10 import com.google.common.util.concurrent.ListenableFuture;
11 import java.util.HashMap;
12 import java.util.Map;
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;
36
37
38 public class CreateNotificationSubscriptionServiceImpl implements CreateNotificationSubscriptionService {
39     private static final Logger LOG = LoggerFactory.getLogger(CreateNotificationSubscriptionServiceImpl.class);
40
41     private NbiNotificationsProvider nbiNotifications;
42     private final TopicManager topicManager;
43
44     public CreateNotificationSubscriptionServiceImpl(NbiNotificationsProvider nbiNotifications,
45             TopicManager topicManager) {
46         this.nbiNotifications = nbiNotifications;
47         this.topicManager = topicManager;
48     }
49
50     @Override
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());
56         }
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())
65             .build();
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)
73             .build();
74
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())
84             .build();
85         NotificationContext notificationContext = nbiNotifications.getNotificationContext();
86         Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>();
87         if (notificationContext != null && notificationContext.getNotifSubscription() != null) {
88             notifSubscriptions.putAll(notificationContext.getNotifSubscription());
89         }
90         notifSubscriptions.put(notifSubscriptionKey, notifSubscription);
91         NotificationContext notificationContext1 = new NotificationContextBuilder()
92             .setNotification(notificationContext == null ? new HashMap<>() : notificationContext.getNotification())
93             .setNotifSubscription(notifSubscriptions)
94             .build();
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();
99         }
100         CreateNotificationSubscriptionServiceOutput serviceOutput =
101             new CreateNotificationSubscriptionServiceOutputBuilder()
102                 .setSubscriptionService(subscriptionService)
103                 .build();
104         return RpcResultBuilder.success(serviceOutput).buildFuture();
105     }
106
107 }