From 08740dca7d41bcb9577afe9f74041aa7de10c478 Mon Sep 17 00:00:00 2001 From: OleksandrZharov Date: Tue, 15 Mar 2022 10:46:38 +0100 Subject: [PATCH] Export supported features to ietf-yang-library ModuleLike.getFeatures() now reflects the set of features used to build the module. Examine them to construct 'features' leaf-list accordingly. JIRA: NETCONF-857 Change-Id: I8a1447b6d53f2947beaa06f3963ae9bd43373367 Signed-off-by: OleksandrZharov Signed-off-by: Robert Varga --- .../mdsal/yang/library/YangLibraryWriter.java | 18 +++++++++++++++++- .../mdsal/yang/library/ModulesStateTest.java | 3 +++ .../mdsal/yang/library/YangLibraryTest.java | 3 +++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryWriter.java b/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryWriter.java index 5369d290eb..bdda3c2f23 100644 --- a/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryWriter.java +++ b/netconf/mdsal-netconf-yang-library/src/main/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryWriter.java @@ -15,6 +15,7 @@ import com.google.common.util.concurrent.MoreExecutors; import java.util.Collection; import java.util.List; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; @@ -44,7 +45,9 @@ import org.opendaylight.yangtools.yang.binding.util.BindingMap; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; +import org.opendaylight.yangtools.yang.model.api.FeatureDefinition; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Deactivate; @@ -177,6 +180,7 @@ public class YangLibraryWriter implements EffectiveModelContextListener, AutoClo .setRevision(ImportOnlyModuleRevisionBuilder.fromYangCommon(module.getQNameModule().getRevision()) .getRevisionIdentifier()) .setNamespace(new Uri(module.getNamespace().toString())) + .setFeature(extractFeatures(module)) // FIXME: inline this once it's disambiguated .setSubmodule(submoduleMap) .build(); @@ -224,7 +228,8 @@ public class YangLibraryWriter implements EffectiveModelContextListener, AutoClo .setConformanceType(ConformanceType.Implement) // FIXME: inline this once it's disambiguated .setSubmodule(submoduleMap) - // FIXME: Add also deviations and features lists to module entries + .setFeature(extractFeatures(module)) + // FIXME: Add also deviations to module entries .build(); }) .collect(BindingMap.toMap()); @@ -235,4 +240,15 @@ public class YangLibraryWriter implements EffectiveModelContextListener, AutoClo .setModuleSetId(String.valueOf(moduleSetId)) .build(); } + + private static List extractFeatures(final ModuleLike module) { + final var namespace = module.getQNameModule(); + + return module.getFeatures().stream() + .map(FeatureDefinition::getQName) + // belt-and-suspenders: make sure the feature namespace matches + .filter(featureName -> namespace.equals(featureName.getModule())) + .map(featureName -> new YangIdentifier(featureName.getLocalName())) + .collect(Collectors.toUnmodifiableList()); + } } diff --git a/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/ModulesStateTest.java b/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/ModulesStateTest.java index 708667a02a..75e48b2d67 100644 --- a/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/ModulesStateTest.java +++ b/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/ModulesStateTest.java @@ -7,6 +7,7 @@ */ package org.opendaylight.netconf.mdsal.yang.library; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; @@ -38,11 +39,13 @@ public class ModulesStateTest extends AbstractYangLibraryWriterTest { .setRevision(CommonLeafsRevisionBuilder.emptyRevision()) .build())) .setConformanceType(Module.ConformanceType.Implement) + .setFeature(List.of()) .build(), new ModuleBuilder() .setName(new YangIdentifier("ietf-yang-library")) .setNamespace(new Uri("urn:ietf:params:xml:ns:yang:ietf-yang-library")) .setRevision(new Revision(new RevisionIdentifier("2019-01-04"))) .setConformanceType(Module.ConformanceType.Implement) + .setFeature(List.of()) .build())) .build()); } diff --git a/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryTest.java b/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryTest.java index 797ac77a29..248d6a6e78 100644 --- a/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryTest.java +++ b/netconf/mdsal-netconf-yang-library/src/test/java/org/opendaylight/netconf/mdsal/yang/library/YangLibraryTest.java @@ -10,6 +10,7 @@ package org.opendaylight.netconf.mdsal.yang.library; import com.google.common.collect.ImmutableMap; import java.util.Collections; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; @@ -50,11 +51,13 @@ public class YangLibraryTest extends AbstractYangLibraryWriterTest { .setNamespace(new Uri("test:namespace")) .setRevision(new RevisionIdentifier("2013-07-22")) .setSubmodule(ImmutableMap.of(sub.key(), sub)) + .setFeature(List.of()) .build(); Module yangLibrary = new ModuleBuilder().setName(new YangIdentifier("ietf-yang-library_2019-01-04")) .setNamespace(new Uri("urn:ietf:params:xml:ns:yang:ietf-yang-library")) .setRevision(new RevisionIdentifier("2019-01-04")) + .setFeature(List.of()) .build(); ModuleSet modulesSet = new ModuleSetBuilder() -- 2.36.6