X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-docgen%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frest%2Fdoc%2FDocProvider.java;h=9a1816b90e88f333417a6c62d335c67b7f04739f;hp=9c180014d7f3092d036f213cda23fdc899acb5e2;hb=9bc55ab15fcfbdd395c059dbc5ea7e65200d52b3;hpb=e159106bc148e76fc1e3e3c780bdd740d99e74ed 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 index 9c180014d7..9a1816b90e 100644 --- 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 @@ -7,11 +7,19 @@ */ package org.opendaylight.controller.sal.rest.doc; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + 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.core.api.mount.MountProvisionService; +import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener; import org.opendaylight.controller.sal.rest.doc.impl.ApiDocGenerator; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.controller.sal.rest.doc.mountpoints.MountPointSwagger; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -20,74 +28,85 @@ 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, - Provider, - AutoCloseable { - - private Logger _logger = LoggerFactory.getLogger(DocProvider.class); - - private ServiceTracker 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 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 reference) { - Broker broker = bundleContext.getService(reference); - session = broker.registerProvider(this, bundleContext); - return broker; - } - - @Override - public void modifiedService(ServiceReference reference, Broker service) { - if (session != null) - session.close(); - - Broker broker = bundleContext.getService(reference); - session = broker.registerProvider(this, bundleContext); - } - - @Override - public void removedService(ServiceReference reference, Broker service) { - bundleContext.ungetService(reference); - } +public class DocProvider implements BundleActivator, ServiceTrackerCustomizer, + Provider, AutoCloseable { + + private final Logger _logger = LoggerFactory.getLogger(DocProvider.class); + + private ServiceTracker brokerServiceTracker; + private BundleContext bundleContext; + private Broker.ProviderSession session; + + private final List toClose = new LinkedList<>(); + + @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); + + MountProvisionService mountService = providerSession + .getService(MountProvisionService.class); + ListenerRegistration registration = mountService + .registerProvisionListener(MountPointSwagger.getInstance()); + MountPointSwagger.getInstance().setGlobalSchema(schemaService); + synchronized (toClose) { + toClose.add(registration); + } + MountPointSwagger.getInstance().setMountService(mountService); + + _logger.debug("Restconf API Explorer started"); + } + + @Override + public Collection 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(); + + synchronized (toClose) { + for (AutoCloseable close : toClose) { + close.close(); + } + } + } + + @Override + public Broker addingService(ServiceReference reference) { + Broker broker = bundleContext.getService(reference); + session = broker.registerProvider(this, bundleContext); + return broker; + } + + @Override + public void modifiedService(ServiceReference reference, Broker service) { + if (session != null) + session.close(); + + Broker broker = bundleContext.getService(reference); + session = broker.registerProvider(this, bundleContext); + } + + @Override + public void removedService(ServiceReference reference, Broker service) { + bundleContext.ungetService(reference); + } }