Handling e2 reset request & change status to reset
[ric-plt/e2mgr.git] / E2Manager / providers / rmrmsghandlerprovider / notification_handler_provider.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 // Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
5 //
6 // Licensed under the Apache License, Version 2.0 (the "License");
7 // you may not use this file except in compliance with the License.
8 // You may obtain a copy of the License at
9 //
10 //      http://www.apache.org/licenses/LICENSE-2.0
11 //
12 // Unless required by applicable law or agreed to in writing, software
13 // distributed under the License is distributed on an "AS IS" BASIS,
14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 // See the License for the specific language governing permissions and
16 // limitations under the License.
17
18 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 //  platform project (RICP).
20
21 package rmrmsghandlerprovider
22
23 import (
24         "e2mgr/clients"
25         "e2mgr/configuration"
26         "e2mgr/converters"
27         "e2mgr/handlers/rmrmsghandlers"
28         "e2mgr/logger"
29         "e2mgr/managers"
30         "e2mgr/rmrCgo"
31         "e2mgr/services"
32         "e2mgr/services/rmrsender"
33         "fmt"
34 )
35
36 type NotificationHandlerProvider struct {
37         notificationHandlers map[int]rmrmsghandlers.NotificationHandler
38 }
39
40 func NewNotificationHandlerProvider() *NotificationHandlerProvider {
41         return &NotificationHandlerProvider{
42                 notificationHandlers: map[int]rmrmsghandlers.NotificationHandler{},
43         }
44 }
45
46 // TODO: check whether it has been initialized
47 func (provider NotificationHandlerProvider) GetNotificationHandler(messageType int) (rmrmsghandlers.NotificationHandler, error) {
48         handler, ok := provider.notificationHandlers[messageType]
49
50         if !ok {
51                 return nil, fmt.Errorf("notification handler not found for message %d", messageType)
52         }
53
54         return handler, nil
55 }
56
57 func (provider *NotificationHandlerProvider) Register(msgType int, handler rmrmsghandlers.NotificationHandler) {
58         provider.notificationHandlers[msgType] = handler
59 }
60
61 func (provider *NotificationHandlerProvider) Init(logger *logger.Logger, config *configuration.Configuration,
62         rnibDataService services.RNibDataService, rmrSender *rmrsender.RmrSender, e2tInstancesManager managers.IE2TInstancesManager,
63         routingManagerClient clients.IRoutingManagerClient, e2tAssociationManager *managers.E2TAssociationManager,
64         ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, ranListManager managers.RanListManager) {
65
66         // Init converters
67         x2SetupResponseConverter := converters.NewX2SetupResponseConverter(logger)
68         x2SetupFailureResponseConverter := converters.NewX2SetupFailureResponseConverter(logger)
69         endcSetupResponseConverter := converters.NewEndcSetupResponseConverter(logger)
70         endcSetupFailureResponseConverter := converters.NewEndcSetupFailureResponseConverter(logger)
71         //enbLoadInformationExtractor := converters.NewEnbLoadInformationExtractor(logger)
72         x2ResetResponseExtractor := converters.NewX2ResetResponseExtractor(logger)
73
74         // Init managers
75         ranReconnectionManager := managers.NewRanDisconnectionManager(logger, config, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager)
76         ranStatusChangeManager := managers.NewRanStatusChangeManager(logger, rmrSender)
77         x2SetupResponseManager := managers.NewX2SetupResponseManager(x2SetupResponseConverter)
78         x2SetupFailureResponseManager := managers.NewX2SetupFailureResponseManager(x2SetupFailureResponseConverter)
79         endcSetupResponseManager := managers.NewEndcSetupResponseManager(endcSetupResponseConverter)
80         endcSetupFailureResponseManager := managers.NewEndcSetupFailureResponseManager(endcSetupFailureResponseConverter)
81
82         // Init handlers
83         x2SetupResponseHandler := rmrmsghandlers.NewSetupResponseNotificationHandler(logger, rnibDataService, x2SetupResponseManager, ranStatusChangeManager, rmrCgo.RIC_X2_SETUP_RESP)
84         x2SetupFailureResponseHandler := rmrmsghandlers.NewSetupResponseNotificationHandler(logger, rnibDataService, x2SetupFailureResponseManager, nil, rmrCgo.RIC_X2_SETUP_FAILURE)
85         endcSetupResponseHandler := rmrmsghandlers.NewSetupResponseNotificationHandler(logger, rnibDataService, endcSetupResponseManager, ranStatusChangeManager, rmrCgo.RIC_ENDC_X2_SETUP_RESP)
86         endcSetupFailureResponseHandler := rmrmsghandlers.NewSetupResponseNotificationHandler(logger, rnibDataService, endcSetupFailureResponseManager, nil, rmrCgo.RIC_ENDC_X2_SETUP_FAILURE)
87         ranLostConnectionHandler := rmrmsghandlers.NewRanLostConnectionHandler(logger, ranReconnectionManager)
88         //enbLoadInformationNotificationHandler := rmrmsghandlers.NewEnbLoadInformationNotificationHandler(logger, rnibDataService, enbLoadInformationExtractor)
89         x2EnbConfigurationUpdateHandler := rmrmsghandlers.NewX2EnbConfigurationUpdateHandler(logger, rmrSender)
90         endcConfigurationUpdateHandler := rmrmsghandlers.NewEndcConfigurationUpdateHandler(logger, rmrSender)
91         x2ResetResponseHandler := rmrmsghandlers.NewX2ResetResponseHandler(logger, rnibDataService, ranStatusChangeManager, x2ResetResponseExtractor)
92         x2ResetRequestNotificationHandler := rmrmsghandlers.NewX2ResetRequestNotificationHandler(logger, rnibDataService, ranStatusChangeManager, rmrSender)
93         e2TermInitNotificationHandler := rmrmsghandlers.NewE2TermInitNotificationHandler(logger, ranReconnectionManager, e2tInstancesManager, routingManagerClient)
94         e2TKeepAliveResponseHandler := rmrmsghandlers.NewE2TKeepAliveResponseHandler(logger, rnibDataService, e2tInstancesManager)
95         e2SetupRequestNotificationHandler := rmrmsghandlers.NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManager, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
96         ricServiceUpdateHandler := rmrmsghandlers.NewRicServiceUpdateHandler(logger, rmrSender, rnibDataService, ranListManager)
97         ricE2nodeConfigUpdateHandler := rmrmsghandlers.NewE2nodeConfigUpdateNotificationHandler(logger, rnibDataService, rmrSender)
98         e2ResetRequestNotificationHandler := rmrmsghandlers.NewE2ResetRequestNotificationHandler(logger, rnibDataService)
99
100         provider.Register(rmrCgo.RIC_X2_SETUP_RESP, x2SetupResponseHandler)
101         provider.Register(rmrCgo.RIC_X2_SETUP_FAILURE, x2SetupFailureResponseHandler)
102         provider.Register(rmrCgo.RIC_ENDC_X2_SETUP_RESP, endcSetupResponseHandler)
103         provider.Register(rmrCgo.RIC_ENDC_X2_SETUP_FAILURE, endcSetupFailureResponseHandler)
104         provider.Register(rmrCgo.RIC_SCTP_CONNECTION_FAILURE, ranLostConnectionHandler)
105         //provider.Register(rmrCgo.RIC_ENB_LOAD_INFORMATION, enbLoadInformationNotificationHandler)
106         provider.Register(rmrCgo.RIC_ENB_CONF_UPDATE, x2EnbConfigurationUpdateHandler)
107         provider.Register(rmrCgo.RIC_ENDC_CONF_UPDATE, endcConfigurationUpdateHandler)
108         provider.Register(rmrCgo.RIC_X2_RESET_RESP, x2ResetResponseHandler)
109         provider.Register(rmrCgo.RIC_X2_RESET, x2ResetRequestNotificationHandler)
110         provider.Register(rmrCgo.RIC_E2_TERM_INIT, e2TermInitNotificationHandler)
111         provider.Register(rmrCgo.E2_TERM_KEEP_ALIVE_RESP, e2TKeepAliveResponseHandler)
112         provider.Register(rmrCgo.RIC_E2_SETUP_REQ, e2SetupRequestNotificationHandler)
113         provider.Register(rmrCgo.RIC_SERVICE_UPDATE, ricServiceUpdateHandler)
114         provider.Register(rmrCgo.RIC_E2NODE_CONFIG_UPDATE, ricE2nodeConfigUpdateHandler)
115         provider.Register(rmrCgo.RIC_E2_RESET_REQ, e2ResetRequestNotificationHandler)
116 }