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=934412d95af1dce17b281e1b6c6e0f1e0a380bb7;hb=c222e37f2a0f0f3f6266242fbea2d3b018f4e6e3;hpb=c2e0532c07f5e52753be638d1e7c629369ccdd20 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 934412d95a..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 @@ -9,11 +9,17 @@ 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.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; @@ -22,24 +28,37 @@ import org.osgi.util.tracker.ServiceTrackerCustomizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class DocProvider implements BundleActivator, ServiceTrackerCustomizer, Provider, AutoCloseable { +public class DocProvider implements BundleActivator, ServiceTrackerCustomizer, + Provider, AutoCloseable { - private static final Logger _logger = LoggerFactory.getLogger(DocProvider.class); + 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(final Broker.ProviderSession providerSession) { + 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"); } @@ -49,42 +68,45 @@ public class DocProvider implements BundleActivator, ServiceTrackerCustomizer
(context, Broker.class, this); + brokerServiceTracker = new ServiceTracker(context, Broker.class, this); brokerServiceTracker.open(); } @Override - public void stop(final BundleContext context) throws Exception { - if (brokerServiceTracker != null) { + public void stop(BundleContext context) throws Exception { + if (brokerServiceTracker != null) brokerServiceTracker.close(); - } - if (session != null) { + if (session != null) session.close(); + + synchronized (toClose) { + for (AutoCloseable close : toClose) { + close.close(); + } } } @Override - public Broker addingService(final ServiceReference reference) { + public Broker addingService(ServiceReference reference) { Broker broker = bundleContext.getService(reference); session = broker.registerProvider(this, bundleContext); return broker; } @Override - public void modifiedService(final ServiceReference reference, final Broker service) { - if (session != null) { + 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(final ServiceReference reference, final Broker service) { + public void removedService(ServiceReference reference, Broker service) { bundleContext.ungetService(reference); } }