package org.opendaylight.controller.sal.dom.broker;
import static com.google.common.base.Preconditions.checkState;
-
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
-
import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaContextProvider;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.concepts.util.ListenerRegistry;
+import org.opendaylight.yangtools.util.ListenerRegistry;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
-import org.opendaylight.yangtools.yang.parser.impl.util.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
+import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-
public class GlobalBundleScanningSchemaServiceImpl implements SchemaContextProvider, SchemaService, ServiceTrackerCustomizer<SchemaContextListener, SchemaContextListener>, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(GlobalBundleScanningSchemaServiceImpl.class);
private final ListenerRegistry<SchemaContextListener> listeners = new ListenerRegistry<>();
- private final URLSchemaContextResolver contextResolver = new URLSchemaContextResolver();
+ private final URLSchemaContextResolver contextResolver = URLSchemaContextResolver.create("global-bundle");
private final BundleScanner scanner = new BundleScanner();
private final BundleContext context;
@VisibleForTesting
public static synchronized void destroyInstance() {
- instance = null;
+ try {
+ instance.close();
+ } finally {
+ instance = null;
+ }
}
public BundleContext getContext() {
}
@Override
- public void close() throws Exception {
+ public void close() {
if (bundleTracker != null) {
bundleTracker.close();
}
if (listenerTracker != null) {
listenerTracker.close();
}
- // FIXME: Add listeners.close();
- }
+ for (ListenerRegistration<SchemaContextListener> l : listeners.getListeners()) {
+ l.close();
+ }
+ }
private synchronized void updateContext(final SchemaContext snapshot) {
Object[] services = listenerTracker.getServices();
if (starting) {
return;
}
- Optional<SchemaContext> schema = contextResolver.tryToUpdateSchemaContext();
+ Optional<SchemaContext> schema = contextResolver.getSchemaContext();
if(schema.isPresent()) {
updateContext(schema.get());
}