X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2Fmapping%2FRefreshingSCPModuleInfoRegistry.java;h=90b33576583a5a121f1fa35f827fe3f292d3f5d3;hp=e51cf8d4c5edb8b98e3a032a5db950277f1cecb2;hb=cd50f92c60580b546a696aab7c3ff4fbf3f9a5f0;hpb=57f507d105b1daa9aa9663ca5ec6d258251fca2e diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java index e51cf8d4c5..90b3357658 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java @@ -8,31 +8,43 @@ package org.opendaylight.controller.config.manager.impl.osgi.mapping; +import java.util.Hashtable; import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy; import org.opendaylight.yangtools.sal.binding.generator.api.ModuleInfoRegistry; +import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; -import java.util.Hashtable; - /** * Update SchemaContext service in Service Registry each time new YangModuleInfo is added or removed. */ public class RefreshingSCPModuleInfoRegistry implements ModuleInfoRegistry, AutoCloseable { private final ModuleInfoRegistry moduleInfoRegistry; + private final SchemaContextProvider schemaContextProvider; + private final BindingContextProvider bindingContextProvider; + private final ClassLoadingStrategy classLoadingStrat; + private final ServiceRegistration osgiReg; - public RefreshingSCPModuleInfoRegistry(ModuleInfoRegistry moduleInfoRegistry, - SchemaContextProvider schemaContextProvider, BundleContext bundleContext) { + public RefreshingSCPModuleInfoRegistry(final ModuleInfoRegistry moduleInfoRegistry, + final SchemaContextProvider schemaContextProvider, final ClassLoadingStrategy classLoadingStrat, final BindingContextProvider bindingContextProvider, final BundleContext bundleContext) { this.moduleInfoRegistry = moduleInfoRegistry; + this.schemaContextProvider = schemaContextProvider; + this.classLoadingStrat = classLoadingStrat; + this.bindingContextProvider = bindingContextProvider; osgiReg = bundleContext.registerService(SchemaContextProvider.class, schemaContextProvider, new Hashtable()); } private void updateService() { - osgiReg.setProperties(null); // send modifiedService event + bindingContextProvider.update(classLoadingStrat, schemaContextProvider); + osgiReg.setProperties(new Hashtable() {{ + put(BindingRuntimeContext.class.getName(), bindingContextProvider.getBindingContext()); + } + }); // send modifiedService event } @Override @@ -43,12 +55,12 @@ public class RefreshingSCPModuleInfoRegistry implements ModuleInfoRegistry, Auto return wrapper; } - @Override - public void close() { + public void close() throws Exception { osgiReg.unregister(); } + private class ObjectRegistrationWrapper implements ObjectRegistration { private final ObjectRegistration inner;