954644737a7e3fb4678aa81a82f21ce2a4333e7e
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / main / java / org / opendaylight / controller / sal / rest / impl / RestconfProvider.java
1 package org.opendaylight.controller.sal.rest.impl;
2
3 import java.util.Collection;
4 import java.util.Collections;
5
6 import org.opendaylight.controller.sal.core.api.Broker;
7 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
8 import org.opendaylight.controller.sal.core.api.Provider;
9 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
10 import org.opendaylight.controller.sal.core.api.model.SchemaService;
11 import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener;
12 import org.opendaylight.controller.sal.core.api.mount.MountService;
13 import org.opendaylight.controller.sal.restconf.impl.BrokerFacade;
14 import org.opendaylight.controller.sal.restconf.impl.ControllerContext;
15 import org.opendaylight.yangtools.concepts.ListenerRegistration;
16 import org.osgi.framework.BundleActivator;
17 import org.osgi.framework.BundleContext;
18 import org.osgi.framework.ServiceReference;
19 import org.osgi.util.tracker.ServiceTracker;
20 import org.osgi.util.tracker.ServiceTrackerCustomizer;
21
22 public class RestconfProvider implements BundleActivator, Provider, ServiceTrackerCustomizer<Broker, Broker> {
23
24     public final static String NOT_INITALIZED_MSG = "Restconf is not initialized yet. Please try again later";
25
26     private ListenerRegistration<SchemaServiceListener> listenerRegistration;
27     private ServiceTracker<Broker, Broker> brokerServiceTrancker;
28     private BundleContext bundleContext;
29     private ProviderSession session;
30
31     @Override
32     public void onSessionInitiated(ProviderSession session) {
33         DataBrokerService dataService = session.getService(DataBrokerService.class);
34
35         BrokerFacade.getInstance().setContext(session);
36         BrokerFacade.getInstance().setDataService(dataService);
37
38         SchemaService schemaService = session.getService(SchemaService.class);
39         listenerRegistration = schemaService.registerSchemaServiceListener(ControllerContext.getInstance());
40         ControllerContext.getInstance().setSchemas(schemaService.getGlobalContext());
41         ControllerContext.getInstance().setMountService(session.getService(MountService.class));
42     }
43
44     @Override
45     public void start(BundleContext context) throws Exception {
46         bundleContext = context;
47         brokerServiceTrancker = new ServiceTracker<>(context, Broker.class, this);
48         brokerServiceTrancker.open();
49     }
50
51     @Override
52     public void stop(BundleContext context) {
53         if (listenerRegistration != null) {
54             try {
55                 listenerRegistration.close();
56             } catch (Exception e) {
57                 e.printStackTrace();
58             }
59         }
60         session.close();
61         brokerServiceTrancker.close();
62     }
63
64     @Override
65     public Collection<ProviderFunctionality> getProviderFunctionality() {
66         return Collections.emptySet();
67     }
68
69     @Override
70     public Broker addingService(ServiceReference<Broker> reference) {
71         Broker broker = bundleContext.getService(reference);
72         broker.registerProvider(this, bundleContext);
73         return broker;
74     }
75
76     @Override
77     public void modifiedService(ServiceReference<Broker> reference, Broker service) {
78         // NOOP
79     }
80
81     @Override
82     public void removedService(ServiceReference<Broker> reference, Broker service) {
83         bundleContext.ungetService(reference);
84         BrokerFacade.getInstance().setContext(null);
85         BrokerFacade.getInstance().setDataService(null);
86         ControllerContext.getInstance().setSchemas(null);
87     }
88 }