Merge "Bug: 627 Added RESTConf API Explorer that dynamically generates API documentat...
[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 org.opendaylight.controller.sal.core.api.Broker;
11 import org.opendaylight.controller.sal.core.api.Provider;
12 import org.opendaylight.controller.sal.core.api.model.SchemaService;
13 import org.opendaylight.controller.sal.rest.doc.impl.ApiDocGenerator;
14 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
15 import org.osgi.framework.BundleActivator;
16 import org.osgi.framework.BundleContext;
17 import org.osgi.framework.ServiceReference;
18 import org.osgi.util.tracker.ServiceTracker;
19 import org.osgi.util.tracker.ServiceTrackerCustomizer;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 import java.util.Collection;
24 import java.util.Collections;
25
26
27 public class DocProvider implements BundleActivator,
28                                     ServiceTrackerCustomizer<Broker, Broker>,
29                                     Provider,
30                                     AutoCloseable {
31
32   private Logger _logger = LoggerFactory.getLogger(DocProvider.class);
33
34   private ServiceTracker<Broker, Broker> brokerServiceTracker;
35   private BundleContext bundleContext;
36   private Broker.ProviderSession session;
37
38   @Override
39   public void close() throws Exception {
40     stop(bundleContext);
41   }
42
43   @Override
44   public void onSessionInitiated(Broker.ProviderSession providerSession) {
45     SchemaService schemaService = providerSession.getService(SchemaService.class);
46     ApiDocGenerator.getInstance().setSchemaService(schemaService);
47
48     _logger.debug("Restconf API Explorer started");
49
50   }
51
52   @Override
53   public Collection<ProviderFunctionality> getProviderFunctionality() {
54     return Collections.emptySet();
55   }
56
57   @Override
58   public void start(BundleContext context) throws Exception {
59     bundleContext = context;
60     brokerServiceTracker = new ServiceTracker(context, Broker.class, this);
61     brokerServiceTracker.open();
62   }
63
64   @Override
65   public void stop(BundleContext context) throws Exception {
66     if (brokerServiceTracker != null)
67       brokerServiceTracker.close();
68
69     if (session != null)
70       session.close();
71   }
72
73   @Override
74   public Broker addingService(ServiceReference<Broker> reference) {
75     Broker broker = bundleContext.getService(reference);
76     session = broker.registerProvider(this, bundleContext);
77     return broker;
78   }
79
80   @Override
81   public void modifiedService(ServiceReference<Broker> reference, Broker service) {
82     if (session != null)
83       session.close();
84
85     Broker broker = bundleContext.getService(reference);
86     session = broker.registerProvider(this, bundleContext);
87   }
88
89   @Override
90   public void removedService(ServiceReference<Broker> reference, Broker service) {
91     bundleContext.ungetService(reference);
92   }
93 }