*/
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 java.util.Map;
import java.util.ServiceLoader;
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.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<LogicalDatastoreType, DOMStore> 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 ;
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));
+ List<YangModuleInfo> moduleInfos = new LinkedList<>();
+ ServiceLoader<YangModelBindingProvider> 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 = DOMNotificationRouter.create(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);
+ return adapterFactory.createNotificationService(domNotificationRouter);
}
@Override
public NotificationPublishService createNotificationPublishService() {
- return new BindingDOMNotificationPublishServiceAdapter(this.mockedSchemaContext.adapterContext,
- this.domNotificationRouter);
+ return adapterFactory.createNotificationPublishService(domNotificationRouter);
}
@Override
public EffectiveModelContext getSchemaContext() {
- return this.mockedSchemaContext.schemaContext;
+ return schemaCtx;
}
@Override
public BindingNormalizedNodeSerializer getBindingToNormalizedNodeCodec() {
- return this.mockedSchemaContext.adapterContext.currentSerializer();
+ return bindingDOMCodecServices;
}
@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<LogicalDatastoreType, DOMStore> createDatastores() {
}
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<EffectiveModelContextListener> listeners;
- private final AdapterContext adapterContext;
-
- private SchemaContextHolder() {
- List<YangModuleInfo> 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<YangModuleInfo> loadModuleInfos() {
- List<YangModuleInfo> moduleInfos = new LinkedList<>();
- ServiceLoader<YangModelBindingProvider> 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<EffectiveModelContextListener> registerSchemaContextListener(
- EffectiveModelContextListener listener) {
- return this.listeners.register(listener);
- }
-
- @Override
- public @NonNull EffectiveModelContext getEffectiveModelContext() {
- return this.schemaContext;
- }
-
- @Override
- public @NonNull ClassToInstanceMap<DOMSchemaServiceExtension> getExtensions() {
- return ImmutableClassToInstanceMap.of();
- }
-
-
- }
}