X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2FClassBasedModuleFactory.java;h=170878a6ed4614cef12a833362f91c6fef920d81;hb=0e74e5866c506da072cae3a2897335df7170f958;hp=afc79a5c16b53b60d90b79a2717f498d42904c5b;hpb=9fb64948564e252018f9b1e13e7cea2c92f991aa;p=controller.git diff --git a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ClassBasedModuleFactory.java b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ClassBasedModuleFactory.java index afc79a5c16..170878a6ed 100644 --- a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ClassBasedModuleFactory.java +++ b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/ClassBasedModuleFactory.java @@ -7,22 +7,28 @@ */ package org.opendaylight.controller.config.manager.impl; +import com.google.common.base.Preconditions; import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.util.Arrays; +import java.util.HashSet; import java.util.List; - +import java.util.Set; import org.opendaylight.controller.config.api.DependencyResolver; +import org.opendaylight.controller.config.api.DependencyResolverFactory; import org.opendaylight.controller.config.api.DynamicMBeanWithInstance; +import org.opendaylight.controller.config.api.ModuleIdentifier; import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface; +import org.opendaylight.controller.config.manager.impl.util.InterfacesHelper; import org.opendaylight.controller.config.spi.Module; import org.opendaylight.controller.config.spi.ModuleFactory; - -import com.google.common.base.Preconditions; -import com.google.common.base.Throwables; +import org.osgi.framework.BundleContext; /** - * Creates new Config beans by calling {@link Class#newInstance()} on provided - * config bean class. + * Creates new modules by reflection. Provided class must have this constructor: + * ctor(DynamicMBeanWithInstance.class, ModuleIdentifier.class). + * When reconfiguring, both parameters will be non null. When creating new + * instance first parameter will be null. * */ public class ClassBasedModuleFactory implements ModuleFactory { @@ -49,30 +55,34 @@ public class ClassBasedModuleFactory implements ModuleFactory { @Override public Module createModule(String instanceName, - DependencyResolver dependencyResolver, DynamicMBeanWithInstance old) + DependencyResolver dependencyResolver, DynamicMBeanWithInstance old, BundleContext bundleContext) throws Exception { - Preconditions.checkNotNull(dependencyResolver); Preconditions.checkNotNull(old); + return constructModule(instanceName, dependencyResolver, old); + } + + private Module constructModule(String instanceName, DependencyResolver dependencyResolver, DynamicMBeanWithInstance old) throws InstantiationException, IllegalAccessException, InvocationTargetException { + Preconditions.checkNotNull(dependencyResolver); + ModuleIdentifier moduleIdentifier = new ModuleIdentifier(implementationName, instanceName); Constructor declaredConstructor; try { - declaredConstructor = configBeanClass - .getDeclaredConstructor(DynamicMBeanWithInstance.class); + declaredConstructor = configBeanClass.getDeclaredConstructor(DynamicMBeanWithInstance.class, ModuleIdentifier.class); } catch (NoSuchMethodException e) { throw new IllegalStateException( "Did not find constructor with parameters (DynamicMBeanWithInstance) in " + configBeanClass, e); } Preconditions.checkState(declaredConstructor != null); - return declaredConstructor.newInstance(old); + return declaredConstructor.newInstance(old, moduleIdentifier); } @Override public Module createModule(String instanceName, - DependencyResolver dependencyResolver) { + DependencyResolver dependencyResolver, BundleContext bundleContext) { try { - return configBeanClass.newInstance(); - } catch (Exception e) { - throw Throwables.propagate(e); + return constructModule(instanceName, dependencyResolver, null); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); } } @@ -92,4 +102,14 @@ public class ClassBasedModuleFactory implements ModuleFactory { } return false; } + + @Override + public Set getDefaultModules(DependencyResolverFactory dependencyResolverFactory, BundleContext bundleContext) { + return new HashSet<>(); + } + + @Override + public Set> getImplementedServiceIntefaces() { + return InterfacesHelper.getAllAbstractServiceClasses(configBeanClass); + } }