Bug: 627
[controller.git] / opendaylight / md-sal / sal-rest-docgen / src / main / java / org / opendaylight / controller / sal / rest / doc / DocProvider.java
diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/DocProvider.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/DocProvider.java
new file mode 100644 (file)
index 0000000..9c18001
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.sal.rest.doc;
+
+import org.opendaylight.controller.sal.core.api.Broker;
+import org.opendaylight.controller.sal.core.api.Provider;
+import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.controller.sal.rest.doc.impl.ApiDocGenerator;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+import java.util.Collections;
+
+
+public class DocProvider implements BundleActivator,
+                                    ServiceTrackerCustomizer<Broker, Broker>,
+                                    Provider,
+                                    AutoCloseable {
+
+  private Logger _logger = LoggerFactory.getLogger(DocProvider.class);
+
+  private ServiceTracker<Broker, Broker> brokerServiceTracker;
+  private BundleContext bundleContext;
+  private Broker.ProviderSession session;
+
+  @Override
+  public void close() throws Exception {
+    stop(bundleContext);
+  }
+
+  @Override
+  public void onSessionInitiated(Broker.ProviderSession providerSession) {
+    SchemaService schemaService = providerSession.getService(SchemaService.class);
+    ApiDocGenerator.getInstance().setSchemaService(schemaService);
+
+    _logger.debug("Restconf API Explorer started");
+
+  }
+
+  @Override
+  public Collection<ProviderFunctionality> getProviderFunctionality() {
+    return Collections.emptySet();
+  }
+
+  @Override
+  public void start(BundleContext context) throws Exception {
+    bundleContext = context;
+    brokerServiceTracker = new ServiceTracker(context, Broker.class, this);
+    brokerServiceTracker.open();
+  }
+
+  @Override
+  public void stop(BundleContext context) throws Exception {
+    if (brokerServiceTracker != null)
+      brokerServiceTracker.close();
+
+    if (session != null)
+      session.close();
+  }
+
+  @Override
+  public Broker addingService(ServiceReference<Broker> reference) {
+    Broker broker = bundleContext.getService(reference);
+    session = broker.registerProvider(this, bundleContext);
+    return broker;
+  }
+
+  @Override
+  public void modifiedService(ServiceReference<Broker> reference, Broker service) {
+    if (session != null)
+      session.close();
+
+    Broker broker = bundleContext.getService(reference);
+    session = broker.registerProvider(this, bundleContext);
+  }
+
+  @Override
+  public void removedService(ServiceReference<Broker> reference, Broker service) {
+    bundleContext.ungetService(reference);
+  }
+}