Merge "Added documentation for web socket client"
[yangtools.git] / code-generator / binding-generator-impl / src / main / java / org / opendaylight / yangtools / sal / binding / generator / impl / ModuleInfoBackedContext.java
index 0a8c2dcea0fd04a3533b26ecfba18d6f1cff471c..93c63a2c5bf54cdaeb91a2e9c38ab6d055f9b853 100644 (file)
@@ -7,35 +7,37 @@
  */
 package org.opendaylight.yangtools.sal.binding.generator.impl;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.ref.WeakReference;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy;
+import org.opendaylight.yangtools.sal.binding.generator.api.ModuleInfoRegistry;
 import org.opendaylight.yangtools.sal.binding.generator.util.ClassLoaderUtils;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
 import org.opendaylight.yangtools.yang.model.util.repo.AdvancedSchemaSourceProvider;
 import org.opendaylight.yangtools.yang.model.util.repo.SourceIdentifier;
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.ref.WeakReference;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
         implements //
-        AdvancedSchemaSourceProvider<InputStream> {
+        AdvancedSchemaSourceProvider<InputStream>, ModuleInfoRegistry, SchemaContextProvider {
 
-    private ModuleInfoBackedContext(GeneratedClassLoadingStrategy loadingStrategy) {
+    private ModuleInfoBackedContext(ClassLoadingStrategy loadingStrategy) {
         this.backingLoadingStrategy = loadingStrategy;
     }
 
@@ -43,7 +45,7 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
         return new ModuleInfoBackedContext(getTCCLClassLoadingStrategy());
     }
 
-    public static ModuleInfoBackedContext create(GeneratedClassLoadingStrategy loadingStrategy) {
+    public static ModuleInfoBackedContext create(ClassLoadingStrategy loadingStrategy) {
         return new ModuleInfoBackedContext(loadingStrategy);
     }
 
@@ -52,7 +54,7 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
     private final ConcurrentMap<String, WeakReference<ClassLoader>> packageNameToClassLoader = new ConcurrentHashMap<>();
     private final ConcurrentMap<SourceIdentifier, YangModuleInfo> sourceIdentifierToModuleInfo = new ConcurrentHashMap<>();
 
-    private final GeneratedClassLoadingStrategy backingLoadingStrategy;
+    private final ClassLoadingStrategy backingLoadingStrategy;
 
     @Override
     public Class<?> loadClass(String fullyQualifiedName) throws ClassNotFoundException {
@@ -76,6 +78,7 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
         return cls;
     }
 
+
     private synchronized Optional<SchemaContext> recreateSchemaContext() {
         try {
             ImmutableList<InputStream> streams = getAvailableStreams();
@@ -89,6 +92,10 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
         return Optional.absent();
     }
 
+    // TODO finish schema parsing and expose as SchemaService
+    // Unite with current SchemaService
+    // Implement remove ModuleInfo to update SchemaContext
+
     public synchronized Optional<SchemaContext> tryToCreateSchemaContext() {
         return recreateSchemaContext();
     }
@@ -139,7 +146,8 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
         }
     }
 
-    private Registration<YangModuleInfo> registerModuleInfo(YangModuleInfo yangModuleInfo) {
+    @Override
+    public ObjectRegistration<YangModuleInfo> registerModuleInfo(YangModuleInfo yangModuleInfo) {
         YangModuleInfoRegistration registration = new YangModuleInfoRegistration(yangModuleInfo, this);
 
         resolveModuleInfo(yangModuleInfo);
@@ -182,6 +190,11 @@ public class ModuleInfoBackedContext extends GeneratedClassLoadingStrategy //
     }
 
     private void remove(YangModuleInfoRegistration registration) {
+        // FIXME implement
+    }
 
+    @Override
+    public SchemaContext getSchemaContext() {
+        return tryToCreateSchemaContext().get();
     }
 }