Migrate common module to Aluminium Step 2
[transportpce.git] / common / src / main / java / org / opendaylight / transportpce / common / DataStoreContextImpl.java
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();
         }
+
+
     }
 }