From 629a152fb04b16c5fe101a3b0a5517363bdf50a2 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 17 Oct 2022 10:47:37 +0200 Subject: [PATCH] Split out YangIRSchemaSource This is a counterpart to YangTextSchemaSource, publish it to yang-repo-api. This allows is to be consumed without a direct dependency on YANG parser. JIRA: YANGTOOLS-1460 Change-Id: Ia7a9d938b8ed94f9b46cd5a22cb86472160dfd98 Signed-off-by: Robert Varga --- .../yang/parser/impl/DefaultYangParser.java | 8 ++-- .../yang/parser/repo/AssembleSources.java | 14 +++--- .../SharedEffectiveModelContextFactory.java | 6 +-- .../parser/repo/SourceIdMismatchDetector.java | 15 +++--- .../repo/YangTextSchemaContextResolver.java | 8 ++-- .../repo/AbstractSchemaRepositoryTest.java | 8 ++-- .../repo/MultipleRevImportBug6875Test.java | 22 ++++----- ...enconfigVerSharedSchemaRepositoryTest.java | 14 +++--- ...haredEffectiveModelContextFactoryTest.java | 6 +-- .../repo/SharedSchemaRepositoryTest.java | 47 +++++++++---------- ...haredSchemaRepositoryWithFeaturesTest.java | 12 ++--- .../rfc7950/repo/TextToIRTransformer.java | 9 ++-- .../rfc7950/repo/YangModelDependencyInfo.java | 3 +- .../repo/YangStatementStreamSource.java | 5 +- .../plugin/YangToSourcesProcessor.java | 10 ++-- yang/yang-repo-api/pom.xml | 4 ++ .../src/main/java/module-info.java | 1 + .../model/repo/api/YangIRSchemaSource.java | 12 ++--- 18 files changed, 103 insertions(+), 101 deletions(-) rename parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/IRSchemaSource.java => yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java (80%) diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangParser.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangParser.java index aaa87548a3..b1cf78db9e 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangParser.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangParser.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YinDomSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YinTextSchemaSource; @@ -29,7 +30,6 @@ import org.opendaylight.yangtools.yang.model.repo.api.YinXmlSchemaSource; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinStatementStreamSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinTextToDomTransformer; @@ -40,7 +40,7 @@ import org.xml.sax.SAXException; final class DefaultYangParser implements YangParser { static final @NonNull Collection> REPRESENTATIONS = - ImmutableList.of(IRSchemaSource.class, YangTextSchemaSource.class, YinDomSchemaSource.class, + ImmutableList.of(YangIRSchemaSource.class, YangTextSchemaSource.class, YinDomSchemaSource.class, YinXmlSchemaSource.class, YinTextSchemaSource.class); private final BuildAction buildAction; @@ -107,8 +107,8 @@ final class DefaultYangParser implements YangParser { static StatementStreamSource sourceToStatementStream(final SchemaSourceRepresentation source) throws IOException, YangSyntaxErrorException { requireNonNull(source); - if (source instanceof IRSchemaSource) { - return YangStatementStreamSource.create((IRSchemaSource) source); + if (source instanceof YangIRSchemaSource) { + return YangStatementStreamSource.create((YangIRSchemaSource) source); } else if (source instanceof YangTextSchemaSource) { return YangStatementStreamSource.create((YangTextSchemaSource) source); } else if (source instanceof YinDomSchemaSource) { diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/AssembleSources.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/AssembleSources.java index 116a9b5c02..2a9dcf219e 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/AssembleSources.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/AssembleSources.java @@ -22,20 +22,20 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class AssembleSources implements AsyncFunction, EffectiveModelContext> { +final class AssembleSources implements AsyncFunction, EffectiveModelContext> { private static final Logger LOG = LoggerFactory.getLogger(AssembleSources.class); - private final @NonNull Function getIdentifier; + private final @NonNull Function getIdentifier; private final @NonNull SchemaContextFactoryConfiguration config; private final @NonNull YangParserFactory parserFactory; @@ -44,14 +44,14 @@ final class AssembleSources implements AsyncFunction, Effec this.parserFactory = parserFactory; this.config = config; getIdentifier = switch (config.getStatementParserMode()) { - case DEFAULT_MODE -> IRSchemaSource::getIdentifier; + case DEFAULT_MODE -> YangIRSchemaSource::getIdentifier; }; } @Override - public FluentFuture apply(final List sources) + public FluentFuture apply(final List sources) throws SchemaResolutionException, ReactorException { - final Map srcs = Maps.uniqueIndex(sources, getIdentifier); + final Map srcs = Maps.uniqueIndex(sources, getIdentifier); final Map deps = Maps.transformValues(srcs, YangModelDependencyInfo::forIR); @@ -72,7 +72,7 @@ final class AssembleSources implements AsyncFunction, Effec config.getSupportedFeatures().ifPresent(parser::setSupportedFeatures); config.getModulesDeviatedByModules().ifPresent(parser::setModulesWithSupportedDeviations); - for (final Entry entry : srcs.entrySet()) { + for (final Entry entry : srcs.entrySet()) { try { parser.addSource(entry.getValue()); } catch (YangSyntaxErrorException | IOException e) { diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactory.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactory.java index e1b213df3b..63d4fe9f47 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactory.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactory.java @@ -39,7 +39,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFacto import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -179,8 +179,8 @@ final class SharedEffectiveModelContextFactory implements EffectiveModelContextF final Stopwatch sw = Stopwatch.createStarted(); // Request all sources be loaded - ListenableFuture> sf = Futures.allAsList(Collections2.transform(sources, - identifier -> repository.getSchemaSource(identifier, IRSchemaSource.class))); + ListenableFuture> sf = Futures.allAsList(Collections2.transform(sources, + identifier -> repository.getSchemaSource(identifier, YangIRSchemaSource.class))); // Detect mismatch between requested Source IDs and IDs that are extracted from parsed source // Also remove duplicates if present diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java index 625aba14a7..16a2c2d324 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java @@ -18,12 +18,12 @@ import java.util.Map; import java.util.Set; import org.gaul.modernizer_maven_annotations.SuppressModernizer; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressModernizer -final class SourceIdMismatchDetector implements Function, List> { +final class SourceIdMismatchDetector implements Function, List> { private static final Logger LOG = LoggerFactory.getLogger(SourceIdMismatchDetector.class); private final Set sourceIdentifiers; @@ -33,13 +33,10 @@ final class SourceIdMismatchDetector implements Function, L } @Override - public List apply(final List input) { + public List apply(final List input) { final Iterator srcIt = sourceIdentifiers.iterator(); - final Iterator it = input.iterator(); - - final Map filtered = new LinkedHashMap<>(); - while (it.hasNext()) { - final IRSchemaSource irSchemaSource = it.next(); + final Map filtered = new LinkedHashMap<>(); + for (YangIRSchemaSource irSchemaSource : input) { final SourceIdentifier realSId = irSchemaSource.getIdentifier(); if (srcIt.hasNext()) { final SourceIdentifier expectedSId = srcIt.next(); @@ -49,7 +46,7 @@ final class SourceIdMismatchDetector implements Function, L } } - final IRSchemaSource prev = filtered.put(realSId, irSchemaSource); + final YangIRSchemaSource prev = filtered.put(realSId, irSchemaSource); if (prev != null) { LOG.warn("Duplicate source for module {} detected in reactor", realSId); } diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java index a34493f9a9..3ec6803d9d 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java @@ -39,6 +39,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.GuavaSchemaSourceCache; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; @@ -49,7 +50,6 @@ import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistration; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,7 +62,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem private final Multimap texts = ArrayListMultimap.create(); private final AtomicReference> currentSchemaContext = new AtomicReference<>(Optional.empty()); - private final GuavaSchemaSourceCache cache; + private final GuavaSchemaSourceCache cache; private final SchemaListenerRegistration transReg; private final SchemaSourceRegistry registry; private final SchemaRepository repository; @@ -76,7 +76,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem final TextToIRTransformer t = TextToIRTransformer.create(repository, registry); transReg = registry.registerSchemaSourceListener(t); - cache = GuavaSchemaSourceCache.createSoftCache(registry, IRSchemaSource.class, SOURCE_LIFETIME); + cache = GuavaSchemaSourceCache.createSoftCache(registry, YangIRSchemaSource.class, SOURCE_LIFETIME); } public static @NonNull YangTextSchemaContextResolver create(final String name) { @@ -102,7 +102,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem throws SchemaSourceException, IOException, YangSyntaxErrorException { checkArgument(source != null); - final IRSchemaSource ast = TextToIRTransformer.transformText(source); + final YangIRSchemaSource ast = TextToIRTransformer.transformText(source); LOG.trace("Resolved source {} to source {}", source, ast); // AST carries an accurate identifier, check if it matches the one supplied by the source. If it diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/AbstractSchemaRepositoryTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/AbstractSchemaRepositoryTest.java index bf6497a367..2e3cf45ef5 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/AbstractSchemaRepositoryTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/AbstractSchemaRepositoryTest.java @@ -20,9 +20,9 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public abstract class AbstractSchemaRepositoryTest { @@ -61,13 +61,13 @@ public abstract class AbstractSchemaRepositoryTest { .createEffectiveModelContext(requiredSources); } - private static SettableSchemaProvider assertYangTextResource(final String resourceName) { - final IRSchemaSource yangSource; + private static SettableSchemaProvider assertYangTextResource(final String resourceName) { + final YangIRSchemaSource yangSource; try { yangSource = TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)); } catch (YangSyntaxErrorException | IOException e) { throw new AssertionError("Failed to parse " + resourceName, e); } - return SettableSchemaProvider.createImmediate(yangSource, IRSchemaSource.class); + return SettableSchemaProvider.createImmediate(yangSource, YangIRSchemaSource.class); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/MultipleRevImportBug6875Test.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/MultipleRevImportBug6875Test.java index d1956cdeea..1d57b89b09 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/MultipleRevImportBug6875Test.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/MultipleRevImportBug6875Test.java @@ -22,8 +22,8 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class MultipleRevImportBug6875Test { @@ -38,13 +38,13 @@ public class MultipleRevImportBug6875Test { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository( "shared-schema-repo-multiple-rev-import-test"); - final SettableSchemaProvider foo = getSourceProvider( + final SettableSchemaProvider foo = getSourceProvider( "/rfc7950/bug6875/yang1-1/foo.yang"); - final SettableSchemaProvider bar1 = getSourceProvider( + final SettableSchemaProvider bar1 = getSourceProvider( "/rfc7950/bug6875/yang1-1/bar@1999-01-01.yang"); - final SettableSchemaProvider bar2 = getSourceProvider( + final SettableSchemaProvider bar2 = getSourceProvider( "/rfc7950/bug6875/yang1-1/bar@2017-02-06.yang"); - final SettableSchemaProvider bar3 = getSourceProvider( + final SettableSchemaProvider bar3 = getSourceProvider( "/rfc7950/bug6875/yang1-1/bar@1970-01-01.yang"); setAndRegister(sharedSchemaRepository, foo); @@ -82,11 +82,11 @@ public class MultipleRevImportBug6875Test { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository( "shared-schema-repo-multiple-rev-import-test"); - final SettableSchemaProvider foo = getSourceProvider( + final SettableSchemaProvider foo = getSourceProvider( "/rfc7950/bug6875/yang1-0/foo.yang"); - final SettableSchemaProvider bar1 = getSourceProvider( + final SettableSchemaProvider bar1 = getSourceProvider( "/rfc7950/bug6875/yang1-0/bar@1999-01-01.yang"); - final SettableSchemaProvider bar2 = getSourceProvider( + final SettableSchemaProvider bar2 = getSourceProvider( "/rfc7950/bug6875/yang1-0/bar@2017-02-06.yang"); setAndRegister(sharedSchemaRepository, foo); @@ -105,16 +105,16 @@ public class MultipleRevImportBug6875Test { } private static void setAndRegister(final SharedSchemaRepository sharedSchemaRepository, - final SettableSchemaProvider source) { + final SettableSchemaProvider source) { source.register(sharedSchemaRepository); source.setResult(); } - private static SettableSchemaProvider getSourceProvider(final String resourceName) + private static SettableSchemaProvider getSourceProvider(final String resourceName) throws Exception { final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName); return SettableSchemaProvider.createImmediate(TextToIRTransformer.transformText(yangSource), - IRSchemaSource.class); + YangIRSchemaSource.class); } private static QName foo(final String localName) { diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/OpenconfigVerSharedSchemaRepositoryTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/OpenconfigVerSharedSchemaRepositoryTest.java index b497ebd8df..ba48207abf 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/OpenconfigVerSharedSchemaRepositoryTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/OpenconfigVerSharedSchemaRepositoryTest.java @@ -16,8 +16,8 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class OpenconfigVerSharedSchemaRepositoryTest { @@ -25,15 +25,15 @@ public class OpenconfigVerSharedSchemaRepositoryTest { public void testSharedSchemaRepository() throws Exception { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("shared-schema-repo-test"); - final SettableSchemaProvider bar = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider bar = getImmediateYangSourceProviderFromResource( "/openconfig-version/shared-schema-repository/bar@2016-01-01.yang"); bar.register(sharedSchemaRepository); bar.setResult(); - final SettableSchemaProvider foo = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider foo = getImmediateYangSourceProviderFromResource( "/openconfig-version/shared-schema-repository/foo.yang"); foo.register(sharedSchemaRepository); foo.setResult(); - final SettableSchemaProvider semVer = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider semVer = getImmediateYangSourceProviderFromResource( "/openconfig-version/shared-schema-repository/openconfig-extensions.yang"); semVer.register(sharedSchemaRepository); semVer.setResult(); @@ -55,10 +55,10 @@ public class OpenconfigVerSharedSchemaRepositoryTest { assertEquals(moduleSize, schemaContext.getModules().size()); } - static SettableSchemaProvider getImmediateYangSourceProviderFromResource(final String resourceName) - throws Exception { + static SettableSchemaProvider getImmediateYangSourceProviderFromResource( + final String resourceName) throws Exception { final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName); return SettableSchemaProvider.createImmediate(TextToIRTransformer.transformText(yangSource), - IRSchemaSource.class); + YangIRSchemaSource.class); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java index 67d61f827a..3e1fd08ee2 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java @@ -25,10 +25,10 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -73,7 +73,7 @@ public class SharedEffectiveModelContextFactoryTest { s1 = source1.getIdentifier(); s2 = source2.getIdentifier(); - final SettableSchemaProvider provider = + final SettableSchemaProvider provider = SharedSchemaRepositoryTest.getImmediateYangSourceProviderFromResource( "/no-revision/imported@2012-12-12.yang"); provider.setResult(); @@ -82,7 +82,7 @@ public class SharedEffectiveModelContextFactoryTest { // Register the same provider under source id without revision final SourceIdentifier sIdWithoutRevision = new SourceIdentifier(provider.getId().name()); repository.registerSchemaSource(provider, PotentialSchemaSource.create( - sIdWithoutRevision, IRSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue())); + sIdWithoutRevision, YangIRSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue())); final SharedEffectiveModelContextFactory sharedSchemaContextFactory = new SharedEffectiveModelContextFactory(repository, config); diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java index 789007fc27..c5dedea7fd 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java @@ -24,12 +24,11 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class SharedSchemaRepositoryTest { - @Test public void testSourceWithAndWithoutRevision() throws Exception { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("netconf-mounts"); @@ -39,16 +38,16 @@ public class SharedSchemaRepositoryTest { final SourceIdentifier id2 = loadAndRegisterSource(sharedSchemaRepository, "/no-revision/imported@2012-12-12.yang"); - ListenableFuture source = sharedSchemaRepository.getSchemaSource(idNoRevision, - IRSchemaSource.class); + ListenableFuture source = sharedSchemaRepository.getSchemaSource(idNoRevision, + YangIRSchemaSource.class); assertEquals(idNoRevision, source.get().getIdentifier()); - source = sharedSchemaRepository.getSchemaSource(id2, IRSchemaSource.class); + source = sharedSchemaRepository.getSchemaSource(id2, YangIRSchemaSource.class); assertEquals(id2, source.get().getIdentifier()); } private static SourceIdentifier loadAndRegisterSource(final SharedSchemaRepository sharedSchemaRepository, final String resourceName) throws Exception { - final SettableSchemaProvider sourceProvider = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider sourceProvider = getImmediateYangSourceProviderFromResource( resourceName); sourceProvider.setResult(); final SourceIdentifier idNoRevision = sourceProvider.getId(); @@ -60,11 +59,11 @@ public class SharedSchemaRepositoryTest { public void testSimpleSchemaContext() throws Exception { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("netconf-mounts"); - final SettableSchemaProvider remoteInetTypesYang = getImmediateYangSourceProviderFromResource( - "/ietf/ietf-inet-types@2010-09-24.yang"); + final SettableSchemaProvider remoteInetTypesYang = + getImmediateYangSourceProviderFromResource("/ietf/ietf-inet-types@2010-09-24.yang"); remoteInetTypesYang.register(sharedSchemaRepository); - final ListenableFuture registeredSourceFuture = sharedSchemaRepository.getSchemaSource( - remoteInetTypesYang.getId(), IRSchemaSource.class); + final ListenableFuture registeredSourceFuture = sharedSchemaRepository.getSchemaSource( + remoteInetTypesYang.getId(), YangIRSchemaSource.class); assertFalse(registeredSourceFuture.isDone()); final EffectiveModelContextFactory fact = sharedSchemaRepository.createEffectiveModelContextFactory(); @@ -97,15 +96,15 @@ public class SharedSchemaRepositoryTest { public void testTwoSchemaContextsSharingSource() throws Exception { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("netconf-mounts"); - final SettableSchemaProvider remoteInetTypesYang = getImmediateYangSourceProviderFromResource( - "/ietf/ietf-inet-types@2010-09-24.yang"); + final SettableSchemaProvider remoteInetTypesYang = + getImmediateYangSourceProviderFromResource("/ietf/ietf-inet-types@2010-09-24.yang"); remoteInetTypesYang.register(sharedSchemaRepository); remoteInetTypesYang.setResult(); - final SettableSchemaProvider remoteTopologyYang = getImmediateYangSourceProviderFromResource( - "/ietf/network-topology@2013-10-21.yang"); + final SettableSchemaProvider remoteTopologyYang = + getImmediateYangSourceProviderFromResource("/ietf/network-topology@2013-10-21.yang"); remoteTopologyYang.register(sharedSchemaRepository); remoteTopologyYang.setResult(); - final SettableSchemaProvider remoteModuleNoRevYang = + final SettableSchemaProvider remoteModuleNoRevYang = getImmediateYangSourceProviderFromResource("/no-revision/module-without-revision.yang"); remoteModuleNoRevYang.register(sharedSchemaRepository); @@ -128,8 +127,8 @@ public class SharedSchemaRepositoryTest { public void testFailedSchemaContext() throws Exception { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("netconf-mounts"); - final SettableSchemaProvider remoteInetTypesYang = getImmediateYangSourceProviderFromResource( - "/ietf/ietf-inet-types@2010-09-24.yang"); + final SettableSchemaProvider remoteInetTypesYang = + getImmediateYangSourceProviderFromResource("/ietf/ietf-inet-types@2010-09-24.yang"); remoteInetTypesYang.register(sharedSchemaRepository); final EffectiveModelContextFactory fact = sharedSchemaRepository.createEffectiveModelContextFactory(); @@ -157,12 +156,12 @@ public class SharedSchemaRepositoryTest { public void testDifferentCosts() throws Exception { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("netconf-mounts"); - final SettableSchemaProvider immediateInetTypesYang = spy( + final SettableSchemaProvider immediateInetTypesYang = spy( getImmediateYangSourceProviderFromResource("/ietf/ietf-inet-types@2010-09-24.yang")); immediateInetTypesYang.register(sharedSchemaRepository); immediateInetTypesYang.setResult(); - final SettableSchemaProvider remoteInetTypesYang = spy( + final SettableSchemaProvider remoteInetTypesYang = spy( getRemoteYangSourceProviderFromResource("/ietf/ietf-inet-types@2010-09-24.yang")); remoteInetTypesYang.register(sharedSchemaRepository); remoteInetTypesYang.setResult(); @@ -183,17 +182,17 @@ public class SharedSchemaRepositoryTest { assertEquals(moduleSize, schemaContext.getModules().size()); } - static SettableSchemaProvider getRemoteYangSourceProviderFromResource(final String resourceName) + static SettableSchemaProvider getRemoteYangSourceProviderFromResource(final String resourceName) throws Exception { final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName); return SettableSchemaProvider.createRemote(TextToIRTransformer.transformText(yangSource), - IRSchemaSource.class); + YangIRSchemaSource.class); } - static SettableSchemaProvider getImmediateYangSourceProviderFromResource(final String resourceName) - throws Exception { + static SettableSchemaProvider getImmediateYangSourceProviderFromResource( + final String resourceName) throws Exception { final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName); return SettableSchemaProvider.createImmediate(TextToIRTransformer.transformText(yangSource), - IRSchemaSource.class); + YangIRSchemaSource.class); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryWithFeaturesTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryWithFeaturesTest.java index 688ec8effe..325bf7a9b9 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryWithFeaturesTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryWithFeaturesTest.java @@ -24,8 +24,8 @@ import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.IRSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class SharedSchemaRepositoryWithFeaturesTest { @@ -37,7 +37,7 @@ public class SharedSchemaRepositoryWithFeaturesTest { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository( "shared-schema-repo-with-features-test"); - final SettableSchemaProvider foobar = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider foobar = getImmediateYangSourceProviderFromResource( "/if-feature-resolution-test/shared-schema-repository/foobar.yang"); foobar.register(sharedSchemaRepository); foobar.setResult(); @@ -73,7 +73,7 @@ public class SharedSchemaRepositoryWithFeaturesTest { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository( "shared-schema-repo-with-features-test"); - final SettableSchemaProvider foobar = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider foobar = getImmediateYangSourceProviderFromResource( "/if-feature-resolution-test/shared-schema-repository/foobar.yang"); foobar.register(sharedSchemaRepository); foobar.setResult(); @@ -109,7 +109,7 @@ public class SharedSchemaRepositoryWithFeaturesTest { final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository( "shared-schema-repo-with-features-test"); - final SettableSchemaProvider foobar = getImmediateYangSourceProviderFromResource( + final SettableSchemaProvider foobar = getImmediateYangSourceProviderFromResource( "/if-feature-resolution-test/shared-schema-repository/foobar.yang"); foobar.register(sharedSchemaRepository); foobar.setResult(); @@ -131,11 +131,11 @@ public class SharedSchemaRepositoryWithFeaturesTest { QName.create(module.getQNameModule(), "test-leaf-c")); } - private static SettableSchemaProvider getImmediateYangSourceProviderFromResource( + private static SettableSchemaProvider getImmediateYangSourceProviderFromResource( final String resourceName) throws Exception { final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName); return SettableSchemaProvider.createImmediate(TextToIRTransformer.transformText(yangSource), - IRSchemaSource.class); + YangIRSchemaSource.class); } private static void assertSchemaContext(final SchemaContext schemaContext, final int moduleSize) { diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java index 7c30b80dc0..4e1fd353e7 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java @@ -14,6 +14,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.ir.IRStatement; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceTransformer; @@ -21,9 +22,9 @@ import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.rfc7950.antlr.IRSupport; @Beta -public final class TextToIRTransformer extends SchemaSourceTransformer { +public final class TextToIRTransformer extends SchemaSourceTransformer { private TextToIRTransformer(final SchemaRepository provider, final SchemaSourceRegistry consumer) { - super(provider, YangTextSchemaSource.class, consumer, IRSchemaSource.class, + super(provider, YangTextSchemaSource.class, consumer, YangIRSchemaSource.class, input -> Futures.immediateFuture(transformText(input))); } @@ -32,13 +33,13 @@ public final class TextToIRTransformer extends SchemaSourceTransformer> parsed = yangFilesInProject.parallelStream() + final List> parsed = yangFilesInProject.parallelStream() .map(file -> { final YangTextSchemaSource textSource = YangTextSchemaSource.forPath(file.toPath()); try { @@ -269,14 +269,14 @@ class YangToSourcesProcessor { @SuppressWarnings("checkstyle:illegalCatch") private Optional createReactor(final List yangFilesInProject, final YangParserConfiguration parserConfig, final Collection dependencies, - final List> parsed) throws MojoExecutionException { + final List> parsed) throws MojoExecutionException { try { final List sourcesInProject = new ArrayList<>(yangFilesInProject.size()); final YangParser parser = parserFactory.createParser(parserConfig); - for (final Entry entry : parsed) { + for (final Entry entry : parsed) { final YangTextSchemaSource textSource = entry.getKey(); - final IRSchemaSource astSource = entry.getValue(); + final YangIRSchemaSource astSource = entry.getValue(); parser.addSource(astSource); if (!astSource.getIdentifier().equals(textSource.getIdentifier())) { diff --git a/yang/yang-repo-api/pom.xml b/yang/yang-repo-api/pom.xml index 05b3f52553..3b34a2efda 100644 --- a/yang/yang-repo-api/pom.xml +++ b/yang/yang-repo-api/pom.xml @@ -38,6 +38,10 @@ org.opendaylight.yangtools yang-common + + org.opendaylight.yangtools + yang-ir + org.opendaylight.yangtools yang-model-api diff --git a/yang/yang-repo-api/src/main/java/module-info.java b/yang/yang-repo-api/src/main/java/module-info.java index 8617de349c..ce8de51621 100644 --- a/yang/yang-repo-api/src/main/java/module-info.java +++ b/yang/yang-repo-api/src/main/java/module-info.java @@ -12,6 +12,7 @@ module org.opendaylight.yangtools.yang.repo.api { requires transitive com.google.common; requires transitive org.opendaylight.yangtools.concepts; requires transitive org.opendaylight.yangtools.yang.common; + requires transitive org.opendaylight.yangtools.yang.ir; requires transitive org.opendaylight.yangtools.yang.model.api; requires org.opendaylight.yangtools.util; diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/IRSchemaSource.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java similarity index 80% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/IRSchemaSource.java rename to yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java index fab8c60bb2..690ff2de00 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/IRSchemaSource.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.repo; +package org.opendaylight.yangtools.yang.model.repo.api; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; @@ -18,16 +18,14 @@ import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; import org.opendaylight.yangtools.yang.ir.IRKeyword; import org.opendaylight.yangtools.yang.ir.IRKeyword.Unqualified; import org.opendaylight.yangtools.yang.ir.IRStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; @Beta -public final class IRSchemaSource extends AbstractSimpleIdentifiable +public final class YangIRSchemaSource extends AbstractSimpleIdentifiable implements YangSchemaSourceRepresentation { private final @NonNull IRStatement rootStatement; private final @Nullable String symbolicName; - public IRSchemaSource(final @NonNull SourceIdentifier identifier, final @NonNull IRStatement rootStatement, + public YangIRSchemaSource(final @NonNull SourceIdentifier identifier, final @NonNull IRStatement rootStatement, final @Nullable String symbolicName) { super(identifier); this.rootStatement = requireNonNull(rootStatement); @@ -53,8 +51,8 @@ public final class IRSchemaSource extends AbstractSimpleIdentifiable getType() { - return IRSchemaSource.class; + public Class getType() { + return YangIRSchemaSource.class; } /** -- 2.36.6