import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.mdsal.yanglib.api.SchemaContextResolver;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants.ContainerName;
import org.opendaylight.yangtools.rfc8528.data.util.AbstractMountPointContextFactory;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
super(mountId);
this.resolver = requireNonNull(resolver);
this.yangLibContext = requireNonNull(yangLibContext);
- this.codec = requireNonNull(moduleStateCodec);
+ codec = requireNonNull(moduleStateCodec);
}
@Override
throws YangParserException {
final List<SourceReference> requiredSources = new ArrayList<>();
final List<SourceReference> librarySources = new ArrayList<>();
+ final Set<QName> supportedFeatures = new HashSet<>();
for (Module module : modState.nonnullModule().values()) {
final SourceReference modRef = sourceRefFor(module, module.getSchema());
+ final var namespace = XMLNamespace.of(module.requireNamespace().getValue());
+ for (var feature : module.requireFeature()) {
+ supportedFeatures.add(QName.create(namespace, feature.getValue()).intern());
+ }
- // TODO: take deviations/features into account
+ // TODO: take deviations into account
if (ConformanceType.Import == module.getConformanceType()) {
librarySources.add(modRef);
}
}
- return resolver.resolveSchemaContext(librarySources, requiredSources);
+ return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
}
private static SourceReference sourceRefFor(final CommonLeafs obj, final Uri uri) {
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode;
import org.opendaylight.yangtools.rfc8528.data.util.AbstractMountPointContextFactory;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
final var requiredSources = new ArrayList<SourceReference>();
final var librarySources = new ArrayList<SourceReference>();
+ final var supportedFeatures = new HashSet<QName>();
final var moduleSet = findModuleSet(yangLib, findSchemaName(datastores, Operational.QNAME));
for (var modSet : yangLib.nonnullModuleSet().values()) {
if (moduleSet.remove(modSet.getName())) {
- fillModules(librarySources, requiredSources, modSet);
+ fillModules(librarySources, requiredSources, supportedFeatures, modSet);
}
}
checkArgument(moduleSet.isEmpty(), "Failed to resolve module sets %s", moduleSet);
- return resolver.resolveSchemaContext(librarySources, requiredSources);
+ return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
}
@SuppressWarnings("deprecation")
throws YangParserException {
final var requiredSources = new ArrayList<SourceReference>();
final var librarySources = new ArrayList<SourceReference>();
+ final var supportedFeatures = new HashSet<QName>();
for (var module : modState.nonnullModule().values()) {
final var modRef = sourceRefFor(module, module.getSchema());
- // TODO: take deviations/features into account
+ final var namespace = XMLNamespace.of(module.requireNamespace().getValue());
+ for (var feature : module.requireFeature()) {
+ supportedFeatures.add(QName.create(namespace, feature.getValue()).intern());
+ }
+
+ // TODO: take deviations into account
if (ConformanceType.Import == module.getConformanceType()) {
librarySources.add(modRef);
}
}
- return resolver.resolveSchemaContext(librarySources, requiredSources);
+ return resolver.resolveSchemaContext(librarySources, requiredSources, supportedFeatures);
}
private String findSchemaName(final Map<DatastoreKey, Datastore> datastores, final QName qname) {
}
private static void fillModules(final List<SourceReference> librarySources,
- final List<SourceReference> requiredSources, final ModuleSet modSet) {
+ final List<SourceReference> requiredSources, final Set<QName> supportedFeatures, final ModuleSet modSet) {
// TODO: take deviations/features into account
for (var mod : modSet.nonnullImportOnlyModule().values()) {
}
for (var mod : modSet.nonnullModule().values()) {
fillSource(requiredSources, mod.getName(), toYangCommon(mod.getRevision()), mod.getLocation());
+ final var namespace = XMLNamespace.of(mod.requireNamespace().getValue());
+ mod.requireFeature().forEach(feature -> supportedFeatures.add(QName.create(namespace, feature.getValue())));
mod.nonnullSubmodule().values().forEach(sub -> {
fillSource(librarySources, sub.getName(), toYangCommon(sub.getRevision()), sub.getLocation());
});