Delete netconf
[controller.git] / opendaylight / md-sal / sal-rest-docgen / src / main / java / org / opendaylight / controller / sal / rest / doc / DocProvider.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, 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.controller.sal.rest.doc;
9
10 import java.util.Collection;
11 import java.util.Collections;
12 import java.util.LinkedList;
13 import java.util.List;
14 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
15 import org.opendaylight.controller.sal.core.api.Broker;
16 import org.opendaylight.controller.sal.core.api.Provider;
17 import org.opendaylight.controller.sal.core.api.model.SchemaService;
18 import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener;
19 import org.opendaylight.controller.sal.rest.doc.impl.ApiDocGenerator;
20 import org.opendaylight.controller.sal.rest.doc.mountpoints.MountPointSwagger;
21 import org.opendaylight.yangtools.concepts.ListenerRegistration;
22 import org.osgi.framework.BundleActivator;
23 import org.osgi.framework.BundleContext;
24 import org.osgi.framework.ServiceReference;
25 import org.osgi.util.tracker.ServiceTracker;
26 import org.osgi.util.tracker.ServiceTrackerCustomizer;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 public class DocProvider implements BundleActivator, ServiceTrackerCustomizer<Broker, Broker>,
31         Provider, AutoCloseable {
32
33     private final Logger _logger = LoggerFactory.getLogger(DocProvider.class);
34
35     private ServiceTracker<Broker, Broker> brokerServiceTracker;
36     private BundleContext bundleContext;
37     private Broker.ProviderSession session;
38
39     private final List<AutoCloseable> toClose = new LinkedList<>();
40
41     @Override
42     public void close() throws Exception {
43         stop(bundleContext);
44     }
45
46     @Override
47     public void onSessionInitiated(Broker.ProviderSession providerSession) {
48         SchemaService schemaService = providerSession.getService(SchemaService.class);
49         ApiDocGenerator.getInstance().setSchemaService(schemaService);
50
51         DOMMountPointService mountService = providerSession
52                 .getService(DOMMountPointService.class);
53         ListenerRegistration<MountProvisionListener> registration = mountService
54                 .registerProvisionListener(MountPointSwagger.getInstance());
55         MountPointSwagger.getInstance().setGlobalSchema(schemaService);
56         synchronized (toClose) {
57             toClose.add(registration);
58         }
59         MountPointSwagger.getInstance().setMountService(mountService);
60
61         _logger.debug("Restconf API Explorer started");
62     }
63
64     @Override
65     public Collection<ProviderFunctionality> getProviderFunctionality() {
66         return Collections.emptySet();
67     }
68
69     @Override
70     public void start(BundleContext context) throws Exception {
71         bundleContext = context;
72         brokerServiceTracker = new ServiceTracker<>(context, Broker.class, this);
73         brokerServiceTracker.open();
74     }
75
76     @Override
77     public void stop(BundleContext context) throws Exception {
78         if (brokerServiceTracker != null) {
79             brokerServiceTracker.close();
80         }
81
82         if (session != null) {
83             session.close();
84         }
85
86         synchronized (toClose) {
87             for (AutoCloseable close : toClose) {
88                 close.close();
89             }
90         }
91     }
92
93     @Override
94     public Broker addingService(ServiceReference<Broker> reference) {
95         Broker broker = bundleContext.getService(reference);
96         session = broker.registerProvider(this, bundleContext);
97         return broker;
98     }
99
100     @Override
101     public void modifiedService(ServiceReference<Broker> reference, Broker service) {
102         if (session != null) {
103             session.close();
104         }
105
106         Broker broker = bundleContext.getService(reference);
107         session = broker.registerProvider(this, bundleContext);
108     }
109
110     @Override
111     public void removedService(ServiceReference<Broker> reference, Broker service) {
112         bundleContext.ungetService(reference);
113     }
114 }