blob: ecd014efe7c1457f3732436c2158e96a20591788 [file] [log] [blame]
David K. Bainbridgeeda2b052017-07-12 09:41:04 -07001/*
Brian O'Connor180c1092017-08-03 22:46:14 -07002 * Copyright 2017-present Open Networking Foundation
David K. Bainbridgeeda2b052017-07-12 09:41:04 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Amit Ghoshc29c7a92017-08-01 09:59:13 +010016package org.opencord.sadis.impl;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070017
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000018import com.google.common.collect.Lists;
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000019import org.onosproject.codec.CodecService;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070020import org.onosproject.core.ApplicationId;
21import org.onosproject.core.CoreService;
22import org.onosproject.net.config.ConfigFactory;
23import org.onosproject.net.config.NetworkConfigEvent;
24import org.onosproject.net.config.NetworkConfigListener;
25import org.onosproject.net.config.NetworkConfigRegistry;
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000026import org.opencord.sadis.BandwidthProfileInformation;
Carmelo Cascone34059852019-09-30 19:33:00 -070027import org.opencord.sadis.BaseInformationService;
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000028import org.opencord.sadis.SadisService;
Deepa vaddireddy386f38b2017-08-02 06:24:01 +000029import org.opencord.sadis.SubscriberAndDeviceInformation;
Elia Battistonc1ec8532022-03-16 17:52:51 +010030import org.opencord.sadis.UniTagInformation;
Carmelo Cascone34059852019-09-30 19:33:00 -070031import org.osgi.service.component.annotations.Activate;
32import org.osgi.service.component.annotations.Component;
33import org.osgi.service.component.annotations.Deactivate;
34import org.osgi.service.component.annotations.Reference;
35import org.osgi.service.component.annotations.ReferenceCardinality;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070036import org.slf4j.Logger;
37import org.slf4j.LoggerFactory;
38
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000039import java.util.List;
40import java.util.Set;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070041
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070042@Component(immediate = true)
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000043public class SadisManager implements SadisService {
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070044 private final Logger log = LoggerFactory.getLogger(this.getClass());
45
46 private static final String SADIS_APP = "org.opencord.sadis";
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070047
Carmelo Cascone34059852019-09-30 19:33:00 -070048 @Reference(cardinality = ReferenceCardinality.MANDATORY)
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070049 protected CoreService coreService;
50
Carmelo Cascone34059852019-09-30 19:33:00 -070051 @Reference(cardinality = ReferenceCardinality.MANDATORY)
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070052 protected NetworkConfigRegistry cfgService;
53
Carmelo Cascone34059852019-09-30 19:33:00 -070054 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Deepa vaddireddy386f38b2017-08-02 06:24:01 +000055 protected CodecService codecService;
56
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000057 private final InternalConfigListener cfgListener = new InternalConfigListener();
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070058
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000059 private SubscriberManager subscriberManager;
60 private BandwidthProfileManager bandwidthProfileManager;
61
62 private List<InformationAdapter> internalServices = Lists.newArrayList();
63
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070064 @Activate
65 protected void activate() {
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000066 ApplicationId appId = this.coreService.registerApplication(SADIS_APP);
67 cfgService.addListener(this.cfgListener);
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070068
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000069 subscriberManager = new SubscriberManager(appId);
70 bandwidthProfileManager = new BandwidthProfileManager(appId);
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070071
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000072 internalServices.add(subscriberManager);
73 internalServices.add(bandwidthProfileManager);
74
75 registerAdapters();
76
Elia Battistonc1ec8532022-03-16 17:52:51 +010077 codecService.registerCodec(UniTagInformation.class, new UniTagInformationCodec());
78
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000079 log.info("Started");
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070080 }
81
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000082 private void registerAdapters() {
83 internalServices.forEach(service -> {
84 registerConfigFactory(service.getConfigFactories());
85 registerCodec(service);
86 service.updateConfig(cfgService);
87 });
88 }
89
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070090 @Deactivate
91 protected void deactivate() {
Deepa Vaddireddyfc67bdf2017-09-21 12:50:56 +053092 cfgService.removeListener(cfgListener);
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000093 log.info("Stopped");
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070094 }
95
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000096 private void registerConfigFactory(Set<ConfigFactory> factories) {
97 factories.forEach(cfgService::registerConfigFactory);
98 }
Amit Ghosh38b232a2017-07-23 15:11:56 +010099
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000100 private void registerCodec(InformationAdapter service) {
101 codecService.registerCodec(service.getInformationClass(), service.getCodec());
102 }
103
104
105 @Override
106 public BaseInformationService<SubscriberAndDeviceInformation> getSubscriberInfoService() {
107 return subscriberManager;
108 }
109
110 @Override
111 public BaseInformationService<BandwidthProfileInformation> getBandwidthProfileService() {
112 return bandwidthProfileManager;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -0700113 }
114
115 /**
116 * Listener for SADIS configuration events.
117 */
118 private class InternalConfigListener implements NetworkConfigListener {
119
120 @Override
121 public void event(final NetworkConfigEvent event) {
122
123 if ((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000124 || event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) {
125
126 internalServices.forEach(adapter -> {
127 if (event.configClass().equals(adapter.getConfigClass())) {
128 adapter.updateConfig(cfgService);
129 log.info("Reconfigured");
130 }
131 });
David K. Bainbridgeeda2b052017-07-12 09:41:04 -0700132 }
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000133
134
David K. Bainbridgeeda2b052017-07-12 09:41:04 -0700135 }
136 }
137}
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000138