*/
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;
}
return new ModuleInfoBackedContext(getTCCLClassLoadingStrategy());
}
- public static ModuleInfoBackedContext create(GeneratedClassLoadingStrategy loadingStrategy) {
+ public static ModuleInfoBackedContext create(ClassLoadingStrategy loadingStrategy) {
return new ModuleInfoBackedContext(loadingStrategy);
}
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 {
return cls;
}
+
private synchronized Optional<SchemaContext> recreateSchemaContext() {
try {
ImmutableList<InputStream> streams = getAvailableStreams();
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();
}
}
}
- private Registration<YangModuleInfo> registerModuleInfo(YangModuleInfo yangModuleInfo) {
+ @Override
+ public ObjectRegistration<YangModuleInfo> registerModuleInfo(YangModuleInfo yangModuleInfo) {
YangModuleInfoRegistration registration = new YangModuleInfoRegistration(yangModuleInfo, this);
resolveModuleInfo(yangModuleInfo);
}
private void remove(YangModuleInfoRegistration registration) {
+ // FIXME implement
+ }
+ @Override
+ public SchemaContext getSchemaContext() {
+ return tryToCreateSchemaContext().get();
}
}