X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=test-common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftest%2FDataStoreContextImpl.java;h=6b429fd09edb8e841ea3c1ab39bceaf38d160f23;hb=refs%2Fchanges%2F46%2F100646%2F27;hp=0ae99c5ebd1361c1235a110a00d8be768c9f30e0;hpb=b6ad4ae8cec0ad9e3fa35b1e6e3153f045a97bf1;p=transportpce.git diff --git a/test-common/src/main/java/org/opendaylight/transportpce/test/DataStoreContextImpl.java b/test-common/src/main/java/org/opendaylight/transportpce/test/DataStoreContextImpl.java index 0ae99c5eb..6b429fd09 100644 --- a/test-common/src/main/java/org/opendaylight/transportpce/test/DataStoreContextImpl.java +++ b/test-common/src/main/java/org/opendaylight/transportpce/test/DataStoreContextImpl.java @@ -7,123 +7,105 @@ */ package org.opendaylight.transportpce.test; -import com.google.common.collect.ClassToInstanceMap; -import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.ImmutableMap; -import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; -import java.util.LinkedList; -import java.util.List; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import java.util.HashSet; import java.util.Map; import java.util.ServiceLoader; +import java.util.Set; import java.util.concurrent.Executors; -import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.NotificationPublishService; import org.opendaylight.mdsal.binding.api.NotificationService; -import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext; -import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMDataBrokerAdapter; -import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMNotificationPublishServiceAdapter; -import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMNotificationServiceAdapter; +import org.opendaylight.mdsal.binding.dom.adapter.BindingAdapterFactory; import org.opendaylight.mdsal.binding.dom.adapter.ConstantAdapterContext; -import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; +import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; +import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; -import org.opendaylight.mdsal.dom.api.DOMSchemaServiceExtension; import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter; import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker; +import org.opendaylight.mdsal.dom.spi.FixedDOMSchemaService; import org.opendaylight.mdsal.dom.spi.store.DOMStore; -import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.util.ListenerRegistry; +import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStoreFactory; import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; -import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class DataStoreContextImpl implements DataStoreContext { - private static final Logger LOG = LoggerFactory.getLogger(DataStoreContextImpl.class); - private final Map datastores; - private final SchemaContextHolder mockedSchemaContext; private final DOMNotificationRouter domNotificationRouter; private final DOMDataBroker domDataBroker; private final DataBroker dataBroker; private final NotificationService notificationService; private final NotificationPublishService notificationPublishService; + private EffectiveModelContext schemaCtx; + private BindingDOMCodecServices bindingDOMCodecServices; + private BindingAdapterFactory adapterFactory ; - + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR") public DataStoreContextImpl() { - this.mockedSchemaContext = new SchemaContextHolder(); - this.datastores = createDatastores(); - this.domNotificationRouter = DOMNotificationRouter.create(16); - this.domDataBroker = createDOMDataBroker(); - this.dataBroker = createDataBroker(); - this.notificationService = createNotificationService(); - this.notificationPublishService = createNotificationPublishService(); - this.mockedSchemaContext.listeners.streamListeners() - .forEach(l -> l.onModelContextUpdated(this.mockedSchemaContext.schemaContext)); + Set moduleInfos = new HashSet<>(); + ServiceLoader yangProviderLoader = ServiceLoader.load(YangModelBindingProvider.class); + for (YangModelBindingProvider yangModelBindingProvider : yangProviderLoader) { + moduleInfos.add(yangModelBindingProvider.getModuleInfo()); + } + schemaCtx = BindingRuntimeHelpers.createEffectiveModel(moduleInfos); + bindingDOMCodecServices = new BindingCodecContext(BindingRuntimeHelpers.createRuntimeContext()); + adapterFactory = new BindingAdapterFactory(new ConstantAdapterContext(bindingDOMCodecServices)); + domNotificationRouter = new DOMNotificationRouter(16); + datastores = createDatastores(); + domDataBroker = createDOMDataBroker(); + dataBroker = createDataBroker(); + notificationService = createNotificationService(); + notificationPublishService = createNotificationPublishService(); } @Override public DataBroker getDataBroker() { - return this.dataBroker; + return dataBroker; } @Override public DOMDataBroker getDOMDataBroker() { - return this.domDataBroker; + return domDataBroker; } @Override - public NotificationService createNotificationService() { - return new BindingDOMNotificationServiceAdapter(this.mockedSchemaContext.adapterContext, - this.domNotificationRouter); + public final NotificationService createNotificationService() { + return adapterFactory.createNotificationService(domNotificationRouter); } @Override - public NotificationPublishService createNotificationPublishService() { - return new BindingDOMNotificationPublishServiceAdapter(this.mockedSchemaContext.adapterContext, - this.domNotificationRouter); + public final NotificationPublishService createNotificationPublishService() { + return adapterFactory.createNotificationPublishService(domNotificationRouter); } @Override public EffectiveModelContext getSchemaContext() { - return this.mockedSchemaContext.schemaContext; - } - - @Override - public BindingNormalizedNodeSerializer getBindingToNormalizedNodeCodec() { - return this.mockedSchemaContext.adapterContext.currentSerializer(); + return schemaCtx; } @Override public NotificationService getNotificationService() { - return this.notificationService; + return notificationService; } @Override public NotificationPublishService getNotificationPublishService() { - return this.notificationPublishService; + return notificationPublishService; } private DOMDataBroker createDOMDataBroker() { - return new SerializedDOMDataBroker(this.datastores, + return new SerializedDOMDataBroker(datastores, MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor())); } - private ListeningExecutorService getDataTreeChangeListenerExecutor() { - return MoreExecutors.newDirectExecutorService(); - } - private DataBroker createDataBroker() { - return new BindingDOMDataBrokerAdapter(this.mockedSchemaContext.adapterContext, getDOMDataBroker()); + return adapterFactory.createDataBroker(getDOMDataBroker()); } private Map createDatastores() { @@ -133,68 +115,19 @@ public class DataStoreContextImpl implements DataStoreContext { } private DOMStore createConfigurationDatastore() { - final InMemoryDOMDataStore store = new InMemoryDOMDataStore("CFG", getDataTreeChangeListenerExecutor()); - this.mockedSchemaContext.registerSchemaContextListener(store); - return store; + return InMemoryDOMDataStoreFactory.create("CFG", + FixedDOMSchemaService.of(bindingDOMCodecServices.getRuntimeContext())); } private DOMStore createOperationalDatastore() { - final InMemoryDOMDataStore store = new InMemoryDOMDataStore("OPER", getDataTreeChangeListenerExecutor()); - this.mockedSchemaContext.registerSchemaContextListener(store); - return store; + return InMemoryDOMDataStoreFactory.create("OPER", + FixedDOMSchemaService.of(bindingDOMCodecServices.getRuntimeContext())); } - private static final class SchemaContextHolder implements DOMSchemaService, EffectiveModelContextProvider { - - private final EffectiveModelContext schemaContext; - private final ListenerRegistry listeners; - private final AdapterContext adapterContext; - - private SchemaContextHolder() { - List moduleInfos = loadModuleInfos(); - this.schemaContext = BindingRuntimeHelpers.createEffectiveModel(moduleInfos); - this.listeners = ListenerRegistry.create(); - this.adapterContext = new ConstantAdapterContext(); - } - - @Override - public EffectiveModelContext getGlobalContext() { - return this.schemaContext; - } - - - /** - * Loads all {@link YangModelBindingProvider} on the classpath. - * - * @return list of known {@link YangModuleInfo} - */ - private List loadModuleInfos() { - List moduleInfos = new LinkedList<>(); - ServiceLoader yangProviderLoader = - ServiceLoader.load(YangModelBindingProvider.class); - for (YangModelBindingProvider yangModelBindingProvider : yangProviderLoader) { - moduleInfos.add(yangModelBindingProvider.getModuleInfo()); - LOG.debug("Adding [{}] module into known modules", yangModelBindingProvider.getModuleInfo()); - } - return moduleInfos; - } - - @Override - public ListenerRegistration registerSchemaContextListener( - EffectiveModelContextListener listener) { - return this.listeners.register(listener); - } - - @Override - public @NonNull EffectiveModelContext getEffectiveModelContext() { - return this.schemaContext; - } - - @Override - public @NonNull ClassToInstanceMap getExtensions() { - return ImmutableClassToInstanceMap.of(); - } + @Override + public BindingDOMCodecServices getBindingDOMCodecServices() { + return bindingDOMCodecServices; + } - } }