blob: b67bfbd19a78226cb089de5832807b19bf12604b [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;
Carmelo Cascone34059852019-09-30 19:33:00 -070030import org.osgi.service.component.annotations.Activate;
31import org.osgi.service.component.annotations.Component;
32import org.osgi.service.component.annotations.Deactivate;
33import org.osgi.service.component.annotations.Reference;
34import org.osgi.service.component.annotations.ReferenceCardinality;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070035import org.slf4j.Logger;
36import org.slf4j.LoggerFactory;
37
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000038import java.util.List;
39import java.util.Set;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070040
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070041@Component(immediate = true)
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000042public class SadisManager implements SadisService {
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070043 private final Logger log = LoggerFactory.getLogger(this.getClass());
44
45 private static final String SADIS_APP = "org.opencord.sadis";
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070046
Carmelo Cascone34059852019-09-30 19:33:00 -070047 @Reference(cardinality = ReferenceCardinality.MANDATORY)
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070048 protected CoreService coreService;
49
Carmelo Cascone34059852019-09-30 19:33:00 -070050 @Reference(cardinality = ReferenceCardinality.MANDATORY)
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070051 protected NetworkConfigRegistry cfgService;
52
Carmelo Cascone34059852019-09-30 19:33:00 -070053 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Deepa vaddireddy386f38b2017-08-02 06:24:01 +000054 protected CodecService codecService;
55
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000056 private final InternalConfigListener cfgListener = new InternalConfigListener();
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070057
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000058 private SubscriberManager subscriberManager;
59 private BandwidthProfileManager bandwidthProfileManager;
60
61 private List<InformationAdapter> internalServices = Lists.newArrayList();
62
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070063 @Activate
64 protected void activate() {
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000065 ApplicationId appId = this.coreService.registerApplication(SADIS_APP);
66 cfgService.addListener(this.cfgListener);
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070067
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000068 subscriberManager = new SubscriberManager(appId);
69 bandwidthProfileManager = new BandwidthProfileManager(appId);
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070070
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000071 internalServices.add(subscriberManager);
72 internalServices.add(bandwidthProfileManager);
73
74 registerAdapters();
75
76 log.info("Started");
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070077 }
78
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000079 private void registerAdapters() {
80 internalServices.forEach(service -> {
81 registerConfigFactory(service.getConfigFactories());
82 registerCodec(service);
83 service.updateConfig(cfgService);
84 });
85 }
86
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070087 @Deactivate
88 protected void deactivate() {
Deepa Vaddireddyfc67bdf2017-09-21 12:50:56 +053089 cfgService.removeListener(cfgListener);
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000090 log.info("Stopped");
David K. Bainbridgeeda2b052017-07-12 09:41:04 -070091 }
92
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000093 private void registerConfigFactory(Set<ConfigFactory> factories) {
94 factories.forEach(cfgService::registerConfigFactory);
95 }
Amit Ghosh38b232a2017-07-23 15:11:56 +010096
Gamze Abaka1e5ccf52018-07-02 11:59:03 +000097 private void registerCodec(InformationAdapter service) {
98 codecService.registerCodec(service.getInformationClass(), service.getCodec());
99 }
100
101
102 @Override
103 public BaseInformationService<SubscriberAndDeviceInformation> getSubscriberInfoService() {
104 return subscriberManager;
105 }
106
107 @Override
108 public BaseInformationService<BandwidthProfileInformation> getBandwidthProfileService() {
109 return bandwidthProfileManager;
David K. Bainbridgeeda2b052017-07-12 09:41:04 -0700110 }
111
112 /**
113 * Listener for SADIS configuration events.
114 */
115 private class InternalConfigListener implements NetworkConfigListener {
116
117 @Override
118 public void event(final NetworkConfigEvent event) {
119
120 if ((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000121 || event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) {
122
123 internalServices.forEach(adapter -> {
124 if (event.configClass().equals(adapter.getConfigClass())) {
125 adapter.updateConfig(cfgService);
126 log.info("Reconfigured");
127 }
128 });
David K. Bainbridgeeda2b052017-07-12 09:41:04 -0700129 }
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000130
131
David K. Bainbridgeeda2b052017-07-12 09:41:04 -0700132 }
133 }
134}
Gamze Abaka1e5ccf52018-07-02 11:59:03 +0000135