X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2FDataStoreContextImpl.java;h=c5f5aa00672b13d00a7716d68afb341d9119cd24;hb=20142c021b939f7c4386f4d53d98c87d8811b1b8;hp=56f6099d5a604e75230ad8585f8587d8891c5199;hpb=9e8aacd2d225b368295343fa49c4b22b834d7ddf;p=transportpce.git diff --git a/common/src/main/java/org/opendaylight/transportpce/common/DataStoreContextImpl.java b/common/src/main/java/org/opendaylight/transportpce/common/DataStoreContextImpl.java index 56f6099d5..c5f5aa006 100644 --- a/common/src/main/java/org/opendaylight/transportpce/common/DataStoreContextImpl.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/DataStoreContextImpl.java @@ -8,27 +8,29 @@ package org.opendaylight.transportpce.common; 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 java.util.Map; -import java.util.Optional; import java.util.ServiceLoader; import java.util.concurrent.Executors; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.binding.runtime.api.BindingRuntimeContext; +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.BindingToNormalizedNodeCodec; -import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; +import org.opendaylight.mdsal.binding.dom.adapter.ConstantAdapterContext; +import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMSchemaService; @@ -41,9 +43,9 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.util.ListenerRegistry; import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; -import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; +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; @@ -59,22 +61,17 @@ public class DataStoreContextImpl implements DataStoreContext { private final NotificationService notificationService; private final NotificationPublishService notificationPublishService; - public DataStoreContextImpl() { - this(false); - } - public DataStoreContextImpl(boolean fromClasspath) { - this.mockedSchemaContext = new SchemaContextHolder(fromClasspath); + 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(); - for (ListenerRegistration listener : - this.mockedSchemaContext.listeners.getRegistrations()) { - listener.getInstance().onGlobalContextUpdated(this.mockedSchemaContext.schemaContext); - } + this.mockedSchemaContext.listeners.streamListeners() + .forEach(l -> l.onModelContextUpdated(this.mockedSchemaContext.schemaContext)); } @Override @@ -89,23 +86,23 @@ public class DataStoreContextImpl implements DataStoreContext { @Override public NotificationService createNotificationService() { - return new BindingDOMNotificationServiceAdapter(this.domNotificationRouter, - this.mockedSchemaContext.bindingStreamCodecs); + return new BindingDOMNotificationServiceAdapter(this.mockedSchemaContext.adapterContext, + this.domNotificationRouter); } @Override public NotificationPublishService createNotificationPublishService() { - return new BindingDOMNotificationPublishServiceAdapter(this.domNotificationRouter, - this.mockedSchemaContext.bindingToNormalized); + return new BindingDOMNotificationPublishServiceAdapter(this.mockedSchemaContext.adapterContext, + this.domNotificationRouter); } @Override - public SchemaContext getSchemaContext() { + public EffectiveModelContext getSchemaContext() { return this.mockedSchemaContext.schemaContext; } @Override - public BindingNormalizedNodeCodecRegistry getBindingToNormalizedNodeCodec() { + public BindingNormalizedNodeSerializer getBindingToNormalizedNodeCodec() { return this.mockedSchemaContext.bindingStreamCodecs; } @@ -129,7 +126,7 @@ public class DataStoreContextImpl implements DataStoreContext { } private DataBroker createDataBroker() { - return new BindingDOMDataBrokerAdapter(getDOMDataBroker(), this.mockedSchemaContext.bindingToNormalized); + return new BindingDOMDataBrokerAdapter(this.mockedSchemaContext.adapterContext, getDOMDataBroker()); } private Map createDatastores() { @@ -150,62 +147,30 @@ public class DataStoreContextImpl implements DataStoreContext { return store; } - private final class SchemaContextHolder implements DOMSchemaService, SchemaContextProvider { + private static final class SchemaContextHolder implements DOMSchemaService, EffectiveModelContextProvider { - private final SchemaContext schemaContext; - private final ListenerRegistry listeners; - private final BindingNormalizedNodeCodecRegistry bindingStreamCodecs; - private final BindingToNormalizedNodeCodec bindingToNormalized; - private final ModuleInfoBackedContext moduleInfoBackedCntxt; + private final EffectiveModelContext schemaContext; + private final ListenerRegistry listeners; + private final BindingNormalizedNodeSerializer bindingStreamCodecs; + private final CurrentAdapterSerializer bindingToNormalized; + private final AdapterContext adapterContext; - private SchemaContextHolder(boolean fromClasspath) { + private SchemaContextHolder() { List moduleInfos = loadModuleInfos(); - this.moduleInfoBackedCntxt = ModuleInfoBackedContext.create(); - this.schemaContext = getSchemaContext(moduleInfos); + this.schemaContext = BindingRuntimeHelpers.createEffectiveModel(moduleInfos); this.listeners = ListenerRegistry.create(); - this.bindingStreamCodecs = createBindingRegistry(); - GeneratedClassLoadingStrategy loading = GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy(); - this.bindingToNormalized = new BindingToNormalizedNodeCodec(loading, this.bindingStreamCodecs); - registerSchemaContextListener(this.bindingToNormalized); - } - - @Override - public SchemaContext getSchemaContext() { - return this.schemaContext; - } - - /** - * Get the schemacontext from loaded modules on classpath. - * - * @param moduleInfos a list of Yang module Infos - * @return SchemaContext a schema context - */ - private SchemaContext getSchemaContext(List moduleInfos) { - this.moduleInfoBackedCntxt.addModuleInfos(moduleInfos); - Optional tryToCreateSchemaContext = - this.moduleInfoBackedCntxt.tryToCreateSchemaContext(); - if (!tryToCreateSchemaContext.isPresent()) { - LOG.error("Could not create the initial schema context. Schema context is empty"); - throw new IllegalStateException(); - } - return tryToCreateSchemaContext.get(); - } - - @Override - public SchemaContext getGlobalContext() { - return this.schemaContext; + BindingRuntimeContext bindingContext = + BindingRuntimeHelpers.createRuntimeContext(); + this.bindingStreamCodecs = new BindingCodecContext(bindingContext); + this.bindingToNormalized = new CurrentAdapterSerializer(new BindingCodecContext(bindingContext)); + adapterContext = new ConstantAdapterContext(this.bindingToNormalized); } @Override - public SchemaContext getSessionContext() { + public EffectiveModelContext getGlobalContext() { return this.schemaContext; } - @Override - public ListenerRegistration registerSchemaContextListener( - SchemaContextListener listener) { - return this.listeners.register(listener); - } /** * Loads all {@link YangModelBindingProvider} on the classpath. @@ -223,26 +188,22 @@ public class DataStoreContextImpl implements DataStoreContext { return moduleInfos; } - /** - * Creates binding registry. - * - * @return BindingNormalizedNodeCodecRegistry the resulting binding registry - */ - private BindingNormalizedNodeCodecRegistry createBindingRegistry() { - BindingRuntimeContext bindingContext = - BindingRuntimeContext.create(this.moduleInfoBackedCntxt, this.schemaContext); - BindingNormalizedNodeCodecRegistry bindingNormalizedNodeCodecRegistry = - new BindingNormalizedNodeCodecRegistry(bindingContext); - return bindingNormalizedNodeCodecRegistry; + @Override + public ListenerRegistration registerSchemaContextListener( + EffectiveModelContextListener listener) { + return this.listeners.register(listener); + } + + @Override + public @NonNull EffectiveModelContext getEffectiveModelContext() { + return this.schemaContext; } - /* (non-Javadoc) - * @see org.opendaylight.mdsal.dom.api.DOMExtensibleService#getExtensions() - */ @Override public @NonNull ClassToInstanceMap getExtensions() { - // TODO Auto-generated method stub - return null; + return ImmutableClassToInstanceMap.of(); } + + } }