Migrate common module to Aluminium Step 2 03/92303/7
authormanuedelf <emmanuelle.delfour@orange.com>
Tue, 18 Aug 2020 07:00:02 +0000 (09:00 +0200)
committerguillaume.lambert <guillaume.lambert@orange.com>
Thu, 17 Sep 2020 08:28:00 +0000 (10:28 +0200)
mostly to use EffectiveModelContext instead of SchemaContext

JIRA: TRNSPRTPCE-292 TRNSPRTPCE-297 TRNSPRTPCE-306
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
Change-Id: I393d935c0d27d45fe068895e327baf7ff6408bcf

common/src/main/java/org/opendaylight/transportpce/common/DataStoreContext.java
common/src/main/java/org/opendaylight/transportpce/common/DataStoreContextImpl.java
common/src/main/java/org/opendaylight/transportpce/common/converter/AbstractDataObjectConverter.java
common/src/main/java/org/opendaylight/transportpce/common/converter/JSONDataObjectConverter.java
common/src/main/java/org/opendaylight/transportpce/common/converter/XMLDataObjectConverter.java

index 9c8e8f5f407f285e8c5b3ae34fd876a78566fe57..1f2a5fd14b613855d5108e384113dc809a055309 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.transportpce.common;
 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.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public interface DataStoreContext {
 
@@ -24,9 +24,9 @@ public interface DataStoreContext {
 
     NotificationPublishService createNotificationPublishService();
 
-    SchemaContext getSchemaContext();
+    EffectiveModelContext getSchemaContext();
 
-    BindingNormalizedNodeCodecRegistry getBindingToNormalizedNodeCodec();
+    BindingNormalizedNodeSerializer getBindingToNormalizedNodeCodec();
 
     NotificationService getNotificationService();
 
index aed65339be824853ea04a64a0a9e3c77d13eb571..c5f5aa00672b13d00a7716d68afb341d9119cd24 100644 (file)
@@ -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<? 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
@@ -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<LogicalDatastoreType, DOMStore> createDatastores() {
@@ -150,62 +147,30 @@ public class DataStoreContextImpl implements DataStoreContext {
         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.
@@ -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<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();
         }
+
+
     }
 }
index 3a003b011316cc8f60015d5f7d17cc62becc4500..e07ef9e913a57f87e0ae159e9a1d1788db2d029b 100644 (file)
@@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,7 +36,7 @@ public abstract class AbstractDataObjectConverter implements DataObjectConverter
 
     private static final Logger LOG = LoggerFactory.getLogger(AbstractDataObjectConverter.class);
 
-    private final SchemaContext schemaContext;
+    private final EffectiveModelContext schemaContext;
     private final BindingNormalizedNodeSerializer codecRegistry;
 
     /**
@@ -46,12 +46,13 @@ public abstract class AbstractDataObjectConverter implements DataObjectConverter
      * @param codecRegistry codec registry used for converting
      *
      */
-    protected AbstractDataObjectConverter(SchemaContext schemaContext, BindingNormalizedNodeSerializer codecRegistry) {
+    protected AbstractDataObjectConverter(EffectiveModelContext schemaContext,
+            BindingNormalizedNodeSerializer codecRegistry) {
         this.schemaContext = schemaContext;
         this.codecRegistry = codecRegistry;
     }
 
-    public SchemaContext getSchemaContext() {
+    public EffectiveModelContext getSchemaContext() {
         return schemaContext;
     }
 
index 306b18d1a7922592b03b8e7b47eff1c693012cd8..2177d1e437a0f3d5e4a3389dffe4985230f96f00 100644 (file)
@@ -18,7 +18,7 @@ import java.io.Writer;
 import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 import javax.annotation.Nonnull;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.transportpce.common.DataStoreContext;
 import org.opendaylight.transportpce.common.converter.api.DataObjectConverter;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -33,7 +33,7 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamW
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,7 +42,8 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
 
     private static final Logger LOG = LoggerFactory.getLogger(JSONDataObjectConverter.class);
 
-    private JSONDataObjectConverter(SchemaContext schemaContext, BindingNormalizedNodeCodecRegistry codecRegistry) {
+    private JSONDataObjectConverter(EffectiveModelContext schemaContext,
+            BindingNormalizedNodeSerializer codecRegistry) {
         super(schemaContext, codecRegistry);
     }
 
@@ -64,8 +65,8 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
      * @param codecRegistry codec registry used for converting
      * @return converter
      */
-    public static DataObjectConverter createWithSchemaContext(@Nonnull SchemaContext schemaContext,
-            @Nonnull BindingNormalizedNodeCodecRegistry codecRegistry) {
+    public static DataObjectConverter createWithSchemaContext(@Nonnull EffectiveModelContext schemaContext,
+            @Nonnull BindingNormalizedNodeSerializer codecRegistry) {
         return new JSONDataObjectConverter(schemaContext, codecRegistry);
     }
 
index afcccda9a791db013fbe769ef8bfce6e40da72a0..1e18cd8aebee1d4c413fb62a86c022af8dfc831c 100644 (file)
@@ -32,10 +32,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 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;
@@ -55,7 +56,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      * @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)
@@ -82,7 +83,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      * @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);
     }
@@ -192,7 +193,8 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
             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);