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;
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;
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<? extends SchemaContextListener> listener :
- this.mockedSchemaContext.listeners.getRegistrations()) {
- listener.getInstance().onGlobalContextUpdated(this.mockedSchemaContext.schemaContext);
- }
+ this.mockedSchemaContext.listeners.streamListeners()
+ .forEach(l -> l.onModelContextUpdated(this.mockedSchemaContext.schemaContext));
}
@Override
@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;
}
}
private DataBroker createDataBroker() {
- return new BindingDOMDataBrokerAdapter(getDOMDataBroker(), this.mockedSchemaContext.bindingToNormalized);
+ return new BindingDOMDataBrokerAdapter(this.mockedSchemaContext.adapterContext, getDOMDataBroker());
}
private Map<LogicalDatastoreType, DOMStore> createDatastores() {
return store;
}
- private static final class SchemaContextHolder implements DOMSchemaService, SchemaContextProvider {
+ private static final class SchemaContextHolder implements DOMSchemaService, EffectiveModelContextProvider {
- private final SchemaContext schemaContext;
- private final ListenerRegistry<SchemaContextListener> listeners;
- private final BindingNormalizedNodeCodecRegistry bindingStreamCodecs;
- private final BindingToNormalizedNodeCodec bindingToNormalized;
- private final ModuleInfoBackedContext moduleInfoBackedCntxt;
+ private final EffectiveModelContext schemaContext;
+ private final ListenerRegistry<EffectiveModelContextListener> listeners;
+ private final BindingNormalizedNodeSerializer bindingStreamCodecs;
+ private final CurrentAdapterSerializer bindingToNormalized;
+ private final AdapterContext adapterContext;
- private SchemaContextHolder(boolean fromClasspath) {
+ private SchemaContextHolder() {
List<YangModuleInfo> 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<YangModuleInfo> moduleInfos) {
- this.moduleInfoBackedCntxt.addModuleInfos(moduleInfos);
- Optional<? extends SchemaContext> 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<SchemaContextListener> registerSchemaContextListener(
- SchemaContextListener listener) {
- return this.listeners.register(listener);
- }
/**
* Loads all {@link YangModelBindingProvider} on the classpath.
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<EffectiveModelContextListener> 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<DOMSchemaServiceExtension> getExtensions() {
- // TODO Auto-generated method stub
- return null;
+ return ImmutableClassToInstanceMap.of();
}
+
+
}
}
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.slf4j.Logger;
* @param codecRegistry codec registry used for converting
*
*/
- private XMLDataObjectConverter(SchemaContext schemaContext, BindingNormalizedNodeSerializer codecRegistry) {
+ private XMLDataObjectConverter(EffectiveModelContext schemaContext, BindingNormalizedNodeSerializer codecRegistry) {
super(schemaContext, codecRegistry);
this.xmlInputFactory = XMLInputFactory.newInstance();
// set external DTD and schema to null to avoid vulnerability (sonar report)
* @param codecRegistry codec registry used for converting
* @return new {@link XMLDataObjectConverter}
*/
- public static XMLDataObjectConverter createWithSchemaContext(@Nonnull SchemaContext schemaContext,
+ public static XMLDataObjectConverter createWithSchemaContext(@Nonnull EffectiveModelContext schemaContext,
@Nonnull BindingNormalizedNodeSerializer codecRegistry) {
return new XMLDataObjectConverter(schemaContext, codecRegistry);
}
XMLStreamReader reader, SchemaNode parentSchemaNode) {
NormalizedNodeResult result = new NormalizedNodeResult();
try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
- XmlParserStream xmlParser = XmlParserStream.create(streamWriter, getSchemaContext(), parentSchemaNode)) {
+ XmlParserStream xmlParser = XmlParserStream
+ .create(streamWriter, XmlCodecFactory.create(getSchemaContext()), parentSchemaNode)) {
xmlParser.parse(reader);
} catch (XMLStreamException | URISyntaxException | IOException | SAXException e) {
LOG.warn("An error occured during parsing XML input stream", e);