From 04e2170a5aa0e292c3850b8358c396c099d3f920 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 2 Jan 2024 10:04:51 +0100 Subject: [PATCH] Promote SchemaSourceRepresentation SchemaSourceRepresentation is an extensible framework for identifying and working with sources of YANG schema, which eventually can become yang.model.api constructs. SchemaSourceRepresentation and its two immediate specializations are landing in yang.mode.api.source, the actual implementations in yang.model.spi.source. JIRA: YANGTOOLS-1150 Change-Id: I10d0b3afd29f6b96b98ea8ffca0ca1c0b8ec44f6 Signed-off-by: Robert Varga --- .../src/main/java/module-info.java | 1 + .../model/api/source}/SourceIdentifier.java | 2 +- .../api/source/SourceRepresentation.java | 32 +++--- .../api/source/YangSourceRepresentation.java | 8 +- .../api/source/YinSourceRepresentation.java | 8 +- .../yang/model/api/source/package-info.java | 15 +++ .../yang/model/export/SimpleModuleTest.java | 6 +- .../model/ri/stmt/EffectiveStatements.java | 4 +- .../eff/ImportEffectiveStatementImpl.java | 6 +- .../src/main/java/module-info.java | 1 + .../spi/source/DelegatedYangTextSource.java | 14 +-- .../spi/source/DelegatedYinTextSource.java | 14 +-- .../spi/source/ResourceYangTextSource.java | 16 +-- .../spi/source/ResourceYinTextSource.java | 16 +-- .../spi/source/StringYangTextSource.java | 20 ++-- .../model/spi/source/YangTextFileSource.java | 18 ++- .../yang/model/spi/source/YangTextSource.java | 71 ++++++------ .../yang/model/spi/source/YinDomSource.java | 107 +++++++++--------- .../model/spi/source/YinTextFileSource.java | 18 ++- .../yang/model/spi/source/YinTextSource.java | 38 +++---- .../yang/model/spi/source/YinXmlSource.java | 9 +- .../yang/model/spi/source/package-info.java | 11 ++ .../yang/model/util/SchemaContextUtil.java | 2 +- .../yangtools/yang/model/util/YT691Test.java | 2 +- .../odlext/parser/ContextReferenceTest.java | 6 +- .../yangtools/odlext/parser/MountTest.java | 8 +- .../yangtools/rfc6241/parser/NetconfTest.java | 6 +- .../yangtools/rfc6536/parser/NACMTest.java | 6 +- .../IetfYangSmiv2ExtensionPluginTest.java | 6 +- .../rfc7952/parser/AnnotationTest.java | 6 +- .../rfc8040/parser/AbstractYangDataTest.java | 4 +- .../rfc8528/parser/MountPointTest.java | 13 +-- .../parser/SubscribedNotificationsTest.java | 20 ++-- .../rfc8819/parser/ModuleTagTest.java | 5 +- parser/yang-ir/pom.xml | 4 + parser/yang-ir/src/main/java/module-info.java | 3 +- .../yang/ir}/YangIRSchemaSource.java | 27 ++--- .../yang/parser/api/YangLibModule.java | 8 +- .../yang/parser/api/YangLibModuleSet.java | 2 +- .../yang/parser/api/YangLibResolver.java | 11 +- .../yang/parser/api/YangLibSubmodule.java | 8 +- .../yangtools/yang/parser/api/YangParser.java | 32 +++--- .../parser/api/YangSyntaxErrorException.java | 19 ++-- .../parser/impl/DefaultYangLibResolver.java | 4 +- .../yang/parser/impl/DefaultYangParser.java | 43 ++++--- .../yang/parser/repo/AssembleSources.java | 12 +- .../yang/parser/repo/DependencyResolver.java | 8 +- .../repo/RevisionDependencyResolver.java | 2 +- .../SharedEffectiveModelContextFactory.java | 4 +- .../parser/repo/SharedSchemaRepository.java | 2 +- .../parser/repo/SourceIdMismatchDetector.java | 6 +- .../repo/YangTextSchemaContextResolver.java | 33 +++--- .../yang/parser/impl/YT1193Test.java | 8 +- .../repo/AbstractSchemaRepositoryTest.java | 6 +- .../parser/repo/DependencyResolverTest.java | 6 +- .../repo/MultipleRevImportBug6875Test.java | 6 +- ...enconfigVerSharedSchemaRepositoryTest.java | 7 +- .../parser/repo/SettableSchemaProvider.java | 18 +-- ...haredEffectiveModelContextFactoryTest.java | 34 +++--- .../repo/SharedSchemaRepositoryTest.java | 16 ++- ...haredSchemaRepositoryWithFeaturesTest.java | 7 +- .../yang/parser/repo/YT1428Test.java | 4 +- .../YangTextSchemaContextResolverTest.java | 8 +- .../stmt/reactor/BuildGlobalContext.java | 2 +- .../parser/stmt/reactor/ReactorStmtCtx.java | 2 +- .../stmt/reactor/RootStatementContext.java | 2 +- .../stmt/reactor/SourceSpecificContext.java | 2 +- .../rfc7950/repo/TextToIRTransformer.java | 18 +-- .../rfc7950/repo/YangErrorListener.java | 20 ++-- .../rfc7950/repo/YangModelDependencyInfo.java | 26 ++--- .../repo/YangStatementStreamSource.java | 30 ++--- .../repo/YinStatementStreamSource.java | 22 ++-- .../rfc7950/repo/YinTextToDomTransformer.java | 20 ++-- .../stmt/import_/ImportStatementSupport.java | 2 +- .../import_/ImportedVersionNamespace.java | 2 +- .../rfc7950/stmt/import_/RevisionImport.java | 2 +- .../stmt/meta/BelongsToStatementSupport.java | 2 +- .../stmt/meta/IncludeStatementSupport.java | 2 +- .../stmt/module/ModuleStatementSupport.java | 2 +- .../submodule/SubmoduleStatementSupport.java | 2 +- .../parser/rfc7950/antlr/IOSupportTest.java | 2 +- .../yangtools/yang/stmt/StmtTestUtils.java | 14 +-- .../yangtools/yang/stmt/TestUtils.java | 21 ++-- .../yang/stmt/yin/YinFileStmtTest.java | 4 +- .../yang/parser/spi/ParserNamespaces.java | 2 +- .../spi/meta/NamespaceKeyCriterion.java | 4 +- .../parser/spi/meta/ReactorException.java | 6 +- .../SomeModifiersUnresolvedException.java | 8 +- .../yang/parser/spi/meta/StmtContext.java | 2 +- .../spi/source/StatementStreamSource.java | 2 +- ...Source.java => LiteralYangTextSource.java} | 21 ++-- .../yang/test/util/YangParserTestUtils.java | 20 ++-- .../src/main/java/module-info.java | 2 +- .../generator/api/ModuleResourceResolver.java | 9 +- .../yang2sources/plugin/ContextHolder.java | 10 +- .../plugin/ProcessorModuleReactor.java | 20 ++-- .../plugin/ScannedDependency.java | 14 +-- .../yangtools/yang2sources/plugin/Util.java | 2 +- .../yang2sources/plugin/YangProvider.java | 6 +- .../plugin/YangToSourcesProcessor.java | 22 ++-- .../plugin/FilenameResolutionTest.java | 6 +- .../yang/validator/SystemTestUtils.java | 6 +- yang/yang-repo-api/pom.xml | 4 +- .../src/main/java/module-info.java | 2 +- .../api/EffectiveModelContextFactory.java | 5 +- .../api/MissingSchemaSourceException.java | 1 + .../yang/model/repo/api/SchemaRepository.java | 4 +- .../repo/api/SchemaResolutionException.java | 3 +- .../model/repo/api/SchemaSourceFilter.java | 13 ++- .../repo/fs/FilesystemSchemaSourceCache.java | 61 +++++----- ...ystemSchemaSourceCacheIntegrationTest.java | 29 +++-- .../fs/FilesystemSchemaSourceCacheTest.java | 75 ++++++------ .../repo/spi/AbstractSchemaRepository.java | 22 ++-- .../repo/spi/AbstractSchemaSourceCache.java | 16 +-- .../repo/spi/GuavaSchemaSourceCache.java | 24 ++-- .../model/repo/spi/PotentialSchemaSource.java | 23 ++-- .../model/repo/spi/SchemaSourceListener.java | 6 +- .../model/repo/spi/SchemaSourceProvider.java | 27 +++-- .../model/repo/spi/SchemaSourceRegistry.java | 6 +- .../repo/spi/SchemaSourceTransformer.java | 10 +- .../model/repo/spi/SoftSchemaSourceCache.java | 18 +-- .../repo/spi/GuavaSchemaSourceCacheTest.java | 17 ++- .../repo/spi/PotentialSchemaSourceTest.java | 20 ++-- .../repo/spi/SchemaSourceTransformerTest.java | 27 +++-- .../repo/spi/SoftSchemaSourceCacheTest.java | 17 ++- 125 files changed, 827 insertions(+), 831 deletions(-) rename {yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api => model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source}/SourceIdentifier.java (98%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceRepresentation.java => model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceRepresentation.java (64%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinSchemaSourceRepresentation.java => model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YangSourceRepresentation.java (56%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangSchemaSourceRepresentation.java => model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YinSourceRepresentation.java (56%) create mode 100644 model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/package-info.java rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYangTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYangTextSource.java (72%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYinTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYinTextSource.java (73%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYangTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYangTextSource.java (73%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYinTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYinTextSource.java (71%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/StringYangTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/StringYangTextSource.java (60%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextFileSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextFileSource.java (75%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextSource.java (73%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinDomSource.java (72%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextFileSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextFileSource.java (70%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextSource.java (73%) rename yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinXmlSchemaSource.java => model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinXmlSource.java (73%) create mode 100644 model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/package-info.java rename {yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api => parser/yang-ir/src/main/java/org/opendaylight/yangtools/yang/ir}/YangIRSchemaSource.java (71%) rename parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/{LiteralYangTextSchemaSource.java => LiteralYangTextSource.java} (71%) diff --git a/model/yang-model-api/src/main/java/module-info.java b/model/yang-model-api/src/main/java/module-info.java index abf5544729..99e72e9e8e 100644 --- a/model/yang-model-api/src/main/java/module-info.java +++ b/model/yang-model-api/src/main/java/module-info.java @@ -8,6 +8,7 @@ module org.opendaylight.yangtools.yang.model.api { exports org.opendaylight.yangtools.yang.model.api; exports org.opendaylight.yangtools.yang.model.api.meta; + exports org.opendaylight.yangtools.yang.model.api.source; exports org.opendaylight.yangtools.yang.model.api.stmt; exports org.opendaylight.yangtools.yang.model.api.stmt.compat; exports org.opendaylight.yangtools.yang.model.api.type; diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceIdentifier.java similarity index 98% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java rename to model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceIdentifier.java index 05b1da6f82..1293220de7 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceIdentifier.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.api.source; import static java.util.Objects.requireNonNull; diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceRepresentation.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceRepresentation.java similarity index 64% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceRepresentation.java rename to model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceRepresentation.java index 7b923dc7fe..b0058e3be0 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceRepresentation.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/SourceRepresentation.java @@ -5,12 +5,10 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.api.source; -import com.google.common.annotations.Beta; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.concepts.Identifiable; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.Immutable; /** @@ -26,28 +24,30 @@ import org.opendaylight.yangtools.concepts.Immutable; *

* Typical examples of a schema source representation include: *

* *

* Implementations of this interface expected to comply with the {@link Immutable} contract. */ -@Beta -public sealed interface SchemaSourceRepresentation extends Identifiable, Immutable - permits YangSchemaSourceRepresentation, YinSchemaSourceRepresentation { - @Override - SourceIdentifier getIdentifier(); +public sealed interface SourceRepresentation extends Immutable + permits YangSourceRepresentation, YinSourceRepresentation { + /** + * The {@link SourceIdentifier} of this source. + * + * @return {@link SourceIdentifier} of this source + */ + @NonNull SourceIdentifier sourceId(); /** * Return the concrete representation type. * * @return The type of representation. */ - @NonNull Class getType(); + @NonNull Class getType(); /** * Return the symbolic name, if available. This name has no semantic meaning beyond being useful for debugging @@ -55,5 +55,5 @@ public sealed interface SchemaSourceRepresentation extends Identifiable getSymbolicName(); + @Nullable String symbolicName(); } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinSchemaSourceRepresentation.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YangSourceRepresentation.java similarity index 56% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinSchemaSourceRepresentation.java rename to model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YangSourceRepresentation.java index 639b309971..48dcb4aef1 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinSchemaSourceRepresentation.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YangSourceRepresentation.java @@ -5,12 +5,12 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.api.source; /** - * A YIN {@link SchemaSourceRepresentation}. + * A YANG {@link SourceRepresentation}. */ -public non-sealed interface YinSchemaSourceRepresentation extends SchemaSourceRepresentation { +public non-sealed interface YangSourceRepresentation extends SourceRepresentation { @Override - Class getType(); + Class getType(); } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangSchemaSourceRepresentation.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YinSourceRepresentation.java similarity index 56% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangSchemaSourceRepresentation.java rename to model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YinSourceRepresentation.java index a33a83abcb..83a7dd7531 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangSchemaSourceRepresentation.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YinSourceRepresentation.java @@ -5,12 +5,12 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.api.source; /** - * A YANG {@link SchemaSourceRepresentation}. + * A YIN {@link SourceRepresentation}. */ -public non-sealed interface YangSchemaSourceRepresentation extends SchemaSourceRepresentation { +public non-sealed interface YinSourceRepresentation extends SourceRepresentation { @Override - Class getType(); + Class getType(); } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/package-info.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/package-info.java new file mode 100644 index 0000000000..456dd68fbd --- /dev/null +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/package-info.java @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +/** + * Base interfaces for identifying and source of YANG and YIN models. Two main entry points are + *

    + *
  1. {@link SourceIdentifier}, i.e. how a model source is known
  2. + *
  3. {@link SourceRepresentation}, i.e. its format
  4. + *
+ */ +package org.opendaylight.yangtools.yang.model.api.source; \ No newline at end of file diff --git a/model/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/SimpleModuleTest.java b/model/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/SimpleModuleTest.java index a236b67677..1e461e66c5 100644 --- a/model/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/SimpleModuleTest.java +++ b/model/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/SimpleModuleTest.java @@ -14,9 +14,9 @@ import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceListener; import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; @@ -50,7 +50,7 @@ public class SimpleModuleTest { } @Override - public void schemaSourceEncountered(final SchemaSourceRepresentation source) { + public void schemaSourceEncountered(final SourceRepresentation source) { // NOOP } })) { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java index cfafe51912..2f7d3b13c8 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement; @@ -148,7 +149,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatem import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyRequireInstanceStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyStatusStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyYangVersionStatement; @@ -524,7 +524,7 @@ public final class EffectiveStatements { public static ImportEffectiveStatement createImport(final ImportStatement declared, final ImmutableList> substatements, final SourceIdentifier importedSource) { - return new ImportEffectiveStatementImpl(declared, substatements, importedSource); + return new ImportEffectiveStatementImpl(declared, substatements, importedSource.revision()); } public static IncludeEffectiveStatement createInclude(final IncludeStatement declared, diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java index 09aad9b3cf..f5af6c869f 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java @@ -17,7 +17,6 @@ import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DocumentedNodeMixin; @@ -26,10 +25,9 @@ public final class ImportEffectiveStatementImpl extends WithSubstatements> substatements, - final @NonNull SourceIdentifier importedSource) { + final ImmutableList> substatements, final @NonNull Revision revision) { super(declared, substatements); - revision = importedSource.revision(); + this.revision = revision; } @Override diff --git a/model/yang-model-spi/src/main/java/module-info.java b/model/yang-model-spi/src/main/java/module-info.java index 4a54a3f500..db7d860963 100644 --- a/model/yang-model-spi/src/main/java/module-info.java +++ b/model/yang-model-spi/src/main/java/module-info.java @@ -8,6 +8,7 @@ module org.opendaylight.yangtools.yang.model.spi { exports org.opendaylight.yangtools.yang.model.spi; exports org.opendaylight.yangtools.yang.model.spi.meta; + exports org.opendaylight.yangtools.yang.model.spi.source; requires transitive com.google.common; requires transitive org.opendaylight.yangtools.concepts; diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYangTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYangTextSource.java similarity index 72% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYangTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYangTextSource.java index 65a7e038ac..1f89a73600 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYangTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYangTextSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; @@ -13,15 +13,15 @@ import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.io.CharSource; import java.io.IOException; import java.io.Reader; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; -final class DelegatedYangTextSchemaSource extends YangTextSchemaSource implements Delegator { +final class DelegatedYangTextSource extends YangTextSource implements Delegator { private final @NonNull CharSource delegate; - DelegatedYangTextSchemaSource(final SourceIdentifier identifier, final CharSource delegate) { - super(identifier); + DelegatedYangTextSource(final SourceIdentifier sourceId, final CharSource delegate) { + super(sourceId); this.delegate = requireNonNull(delegate); } @@ -36,8 +36,8 @@ final class DelegatedYangTextSchemaSource extends YangTextSchemaSource implement } @Override - public Optional getSymbolicName() { - return Optional.of("[" + delegate.toString() + "]"); + public String symbolicName() { + return "[" + delegate.toString() + "]"; } @Override diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYinTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYinTextSource.java similarity index 73% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYinTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYinTextSource.java index 83e802dac7..d008458088 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYinTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYinTextSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; @@ -13,15 +13,15 @@ import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.io.ByteSource; import java.io.IOException; import java.io.InputStream; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; -final class DelegatedYinTextSchemaSource extends YinTextSchemaSource implements Delegator { +final class DelegatedYinTextSource extends YinTextSource implements Delegator { private final @NonNull ByteSource delegate; - DelegatedYinTextSchemaSource(final SourceIdentifier identifier, final ByteSource delegate) { - super(identifier); + DelegatedYinTextSource(final SourceIdentifier sourceId, final ByteSource delegate) { + super(sourceId); this.delegate = requireNonNull(delegate); } @@ -36,8 +36,8 @@ final class DelegatedYinTextSchemaSource extends YinTextSchemaSource implements } @Override - public Optional getSymbolicName() { - return Optional.of("[" + delegate.toString() + "]"); + public String symbolicName() { + return "[" + delegate.toString() + "]"; } @Override diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYangTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYangTextSource.java similarity index 73% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYangTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYangTextSource.java index c0cf6ec2fb..220365eeb6 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYangTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYangTextSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; @@ -15,19 +15,19 @@ import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import java.nio.charset.Charset; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** - * A resource-backed {@link YinTextSchemaSource}. + * A resource-backed {@link YangTextSource}. */ -final class ResourceYangTextSchemaSource extends YangTextSchemaSource implements Delegator { +final class ResourceYangTextSource extends YangTextSource implements Delegator { private final @NonNull URL url; private final @NonNull Charset charset; - ResourceYangTextSchemaSource(final SourceIdentifier identifier, final URL url, final Charset charset) { - super(identifier); + ResourceYangTextSource(final SourceIdentifier sourceId, final URL url, final Charset charset) { + super(sourceId); this.url = requireNonNull(url); this.charset = requireNonNull(charset); } @@ -48,7 +48,7 @@ final class ResourceYangTextSchemaSource extends YangTextSchemaSource implements } @Override - public Optional getSymbolicName() { - return Optional.of(url.toString()); + public String symbolicName() { + return url.toString(); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYinTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYinTextSource.java similarity index 71% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYinTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYinTextSource.java index 0713ff9b79..3c9b1b1dce 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYinTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/ResourceYinTextSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; @@ -13,18 +13,18 @@ import com.google.common.base.MoreObjects.ToStringHelper; import java.io.IOException; import java.io.InputStream; import java.net.URL; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** - * A resource-backed {@link YangTextSchemaSource}. + * A resource-backed {@link YinTextSource}. */ -final class ResourceYinTextSchemaSource extends YinTextSchemaSource implements Delegator { +final class ResourceYinTextSource extends YinTextSource implements Delegator { private final @NonNull URL url; - ResourceYinTextSchemaSource(final SourceIdentifier identifier, final URL url) { - super(identifier); + ResourceYinTextSource(final SourceIdentifier sourceId, final URL url) { + super(sourceId); this.url = requireNonNull(url); } @@ -44,7 +44,7 @@ final class ResourceYinTextSchemaSource extends YinTextSchemaSource implements D } @Override - public Optional getSymbolicName() { - return Optional.of(url.toString()); + public String symbolicName() { + return url.toString(); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/StringYangTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/StringYangTextSource.java similarity index 60% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/StringYangTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/StringYangTextSource.java index 9ac1d59c53..a5fb641072 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/StringYangTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/StringYangTextSource.java @@ -5,37 +5,37 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; import java.io.Reader; import java.io.StringReader; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** - * A {@link YangTextSchemaSource} with content readily available. + * A {@link YangTextSource} with content readily available. */ -public class StringYangTextSchemaSource extends YangTextSchemaSource { +public class StringYangTextSource extends YangTextSource { private final @Nullable String symbolicName; private final @NonNull String content; - public StringYangTextSchemaSource(final SourceIdentifier identifier, final String content) { - this(identifier, content, null); + public StringYangTextSource(final SourceIdentifier sourceId, final String content) { + this(sourceId, content, null); } - public StringYangTextSchemaSource(final SourceIdentifier identifier, final String content, + public StringYangTextSource(final SourceIdentifier sourceId, final String content, final @Nullable String symbolicName) { - super(identifier); + super(sourceId); this.content = requireNonNull(content); this.symbolicName = symbolicName; } @Override - public final Optional getSymbolicName() { - return Optional.ofNullable(symbolicName); + public final String symbolicName() { + return symbolicName; } @Override diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextFileSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextFileSource.java similarity index 75% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextFileSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextFileSource.java index c17d96bd92..06890023dd 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextFileSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextFileSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; @@ -16,21 +16,19 @@ import java.io.Reader; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** - * A {@link YangTextSchemaSource} backed by a file. - * - * @author Robert Varga + * A {@link YangTextSource} backed by a file. */ -final class YangTextFileSchemaSource extends YangTextSchemaSource implements Delegator { +final class YangTextFileSource extends YangTextSource implements Delegator { private final @NonNull Path path; private final @NonNull Charset charset; - YangTextFileSchemaSource(final SourceIdentifier identifier, final Path path, final Charset charset) { - super(identifier); + YangTextFileSource(final SourceIdentifier sourceId, final Path path, final Charset charset) { + super(sourceId); this.path = requireNonNull(path); this.charset = requireNonNull(charset); } @@ -51,9 +49,9 @@ final class YangTextFileSchemaSource extends YangTextSchemaSource implements Del } @Override - public Optional getSymbolicName() { + public String symbolicName() { // FIXME: NEXT: this is forcing internal normalization. I think this boils down to providing Path back, which // is essentially getDelegate() anyway. Perhaps expose it as PathAware? - return Optional.of(path.toString()); + return path.toString(); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextSource.java similarity index 73% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextSource.java index ec5a93ff9f..335120ed19 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YangTextSource.java @@ -5,14 +5,13 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import static org.opendaylight.yangtools.yang.common.YangConstants.RFC6020_YANG_FILE_EXTENSION; import static org.opendaylight.yangtools.yang.common.YangNames.parseFilename; -import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.io.ByteSource; @@ -26,16 +25,17 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangSourceRepresentation; /** * YANG text schema source representation. Exposes an RFC6020 or RFC7950 text representation as an {@link InputStream}. */ -@Beta -public abstract class YangTextSchemaSource extends CharSource implements YangSchemaSourceRepresentation { - private final @NonNull SourceIdentifier identifier; +public abstract class YangTextSource extends CharSource implements YangSourceRepresentation { + private final @NonNull SourceIdentifier sourceId; - protected YangTextSchemaSource(final SourceIdentifier identifier) { - this.identifier = requireNonNull(identifier); + protected YangTextSource(final SourceIdentifier sourceId) { + this.sourceId = requireNonNull(sourceId); } public static @NonNull SourceIdentifier identifierFromFilename(final String name) { @@ -56,7 +56,7 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @param charset Expected character set * @return A new YangTextSchemaSource */ - public static @NonNull YangTextSchemaSource delegateForByteSource(final SourceIdentifier identifier, + public static @NonNull YangTextSource delegateForByteSource(final SourceIdentifier identifier, final ByteSource delegate, final Charset charset) { return delegateForCharSource(identifier, delegate.asCharSource(charset)); } @@ -70,7 +70,7 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @return A new YangTextSchemaSource * @throws IllegalArgumentException if the file name has invalid format */ - public static @NonNull YangTextSchemaSource delegateForByteSource(final String fileName, + public static @NonNull YangTextSource delegateForByteSource(final String fileName, final ByteSource delegate, final Charset charset) { return delegateForCharSource(fileName, delegate.asCharSource(charset)); } @@ -83,9 +83,9 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @param delegate Backing CharSource instance * @return A new YangTextSchemaSource */ - public static @NonNull YangTextSchemaSource delegateForCharSource(final SourceIdentifier identifier, + public static @NonNull YangTextSource delegateForCharSource(final SourceIdentifier identifier, final CharSource delegate) { - return new DelegatedYangTextSchemaSource(identifier, delegate); + return new DelegatedYangTextSource(identifier, delegate); } /** @@ -97,9 +97,9 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @return A new YangTextSchemaSource * @throws IllegalArgumentException if the file name has invalid format */ - public static @NonNull YangTextSchemaSource delegateForCharSource(final String fileName, + public static @NonNull YangTextSource delegateForCharSource(final String fileName, final CharSource delegate) { - return new DelegatedYangTextSchemaSource(identifierFromFilename(fileName), delegate); + return new DelegatedYangTextSource(identifierFromFilename(fileName), delegate); } /** @@ -111,7 +111,7 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @throws IllegalArgumentException if the file name has invalid format or if the supplied File is not a file * @throws NullPointerException if file is {@code null} */ - public static @NonNull YangTextSchemaSource forPath(final Path path) { + public static @NonNull YangTextSource forPath(final Path path) { return forPath(path, identifierFromFilename(path.toFile().getName())); } @@ -124,7 +124,7 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @throws NullPointerException if any argument is {@code null} * @throws IllegalArgumentException if the supplied path is not a regular file */ - public static @NonNull YangTextSchemaSource forPath(final Path path, final SourceIdentifier identifier) { + public static @NonNull YangTextSource forPath(final Path path, final SourceIdentifier identifier) { return forPath(path, identifier, StandardCharsets.UTF_8); } @@ -138,26 +138,26 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @throws NullPointerException if any argument is {@code null} * @throws IllegalArgumentException if the supplied path is not a regular file */ - public static @NonNull YangTextSchemaSource forPath(final Path path, final SourceIdentifier identifier, + public static @NonNull YangTextSource forPath(final Path path, final SourceIdentifier identifier, final Charset charset) { checkArgument(Files.isRegularFile(path), "Supplied path %s is not a regular file", path); - return new YangTextFileSchemaSource(identifier, path, charset); + return new YangTextFileSource(identifier, path, charset); } /** - * Create a new {@link YangTextSchemaSource} backed by a resource available in the ClassLoader where this + * Create a new {@link YangTextSource} backed by a resource available in the ClassLoader where this * class resides. * * @param resourceName Resource name * @return A new instance. * @throws IllegalArgumentException if the resource does not exist or if the name has invalid format */ - public static @NonNull YangTextSchemaSource forResource(final String resourceName) { - return forResource(YangTextSchemaSource.class, resourceName); + public static @NonNull YangTextSource forResource(final String resourceName) { + return forResource(YangTextSource.class, resourceName); } /** - * Create a new {@link YangTextSchemaSource} backed by a resource by a resource available on the ClassLoader + * Create a new {@link YangTextSource} backed by a resource by a resource available on the ClassLoader * which loaded the specified class. * * @param clazz Class reference @@ -165,12 +165,12 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @return A new instance. * @throws IllegalArgumentException if the resource does not exist or if the name has invalid format */ - public static @NonNull YangTextSchemaSource forResource(final Class clazz, final String resourceName) { + public static @NonNull YangTextSource forResource(final Class clazz, final String resourceName) { return forResource(clazz, resourceName, StandardCharsets.UTF_8); } /** - * Create a new {@link YangTextSchemaSource} backed by a resource by a resource available on the ClassLoader + * Create a new {@link YangTextSource} backed by a resource by a resource available on the ClassLoader * which loaded the specified class. * * @param clazz Class reference @@ -179,29 +179,29 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @return A new instance. * @throws IllegalArgumentException if the resource does not exist or if the name has invalid format */ - public static @NonNull YangTextSchemaSource forResource(final Class clazz, final String resourceName, + public static @NonNull YangTextSource forResource(final Class clazz, final String resourceName, final Charset charset) { final String fileName = resourceName.substring(resourceName.lastIndexOf('/') + 1); final SourceIdentifier identifier = identifierFromFilename(fileName); final URL url = Resources.getResource(clazz, resourceName); - return new ResourceYangTextSchemaSource(identifier, url, charset); + return new ResourceYangTextSource(identifier, url, charset); } /** - * Create a new {@link YangTextSchemaSource} backed by a URL. + * Create a new {@link YangTextSource} backed by a URL. * * @param url Backing URL * @param identifier Source identifier * @return A new instance. * @throws NullPointerException if any argument is {@code null} */ - public static @NonNull YangTextSchemaSource forURL(final URL url, final SourceIdentifier identifier) { + public static @NonNull YangTextSource forURL(final URL url, final SourceIdentifier identifier) { return forURL(url, identifier, StandardCharsets.UTF_8); } /** - * Create a new {@link YangTextSchemaSource} backed by a URL. + * Create a new {@link YangTextSource} backed by a URL. * * @param url Backing URL * @param identifier Source identifier @@ -209,20 +209,19 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @return A new instance. * @throws NullPointerException if any argument is {@code null} */ - public static @NonNull YangTextSchemaSource forURL(final URL url, final SourceIdentifier identifier, + public static @NonNull YangTextSource forURL(final URL url, final SourceIdentifier identifier, final Charset charset) { - return new ResourceYangTextSchemaSource(identifier, url, charset); + return new ResourceYangTextSource(identifier, url, charset); } - @Override - public final SourceIdentifier getIdentifier() { - return identifier; + public final Class getType() { + return YangTextSource.class; } @Override - public final Class getType() { - return YangTextSchemaSource.class; + public final SourceIdentifier sourceId() { + return sourceId; } @Override @@ -240,6 +239,6 @@ public abstract class YangTextSchemaSource extends CharSource implements YangSch * @return ToStringHelper supplied as input argument. */ protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("identifier", identifier); + return toStringHelper.add("identifier", sourceId); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinDomSource.java similarity index 72% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinDomSource.java index 023aaf0458..bb42fa705f 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinDomSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; @@ -16,7 +16,6 @@ import static org.opendaylight.yangtools.yang.model.api.YangStmtMapping.SUBMODUL import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; -import java.util.Optional; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -26,6 +25,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Attr; @@ -34,10 +34,10 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** - * Utility {@link YinXmlSchemaSource} exposing a W3C {@link DOMSource} representation of YIN model. + * Utility {@link YinXmlSource} exposing a W3C {@link DOMSource} representation of YIN model. */ -public abstract class YinDomSchemaSource implements YinXmlSchemaSource { - private static final Logger LOG = LoggerFactory.getLogger(YinDomSchemaSource.class); +public abstract sealed class YinDomSource implements YinXmlSource { + private static final Logger LOG = LoggerFactory.getLogger(YinDomSource.class); private static final TransformerFactory TRANSFORMER_FACTORY = TransformerFactory.newInstance(); private static final QName REVISION_STMT = REVISION.getStatementName(); private static final String MODULE_ARG = MODULE.getArgumentDefinition().orElseThrow() @@ -45,19 +45,15 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { private static final String REVISION_ARG = REVISION.getArgumentDefinition().orElseThrow() .argumentName().getLocalName(); - YinDomSchemaSource() { - // Prevent outside instantiation - } - /** - * Create a new {@link YinDomSchemaSource} using an identifier and a source. + * Create a new {@link YinDomSource} using an identifier and a source. * * @param identifier Schema source identifier * @param source W3C DOM source * @param symbolicName Source symbolic name - * @return A new {@link YinDomSchemaSource} instance. + * @return A new {@link YinDomSource} instance. */ - public static @NonNull YinDomSchemaSource create(final @NonNull SourceIdentifier identifier, + public static @NonNull YinDomSource create(final @NonNull SourceIdentifier identifier, final @NonNull DOMSource source, final @Nullable String symbolicName) { final Node root = source.getNode().getFirstChild(); @@ -90,7 +86,7 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { final Attr dateAttr = revisionStmt.getAttributeNode(REVISION_ARG); checkArgument(dateAttr != null, "No revision statement argument found in %s", revisionStmt); - final SourceIdentifier parsedId = new SourceIdentifier(nameAttr.getValue(), dateAttr.getValue()); + final var parsedId = new SourceIdentifier(nameAttr.getValue(), dateAttr.getValue()); final SourceIdentifier id; if (!parsedId.equals(identifier)) { LOG.debug("Changed identifier from {} to {}", identifier, parsedId); @@ -103,45 +99,45 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { } /** - * Create a {@link YinDomSchemaSource} from a {@link YinXmlSchemaSource}. If the argument is already a + * Create a {@link YinDomSource} from a {@link YinXmlSource}. If the argument is already a * YinDomSchemaSource, this method returns the same instance. The source will be translated on first access, * at which point an {@link IllegalStateException} may be raised. * * @param xmlSchemaSource Backing schema source - * @return A {@link YinDomSchemaSource} instance + * @return A {@link YinDomSource} instance */ - public static @NonNull YinDomSchemaSource lazyTransform(final YinXmlSchemaSource xmlSchemaSource) { - final YinDomSchemaSource cast = castSchemaSource(xmlSchemaSource); + public static @NonNull YinDomSource lazyTransform(final YinXmlSource xmlSchemaSource) { + final var cast = castSchemaSource(xmlSchemaSource); return cast != null ? cast : new Transforming(xmlSchemaSource); } /** - * Create a {@link YinDomSchemaSource} from a {@link YinXmlSchemaSource}. If the argument is already a + * Create a {@link YinDomSource} from a {@link YinXmlSource}. If the argument is already a * YinDomSchemaSource, this method returns the same instance. The source will be translated immediately. * * @param xmlSchemaSource Backing schema source - * @return A {@link YinDomSchemaSource} instance + * @return A {@link YinDomSource} instance * @throws TransformerException when the provided source fails to transform */ - public static @NonNull YinDomSchemaSource transform(final YinXmlSchemaSource xmlSchemaSource) + public static @NonNull YinDomSource transform(final YinXmlSource xmlSchemaSource) throws TransformerException { - final YinDomSchemaSource cast = castSchemaSource(xmlSchemaSource); + final var cast = castSchemaSource(xmlSchemaSource); return cast != null ? cast : - create(xmlSchemaSource.getIdentifier(), transformSource(xmlSchemaSource.getSource()), - xmlSchemaSource.getSymbolicName().orElse(null)); + create(xmlSchemaSource.sourceId(), transformSource(xmlSchemaSource.getSource()), + xmlSchemaSource.symbolicName()); } @Override - public abstract DOMSource getSource(); + public final Class getType() { + return YinDomSource.class; + } @Override - public final Class getType() { - return YinDomSchemaSource.class; - } + public abstract DOMSource getSource(); @Override public final String toString() { - return addToStringAttributes(MoreObjects.toStringHelper(this).add("identifier", getIdentifier())).toString(); + return addToStringAttributes(MoreObjects.toStringHelper(this).add("sourceId", sourceId())).toString(); } /** @@ -162,43 +158,43 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { return new DOMSource(result.getNode(), result.getSystemId()); } - private static @Nullable YinDomSchemaSource castSchemaSource(final YinXmlSchemaSource xmlSchemaSource) { - if (xmlSchemaSource instanceof YinDomSchemaSource yinDom) { + private static @Nullable YinDomSource castSchemaSource(final YinXmlSource xmlSchemaSource) { + if (xmlSchemaSource instanceof YinDomSource yinDom) { return yinDom; } - final Source source = xmlSchemaSource.getSource(); + final var source = xmlSchemaSource.getSource(); if (source instanceof DOMSource dom) { - return create(xmlSchemaSource.getIdentifier(), dom, xmlSchemaSource.getSymbolicName().orElse(null)); + return create(xmlSchemaSource.sourceId(), dom, xmlSchemaSource.symbolicName()); } return null; } - private static final class Simple extends YinDomSchemaSource { - private final @NonNull SourceIdentifier identifier; + private static final class Simple extends YinDomSource { + private final @NonNull SourceIdentifier sourceId; private final @NonNull DOMSource source; private final String symbolicName; - Simple(final @NonNull SourceIdentifier identifier, final @NonNull DOMSource source, + Simple(final @NonNull SourceIdentifier sourceId, final @NonNull DOMSource source, final @Nullable String symbolicName) { - this.identifier = requireNonNull(identifier); + this.sourceId = requireNonNull(sourceId); this.source = requireNonNull(source); this.symbolicName = symbolicName; } @Override - public DOMSource getSource() { - return source; + public SourceIdentifier sourceId() { + return sourceId; } @Override - public SourceIdentifier getIdentifier() { - return identifier; + public DOMSource getSource() { + return source; } @Override - public Optional getSymbolicName() { - return Optional.ofNullable(symbolicName); + public String symbolicName() { + return symbolicName; } @Override @@ -207,14 +203,25 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { } } - private static final class Transforming extends YinDomSchemaSource { - private final YinXmlSchemaSource xmlSchemaSource; + private static final class Transforming extends YinDomSource { + private final YinXmlSource xmlSchemaSource; + private volatile DOMSource source; - Transforming(final YinXmlSchemaSource xmlSchemaSource) { + Transforming(final YinXmlSource xmlSchemaSource) { this.xmlSchemaSource = requireNonNull(xmlSchemaSource); } + @Override + public SourceIdentifier sourceId() { + return xmlSchemaSource.sourceId(); + } + + @Override + public String symbolicName() { + return xmlSchemaSource.symbolicName(); + } + @Override public DOMSource getSource() { DOMSource ret = source; @@ -235,16 +242,6 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { return ret; } - @Override - public SourceIdentifier getIdentifier() { - return xmlSchemaSource.getIdentifier(); - } - - @Override - public Optional getSymbolicName() { - return xmlSchemaSource.getSymbolicName(); - } - @Override protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { return toStringHelper.add("xmlSchemaSource", xmlSchemaSource); diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextFileSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextFileSource.java similarity index 70% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextFileSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextFileSource.java index 10b993e02f..d1f1358bb8 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextFileSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextFileSource.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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static java.util.Objects.requireNonNull; @@ -14,20 +14,18 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Delegator; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** - * A {@link YinTextSchemaSource} backed by a file. - * - * @author Robert Varga + * A {@link YinTextSource} backed by a file. */ -final class YinTextFileSchemaSource extends YinTextSchemaSource implements Delegator { +final class YinTextFileSource extends YinTextSource implements Delegator { private final @NonNull Path path; - YinTextFileSchemaSource(final @NonNull SourceIdentifier identifier, final @NonNull Path path) { - super(identifier); + YinTextFileSource(final @NonNull SourceIdentifier sourceId, final @NonNull Path path) { + super(sourceId); this.path = requireNonNull(path); } @@ -47,7 +45,7 @@ final class YinTextFileSchemaSource extends YinTextSchemaSource implements Deleg } @Override - public Optional getSymbolicName() { - return Optional.of(path.toString()); + public String symbolicName() { + return path.toString(); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextSource.java similarity index 73% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextSource.java index 9fc0f6254c..1e78087473 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextSource.java @@ -5,12 +5,11 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.io.ByteSource; @@ -21,21 +20,22 @@ import java.nio.file.Path; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.common.YangNames; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YinSourceRepresentation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * YIN text schema source representation. Exposes an RFC6020 or RFC7950 XML representation as an {@link InputStream}. */ -@Beta -public abstract class YinTextSchemaSource extends ByteSource implements YinSchemaSourceRepresentation { - private static final Logger LOG = LoggerFactory.getLogger(YinTextSchemaSource.class); +public abstract class YinTextSource extends ByteSource implements YinSourceRepresentation { + private static final Logger LOG = LoggerFactory.getLogger(YinTextSource.class); private static final String XML_EXTENSION = ".xml"; - private final @NonNull SourceIdentifier identifier; + private final @NonNull SourceIdentifier sourceId; - protected YinTextSchemaSource(final SourceIdentifier identifier) { - this.identifier = requireNonNull(identifier); + protected YinTextSource(final SourceIdentifier sourceId) { + this.sourceId = requireNonNull(sourceId); } public static @NonNull SourceIdentifier identifierFromFilename(final String name) { @@ -55,13 +55,13 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem } @Override - public final SourceIdentifier getIdentifier() { - return identifier; + public final SourceIdentifier sourceId() { + return sourceId; } @Override - public final Class getType() { - return YinTextSchemaSource.class; + public final Class getType() { + return YinTextSource.class; } @Override @@ -79,7 +79,7 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem * @return ToStringHelper supplied as input argument. */ protected ToStringHelper addToStringAttributes(final @NonNull ToStringHelper toStringHelper) { - return toStringHelper.add("identifier", identifier); + return toStringHelper.add("identifier", sourceId); } /** @@ -90,19 +90,19 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem * @param delegate Backing ByteSource instance * @return A new YinTextSchemaSource */ - public static @NonNull YinTextSchemaSource delegateForByteSource(final SourceIdentifier identifier, + public static @NonNull YinTextSource delegateForByteSource(final SourceIdentifier identifier, final ByteSource delegate) { - return new DelegatedYinTextSchemaSource(identifier, delegate); + return new DelegatedYinTextSource(identifier, delegate); } - public static @NonNull YinTextSchemaSource forPath(final Path path) { + public static @NonNull YinTextSource forPath(final Path path) { checkArgument(Files.isRegularFile(path), "Supplied path %s is not a regular file", path); - return new YinTextFileSchemaSource(identifierFromFilename(path.toFile().getName()), path); + return new YinTextFileSource(identifierFromFilename(path.toFile().getName()), path); } - public static @NonNull YinTextSchemaSource forResource(final Class clazz, final String resourceName) { + public static @NonNull YinTextSource forResource(final Class clazz, final String resourceName) { final String fileName = resourceName.substring(resourceName.lastIndexOf('/') + 1); - return new ResourceYinTextSchemaSource(identifierFromFilename(fileName), + return new ResourceYinTextSource(identifierFromFilename(fileName), Resources.getResource(clazz, resourceName)); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinXmlSchemaSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinXmlSource.java similarity index 73% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinXmlSchemaSource.java rename to model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinXmlSource.java index 4bd18ee53a..9f62b1296d 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinXmlSchemaSource.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinXmlSource.java @@ -5,19 +5,18 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.model.spi.source; -import com.google.common.annotations.Beta; import javax.xml.transform.Source; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.source.YinSourceRepresentation; /** * YIN text schema source representation. Exposes an RFC6020 or RFC7950 XML representation as an XML {@link Source}. */ -@Beta -public interface YinXmlSchemaSource extends YinSchemaSourceRepresentation { +public interface YinXmlSource extends YinSourceRepresentation { @Override - Class getType(); + Class getType(); /** * Return an XML {@link Source} of the YIN document. diff --git a/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/package-info.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/package-info.java new file mode 100644 index 0000000000..04565fb750 --- /dev/null +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/package-info.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +/** + * Various utilities dealing with sources of YANG and YIN models. + */ +package org.opendaylight.yangtools.yang.model.spi.source; \ No newline at end of file diff --git a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java index 9b39d85b92..7b9c847f15 100644 --- a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java +++ b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java @@ -14,7 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.Submodule; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * The Schema Context Util contains support methods for searching through Schema Context modules for specified schema diff --git a/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java b/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java index d14cc5c982..5adedebd9c 100644 --- a/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java +++ b/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java @@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Set; import org.junit.jupiter.api.Test; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.spi.SimpleSchemaContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; diff --git a/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java b/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java index cfe0b54f5e..84e2e4b906 100644 --- a/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java +++ b/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -42,9 +42,9 @@ class ContextReferenceTest { .build(); final var foo = reactor.newBuild() - .addSource(YangStatementStreamSource.create(YangTextSchemaSource.forResource( + .addSource(YangStatementStreamSource.create(YangTextSource.forResource( ContextReferenceTest.class, "/yang-ext.yang"))) - .addSource(YangStatementStreamSource.create(YangTextSchemaSource.forResource( + .addSource(YangStatementStreamSource.create(YangTextSource.forResource( ContextReferenceTest.class, "/ctxref.yang"))) .buildEffective() .getModuleStatements() diff --git a/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/MountTest.java b/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/MountTest.java index 8668f49ebd..a95c87777d 100644 --- a/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/MountTest.java +++ b/parser/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/MountTest.java @@ -14,7 +14,7 @@ import org.opendaylight.yangtools.odlext.model.api.MountEffectiveStatement; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -30,10 +30,8 @@ class MountTest { new MountStatementSupport(YangParserConfiguration.DEFAULT)) .build(); final var foo = reactor.newBuild() - .addSource(YangStatementStreamSource.create(YangTextSchemaSource.forResource( - MountTest.class, "/yang-ext.yang"))) - .addSource(YangStatementStreamSource.create(YangTextSchemaSource.forResource( - MountTest.class, "/mount.yang"))) + .addSource(YangStatementStreamSource.create(YangTextSource.forResource(MountTest.class, "/yang-ext.yang"))) + .addSource(YangStatementStreamSource.create(YangTextSource.forResource(MountTest.class, "/mount.yang"))) .buildEffective() .getModuleStatements() .get(FOO); diff --git a/parser/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java b/parser/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java index 44f8b834ce..5fb6852e2f 100644 --- a/parser/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java +++ b/parser/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java @@ -17,7 +17,7 @@ import org.opendaylight.yangtools.rfc6241.model.api.NetconfConstants; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -34,9 +34,9 @@ class NetconfTest { .build(); final var context = reactor.newBuild() .addLibSources(YangStatementStreamSource.create( - YangTextSchemaSource.forResource(NetconfTest.class, "/ietf-inet-types@2013-07-15.yang"))) + YangTextSource.forResource(NetconfTest.class, "/ietf-inet-types@2013-07-15.yang"))) .addSource(YangStatementStreamSource.create( - YangTextSchemaSource.forResource(NetconfTest.class, "/ietf-netconf@2011-06-01.yang"))) + YangTextSource.forResource(NetconfTest.class, "/ietf-netconf@2011-06-01.yang"))) .buildEffective(); final var module = context.findModule(NetconfConstants.RFC6241_MODULE).orElseThrow(); diff --git a/parser/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java b/parser/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java index 32e00f1a4a..42f8b8d62e 100644 --- a/parser/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java +++ b/parser/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java @@ -15,7 +15,7 @@ import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllSchemaNode; import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode; import org.opendaylight.yangtools.rfc6536.model.api.NACMConstants; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -34,9 +34,9 @@ class NACMTest { final var context = reactor.newBuild() .addSources( YangStatementStreamSource.create( - YangTextSchemaSource.forResource(NACMTest.class, "/ietf-netconf-acm@2012-02-22.yang")), + YangTextSource.forResource(NACMTest.class, "/ietf-netconf-acm@2012-02-22.yang")), YangStatementStreamSource.create( - YangTextSchemaSource.forResource(NACMTest.class, "/ietf-yang-types@2013-07-15.yang"))) + YangTextSource.forResource(NACMTest.class, "/ietf-yang-types@2013-07-15.yang"))) .buildEffective(); final var module = context.findModule(NACMConstants.RFC6536_MODULE).orElseThrow(); diff --git a/parser/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java b/parser/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java index 5c277aba92..8eb6bb2419 100644 --- a/parser/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java +++ b/parser/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java @@ -24,7 +24,7 @@ import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -54,9 +54,9 @@ class IetfYangSmiv2ExtensionPluginTest { .build(); final var schema = reactor.newBuild() .addSources( - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( IetfYangSmiv2ExtensionPluginTest.class, "/foo.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( IetfYangSmiv2ExtensionPluginTest.class, "/ietf-yang-smiv2.yang"))) .buildEffective(); diff --git a/parser/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java b/parser/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java index aece6c7023..a82b0ee663 100644 --- a/parser/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java +++ b/parser/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java @@ -17,8 +17,8 @@ import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode; import org.opendaylight.yangtools.yang.common.AnnotationName; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -37,9 +37,9 @@ class AnnotationTest { final var context = reactor.newBuild() .addSources( YangStatementStreamSource.create( - YangTextSchemaSource.forResource(AnnotationTest.class, "/ietf-yang-metadata@2016-08-05.yang")), + YangTextSource.forResource(AnnotationTest.class, "/ietf-yang-metadata@2016-08-05.yang")), YangStatementStreamSource.create( - YangTextSchemaSource.forResource(AnnotationTest.class, "/example-last-modified.yang"))) + YangTextSource.forResource(AnnotationTest.class, "/example-last-modified.yang"))) .buildEffective(); final var annotations = AnnotationSchemaNode.findAll(context); diff --git a/parser/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/AbstractYangDataTest.java b/parser/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/AbstractYangDataTest.java index 705dd41855..3816657d31 100644 --- a/parser/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/AbstractYangDataTest.java +++ b/parser/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/AbstractYangDataTest.java @@ -10,7 +10,7 @@ package org.opendaylight.yangtools.rfc8040.parser; import java.io.IOException; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -42,7 +42,7 @@ abstract class AbstractYangDataTest { static StatementStreamSource sourceForResource(final String resourceName) { try { return YangStatementStreamSource.create( - YangTextSchemaSource.forResource(AbstractYangDataTest.class, resourceName)); + YangTextSource.forResource(AbstractYangDataTest.class, resourceName)); } catch (IOException | YangSyntaxErrorException e) { throw new IllegalArgumentException("Failed to create source", e); } diff --git a/parser/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java b/parser/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java index 0b327953bc..601731c0d9 100644 --- a/parser/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java +++ b/parser/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java @@ -17,7 +17,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -41,16 +41,15 @@ class MountPointTest { final var context = reactor.newBuild() .addLibSources( YangStatementStreamSource.create( - YangTextSchemaSource.forResource(MountPointTest.class, "/ietf-inet-types@2013-07-15.yang")), + YangTextSource.forResource(MountPointTest.class, "/ietf-inet-types@2013-07-15.yang")), YangStatementStreamSource.create( - YangTextSchemaSource.forResource(MountPointTest.class, "/ietf-yang-schema-mount@2019-01-14.yang")), + YangTextSource.forResource(MountPointTest.class, "/ietf-yang-schema-mount@2019-01-14.yang")), YangStatementStreamSource.create( - YangTextSchemaSource.forResource(MountPointTest.class, "/ietf-yang-types@2013-07-15.yang"))) + YangTextSource.forResource(MountPointTest.class, "/ietf-yang-types@2013-07-15.yang"))) .addSources( + YangStatementStreamSource.create(YangTextSource.forResource(MountPointTest.class, "/example-grp.yang")), YangStatementStreamSource.create( - YangTextSchemaSource.forResource(MountPointTest.class, "/example-grp.yang")), - YangStatementStreamSource.create( - YangTextSchemaSource.forResource(MountPointTest.class, "/example-uses.yang"))) + YangTextSource.forResource(MountPointTest.class, "/example-uses.yang"))) .buildEffective(); assertEquals(5, context.getModules().size()); diff --git a/parser/rfc8639-parser-support/src/test/java/org/opendaylight/yangtools/rfc8639/parser/SubscribedNotificationsTest.java b/parser/rfc8639-parser-support/src/test/java/org/opendaylight/yangtools/rfc8639/parser/SubscribedNotificationsTest.java index ccaa5534c3..0ea631801e 100644 --- a/parser/rfc8639-parser-support/src/test/java/org/opendaylight/yangtools/rfc8639/parser/SubscribedNotificationsTest.java +++ b/parser/rfc8639-parser-support/src/test/java/org/opendaylight/yangtools/rfc8639/parser/SubscribedNotificationsTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.rfc8639.model.api.SubscribedNotificationsConstants; import org.opendaylight.yangtools.rfc8639.model.api.SubscriptionStateNotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -30,24 +30,24 @@ class SubscribedNotificationsTest { final var context = reactor.newBuild() .addLibSources( - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-inet-types@2013-07-15.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-interfaces@2018-02-20.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-ip@2018-02-22.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-netconf-acm@2018-02-14.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-network-instance@2019-01-21.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-restconf@2017-01-26.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-yang-schema-mount@2019-01-14.yang")), - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-yang-types@2013-07-15.yang"))) .addSources( - YangStatementStreamSource.create(YangTextSchemaSource.forResource( + YangStatementStreamSource.create(YangTextSource.forResource( SubscribedNotificationsTest.class, "/ietf-subscribed-notifications@2019-09-09.yang"))) .buildEffective(); diff --git a/parser/rfc8819-parser-support/src/test/java/org/opendaylight/yangtools/rfc8819/parser/ModuleTagTest.java b/parser/rfc8819-parser-support/src/test/java/org/opendaylight/yangtools/rfc8819/parser/ModuleTagTest.java index 26a7ef629d..b8707cf65b 100644 --- a/parser/rfc8819-parser-support/src/test/java/org/opendaylight/yangtools/rfc8819/parser/ModuleTagTest.java +++ b/parser/rfc8819-parser-support/src/test/java/org/opendaylight/yangtools/rfc8819/parser/ModuleTagTest.java @@ -21,7 +21,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.rfc8819.model.api.ModuleTagEffectiveStatement; import org.opendaylight.yangtools.rfc8819.model.api.Tag; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -89,8 +89,7 @@ public class ModuleTagTest { private static YangStatementStreamSource moduleFromResources(final String resourceName) { try { - return YangStatementStreamSource.create( - YangTextSchemaSource.forResource(ModuleTagTest.class, resourceName)); + return YangStatementStreamSource.create(YangTextSource.forResource(ModuleTagTest.class, resourceName)); } catch (final YangSyntaxErrorException | IOException e) { throw new IllegalStateException("Failed to find resource " + resourceName, e); } diff --git a/parser/yang-ir/pom.xml b/parser/yang-ir/pom.xml index 6ca64bfcba..39f16fa94c 100644 --- a/parser/yang-ir/pom.xml +++ b/parser/yang-ir/pom.xml @@ -34,5 +34,9 @@ org.opendaylight.yangtools concepts + + org.opendaylight.yangtools + yang-model-api + diff --git a/parser/yang-ir/src/main/java/module-info.java b/parser/yang-ir/src/main/java/module-info.java index 0ac24e72f2..43cbe9c20e 100644 --- a/parser/yang-ir/src/main/java/module-info.java +++ b/parser/yang-ir/src/main/java/module-info.java @@ -9,8 +9,9 @@ module org.opendaylight.yangtools.yang.ir { exports org.opendaylight.yangtools.yang.ir; requires transitive com.google.common; + requires transitive org.opendaylight.yangtools.yang.model.api; requires org.opendaylight.yangtools.concepts; // Annotations requires static transitive org.eclipse.jdt.annotation; -} \ No newline at end of file +} diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java b/parser/yang-ir/src/main/java/org/opendaylight/yangtools/yang/ir/YangIRSchemaSource.java similarity index 71% rename from yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java rename to parser/yang-ir/src/main/java/org/opendaylight/yangtools/yang/ir/YangIRSchemaSource.java index 690ff2de00..8a7fc490a2 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangIRSchemaSource.java +++ b/parser/yang-ir/src/main/java/org/opendaylight/yangtools/yang/ir/YangIRSchemaSource.java @@ -5,29 +5,25 @@ * 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.model.repo.api; +package org.opendaylight.yangtools.yang.ir; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -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.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangSourceRepresentation; -@Beta -public final class YangIRSchemaSource extends AbstractSimpleIdentifiable - implements YangSchemaSourceRepresentation { +public final class YangIRSchemaSource implements YangSourceRepresentation { + private final @NonNull SourceIdentifier sourceId; private final @NonNull IRStatement rootStatement; private final @Nullable String symbolicName; - public YangIRSchemaSource(final @NonNull SourceIdentifier identifier, final @NonNull IRStatement rootStatement, + public YangIRSchemaSource(final @NonNull SourceIdentifier sourceId, final @NonNull IRStatement rootStatement, final @Nullable String symbolicName) { - super(identifier); + this.sourceId = requireNonNull(sourceId); this.rootStatement = requireNonNull(rootStatement); this.symbolicName = symbolicName; @@ -46,8 +42,13 @@ public final class YangIRSchemaSource extends AbstractSimpleIdentifiable getSymbolicName() { - return Optional.ofNullable(symbolicName); + public SourceIdentifier sourceId() { + return sourceId; + } + + @Override + public String symbolicName() { + return symbolicName; } @Override diff --git a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModule.java b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModule.java index fccfcc8815..1433816d1b 100644 --- a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModule.java +++ b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModule.java @@ -14,8 +14,8 @@ import com.google.common.collect.ImmutableSet; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** * A single RFC8525 {@code module} or {@code import-only-module} @@ -27,11 +27,11 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; * @param submodules Submodules of this module * @param features The set of supported features in this module * @param deviationModuleNames Names of modules containing {@code deviate} statements targetting this module - * @param source A {@link SchemaSourceRepresentation} of the module + * @param source A {@link SourceRepresentation} of the module */ public record YangLibModule(@NonNull SourceIdentifier identifier, @NonNull XMLNamespace namespace, @NonNull ImmutableMap submodules, @NonNull ImmutableSet features, - @NonNull ImmutableSet deviationModuleNames, @NonNull SchemaSourceRepresentation source) { + @NonNull ImmutableSet deviationModuleNames, @NonNull SourceRepresentation source) { public YangLibModule { requireNonNull(identifier); requireNonNull(namespace); diff --git a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModuleSet.java b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModuleSet.java index f718768ee6..564166daf1 100644 --- a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModuleSet.java +++ b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibModuleSet.java @@ -12,7 +12,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableMap; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * A single RFC8525 {@code module-set}. diff --git a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibResolver.java b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibResolver.java index 29b986c8c4..7c9a8a2c7e 100644 --- a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibResolver.java +++ b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibResolver.java @@ -12,7 +12,7 @@ import java.io.IOException; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** * A service capable of transforming a {@link YangLibModuleSet} to an {@link EffectiveModelContext}. @@ -20,12 +20,12 @@ import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation @Beta public interface YangLibResolver { /** - * Return enumeration of concrete types of {@link SchemaSourceRepresentation} this resolver supports. Users can use - * this information prepare the source they have to a representation which will be accepted by this resolver. + * Return enumeration of concrete types of {@link SourceRepresentation} this resolver supports. Users can use this + * information prepare the source they have to a representation which will be accepted by this resolver. * * @return Enumeration of supported schema source representations. */ - @NonNull Collection> supportedSourceRepresentations(); + @NonNull Collection> supportedSourceRepresentations(); /** * Build the effective view of a combined view of effective statements. @@ -34,8 +34,7 @@ public interface YangLibResolver { * @throws IOException if a module source cannot be read * @throws YangSyntaxErrorException when a syntactic error is encountered * @throws NullPointerException if {@code moduleSet} is {@code null} - * @throws IllegalArgumentException if {@code moduleSet} references an unsupported - * {@link SchemaSourceRepresentation} + * @throws IllegalArgumentException if {@code moduleSet} references an unsupported {@link SourceRepresentation} */ @NonNull EffectiveModelContext resolveModuleSet(YangLibModuleSet moduleSet) throws IOException, YangParserException; } diff --git a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibSubmodule.java b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibSubmodule.java index eae369cf7a..751cd82c12 100644 --- a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibSubmodule.java +++ b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangLibSubmodule.java @@ -10,17 +10,17 @@ package org.opendaylight.yangtools.yang.parser.api; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** * A single RFC8525 {@code submodule} list entry. * * @param identifier {@link SourceIdentifier} of this submodule, e.g. the combination of {@code name} and * {@code revision} - * @param source A {@link SchemaSourceRepresentation} of the submodule + * @param source A {@link SourceRepresentation} of the submodule */ -public record YangLibSubmodule(@NonNull SourceIdentifier identifier, @NonNull SchemaSourceRepresentation source) { +public record YangLibSubmodule(@NonNull SourceIdentifier identifier, @NonNull SourceRepresentation source) { public YangLibSubmodule { requireNonNull(identifier); requireNonNull(source); diff --git a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangParser.java b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangParser.java index 84c44f4df0..feb57ed9a6 100644 --- a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangParser.java +++ b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangParser.java @@ -16,8 +16,8 @@ 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.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; /** * Configurable single-use YANG parser. Each instance can be configured to use a different set of models after @@ -26,13 +26,13 @@ import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation @Beta public interface YangParser { /** - * Return enumeration of concrete types of {@link SchemaSourceRepresentation} parsers created from this factory + * Return enumeration of concrete types of {@link SourceRepresentation} parsers created from this factory * support. Users can use this information prepare the source they have to a representation which will be accepted * by this parser. * * @return Enumeration of supported schema source representations. */ - @NonNull Collection> supportedSourceRepresentations(); + @NonNull Collection> supportedSourceRepresentations(); /** * Add main source. All main sources are present in resulting SchemaContext. @@ -42,7 +42,7 @@ public interface YangParser { * @throws IOException when an IO error occurs * @throws IllegalArgumentException if the representation is not supported */ - @NonNull YangParser addSource(SchemaSourceRepresentation source) throws IOException, YangSyntaxErrorException; + @NonNull YangParser addSource(SourceRepresentation source) throws IOException, YangSyntaxErrorException; /** * Add main sources. All main sources are present in resulting SchemaContext. @@ -52,23 +52,23 @@ public interface YangParser { * @throws IOException when an IO error occurs * @throws IllegalArgumentException if the representation is not supported */ - default @NonNull YangParser addSources(final SchemaSourceRepresentation... sources) throws IOException, - YangSyntaxErrorException { - for (SchemaSourceRepresentation source : sources) { + default @NonNull YangParser addSources(final SourceRepresentation... sources) + throws IOException, YangSyntaxErrorException { + for (var source : sources) { addSource(source); } return this; } - default @NonNull YangParser addSources(final Collection sources) + default @NonNull YangParser addSources(final Collection sources) throws IOException, YangSyntaxErrorException { - for (SchemaSourceRepresentation source : sources) { + for (var source : sources) { addSource(source); } return this; } - YangParser addLibSource(SchemaSourceRepresentation source) throws IOException, YangSyntaxErrorException; + YangParser addLibSource(SourceRepresentation source) throws IOException, YangSyntaxErrorException; /** * Add library sources. Only library sources required by main sources are present in resulting SchemaContext. @@ -82,17 +82,17 @@ public interface YangParser { * @throws IOException when an IO error occurs * @throws IllegalArgumentException if the representation is not supported */ - default @NonNull YangParser addLibSources(final SchemaSourceRepresentation... sources) throws IOException, - YangSyntaxErrorException { - for (SchemaSourceRepresentation source : sources) { + default @NonNull YangParser addLibSources(final SourceRepresentation... sources) + throws IOException, YangSyntaxErrorException { + for (var source : sources) { addLibSource(source); } return this; } - default @NonNull YangParser addLibSources(final Collection sources) throws IOException, - YangSyntaxErrorException { - for (SchemaSourceRepresentation source : sources) { + default @NonNull YangParser addLibSources(final Collection sources) + throws IOException, YangSyntaxErrorException { + for (var source : sources) { addLibSource(source); } return this; diff --git a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangSyntaxErrorException.java b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangSyntaxErrorException.java index 7f199ba9de..0529cff5f3 100644 --- a/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangSyntaxErrorException.java +++ b/parser/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/parser/api/YangSyntaxErrorException.java @@ -11,31 +11,32 @@ import com.google.common.annotations.Beta; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; @Beta public class YangSyntaxErrorException extends YangParserException { + @java.io.Serial private static final long serialVersionUID = 2L; - private final SourceIdentifier source; + private final SourceIdentifier sourceId; private final int line; private final int charPositionInLine; - public YangSyntaxErrorException(final @Nullable SourceIdentifier source, final int line, + public YangSyntaxErrorException(final @Nullable SourceIdentifier sourceId, final int line, final int charPositionInLine, final String message) { - this(source, line, charPositionInLine, message, null); + this(sourceId, line, charPositionInLine, message, null); } - public YangSyntaxErrorException(final @Nullable SourceIdentifier source, final int line, + public YangSyntaxErrorException(final @Nullable SourceIdentifier sourceId, final int line, final int charPositionInLine, final String message, final @Nullable Throwable cause) { super(message, cause); - this.source = source; + this.sourceId = sourceId; this.line = line; this.charPositionInLine = charPositionInLine; } public final Optional getSource() { - return Optional.ofNullable(source); + return Optional.ofNullable(sourceId); } public final int getLine() { @@ -48,8 +49,8 @@ public class YangSyntaxErrorException extends YangParserException { public @NonNull String getFormattedMessage() { final StringBuilder sb = new StringBuilder(getMessage()); - if (source != null) { - sb.append(" in source ").append(source); + if (sourceId != null) { + sb.append(" in source ").append(sourceId); } if (line != 0) { sb.append(" on line ").append(line); diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangLibResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangLibResolver.java index a0e3b4baa1..2938d01c13 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangLibResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangLibResolver.java @@ -16,8 +16,8 @@ import org.kohsuke.MetaInfServices; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.parser.api.YangLibModuleSet; import org.opendaylight.yangtools.yang.parser.api.YangLibResolver; import org.opendaylight.yangtools.yang.parser.api.YangParserException; @@ -48,7 +48,7 @@ public final class DefaultYangLibResolver implements YangLibResolver { } @Override - public Collection> supportedSourceRepresentations() { + public Collection> supportedSourceRepresentations() { return DefaultYangParser.REPRESENTATIONS; } 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 f3fd8f45fc..0350a52d1f 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 @@ -16,15 +16,15 @@ import java.util.List; import javax.xml.transform.TransformerException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -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; -import org.opendaylight.yangtools.yang.model.repo.api.YinXmlSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.YinDomSource; +import org.opendaylight.yangtools.yang.model.spi.source.YinTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.YinXmlSource; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; @@ -37,13 +37,13 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementR import org.xml.sax.SAXException; final class DefaultYangParser implements YangParser { - static final @NonNull ImmutableSet> REPRESENTATIONS = ImmutableSet.of( + static final @NonNull ImmutableSet> REPRESENTATIONS = ImmutableSet.of( // In order of preference YangIRSchemaSource.class, - YangTextSchemaSource.class, - YinDomSchemaSource.class, - YinXmlSchemaSource.class, - YinTextSchemaSource.class); + YangTextSource.class, + YinDomSource.class, + YinXmlSource.class, + YinTextSource.class); private final BuildAction buildAction; @@ -52,19 +52,18 @@ final class DefaultYangParser implements YangParser { } @Override - public ImmutableSet> supportedSourceRepresentations() { + public ImmutableSet> supportedSourceRepresentations() { return REPRESENTATIONS; } @Override - public YangParser addSource(final SchemaSourceRepresentation source) throws IOException, YangSyntaxErrorException { + public YangParser addSource(final SourceRepresentation source) throws IOException, YangSyntaxErrorException { buildAction.addSource(sourceToStatementStream(source)); return this; } @Override - public YangParser addLibSource(final SchemaSourceRepresentation source) - throws IOException, YangSyntaxErrorException { + public YangParser addLibSource(final SourceRepresentation source) throws IOException, YangSyntaxErrorException { buildAction.addLibSource(sourceToStatementStream(source)); return this; } @@ -105,26 +104,26 @@ final class DefaultYangParser implements YangParser { return new YangParserException("Failed to assemble sources", reported); } - static StatementStreamSource sourceToStatementStream(final SchemaSourceRepresentation source) + static StatementStreamSource sourceToStatementStream(final SourceRepresentation source) throws IOException, YangSyntaxErrorException { requireNonNull(source); if (source instanceof YangIRSchemaSource irSource) { return YangStatementStreamSource.create(irSource); - } else if (source instanceof YangTextSchemaSource yangSource) { + } else if (source instanceof YangTextSource yangSource) { return YangStatementStreamSource.create(yangSource); - } else if (source instanceof YinDomSchemaSource yinDom) { + } else if (source instanceof YinDomSource yinDom) { return YinStatementStreamSource.create(yinDom); - } else if (source instanceof YinTextSchemaSource yinText) { + } else if (source instanceof YinTextSource yinText) { try { return YinStatementStreamSource.create(YinTextToDomTransformer.transformSource(yinText)); } catch (SAXException e) { - throw new YangSyntaxErrorException(source.getIdentifier(), 0, 0, "Failed to parse XML text", e); + throw new YangSyntaxErrorException(source.sourceId(), 0, 0, "Failed to parse XML text", e); } - } else if (source instanceof YinXmlSchemaSource yinXml) { + } else if (source instanceof YinXmlSource yinXml) { try { return YinStatementStreamSource.create(yinXml); } catch (TransformerException e) { - throw new YangSyntaxErrorException(source.getIdentifier(), 0, 0, + throw new YangSyntaxErrorException(source.sourceId(), 0, 0, "Failed to assemble in-memory representation", e); } } else { 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 2a9dcf219e..33d647c49a 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 @@ -16,13 +16,12 @@ import com.google.common.util.concurrent.FluentFuture; import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; 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; @@ -44,7 +43,7 @@ final class AssembleSources implements AsyncFunction, E this.parserFactory = parserFactory; this.config = config; getIdentifier = switch (config.getStatementParserMode()) { - case DEFAULT_MODE -> YangIRSchemaSource::getIdentifier; + case DEFAULT_MODE -> YangIRSchemaSource::sourceId; }; } @@ -72,11 +71,12 @@ final class AssembleSources implements AsyncFunction, E config.getSupportedFeatures().ifPresent(parser::setSupportedFeatures); config.getModulesDeviatedByModules().ifPresent(parser::setModulesWithSupportedDeviations); - for (final Entry entry : srcs.entrySet()) { + for (var entry : srcs.entrySet()) { try { parser.addSource(entry.getValue()); } catch (YangSyntaxErrorException | IOException e) { - throw new SchemaResolutionException("Failed to add source " + entry.getKey(), e); + final var sourceId = entry.getKey(); + throw new SchemaResolutionException("Failed to add source " + sourceId, sourceId, e); } } diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java index 99d0d15ef8..c7df113fa9 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java @@ -23,8 +23,8 @@ import java.util.Set; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo; import org.slf4j.Logger; @@ -107,9 +107,9 @@ abstract class DependencyResolver { } } - this.resolvedSources = ImmutableList.copyOf(resolved); - this.unresolvedSources = ImmutableList.copyOf(pending); - this.unsatisfiedImports = ImmutableMultimap.copyOf(imports); + resolvedSources = ImmutableList.copyOf(resolved); + unresolvedSources = ImmutableList.copyOf(pending); + unsatisfiedImports = ImmutableMultimap.copyOf(imports); } protected abstract boolean isKnown(Collection haystack, ModuleImport mi); diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java index 7f3c339bc6..312ddfe4f9 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java @@ -11,7 +11,7 @@ import java.util.Collection; import java.util.Map; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.ModuleImport; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo; 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 9cc0e6f8fe..eac04f0fd6 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 @@ -35,12 +35,12 @@ import java.util.concurrent.ConcurrentMap; import java.util.function.Function; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; 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.SchemaRepository; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepository.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepository.java index f81ee4678e..addeef934e 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepository.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepository.java @@ -17,10 +17,10 @@ import org.eclipse.jdt.annotation.NonNull; import org.kohsuke.MetaInfServices; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; 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.SchemaRepository; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.spi.AbstractSchemaRepository; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; 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 16a2c2d324..74e69d8542 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 @@ -17,8 +17,8 @@ import java.util.List; 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.model.repo.api.YangIRSchemaSource; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +37,7 @@ final class SourceIdMismatchDetector implements Function srcIt = sourceIdentifiers.iterator(); final Map filtered = new LinkedHashMap<>(); for (YangIRSchemaSource irSchemaSource : input) { - final SourceIdentifier realSId = irSchemaSource.getIdentifier(); + final SourceIdentifier realSId = irSchemaSource.sourceId(); if (srcIt.hasNext()) { final SourceIdentifier expectedSId = srcIt.next(); if (!expectedSId.equals(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 4fae062dc1..06365a8cbf 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 @@ -35,34 +35,34 @@ import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; 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.SchemaRepository; 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; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource.Costs; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class YangTextSchemaContextResolver implements AutoCloseable, SchemaSourceProvider { +public final class YangTextSchemaContextResolver implements AutoCloseable, SchemaSourceProvider { private static final Logger LOG = LoggerFactory.getLogger(YangTextSchemaContextResolver.class); private static final Duration SOURCE_LIFETIME = Duration.ofSeconds(60); private final Collection requiredSources = new ConcurrentLinkedDeque<>(); - private final Multimap texts = ArrayListMultimap.create(); + private final Multimap texts = ArrayListMultimap.create(); @GuardedBy("this") private final Map>> registeredFeatures = new HashMap<>(); private final AtomicReference> currentSchemaContext = @@ -96,7 +96,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem } /** - * Register a {@link YangTextSchemaSource}. + * Register a {@link YangTextSource}. * * @param source YANG text source * @return a {@link Registration} @@ -105,16 +105,16 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem * @throws SchemaSourceException When parsing encounters general error * @throws NullPointerException if {@code source} is {@code null} */ - public @NonNull Registration registerSource(final @NonNull YangTextSchemaSource source) + public @NonNull Registration registerSource(final @NonNull YangTextSource source) throws SchemaSourceException, IOException, YangSyntaxErrorException { final var 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 // does not, check how much it differs and emit a warning. - final var providedId = source.getIdentifier(); - final var parsedId = ast.getIdentifier(); - final YangTextSchemaSource text; + final var providedId = source.sourceId(); + final var parsedId = ast.sourceId(); + final YangTextSource text; if (!parsedId.equals(providedId)) { if (!parsedId.name().equals(providedId.name())) { LOG.info("Provided module name {} does not match actual text {}, corrected", @@ -131,7 +131,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem } } - text = YangTextSchemaSource.delegateForCharSource(parsedId, source); + text = YangTextSource.delegateForCharSource(parsedId, source); } else { text = source; } @@ -141,7 +141,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem LOG.debug("Populated {} with text", parsedId); final var reg = registry.registerSchemaSource(this, - PotentialSchemaSource.create(parsedId, YangTextSchemaSource.class, Costs.IMMEDIATE.getValue())); + PotentialSchemaSource.create(parsedId, YangTextSource.class, Costs.IMMEDIATE.getValue())); requiredSources.add(parsedId); cache.schemaSourceEncountered(ast); LOG.debug("Added source {} to schema context requirements", parsedId); @@ -176,7 +176,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem throws SchemaSourceException, IOException, YangSyntaxErrorException { final String path = url.getPath(); final String fileName = path.substring(path.lastIndexOf('/') + 1); - return registerSource(YangTextSchemaSource.forURL(url, guessSourceIdentifier(fileName))); + return registerSource(YangTextSource.forURL(url, guessSourceIdentifier(fileName))); } /** @@ -233,7 +233,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem private static SourceIdentifier guessSourceIdentifier(final @NonNull String fileName) { try { - return YangTextSchemaSource.identifierFromFilename(fileName); + return YangTextSource.identifierFromFilename(fileName); } catch (IllegalArgumentException e) { LOG.warn("Invalid file name format in '{}'", fileName, e); return new SourceIdentifier(fileName); @@ -311,8 +311,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem } @Override - public synchronized @NonNull FluentFuture getSource( - final SourceIdentifier sourceIdentifier) { + public synchronized @NonNull FluentFuture getSource(final SourceIdentifier sourceIdentifier) { final var ret = texts.get(sourceIdentifier); LOG.debug("Lookup {} result {}", sourceIdentifier, ret); @@ -334,7 +333,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem } @Beta - public synchronized Collection getSourceTexts(final SourceIdentifier sourceIdentifier) { + public synchronized Collection getSourceTexts(final SourceIdentifier sourceIdentifier) { return ImmutableSet.copyOf(texts.get(sourceIdentifier)); } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YT1193Test.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YT1193Test.java index 64cfd50c06..13e484a567 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YT1193Test.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YT1193Test.java @@ -16,7 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationInText; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; public class YT1193Test { @@ -24,9 +24,9 @@ public class YT1193Test { void testDeclarationReference() throws Exception { final var declaredRoots = new DefaultYangParserFactory() .createParser(YangParserConfiguration.builder().retainDeclarationReferences(true).build()) - .addSource(YangTextSchemaSource.forResource(getClass(), "/yt1193/foo.yang")) - .addSource(YangTextSchemaSource.forResource(getClass(), "/yt1193/bar.yang")) - .addSource(YangTextSchemaSource.forResource(getClass(), "/yt1193/baz.yang")) + .addSource(YangTextSource.forResource(getClass(), "/yt1193/foo.yang")) + .addSource(YangTextSource.forResource(getClass(), "/yt1193/bar.yang")) + .addSource(YangTextSource.forResource(getClass(), "/yt1193/baz.yang")) .buildDeclaredModel(); assertEquals(3, declaredRoots.size()); 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 329220f293..e7b7ae97e7 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 @@ -18,10 +18,10 @@ import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; 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.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; @@ -64,7 +64,7 @@ public abstract class AbstractSchemaRepositoryTest { private static SettableSchemaProvider assertYangTextResource(final String resourceName) { final YangIRSchemaSource yangSource; try { - yangSource = TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)); + yangSource = TextToIRTransformer.transformText(YangTextSource.forResource(resourceName)); } catch (YangSyntaxErrorException | IOException e) { throw new AssertionError("Failed to parse " + resourceName, e); } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java index 78614b28d6..381584ec07 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java @@ -12,8 +12,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Test; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo.ModuleDependencyInfo; @@ -61,7 +61,7 @@ public class DependencyResolverTest { private static void addToMap(final Map map, final String yangFileName) throws Exception { - final var info = ModuleDependencyInfo.forYangText(YangTextSchemaSource.forResource(DependencyResolverTest.class, + final var info = ModuleDependencyInfo.forYangText(YangTextSource.forResource(DependencyResolverTest.class, yangFileName)); map.put(new SourceIdentifier(info.getName(), info.getFormattedRevision()), info); } 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 6fcb952fc1..8722b62f93 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 @@ -18,9 +18,9 @@ import java.util.Optional; import java.util.concurrent.ExecutionException; import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; -import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class MultipleRevImportBug6875Test { @@ -98,7 +98,7 @@ public class MultipleRevImportBug6875Test { private static SettableSchemaProvider getSourceProvider(final String resourceName) throws Exception { return SettableSchemaProvider.createImmediate( - TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)), + TextToIRTransformer.transformText(YangTextSource.forResource(resourceName)), YangIRSchemaSource.class); } 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 c3b53038f9..faa2d44a65 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 @@ -12,9 +12,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class OpenconfigVerSharedSchemaRepositoryTest { @@ -54,7 +54,6 @@ public class OpenconfigVerSharedSchemaRepositoryTest { static SettableSchemaProvider getImmediateYangSourceProviderFromResource( final String resourceName) throws Exception { return SettableSchemaProvider.createImmediate( - TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)), - YangIRSchemaSource.class); + TextToIRTransformer.transformText(YangTextSource.forResource(resourceName)), YangIRSchemaSource.class); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SettableSchemaProvider.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SettableSchemaProvider.java index 9f48a189d8..4a4e8fc917 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SettableSchemaProvider.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SettableSchemaProvider.java @@ -10,13 +10,13 @@ package org.opendaylight.yangtools.yang.parser.repo; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; -class SettableSchemaProvider implements SchemaSourceProvider { +class SettableSchemaProvider implements SchemaSourceProvider { private final SettableFuture future = SettableFuture.create(); private final T schemaSourceRepresentation; @@ -25,18 +25,18 @@ class SettableSchemaProvider implements Sc SettableSchemaProvider(final T schemaSourceRepresentation, final SourceIdentifier sourceIdentifier, final Class representation, final int cost) { this.schemaSourceRepresentation = schemaSourceRepresentation; - this.potentialSchemaSource = PotentialSchemaSource.create(sourceIdentifier, representation, cost); + potentialSchemaSource = PotentialSchemaSource.create(sourceIdentifier, representation, cost); } - public static SettableSchemaProvider createRemote( + public static SettableSchemaProvider createRemote( final T schemaSourceRepresentation, final Class representation) { - return new SettableSchemaProvider<>(schemaSourceRepresentation, schemaSourceRepresentation.getIdentifier(), + return new SettableSchemaProvider<>(schemaSourceRepresentation, schemaSourceRepresentation.sourceId(), representation, PotentialSchemaSource.Costs.REMOTE_IO.getValue()); } - public static SettableSchemaProvider createImmediate( + public static SettableSchemaProvider createImmediate( final T schemaSourceRepresentation, final Class representation) { - return new SettableSchemaProvider<>(schemaSourceRepresentation, schemaSourceRepresentation.getIdentifier(), + return new SettableSchemaProvider<>(schemaSourceRepresentation, schemaSourceRepresentation.sourceId(), representation, PotentialSchemaSource.Costs.IMMEDIATE.getValue()); } @@ -50,7 +50,7 @@ class SettableSchemaProvider implements Sc } public SourceIdentifier getId() { - return schemaSourceRepresentation.getIdentifier(); + return schemaSourceRepresentation.sourceId(); } public void setResult() { 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 eb8cde8c0c..57c651e12e 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 @@ -18,13 +18,13 @@ import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.ExecutionException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; 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.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class SharedEffectiveModelContextFactoryTest { @@ -36,8 +36,8 @@ public class SharedEffectiveModelContextFactoryTest { @BeforeEach public void setUp() { - final var source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang"); - final var source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang"); + final var source1 = YangTextSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang"); + final var source2 = YangTextSource.forResource("/ietf/iana-timezones@2012-07-09.yang"); s1 = new SourceIdentifier("ietf-inet-types", "2010-09-24"); s2 = new SourceIdentifier("iana-timezones", "2012-07-09"); @@ -45,10 +45,10 @@ public class SharedEffectiveModelContextFactoryTest { repository.registerSchemaSourceListener(transformer); repository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(source1), - PotentialSchemaSource.create(s1, YangTextSchemaSource.class, 1)); + PotentialSchemaSource.create(s1, YangTextSource.class, 1)); repository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(source2), - PotentialSchemaSource.create(s2, YangTextSchemaSource.class, 1)); + PotentialSchemaSource.create(s2, YangTextSource.class, 1)); } @Test @@ -60,10 +60,10 @@ public class SharedEffectiveModelContextFactoryTest { @Test public void testSourceRegisteredWithDifferentSI() throws Exception { - final var source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang"); - final var source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang"); - s1 = source1.getIdentifier(); - s2 = source2.getIdentifier(); + final var source1 = YangTextSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang"); + final var source2 = YangTextSource.forResource("/ietf/iana-timezones@2012-07-09.yang"); + s1 = source1.sourceId(); + s2 = source2.sourceId(); final var provider = SharedSchemaRepositoryTest.getImmediateYangSourceProviderFromResource( "/no-revision/imported@2012-12-12.yang"); @@ -86,8 +86,8 @@ public class SharedEffectiveModelContextFactoryTest { final SourceIdentifier s3 = new SourceIdentifier("network-topology", "2013-10-21"); repository.registerSchemaSource(new TransientFailureProvider( - YangTextSchemaSource.forResource("/ietf/network-topology@2013-10-21.yang")), - PotentialSchemaSource.create(s3, YangTextSchemaSource.class, 1)); + YangTextSource.forResource("/ietf/network-topology@2013-10-21.yang")), + PotentialSchemaSource.create(s3, YangTextSource.class, 1)); final var sharedSchemaContextFactory = new SharedEffectiveModelContextFactory(repository, config); @@ -105,17 +105,17 @@ public class SharedEffectiveModelContextFactoryTest { * Schema source provider that fails on first attempt of getSource() and succeeds on every subsequent call * to simulate transient failures of source retrieval. */ - private static final class TransientFailureProvider implements SchemaSourceProvider { - private final YangTextSchemaSource schemaSource; + private static final class TransientFailureProvider implements SchemaSourceProvider { + private final YangTextSource schemaSource; private boolean shouldFail = true; - private TransientFailureProvider(final YangTextSchemaSource schemaSource) { + private TransientFailureProvider(final YangTextSource schemaSource) { this.schemaSource = requireNonNull(schemaSource); } @Override - public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { if (shouldFail) { shouldFail = false; return immediateFailedFluentFuture(new Exception("Transient test failure.")); 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 a1e6355166..2df811e0c3 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 @@ -20,11 +20,11 @@ import static org.mockito.Mockito.verify; import java.util.concurrent.ExecutionException; import org.junit.jupiter.api.Test; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -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.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class SharedSchemaRepositoryTest { @@ -36,9 +36,9 @@ public class SharedSchemaRepositoryTest { final var id2 = loadAndRegisterSource(sharedSchemaRepository, "/no-revision/imported@2012-12-12.yang"); var source = sharedSchemaRepository.getSchemaSource(idNoRevision, YangIRSchemaSource.class); - assertEquals(idNoRevision, source.get().getIdentifier()); + assertEquals(idNoRevision, source.get().sourceId()); source = sharedSchemaRepository.getSchemaSource(id2, YangIRSchemaSource.class); - assertEquals(id2, source.get().getIdentifier()); + assertEquals(id2, source.get().sourceId()); } private static SourceIdentifier loadAndRegisterSource(final SharedSchemaRepository sharedSchemaRepository, @@ -167,14 +167,12 @@ public class SharedSchemaRepositoryTest { static SettableSchemaProvider getRemoteYangSourceProviderFromResource(final String resourceName) throws Exception { return SettableSchemaProvider.createRemote( - TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)), - YangIRSchemaSource.class); + TextToIRTransformer.transformText(YangTextSource.forResource(resourceName)), YangIRSchemaSource.class); } static SettableSchemaProvider getImmediateYangSourceProviderFromResource( final String resourceName) throws Exception { return SettableSchemaProvider.createImmediate( - TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)), - YangIRSchemaSource.class); + TextToIRTransformer.transformText(YangTextSource.forResource(resourceName)), 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 6332d93343..490581bfba 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 @@ -15,13 +15,13 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; 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.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; public class SharedSchemaRepositoryWithFeaturesTest { @@ -121,8 +121,7 @@ public class SharedSchemaRepositoryWithFeaturesTest { private static SettableSchemaProvider getImmediateYangSourceProviderFromResource( final String resourceName) throws Exception { return SettableSchemaProvider.createImmediate( - TextToIRTransformer.transformText(YangTextSchemaSource.forResource(resourceName)), - YangIRSchemaSource.class); + TextToIRTransformer.transformText(YangTextSource.forResource(resourceName)), YangIRSchemaSource.class); } private static void assertSchemaContext(final SchemaContext schemaContext, final int moduleSize) { diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java index 0379e03b3b..afda274f4f 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java @@ -11,12 +11,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import org.junit.jupiter.api.Test; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; public class YT1428Test extends AbstractSchemaRepositoryTest { @Test - public void testDeviateSourceReported() { + void testDeviateSourceReported() { final var ex = assertExecutionException(null, "/yt1428/orig.yang", "/yt1428/deviate.yang"); assertEquals(new SourceIdentifier("deviate"), assertInstanceOf(SchemaResolutionException.class, ex.getCause()).getFailedSource()); diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java index 9ac1eab608..d0340383cf 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java @@ -21,8 +21,8 @@ import org.junit.jupiter.api.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; public class YangTextSchemaContextResolverTest { @Test @@ -49,17 +49,17 @@ public class YangTextSchemaContextResolverTest { final var fooModuleId = new SourceIdentifier("foo", "2016-09-26"); final var foo = yangTextSchemaContextResolver.getSource(fooModuleId); assertTrue(foo.isDone()); - assertEquals(fooModuleId, foo.get().getIdentifier()); + assertEquals(fooModuleId, foo.get().sourceId()); final var barModuleId = new SourceIdentifier("bar", "2016-09-26"); final var bar = yangTextSchemaContextResolver.getSource(barModuleId); assertTrue(bar.isDone()); - assertEquals(barModuleId, bar.get().getIdentifier()); + assertEquals(barModuleId, bar.get().sourceId()); final var bazModuleId = new SourceIdentifier("baz", "2016-09-26"); final var baz = yangTextSchemaContextResolver.getSource(bazModuleId); assertTrue(baz.isDone()); - assertEquals(bazModuleId, baz.get().getIdentifier()); + assertEquals(bazModuleId, baz.get().sourceId()); final var foobarModuleId = new SourceIdentifier("foobar", "2016-09-26"); final var foobar = yangTextSchemaContextResolver.getSource(foobarModuleId); diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index 7e04bd017b..0bfae3377e 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -37,8 +37,8 @@ import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java index ef6b1154b7..c875f520a7 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java @@ -25,13 +25,13 @@ import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java index 42603da535..1b23f4d8f8 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java @@ -27,7 +27,7 @@ import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementSourceReference; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java index 299197aeb2..1e53ea4afd 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java @@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementSourceReference; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; 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 4e1fd353e7..d9292c8080 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 @@ -12,19 +12,19 @@ import com.google.common.util.concurrent.Futures; import java.io.IOException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.ir.IRStatement; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; 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; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; 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, YangIRSchemaSource.class, + super(provider, YangTextSource.class, consumer, YangIRSchemaSource.class, input -> Futures.immediateFuture(transformText(input))); } @@ -33,13 +33,13 @@ public final class TextToIRTransformer extends SchemaSourceTransformer exceptions = new ArrayList<>(); - private final SourceIdentifier source; + private final SourceIdentifier sourceId; - YangErrorListener(final SourceIdentifier source) { - this.source = requireNonNull(source); + YangErrorListener(final SourceIdentifier sourceId) { + this.sourceId = requireNonNull(sourceId); } @Override @SuppressWarnings("checkstyle:parameterName") public void syntaxError(final Recognizer recognizer, final Object offendingSymbol, final int line, final int charPositionInLine, final String msg, final RecognitionException e) { - LOG.debug("Syntax error in {} at {}:{}: {}", source, line, charPositionInLine, msg, e); - exceptions.add(new YangSyntaxErrorException(source, line, charPositionInLine, msg, e)); + LOG.debug("Syntax error in {} at {}:{}: {}", sourceId, line, charPositionInLine, msg, e); + exceptions.add(new YangSyntaxErrorException(sourceId, line, charPositionInLine, msg, e)); } void validate() throws YangSyntaxErrorException { @@ -47,18 +47,18 @@ final class YangErrorListener extends BaseErrorListener { throw exceptions.get(0); } - final StringBuilder sb = new StringBuilder(); + final var sb = new StringBuilder(); boolean first = true; - for (YangSyntaxErrorException e : exceptions) { + for (var ex : exceptions) { if (first) { first = false; } else { sb.append('\n'); } - sb.append(e.getFormattedMessage()); + sb.append(ex.getFormattedMessage()); } - throw new YangSyntaxErrorException(source, 0, 0, sb.toString()); + throw new YangSyntaxErrorException(sourceId, 0, 0, sb.toString()); } } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangModelDependencyInfo.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangModelDependencyInfo.java index 48027e0980..5845fb2ec5 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangModelDependencyInfo.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangModelDependencyInfo.java @@ -24,13 +24,13 @@ import org.opendaylight.yangtools.yang.ir.IRArgument; 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.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.StatementSourceReference; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; -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.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.parser.spi.source.ExplicitStatement; @@ -133,44 +133,44 @@ public abstract class YangModelDependencyInfo { * @throws IllegalArgumentException If the root statement is not a valid YANG module/submodule */ public static @NonNull YangModelDependencyInfo forIR(final YangIRSchemaSource source) { - return forIR(source.getRootStatement(), source.getIdentifier()); + return forIR(source.getRootStatement(), source.sourceId()); } /** * Extracts {@link YangModelDependencyInfo} from an intermediate representation root statement of a YANG model. * - * @param source Source identifier + * @param sourceId Source identifier * @param rootStatement root statement * @return {@link YangModelDependencyInfo} * @throws IllegalArgumentException If the root statement is not a valid YANG module/submodule */ static @NonNull YangModelDependencyInfo forIR(final IRStatement rootStatement, - final SourceIdentifier source) { + final SourceIdentifier sourceId) { final IRKeyword keyword = rootStatement.keyword(); checkArgument(keyword instanceof Unqualified, "Invalid root statement %s", keyword); final String arg = keyword.identifier(); if (MODULE.equals(arg)) { - return parseModuleContext(rootStatement, source); + return parseModuleContext(rootStatement, sourceId); } if (SUBMODULE.equals(arg)) { - return parseSubmoduleContext(rootStatement, source); + return parseSubmoduleContext(rootStatement, sourceId); } throw new IllegalArgumentException("Root of parsed AST must be either module or submodule"); } /** - * Extracts {@link YangModelDependencyInfo} from a {@link YangTextSchemaSource}. This parsing does not - * validate full YANG module, only parses header up to the revisions and imports. + * Extracts {@link YangModelDependencyInfo} from a {@link YangTextSource}. This parsing does not validate full YANG + * module, only parses header up to the revisions and imports. * - * @param yangText {@link YangTextSchemaSource} + * @param yangText {@link YangTextSource} * @return {@link YangModelDependencyInfo} * @throws YangSyntaxErrorException If the resource does not pass syntactic analysis * @throws IOException When the resource cannot be read */ - public static YangModelDependencyInfo forYangText(final YangTextSchemaSource yangText) + public static YangModelDependencyInfo forYangText(final YangTextSource yangText) throws IOException, YangSyntaxErrorException { - final YangStatementStreamSource source = YangStatementStreamSource.create(yangText); + final var source = YangStatementStreamSource.create(yangText); return forIR(source.rootStatement(), source.getIdentifier()); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java index 306632cd02..d36fd11adc 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangStatementStreamSource.java @@ -21,11 +21,11 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.ir.IRKeyword; import org.opendaylight.yangtools.yang.ir.IRStatement; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementSourceReference; -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.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementLexer; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.FileContext; @@ -51,25 +51,25 @@ public final class YangStatementStreamSource extends AbstractSimpleIdentifiable< private final IRStatement rootStatement; private final String sourceName; - private YangStatementStreamSource(final SourceIdentifier identifier, final IRStatement rootStatement, + private YangStatementStreamSource(final SourceIdentifier sourceId, final IRStatement rootStatement, final String sourceName) { - super(identifier); + super(sourceId); this.rootStatement = requireNonNull(rootStatement); this.sourceName = sourceName; } /** - * Create a {@link YangStatementStreamSource} for a {@link YangTextSchemaSource}. + * Create a {@link YangStatementStreamSource} for a {@link YangTextSource}. * * @param source YangTextSchemaSource, must not be null * @return A new {@link YangStatementStreamSource} * @throws IOException When we fail to read the source * @throws YangSyntaxErrorException If the source fails basic parsing */ - public static YangStatementStreamSource create(final YangTextSchemaSource source) throws IOException, - YangSyntaxErrorException { - return new YangStatementStreamSource(source.getIdentifier(), - IRSupport.createStatement(parseYangSource(source)), source.getSymbolicName().orElse(null)); + public static YangStatementStreamSource create(final YangTextSource source) + throws IOException, YangSyntaxErrorException { + return new YangStatementStreamSource(source.sourceId(), + IRSupport.createStatement(parseYangSource(source)), source.symbolicName()); } /** @@ -80,7 +80,7 @@ public final class YangStatementStreamSource extends AbstractSimpleIdentifiable< * @throws NullPointerException if {@code source} is null */ public static YangStatementStreamSource create(final YangIRSchemaSource source) { - return create(source.getIdentifier(), source.getRootStatement(), source.getSymbolicName().orElse(null)); + return create(source.sourceId(), source.getRootStatement(), source.symbolicName()); } public static YangStatementStreamSource create(final SourceIdentifier identifier, final IRStatement rootStatement, @@ -130,14 +130,14 @@ public final class YangStatementStreamSource extends AbstractSimpleIdentifiable< return rootStatement; } - static StatementContext parseYangSource(final YangTextSchemaSource source) + static StatementContext parseYangSource(final YangTextSource source) throws IOException, YangSyntaxErrorException { try (var reader = source.openStream()) { - return parseYangSource(source.getIdentifier(), reader); + return parseYangSource(source.sourceId(), reader); } } - private static StatementContext parseYangSource(final SourceIdentifier source, final Reader stream) + private static StatementContext parseYangSource(final SourceIdentifier sourceId, final Reader stream) throws IOException, YangSyntaxErrorException { final YangStatementLexer lexer = new CompactYangStatementLexer(CharStreams.fromReader(stream)); final YangStatementParser parser = new YangStatementParser(new CommonTokenStream(lexer)); @@ -145,7 +145,7 @@ public final class YangStatementStreamSource extends AbstractSimpleIdentifiable< lexer.removeErrorListeners(); parser.removeErrorListeners(); - final YangErrorListener errorListener = new YangErrorListener(source); + final YangErrorListener errorListener = new YangErrorListener(sourceId); lexer.addErrorListener(errorListener); parser.addErrorListener(errorListener); diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java index cdbdb82704..23f45572c5 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinStatementStreamSource.java @@ -22,9 +22,9 @@ import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementSourceReference; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YinDomSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.api.YinXmlSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.spi.source.YinDomSource; +import org.opendaylight.yangtools.yang.model.spi.source.YinXmlSource; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixResolver; import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition; @@ -40,8 +40,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** - * A {@link StatementStreamSource} based on a {@link YinXmlSchemaSource}. Internal implementation works on top - * of {@link YinDomSchemaSource} and its DOM document. + * A {@link StatementStreamSource} based on a {@link YinXmlSource}. Internal implementation works on top + * of {@link YinDomSource} and its DOM document. * * @author Robert Varga */ @@ -58,17 +58,17 @@ public final class YinStatementStreamSource extends AbstractSimpleIdentifiable { +public final class YinTextToDomTransformer extends SchemaSourceTransformer { private YinTextToDomTransformer(final SchemaRepository provider, final SchemaSourceRegistry consumer) { - super(provider, YinTextSchemaSource.class, consumer, YinDomSchemaSource.class, + super(provider, YinTextSource.class, consumer, YinDomSource.class, input -> Futures.immediateFuture(transformSource(input))); } @@ -39,13 +37,11 @@ public final class YinTextToDomTransformer extends SchemaSourceTransformer sources = new ArrayList<>(files.length); for (File file : files) { - sources.add(YangStatementStreamSource.create(YangTextSchemaSource.forPath(file.toPath()))); + sources.add(YangStatementStreamSource.create(YangTextSource.forPath(file.toPath()))); } return parseYangSources(config, supportedFeatures, sources); @@ -151,10 +151,10 @@ public final class StmtTestUtils { final File[] files = new File(resourceDir.toURI()).listFiles(YIN_FILE_FILTER); final StatementStreamSource[] sources = new StatementStreamSource[files.length]; for (int i = 0; i < files.length; i++) { - final SourceIdentifier identifier = YinTextSchemaSource.identifierFromFilename(files[i].getName()); + final SourceIdentifier identifier = YinTextSource.identifierFromFilename(files[i].getName()); sources[i] = YinStatementStreamSource.create(YinTextToDomTransformer.transformSource( - YinTextSchemaSource.delegateForByteSource(identifier, Files.asByteSource(files[i])))); + YinTextSource.delegateForByteSource(identifier, Files.asByteSource(files[i])))); } return parseYinSources(config, sources); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TestUtils.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TestUtils.java index 29ddfcd4e1..f6c8f08764 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TestUtils.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TestUtils.java @@ -24,8 +24,8 @@ import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.api.YinTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; +import org.opendaylight.yangtools.yang.model.spi.source.YinTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinStatementStreamSource; @@ -51,7 +51,7 @@ public final class TestUtils { .listFiles(StmtTestUtils.YANG_FILE_FILTER); final var sources = new ArrayList(files.length); for (var file : files) { - sources.add(YangStatementStreamSource.create(YangTextSchemaSource.forPath(file.toPath()))); + sources.add(YangStatementStreamSource.create(YangTextSource.forPath(file.toPath()))); } return sources; } @@ -96,9 +96,9 @@ public final class TestUtils { return reactor.buildEffective(); } - public static YangTextSchemaSource assertSchemaSource(final String resourcePath) { + public static YangTextSource assertSchemaSource(final String resourcePath) { try { - return YangTextSchemaSource.forPath(Path.of(TestUtils.class.getResource(resourcePath).toURI())); + return YangTextSource.forPath(Path.of(TestUtils.class.getResource(resourcePath).toURI())); } catch (URISyntaxException e) { throw new AssertionError(e); } @@ -112,18 +112,17 @@ public final class TestUtils { for (File file : new File(resourceDirectory).listFiles()) { reactor.addSource(YinStatementStreamSource.create(YinTextToDomTransformer.transformSource( - YinTextSchemaSource.forPath(file.toPath())))); + YinTextSource.forPath(file.toPath())))); } return reactor.buildEffective(); } - public static Module loadYinModule(final YinTextSchemaSource source) throws ReactorException, SAXException, - IOException { + public static Module loadYinModule(final YinTextSource source) throws ReactorException, SAXException, IOException { return RFC7950Reactors.defaultReactor().newBuild() - .addSource(YinStatementStreamSource.create(YinTextToDomTransformer.transformSource(source))) - .buildEffective() - .getModules().iterator().next(); + .addSource(YinStatementStreamSource.create(YinTextToDomTransformer.transformSource(source))) + .buildEffective() + .getModules().iterator().next(); } public static ModuleImport findImport(final Collection imports, final String prefix) { diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileStmtTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileStmtTest.java index ad0e0e2cfb..644c2ed455 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileStmtTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileStmtTest.java @@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.io.IOException; import org.junit.jupiter.api.Test; -import org.opendaylight.yangtools.yang.model.repo.api.YinTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YinTextSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinStatementStreamSource; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinTextToDomTransformer; @@ -36,7 +36,7 @@ class YinFileStmtTest { private static StatementStreamSource createSource(final String name) { try { return YinStatementStreamSource.create(YinTextToDomTransformer.transformSource( - YinTextSchemaSource.forResource(YinFileStmtTest.class, "/semantic-statement-parser/yin/" + name))); + YinTextSource.forResource(YinFileStmtTest.class, "/semantic-statement-parser/yin/" + name))); } catch (SAXException | IOException e) { throw new IllegalArgumentException(e); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/ParserNamespaces.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/ParserNamespaces.java index 56b2b13511..0a25015a87 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/ParserNamespaces.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/ParserNamespaces.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement; @@ -36,7 +37,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java index fe4b755b92..b30f7069a9 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java @@ -15,14 +15,12 @@ import com.google.common.base.MoreObjects.ToStringHelper; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * Namespace key matching criterion. * * @param Key type - * - * @author Robert Varga */ @Beta public abstract class NamespaceKeyCriterion { diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ReactorException.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ReactorException.java index 476d790736..b932b848b1 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ReactorException.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/ReactorException.java @@ -9,7 +9,7 @@ package org.opendaylight.yangtools.yang.parser.spi.meta; import static java.util.Objects.requireNonNull; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; public class ReactorException extends Exception { private static final long serialVersionUID = 1L; @@ -21,13 +21,13 @@ public class ReactorException extends Exception { final Throwable cause) { super(message, cause); this.phase = requireNonNull(phase); - this.sourceIdentifier = sourceId; + sourceIdentifier = sourceId; } public ReactorException(final ModelProcessingPhase phase, final String message, final SourceIdentifier sourceId) { super(message); this.phase = requireNonNull(phase); - this.sourceIdentifier = sourceId; + sourceIdentifier = sourceId; } public final ModelProcessingPhase getPhase() { diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SomeModifiersUnresolvedException.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SomeModifiersUnresolvedException.java index ef3b151d96..02df2975af 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SomeModifiersUnresolvedException.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SomeModifiersUnresolvedException.java @@ -7,14 +7,14 @@ */ package org.opendaylight.yangtools.yang.parser.spi.meta; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; public class SomeModifiersUnresolvedException extends ReactorException { - + @java.io.Serial private static final long serialVersionUID = 1L; - public SomeModifiersUnresolvedException(ModelProcessingPhase phase, SourceIdentifier sourceId, Throwable cause) { + public SomeModifiersUnresolvedException(final ModelProcessingPhase phase, final SourceIdentifier sourceId, + final Throwable cause) { super(phase, "Some of " + phase + " modifiers for statements were not resolved.", sourceId, cause); } - } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java index e5cc2c4c1d..11577ba97b 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * An inference context associated with an instance of a statement. diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java index c04edcc879..2ac3eb5f19 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/StatementStreamSource.java @@ -9,7 +9,7 @@ package org.opendaylight.yangtools.yang.parser.spi.source; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.common.YangVersion; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * Statement stream source, which is used for inference of effective model. diff --git a/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/LiteralYangTextSchemaSource.java b/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/LiteralYangTextSource.java similarity index 71% rename from parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/LiteralYangTextSchemaSource.java rename to parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/LiteralYangTextSource.java index aa50efb232..1e0f303f37 100644 --- a/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/LiteralYangTextSchemaSource.java +++ b/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/LiteralYangTextSource.java @@ -11,26 +11,25 @@ import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import java.io.StringReader; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.UnresolvedQName; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; /** - * A {@link YangTextSchemaSource} backed by a string literal. + * A {@link YangTextSource} backed by a string literal. */ -final class LiteralYangTextSchemaSource extends YangTextSchemaSource { +final class LiteralYangTextSource extends YangTextSource { private final @NonNull String sourceString; - private LiteralYangTextSchemaSource(final SourceIdentifier identifier, final String sourceString, + private LiteralYangTextSource(final SourceIdentifier identifier, final String sourceString, final String symbolicName) { super(identifier); this.sourceString = requireNonNull(sourceString); } /** - * Create a new {@link YangTextSchemaSource} backed by a String input. + * Create a new {@link YangTextSource} backed by a String input. * * @param sourceString YANG file as a String * @return A new instance. @@ -38,7 +37,7 @@ final class LiteralYangTextSchemaSource extends YangTextSchemaSource { * @throws IllegalArgumentException if {@code sourceString} does not a valid YANG body, given a rather restrictive * view of what is valid. */ - static @NonNull LiteralYangTextSchemaSource ofLiteral(final String sourceString) { + static @NonNull LiteralYangTextSource ofLiteral(final String sourceString) { // First line of a YANG file looks as follows: // `module module-name {` // therefore in order to extract the name of the module from a plain string, we are interested in the second @@ -50,7 +49,7 @@ final class LiteralYangTextSchemaSource extends YangTextSchemaSource { final String arg = firstLine[1].strip(); final var localName = UnresolvedQName.tryLocalName(arg); checkArgument(localName != null); - return new LiteralYangTextSchemaSource(new SourceIdentifier(localName), sourceString, arg); + return new LiteralYangTextSource(new SourceIdentifier(localName), sourceString, arg); } @Override @@ -59,7 +58,7 @@ final class LiteralYangTextSchemaSource extends YangTextSchemaSource { } @Override - public Optional getSymbolicName() { - return Optional.of(getIdentifier().name().getLocalName()); + public String symbolicName() { + return sourceId().name().getLocalName(); } } diff --git a/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/YangParserTestUtils.java b/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/YangParserTestUtils.java index 02b0bcc373..77e19efb63 100644 --- a/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/YangParserTestUtils.java +++ b/parser/yang-test-util/src/main/java/org/opendaylight/yangtools/yang/test/util/YangParserTestUtils.java @@ -26,9 +26,9 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.api.YangParserException; @@ -107,8 +107,8 @@ public final class YangParserTestUtils { */ public static EffectiveModelContext parseYangResource(final String resource, final YangParserConfiguration config, final Set supportedFeatures) { - final YangTextSchemaSource source = YangTextSchemaSource.forResource(YangParserTestUtils.class, resource); - return parseYangSources(config, supportedFeatures, source); + return parseYangSources(config, supportedFeatures, + YangTextSource.forResource(YangParserTestUtils.class, resource)); } /** @@ -201,7 +201,7 @@ public final class YangParserTestUtils { public static EffectiveModelContext parseYangFiles(final Set supportedFeatures, final YangParserConfiguration config, final Collection files) { return parseSources(config, supportedFeatures, - files.stream().map(file -> YangTextSchemaSource.forPath(file.toPath())).collect(Collectors.toList())); + files.stream().map(file -> YangTextSource.forPath(file.toPath())).collect(Collectors.toList())); } /** @@ -275,9 +275,9 @@ public final class YangParserTestUtils { } public static EffectiveModelContext parseYangResources(final Class clazz, final Collection resources) { - final List sources = new ArrayList<>(resources.size()); + final var sources = new ArrayList(resources.size()); for (final String r : resources) { - sources.add(YangTextSchemaSource.forResource(clazz, r)); + sources.add(YangTextSource.forResource(clazz, r)); } return parseSources(YangParserConfiguration.DEFAULT, null, sources); } @@ -340,12 +340,12 @@ public final class YangParserTestUtils { } public static EffectiveModelContext parseYangSources(final YangParserConfiguration config, - final Set supportedFeatures, final YangTextSchemaSource... sources) { + final Set supportedFeatures, final YangTextSource... sources) { return parseSources(config, supportedFeatures, Arrays.asList(sources)); } public static EffectiveModelContext parseSources(final YangParserConfiguration config, - final Set supportedFeatures, final Collection sources) { + final Set supportedFeatures, final Collection sources) { final YangParser parser = PARSER_FACTORY.createParser(config); if (supportedFeatures != null) { parser.setSupportedFeatures(FeatureSet.of(supportedFeatures)); @@ -374,7 +374,7 @@ public final class YangParserTestUtils { */ public static EffectiveModelContext parseYang(final String... sources) { return parseSources(YangParserConfiguration.DEFAULT, null, - Arrays.stream(sources).map(LiteralYangTextSchemaSource::ofLiteral).toList()); + Arrays.stream(sources).map(LiteralYangTextSource::ofLiteral).toList()); } @SuppressFBWarnings(value = "NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE", justification = "Wrong inferent on listFiles") diff --git a/plugin/plugin-generator-api/src/main/java/module-info.java b/plugin/plugin-generator-api/src/main/java/module-info.java index 87c56befe4..9d83c314d5 100644 --- a/plugin/plugin-generator-api/src/main/java/module-info.java +++ b/plugin/plugin-generator-api/src/main/java/module-info.java @@ -10,7 +10,7 @@ module org.opendaylight.yangtools.plugin.generator.api { requires transitive com.google.common; requires transitive org.opendaylight.yangtools.yang.model.api; - requires transitive org.opendaylight.yangtools.yang.repo.api; + requires transitive org.opendaylight.yangtools.yang.model.spi; requires transitive org.opendaylight.yangtools.concepts; // Annotations diff --git a/plugin/plugin-generator-api/src/main/java/org/opendaylight/yangtools/plugin/generator/api/ModuleResourceResolver.java b/plugin/plugin-generator-api/src/main/java/org/opendaylight/yangtools/plugin/generator/api/ModuleResourceResolver.java index 963ca9d1a8..c3b966dd2b 100644 --- a/plugin/plugin-generator-api/src/main/java/org/opendaylight/yangtools/plugin/generator/api/ModuleResourceResolver.java +++ b/plugin/plugin-generator-api/src/main/java/org/opendaylight/yangtools/plugin/generator/api/ModuleResourceResolver.java @@ -9,8 +9,8 @@ package org.opendaylight.yangtools.plugin.generator.api; import java.util.Optional; import org.opendaylight.yangtools.yang.model.api.ModuleLike; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; /** * An SPI-level interface to find the schema source for a particular YANG module, as packaged in the final artifact. @@ -26,10 +26,9 @@ public interface ModuleResourceResolver { * @throws NullPointerException if any argument is {@code null} * @throws IllegalArgumentException if the requested representation is not supported by this resolver */ - Optional findModuleResourcePath(ModuleLike module, - Class representation); + Optional findModuleResourcePath(ModuleLike module, Class representation); default Optional findModuleYangTextResourcePath(final ModuleLike module) { - return findModuleResourcePath(module, YangTextSchemaSource.class); + return findModuleResourcePath(module, YangTextSource.class); } } diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java index aab8f5e2d3..3c58e1aa0b 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java @@ -19,9 +19,9 @@ import org.opendaylight.yangtools.plugin.generator.api.ModuleResourceResolver; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleLike; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; final class ContextHolder implements Immutable, ModuleResourceResolver { private final @NonNull EffectiveModelContext context; @@ -36,8 +36,8 @@ final class ContextHolder implements Immutable, ModuleResourceResolver { @Override public Optional findModuleResourcePath(final ModuleLike module, - final Class representation) { - checkArgument(YangTextSchemaSource.class.equals(requireNonNull(representation)), + final Class representation) { + checkArgument(YangTextSource.class.equals(requireNonNull(representation)), "Unsupported representation %s", representation); final SourceIdentifier id = Util.moduleToIdentifier(module); return sources.contains(id) diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java index 20d55e910e..e607ffef8b 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java @@ -25,8 +25,8 @@ import java.util.Set; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.Submodule; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.slf4j.Logger; @@ -39,22 +39,22 @@ import org.slf4j.LoggerFactory; final class ProcessorModuleReactor { private static final Logger LOG = LoggerFactory.getLogger(ProcessorModuleReactor.class); - private final Map modelsInProject; + private final Map modelsInProject; private final Collection dependencies; private YangParser parser; - ProcessorModuleReactor(final YangParser parser, final Collection modelsInProject, + ProcessorModuleReactor(final YangParser parser, final Collection modelsInProject, final Collection dependencies) { this.parser = requireNonNull(parser); - this.modelsInProject = Maps.uniqueIndex(modelsInProject, YangTextSchemaSource::getIdentifier); + this.modelsInProject = Maps.uniqueIndex(modelsInProject, YangTextSource::sourceId); this.dependencies = ImmutableList.copyOf(dependencies); } ContextHolder toContext() throws IOException, YangParserException { checkState(parser != null, "Context has already been assembled"); - for (YangTextSchemaSource source : toUniqueSources(dependencies)) { + for (var source : toUniqueSources(dependencies)) { // This source is coming from a dependency: // - its identifier should be accurate, as it should have been processed into a file with accurate name // - it is not required to be parsed, hence we add it just as a library source @@ -84,16 +84,16 @@ final class ProcessorModuleReactor { return new ContextHolder(schemaContext, modules, modelsInProject.keySet()); } - Collection getModelsInProject() { + Collection getModelsInProject() { return modelsInProject.values(); } - private static Collection toUniqueSources(final Collection dependencies) + private static Collection toUniqueSources(final Collection dependencies) throws IOException { - final Map byContent = new HashMap<>(); + final Map byContent = new HashMap<>(); for (ScannedDependency dependency : dependencies) { - for (YangTextSchemaSource s : dependency.sources()) { + for (YangTextSource s : dependency.sources()) { try (Reader reader = s.openStream()) { final String contents = CharStreams.toString(reader); byContent.putIfAbsent(contents, s); diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ScannedDependency.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ScannedDependency.java index 3bd4b2b015..efa1db1ea5 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ScannedDependency.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ScannedDependency.java @@ -28,7 +28,7 @@ import java.util.zip.ZipFile; import org.apache.maven.artifact.Artifact; import org.apache.maven.project.MavenProject; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,8 +40,8 @@ abstract class ScannedDependency { } @Override - ImmutableList sources() { - return ImmutableList.of(YangTextSchemaSource.forPath(file().toPath())); + ImmutableList sources() { + return ImmutableList.of(YangTextSource.forPath(file().toPath())); } } @@ -54,14 +54,14 @@ abstract class ScannedDependency { } @Override - ImmutableList sources() throws IOException { - final var builder = ImmutableList.builderWithExpectedSize(entryNames.size()); + ImmutableList sources() throws IOException { + final var builder = ImmutableList.builderWithExpectedSize(entryNames.size()); try (ZipFile zip = new ZipFile(file())) { for (String entryName : entryNames) { final ZipEntry entry = requireNonNull(zip.getEntry(entryName)); - builder.add(YangTextSchemaSource.delegateForByteSource( + builder.add(YangTextSource.delegateForByteSource( entryName.substring(entryName.lastIndexOf('/') + 1), // FIXME: can we reasonable make this a CharSource? ByteSource.wrap(ByteStreams.toByteArray(zip.getInputStream(entry))), @@ -130,7 +130,7 @@ abstract class ScannedDependency { return file; } - abstract ImmutableList sources() throws IOException; + abstract ImmutableList sources() throws IOException; @VisibleForTesting static List getClassPath(final MavenProject project) { diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java index 4e3e9fd4d1..90edf6d982 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java @@ -10,7 +10,7 @@ package org.opendaylight.yangtools.yang2sources.plugin; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.ModuleLike; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; final class Util { private Util() { diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangProvider.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangProvider.java index ea4401d9c4..ee880da8a0 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangProvider.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangProvider.java @@ -12,12 +12,12 @@ import java.io.IOException; import java.util.Collection; import java.util.List; import org.apache.maven.project.MavenProject; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; @FunctionalInterface @VisibleForTesting interface YangProvider { - List addYangsToMetaInf(MavenProject project, - Collection modelsInProject) throws IOException; + List addYangsToMetaInf(MavenProject project, Collection modelsInProject) + throws IOException; } diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java index eae80170c5..5cd7cb1751 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java @@ -39,8 +39,8 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorException; import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorFactory; import org.opendaylight.yangtools.yang.common.YangConstants; -import org.opendaylight.yangtools.yang.model.repo.api.YangIRSchemaSource; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.ir.YangIRSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; @@ -87,10 +87,10 @@ class YangToSourcesProcessor { final var stateListBuilder = ImmutableList.builderWithExpectedSize(modelsInProject.size()); for (var source : modelsInProject) { - final File file = new File(withMetaInf, source.getIdentifier().toYangFilename()); + final File file = new File(withMetaInf, source.sourceId().toYangFilename()); stateListBuilder.add(FileState.ofWrittenFile(file, out -> source.asByteSource(StandardCharsets.UTF_8).copyTo(out))); - LOG.debug("Created file {} for {}", file, source.getIdentifier()); + LOG.debug("Created file {} for {}", file, source.sourceId()); } ProjectFileAccess.addResourceDir(project, generatedYangDir); @@ -244,9 +244,9 @@ class YangToSourcesProcessor { final Stopwatch watch = Stopwatch.createStarted(); - final List> parsed = yangFilesInProject.parallelStream() + final List> parsed = yangFilesInProject.parallelStream() .map(file -> { - final YangTextSchemaSource textSource = YangTextSchemaSource.forPath(file.toPath()); + final var textSource = YangTextSource.forPath(file.toPath()); try { return Map.entry(textSource, TextToIRTransformer.transformText(textSource)); } catch (YangSyntaxErrorException | IOException e) { @@ -258,7 +258,7 @@ class YangToSourcesProcessor { LOG.info("{} Project model files found: {} in {}", LOG_PREFIX, yangFilesInProject.size(), watch); final var outputFiles = ImmutableList.builder(); - Collection modelsInProject = null; + Collection modelsInProject = null; for (var parserConfig : codeGenerators.stream().map(GeneratorTask::parserConfig).collect(Collectors.toSet())) { final var moduleReactor = createReactor(yangFilesInProject, parserConfig, dependencies, parsed); final var yangSw = Stopwatch.createStarted(); @@ -388,19 +388,19 @@ class YangToSourcesProcessor { @SuppressWarnings("checkstyle:illegalCatch") private @NonNull ProcessorModuleReactor createReactor(final List yangFilesInProject, final YangParserConfiguration parserConfig, final Collection dependencies, - final List> parsed) throws MojoExecutionException { + final List> parsed) throws MojoExecutionException { try { - final var sourcesInProject = new ArrayList(yangFilesInProject.size()); + final var sourcesInProject = new ArrayList(yangFilesInProject.size()); final var parser = parserFactory.createParser(parserConfig); for (var entry : parsed) { final var textSource = entry.getKey(); final var astSource = entry.getValue(); parser.addSource(astSource); - if (!astSource.getIdentifier().equals(textSource.getIdentifier())) { + if (!astSource.sourceId().equals(textSource.sourceId())) { // AST indicates a different source identifier, make sure we use that - sourcesInProject.add(YangTextSchemaSource.delegateForCharSource(astSource.getIdentifier(), + sourcesInProject.add(YangTextSource.delegateForCharSource(astSource.sourceId(), textSource)); } else { sourcesInProject.add(textSource); diff --git a/plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/FilenameResolutionTest.java b/plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/FilenameResolutionTest.java index 7a7a28b830..dbbc43bd0a 100644 --- a/plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/FilenameResolutionTest.java +++ b/plugin/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/FilenameResolutionTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.yangtools.plugin.generator.api.ModuleResourceResolver; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; @ExtendWith(MockitoExtension.class) class FilenameResolutionTest extends AbstractCodeGeneratorTest { @@ -38,11 +38,11 @@ class FilenameResolutionTest extends AbstractCodeGeneratorTest { final var module = Iterables.getOnlyElement(context.getModules()); assertEquals(Optional.of("/META-INF/yang/foo@2020-10-13.yang"), - resolver.findModuleResourcePath(module, YangTextSchemaSource.class)); + resolver.findModuleResourcePath(module, YangTextSource.class)); final var submodule = Iterables.getOnlyElement(module.getSubmodules()); assertEquals(Optional.of("/META-INF/yang/foo-submodule@2020-10-12.yang"), - resolver.findModuleResourcePath(submodule, YangTextSchemaSource.class)); + resolver.findModuleResourcePath(submodule, YangTextSource.class)); return ImmutableTable.of(); }).when(mock).generateFiles(any(), any(), any()); diff --git a/tools/yang-model-validator/src/main/java/org/opendaylight/yangtools/yang/validator/SystemTestUtils.java b/tools/yang-model-validator/src/main/java/org/opendaylight/yangtools/yang/validator/SystemTestUtils.java index 891f183e0b..b74a6287c1 100644 --- a/tools/yang-model-validator/src/main/java/org/opendaylight/yangtools/yang/validator/SystemTestUtils.java +++ b/tools/yang-model-validator/src/main/java/org/opendaylight/yangtools/yang/validator/SystemTestUtils.java @@ -33,7 +33,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.api.YangParser; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.api.YangParserException; @@ -102,10 +102,10 @@ final class SystemTestUtils { } for (File file : testFiles) { - parser.addSource(YangTextSchemaSource.forPath(file.toPath())); + parser.addSource(YangTextSource.forPath(file.toPath())); } for (File file : libFiles) { - parser.addLibSource(YangTextSchemaSource.forPath(file.toPath())); + parser.addLibSource(YangTextSource.forPath(file.toPath())); } return parser.buildEffectiveModel(); diff --git a/yang/yang-repo-api/pom.xml b/yang/yang-repo-api/pom.xml index 905e24a86c..3685aa3273 100644 --- a/yang/yang-repo-api/pom.xml +++ b/yang/yang-repo-api/pom.xml @@ -44,11 +44,11 @@ org.opendaylight.yangtools - yang-ir + yang-model-api org.opendaylight.yangtools - yang-model-api + yang-model-spi 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 ce8de51621..436f2f463c 100644 --- a/yang/yang-repo-api/src/main/java/module-info.java +++ b/yang/yang-repo-api/src/main/java/module-info.java @@ -12,8 +12,8 @@ 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 transitive org.opendaylight.yangtools.yang.model.spi; requires org.opendaylight.yangtools.util; requires org.slf4j; diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/EffectiveModelContextFactory.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/EffectiveModelContextFactory.java index 7292b6e186..ec52092a4c 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/EffectiveModelContextFactory.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/EffectiveModelContextFactory.java @@ -9,10 +9,11 @@ package org.opendaylight.yangtools.yang.model.repo.api; import com.google.common.annotations.Beta; import com.google.common.util.concurrent.ListenableFuture; -import java.util.Arrays; import java.util.Collection; +import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * An asynchronous factory for building {@link EffectiveModelContext} instances based on a specification of what @@ -32,6 +33,6 @@ public interface EffectiveModelContextFactory { default @NonNull ListenableFuture createEffectiveModelContext( final SourceIdentifier... requiredSources) { - return createEffectiveModelContext(Arrays.asList(requiredSources)); + return createEffectiveModelContext(List.of(requiredSources)); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/MissingSchemaSourceException.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/MissingSchemaSourceException.java index cc9cae3552..b7d4b3fcdb 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/MissingSchemaSourceException.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/MissingSchemaSourceException.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.model.repo.api; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * Exception thrown when a the specified schema source is not available. diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaRepository.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaRepository.java index bb76e885e9..9250a43440 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaRepository.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaRepository.java @@ -11,6 +11,8 @@ import com.google.common.annotations.Beta; import com.google.common.util.concurrent.ListenableFuture; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** * Interface exposed by repository implementations. A schema repository is a logically centralized place for model @@ -36,6 +38,6 @@ public interface SchemaRepository { return createEffectiveModelContextFactory(SchemaContextFactoryConfiguration.getDefault()); } - @NonNull ListenableFuture getSchemaSource(@NonNull SourceIdentifier id, + @NonNull ListenableFuture getSchemaSource(@NonNull SourceIdentifier id, @NonNull Class represetation); } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaResolutionException.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaResolutionException.java index b6128bf8cb..b2862b6ac7 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaResolutionException.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaResolutionException.java @@ -16,6 +16,7 @@ import com.google.common.collect.Multimap; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; /** * Exception thrown when a Schema Source fails to resolve. @@ -69,7 +70,7 @@ public class SchemaResolutionException extends SchemaSourceException { * @return YANG schema source identifier */ public final SourceIdentifier getFailedSource() { - return this.failedSource; + return failedSource; } /** diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceFilter.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceFilter.java index cccfc92733..e9ca81828c 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceFilter.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SchemaSourceFilter.java @@ -13,6 +13,7 @@ import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.ListenableFuture; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.util.concurrent.FluentFutures; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** * A filter of schema sources. This is used to restrict which sources representation instances are allowed @@ -25,16 +26,16 @@ public interface SchemaSourceFilter { * A {@link SchemaSourceFilter} which accepts any schema source it is presented with. */ @NonNull SchemaSourceFilter ALWAYS_ACCEPT = new SchemaSourceFilter() { - private final ImmutableList> representations = - ImmutableList.of(SchemaSourceRepresentation.class); + private final ImmutableList> representations = + ImmutableList.of(SourceRepresentation.class); @Override - public ImmutableList> supportedRepresentations() { + public ImmutableList> supportedRepresentations() { return representations; } @Override - public FluentFuture apply(final SchemaSourceRepresentation schemaSource) { + public FluentFuture apply(final SourceRepresentation schemaSource) { return FluentFutures.immediateTrueFluentFuture(); } }; @@ -45,7 +46,7 @@ public interface SchemaSourceFilter { * * @return Set of supported representations. */ - Iterable> supportedRepresentations(); + Iterable> supportedRepresentations(); /** * Check if a particular schema source is acceptable to the filter. The process @@ -57,5 +58,5 @@ public interface SchemaSourceFilter { * @return Promise of a filtering decision. The result should be {@link Boolean#TRUE} * if the source is acceptable. */ - ListenableFuture apply(SchemaSourceRepresentation schemaSource); + ListenableFuture apply(SourceRepresentation schemaSource); } diff --git a/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java b/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java index 5e5a8a653c..fe1509fea8 100644 --- a/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java +++ b/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java @@ -33,28 +33,25 @@ import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.AbstractSchemaSourceCache; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource.Costs; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Cache implementation that stores schemas in form of files under provided folder. */ -public final class FilesystemSchemaSourceCache - extends AbstractSchemaSourceCache { - +public final class FilesystemSchemaSourceCache extends AbstractSchemaSourceCache { private static final Logger LOG = LoggerFactory.getLogger(FilesystemSchemaSourceCache.class); // Init storage adapters - private static final Map, - StorageAdapter> STORAGE_ADAPTERS = Collections.singletonMap( - YangTextSchemaSource.class, new YangTextSchemaStorageAdapter()); + private static final Map, StorageAdapter> + STORAGE_ADAPTERS = Collections.singletonMap(YangTextSource.class, new YangTextStorageAdapter()); private static final Pattern CACHED_FILE_PATTERN = Pattern.compile("(?[^@]+)" + "(@(?" + Revision.STRING_FORMAT_PATTERN + "))?"); @@ -62,8 +59,8 @@ public final class FilesystemSchemaSourceCache representation; private final File storageDirectory; - public FilesystemSchemaSourceCache( - final SchemaSourceRegistry consumer, final Class representation, final File storageDirectory) { + public FilesystemSchemaSourceCache(final SchemaSourceRegistry consumer, final Class representation, + final File storageDirectory) { super(consumer, representation, Costs.LOCAL_IO); this.representation = representation; this.storageDirectory = requireNonNull(storageDirectory); @@ -78,16 +75,16 @@ public final class FilesystemSchemaSourceCache representation) { - for (final Class supportedRepresentation : STORAGE_ADAPTERS.keySet()) { + private static void checkSupportedRepresentation(final Class representation) { + for (final var supportedRepresentation : STORAGE_ADAPTERS.keySet()) { if (supportedRepresentation.isAssignableFrom(representation)) { return; } } throw new IllegalArgumentException(String.format( - "This cache does not support representation: %s, supported representations are: %s", - representation, STORAGE_ADAPTERS.keySet())); + "This cache does not support representation: %s, supported representations are: %s", + representation, STORAGE_ADAPTERS.keySet())); } /** @@ -111,8 +108,7 @@ public final class FilesystemSchemaSourceCache { - + private abstract static class StorageAdapter { private final Class supportedType; protected StorageAdapter(final Class supportedType) { this.supportedType = supportedType; } - void store(final File file, final SchemaSourceRepresentation schemaSourceRepresentation) { + void store(final File file, final SourceRepresentation schemaSourceRepresentation) { checkArgument(supportedType.isAssignableFrom(schemaSourceRepresentation.getClass()), "Cannot store schema source %s, this adapter only supports %s", schemaSourceRepresentation, supportedType); @@ -227,25 +222,23 @@ public final class FilesystemSchemaSourceCache { - - protected YangTextSchemaStorageAdapter() { - super(YangTextSchemaSource.class); + private static final class YangTextStorageAdapter extends StorageAdapter { + protected YangTextStorageAdapter() { + super(YangTextSource.class); } @Override - protected void storeAsType(final File file, final YangTextSchemaSource cast) { + protected void storeAsType(final File file, final YangTextSource cast) { try (var castStream = cast.asByteSource(StandardCharsets.UTF_8).openStream()) { Files.copy(castStream, file.toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (final IOException e) { - throw new IllegalStateException("Cannot store schema source " + cast.getIdentifier() + " to " + file, - e); + throw new IllegalStateException("Cannot store schema source " + cast.sourceId() + " to " + file, e); } } @Override - YangTextSchemaSource restoreAsType(final SourceIdentifier sourceIdentifier, final File cachedSource) { - return YangTextSchemaSource.forPath(cachedSource.toPath(), sourceIdentifier); + YangTextSource restoreAsType(final SourceIdentifier sourceIdentifier, final File cachedSource) { + return YangTextSource.forPath(cachedSource.toPath(), sourceIdentifier); } } diff --git a/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheIntegrationTest.java b/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheIntegrationTest.java index f479026ef4..94fc3448f6 100644 --- a/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheIntegrationTest.java +++ b/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheIntegrationTest.java @@ -13,7 +13,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.collect.Lists; @@ -28,16 +27,16 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Optional; import java.util.concurrent.ExecutionException; import org.junit.jupiter.api.Test; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -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.SchemaSourceListener; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; @@ -50,7 +49,7 @@ public class FilesystemSchemaSourceCacheIntegrationTest { List> registeredSources = new ArrayList<>(); @Override - public void schemaSourceEncountered(final SchemaSourceRepresentation source) { + public void schemaSourceEncountered(final SourceRepresentation source) { } @Override @@ -82,8 +81,8 @@ public class FilesystemSchemaSourceCacheIntegrationTest { final File test4 = new File(tempDir, "module@2010-12-12.yang"); Files.asCharSink(test4, StandardCharsets.UTF_8).write("content-module-2010"); - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>( - sharedSchemaRepository, YangTextSchemaSource.class, tempDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>( + sharedSchemaRepository, YangTextSource.class, tempDir); sharedSchemaRepository.registerSchemaSourceListener(cache); assertEquals(4, listener.registeredSources.size()); @@ -102,14 +101,14 @@ public class FilesystemSchemaSourceCacheIntegrationTest { final File storageDir = Files.createTempDir(); - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>( - sharedSchemaRepository, YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>( + sharedSchemaRepository, YangTextSource.class, storageDir); sharedSchemaRepository.registerSchemaSourceListener(cache); final SourceIdentifier runningId = new SourceIdentifier("running", "2012-12-12"); - sharedSchemaRepository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture( - new YangTextSchemaSource(runningId) { + sharedSchemaRepository.registerSchemaSource(sourceIdentifier -> FluentFutures.immediateFluentFuture( + new YangTextSource(runningId) { @Override protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { return toStringHelper; @@ -121,10 +120,10 @@ public class FilesystemSchemaSourceCacheIntegrationTest { } @Override - public Optional getSymbolicName() { - return Optional.empty(); + public String symbolicName() { + return null; } - }), PotentialSchemaSource.create(runningId, YangTextSchemaSource.class, + }), PotentialSchemaSource.create(runningId, YangTextSource.class, PotentialSchemaSource.Costs.REMOTE_IO.getValue())); final TextToIRTransformer transformer = TextToIRTransformer.create(sharedSchemaRepository, diff --git a/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java b/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java index e6dd9515da..5c99d47965 100644 --- a/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java +++ b/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java @@ -32,7 +32,6 @@ import java.nio.file.Files; import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.Optional; import java.util.concurrent.ExecutionException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -42,11 +41,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; import org.opendaylight.yangtools.concepts.Registration; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -67,15 +66,15 @@ public class FilesystemSchemaSourceCacheTest { @Test public void testCacheAndRestore() throws Exception { - final FilesystemSchemaSourceCache cache - = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content); + final YangTextSource source = new TestingYangSource("test", "2012-12-12", content); cache.offer(source); final String content2 = "content2"; - final YangTextSchemaSource source2 = new TestingYangSource("test2", null, content); + final YangTextSource source2 = new TestingYangSource("test2", null, content); cache.offer(source2); final List storedFiles = getFilesFromCache(); @@ -93,7 +92,7 @@ public class FilesystemSchemaSourceCacheTest { any(PotentialSchemaSource.class)); // Create new cache from stored sources - new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); + new FilesystemSchemaSourceCache<>(registry, YangTextSource.class, storageDir); verify(registry, times(4)).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); @@ -112,11 +111,11 @@ public class FilesystemSchemaSourceCacheTest { @Test public void testCacheDuplicate() throws Exception { - final FilesystemSchemaSourceCache cache - = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", null, content); + final YangTextSource source = new TestingYangSource("test", null, content); // Double offer cache.offer(source); cache.offer(source); @@ -128,13 +127,13 @@ public class FilesystemSchemaSourceCacheTest { @Test public void testCacheMultipleRevisions() throws Exception { - final FilesystemSchemaSourceCache cache - = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", null, content); - final YangTextSchemaSource source2 = new TestingYangSource("test", "2012-12-12", content); - final YangTextSchemaSource source3 = new TestingYangSource("test", "2013-12-12", content); + final YangTextSource source = new TestingYangSource("test", null, content); + final YangTextSource source2 = new TestingYangSource("test", "2012-12-12", content); + final YangTextSource source3 = new TestingYangSource("test", "2013-12-12", content); // Double offer cache.offer(source); cache.offer(source2); @@ -154,8 +153,8 @@ public class FilesystemSchemaSourceCacheTest { public void sourceIdToFileEmptyRevWithEmptyDir() { final SourceIdentifier sourceIdentifier = new SourceIdentifier("test"); final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, storageDir); - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, - YangTextSchemaSource.class, sourceIdToFile); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, sourceIdToFile); assertNotNull(cache); final List storedFiles = Arrays.asList(sourceIdToFile.listFiles()); assertEquals(0, storedFiles.size()); @@ -163,10 +162,10 @@ public class FilesystemSchemaSourceCacheTest { @Test public void sourceIdToFileEmptyRevWithOneItemInDir() { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, - YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content); + final YangTextSource source = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); final SourceIdentifier sourceIdentifier = new SourceIdentifier("test"); @@ -179,11 +178,11 @@ public class FilesystemSchemaSourceCacheTest { @Test public void sourceIdToFileEmptyRevWithMoreItemsInDir() { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, - YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content); - final YangTextSchemaSource source2 = new TestingYangSource("test", "2013-12-12", content); + final YangTextSource source = new TestingYangSource("test", "2012-12-12", content); + final YangTextSource source2 = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); cache.offer(source2); @@ -196,28 +195,28 @@ public class FilesystemSchemaSourceCacheTest { @Test public void test() throws Exception { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, - YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content); + final YangTextSource source = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); final SourceIdentifier sourceIdentifier = new SourceIdentifier("test", "2013-12-12"); - final ListenableFuture checked = cache.getSource(sourceIdentifier); + final ListenableFuture checked = cache.getSource(sourceIdentifier); assertNotNull(checked); assertTrue(checked.isDone()); - final YangTextSchemaSource checkedGet = checked.get(); - assertEquals(sourceIdentifier, checkedGet.getIdentifier()); + final YangTextSource checkedGet = checked.get(); + assertEquals(sourceIdentifier, checkedGet.sourceId()); } @Test public void test1() throws Exception { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, - YangTextSchemaSource.class, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSource.class, storageDir); final String content = "content1"; - final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content); + final YangTextSource source = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); final SourceIdentifier sourceIdentifier = new SourceIdentifier("test1", "2012-12-12"); - final ListenableFuture checked = cache.getSource(sourceIdentifier); + final ListenableFuture checked = cache.getSource(sourceIdentifier); assertNotNull(checked); assertThrows(ExecutionException.class, () -> checked.get()); } @@ -226,7 +225,7 @@ public class FilesystemSchemaSourceCacheTest { return Arrays.asList(storageDir.listFiles()); } - private static class TestingYangSource extends YangTextSchemaSource { + private static class TestingYangSource extends YangTextSource { private final String content; TestingYangSource(final String name, final String revision, final String content) { @@ -245,8 +244,8 @@ public class FilesystemSchemaSourceCacheTest { } @Override - public Optional getSymbolicName() { - return Optional.empty(); + public String symbolicName() { + return null; } } } diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaRepository.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaRepository.java index 9d95628b50..49012e4260 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaRepository.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaRepository.java @@ -29,10 +29,10 @@ import org.checkerframework.checker.lock.qual.GuardedBy; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +49,7 @@ public abstract class AbstractSchemaRepository implements SchemaRepository, Sche * a specific representation of a source. */ @GuardedBy("this") - private final Map, + private final Map, SchemaSourceRegistration>> sources = new HashMap<>(); /* @@ -58,23 +58,23 @@ public abstract class AbstractSchemaRepository implements SchemaRepository, Sche @GuardedBy("this") private final List listeners = new ArrayList<>(); - private static ListenableFuture fetchSource(final SourceIdentifier id, - final Iterator it) { + private static ListenableFuture fetchSource( + final SourceIdentifier sourceId, final Iterator it) { final var reg = it.next(); @SuppressWarnings("unchecked") final var provider = (SchemaSourceProvider) reg.provider(); - return Futures.catchingAsync(provider.getSource(id), Throwable.class, input -> { + return Futures.catchingAsync(provider.getSource(sourceId), Throwable.class, input -> { LOG.debug("Failed to acquire source from {}", reg, input); if (it.hasNext()) { - return fetchSource(id, it); + return fetchSource(sourceId, it); } - throw new MissingSchemaSourceException("All available providers exhausted", id, input); + throw new MissingSchemaSourceException("All available providers exhausted", sourceId, input); }, MoreExecutors.directExecutor()); } @Override - public ListenableFuture getSchemaSource(final SourceIdentifier id, + public ListenableFuture getSchemaSource(final SourceIdentifier id, final Class representation) { final ArrayList sortedSchemaSourceRegistrations; @@ -94,7 +94,7 @@ public abstract class AbstractSchemaRepository implements SchemaRepository, Sche final var regs = sortedSchemaSourceRegistrations.iterator(); if (!regs.hasNext()) { return immediateFailedFluentFuture(new MissingSchemaSourceException( - "No providers for source " + id + " representation " + representation + " available", id)); + "No providers for source " + id + " representation " + representation + " available", id)); } final ListenableFuture fetchSourceFuture = fetchSource(id, regs); @@ -145,7 +145,7 @@ public abstract class AbstractSchemaRepository implements SchemaRepository, Sche } @Override - public Registration registerSchemaSource( + public Registration registerSchemaSource( final SchemaSourceProvider provider, final PotentialSchemaSource source) { final var ret = new SchemaSourceRegistration(source.cachedReference(), provider); addSource(ret); diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaSourceCache.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaSourceCache.java index 0d6e1776b6..bbe75cde3d 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaSourceCache.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/AbstractSchemaSourceCache.java @@ -10,18 +10,18 @@ package org.opendaylight.yangtools.yang.model.repo.spi; import static java.util.Objects.requireNonNull; import org.opendaylight.yangtools.concepts.Registration; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource.Costs; /** * Abstract base class for cache-type SchemaSourceListeners. It needs to be registered with a * {@link SchemaSourceRegistry}, where it gets notifications from. It performs filtering and - * {@link #offer(SchemaSourceRepresentation)}s conforming sources to the subclass. + * {@link #offer(SourceRepresentation)}s conforming sources to the subclass. * * @param Cached schema source type. */ -public abstract class AbstractSchemaSourceCache +public abstract class AbstractSchemaSourceCache implements SchemaSourceListener, SchemaSourceProvider { private final SchemaSourceRegistry consumer; private final Class representation; @@ -48,17 +48,17 @@ public abstract class AbstractSchemaSourceCache {@link SchemaSourceRepresentation} type stored in this cache + * @param {@link SourceRepresentation} type stored in this cache * @deprecated This class has a rather complicated and ugly design. Use {@link SoftSchemaSourceCache} instead. */ @Beta @Deprecated(since = "7.0.13", forRemoval = true) -public final class GuavaSchemaSourceCache extends AbstractSchemaSourceCache +public final class GuavaSchemaSourceCache extends AbstractSchemaSourceCache implements AutoCloseable { // FIXME: 7.0.0: use a java.util.Cleaner? private final List> regs = Collections.synchronizedList(new ArrayList<>()); @@ -45,35 +45,35 @@ public final class GuavaSchemaSourceCache cache = cacheBuilder.build(); } - public static @NonNull GuavaSchemaSourceCache createSoftCache( + public static @NonNull GuavaSchemaSourceCache createSoftCache( final SchemaSourceRegistry consumer, final Class representation) { return new GuavaSchemaSourceCache<>(consumer, representation, CacheBuilder.newBuilder().softValues()); } - public static @NonNull GuavaSchemaSourceCache createSoftCache( + public static @NonNull GuavaSchemaSourceCache createSoftCache( final SchemaSourceRegistry consumer, final Class representation, final long lifetime, final TimeUnit units) { return new GuavaSchemaSourceCache<>(consumer, representation, CacheBuilder.newBuilder().softValues() .expireAfterAccess(lifetime, units)); } - public static @NonNull GuavaSchemaSourceCache createSoftCache( + public static @NonNull GuavaSchemaSourceCache createSoftCache( final SchemaSourceRegistry consumer, final Class representation, final Duration duration) { return new GuavaSchemaSourceCache<>(consumer, representation, CacheBuilder.newBuilder().softValues() .expireAfterAccess(duration)); } @Override - public FluentFuture getSource(final SourceIdentifier sourceIdentifier) { - final T present = cache.getIfPresent(sourceIdentifier); + public FluentFuture getSource(final SourceIdentifier sourceId) { + final T present = cache.getIfPresent(sourceId); return present != null ? FluentFutures.immediateFluentFuture(present) - : FluentFutures.immediateFailedFluentFuture(new MissingSchemaSourceException("Source not found", - sourceIdentifier)); + : FluentFutures.immediateFailedFluentFuture( + new MissingSchemaSourceException("Source not found", sourceId)); } @Override protected void offer(final T source) { - final var srcId = source.getIdentifier(); + final var srcId = source.sourceId(); if (cache.getIfPresent(srcId) != null) { // We already have this source, do not track it return; diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSource.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSource.java index c966338658..a42c904b38 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSource.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSource.java @@ -14,16 +14,15 @@ import com.google.common.annotations.Beta; import com.google.common.collect.Interner; import com.google.common.collect.Interners; import java.util.Objects; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** - * A potential schema source. Instances of this class track the various - * representations of a schema source and the cost attached to obtaining - * the source from them. + * A potential schema source. Instances of this class track the various representations of a schema source and the cost + * attached to obtaining the source from them. */ @Beta -public final class PotentialSchemaSource { +public final class PotentialSchemaSource { /** * Each registered source has a cost associated with it. Since a particular * representation can be acquired by various means, here are general constants @@ -79,14 +78,14 @@ public final class PotentialSchemaSource { this.cost = cost; } - public static PotentialSchemaSource create( - final SourceIdentifier sourceIdentifier, final Class representation, final int cost) { - return new PotentialSchemaSource<>(sourceIdentifier, representation, cost); + public static PotentialSchemaSource create( + final SourceIdentifier sourceId, final Class representation, final int cost) { + return new PotentialSchemaSource<>(sourceId, representation, cost); } - public static PotentialSchemaSource create( - final SourceIdentifier sourceIdentifier, final Class representation, final Costs cost) { - return new PotentialSchemaSource<>(sourceIdentifier, representation, cost.getValue()); + public static PotentialSchemaSource create( + final SourceIdentifier sourceId, final Class representation, final Costs cost) { + return new PotentialSchemaSource<>(sourceId, representation, cost.getValue()); } /** diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceListener.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceListener.java index 5e07793fcd..ba58a4657f 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceListener.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceListener.java @@ -9,10 +9,10 @@ package org.opendaylight.yangtools.yang.model.repo.spi; import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** - * Listener on {@link SchemaSourceRepresentation} lifecycle. + * Listener on {@link SourceRepresentation} lifecycle. */ @Beta @NonNullByDefault @@ -23,7 +23,7 @@ public interface SchemaSourceListener { * * @param source Schema source */ - void schemaSourceEncountered(SchemaSourceRepresentation source); + void schemaSourceEncountered(SourceRepresentation source); /** * Invoked when a new schema source is registered by a provider. This call diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceProvider.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceProvider.java index d5a7fbc974..4add2e50ff 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceProvider.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceProvider.java @@ -10,9 +10,9 @@ package org.opendaylight.yangtools.yang.model.repo.spi; import com.google.common.annotations.Beta; import com.google.common.util.concurrent.ListenableFuture; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** * Schema source provider implementations take care of resolving a {@link SourceIdentifier} @@ -22,30 +22,29 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; * @param Schema source representation type provided by this implementation */ @Beta -public interface SchemaSourceProvider { +public interface SchemaSourceProvider { /** * Returns a representation a for supplied YANG source identifier. The resolution * criteria are as follows: * *
    - *
  • If the source identifier specifies a revision, this method returns either - * a representation of that particular revision or throw {@link MissingSchemaSourceException}. - *
  • If the source identifier does not specify a revision, this method returns - * the newest available revision, or throws {@link MissingSchemaSourceException}. + *
  • If the source identifier specifies a revision, this method returns either a representation of that + * particular revision or throw {@link MissingSchemaSourceException}
  • + *
  • If the source identifier does not specify a revision, this method returns the newest available revision, + * or throws {@link MissingSchemaSourceException}
  • *
* *

- * In either case the returned representation is required to report a non-null - * revision in the {@link SourceIdentifier} returned from - * {@link SchemaSourceRepresentation#getIdentifier()}. + * In either case the returned representation is required to report a non-null revision in the + * {@link SourceIdentifier} returned from {@link SourceRepresentation#sourceId()}. * *

- * Implementations are not required to provide constant behavior in time, notably - * this different invocation of this method may produce different results. + * Implementations are not required to provide constant behavior in time, notably this different invocation of this + * method may produce different results. * - * @param sourceIdentifier source identifier + * @param sourceId source identifier * @return future source representation, if supplied YANG module is available * @throws NullPointerException if {@code sourceIdentifier} is null */ - @NonNull ListenableFuture getSource(@NonNull SourceIdentifier sourceIdentifier); + @NonNull ListenableFuture getSource(@NonNull SourceIdentifier sourceId); } diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceRegistry.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceRegistry.java index 246353351b..d9fb0eb274 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceRegistry.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceRegistry.java @@ -9,8 +9,8 @@ package org.opendaylight.yangtools.yang.model.repo.spi; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.concepts.Registration; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; /** * Registry of all potentially available schema sources. Processes capable of dynamic schema discovery, such as OSGi @@ -28,7 +28,7 @@ public interface SchemaSourceRegistry { * @param source Schema source details * @return A registration handle. Invoking {@link Registration#close()} will cancel the registration. */ - Registration registerSchemaSource(SchemaSourceProvider provider, + Registration registerSchemaSource(SchemaSourceProvider provider, PotentialSchemaSource source); /** diff --git a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformer.java b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformer.java index 21872ae530..f022197138 100644 --- a/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformer.java +++ b/yang/yang-repo-spi/src/main/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformer.java @@ -15,14 +15,14 @@ import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.util.HashMap; import java.util.Map; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -public class SchemaSourceTransformer +public class SchemaSourceTransformer implements SchemaSourceListener, SchemaSourceProvider { @FunctionalInterface - public interface Transformation + public interface Transformation extends AsyncFunction { @Override ListenableFuture apply(S input) throws Exception; @@ -51,7 +51,7 @@ public class SchemaSourceTransformer {@link SchemaSourceRepresentation} type stored in this cache + * @param {@link SourceRepresentation} type stored in this cache */ @Beta -public final class SoftSchemaSourceCache extends AbstractSchemaSourceCache +public final class SoftSchemaSourceCache extends AbstractSchemaSourceCache implements AutoCloseable { private static final Cleaner CLEANER = Cleaner.create(); @@ -74,11 +74,11 @@ public final class SoftSchemaSourceCache e return; } - final var id = source.getIdentifier(); + final var sourceId = source.sourceId(); final var ref = new SoftReference<>(source); while (true) { - final var prev = references.putIfAbsent(id, ref); + final var prev = references.putIfAbsent(sourceId, ref); if (prev == null) { // We have performed a fresh insert and need to add a cleanup break; @@ -90,15 +90,15 @@ public final class SoftSchemaSourceCache e } // Existing reference is dead, remove it and retry - references.remove(id, prev); + references.remove(sourceId, prev); } // We have populated a cache entry, register the source and a cleanup action - final var reg = register(id); + final var reg = register(sourceId); cleanables.put(reg, CLEANER.register(source, () -> { cleanables.remove(reg); reg.close(); - references.remove(id, ref); + references.remove(sourceId, ref); })); // Ensure 'source' is still reachable here. This is needed to ensure the cleanable action does not fire before diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java index 9e84d86e1c..6c53af93bf 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java @@ -16,7 +16,6 @@ import static org.mockito.Mockito.doReturn; import com.google.common.base.MoreObjects.ToStringHelper; import java.io.StringReader; -import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; @@ -24,14 +23,14 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.yangtools.concepts.Registration; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangSourceRepresentation; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; @Deprecated @ExtendWith(MockitoExtension.class) class GuavaSchemaSourceCacheTest { - private static final Class REPRESENTATION = YangSchemaSourceRepresentation.class; + private static final Class REPRESENTATION = YangSourceRepresentation.class; private static final long LIFETIME = 1000L; private static final TimeUnit UNITS = TimeUnit.MILLISECONDS; @@ -68,7 +67,7 @@ class GuavaSchemaSourceCacheTest { assertNotNull(checkedSource); final var yangSchemaSourceRepresentation = checkedSource.get(); assertNotNull(yangSchemaSourceRepresentation); - assertEquals(sourceIdentifier, yangSchemaSourceRepresentation.getIdentifier()); + assertEquals(sourceIdentifier, yangSchemaSourceRepresentation.sourceId()); } } @@ -105,7 +104,7 @@ class GuavaSchemaSourceCacheTest { } } - private static class TestingYangSource extends YangTextSchemaSource { + private static class TestingYangSource extends YangTextSource { private final String content; TestingYangSource(final String name, final String revision, final String content) { @@ -119,8 +118,8 @@ class GuavaSchemaSourceCacheTest { } @Override - public Optional getSymbolicName() { - return Optional.empty(); + public String symbolicName() { + return null; } @Override diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java index d0435649d1..ce24088532 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java @@ -16,27 +16,27 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangSourceRepresentation; @ExtendWith(MockitoExtension.class) class PotentialSchemaSourceTest { - private interface TestSchemaSourceRepresentation extends YangSchemaSourceRepresentation { + private interface TestSourceRepresentation extends YangSourceRepresentation { @Override - default Class getType() { - return TestSchemaSourceRepresentation.class; + default Class getType() { + return TestSourceRepresentation.class; } } public final SourceIdentifier sourceIdentifier = new SourceIdentifier("foo"); @SuppressWarnings("exports") - public PotentialSchemaSource source; + public PotentialSchemaSource source; @SuppressWarnings("exports") - public PotentialSchemaSource same; + public PotentialSchemaSource same; @BeforeEach void before() { - source = PotentialSchemaSource.create(sourceIdentifier, TestSchemaSourceRepresentation.class, + source = PotentialSchemaSource.create(sourceIdentifier, TestSourceRepresentation.class, PotentialSchemaSource.Costs.LOCAL_IO.getValue()); same = PotentialSchemaSource.create(source.getSourceIdentifier(), source.getRepresentation(), source.getCost()); @@ -45,14 +45,14 @@ class PotentialSchemaSourceTest { @Test void testNegativeCost() { assertThrows(IllegalArgumentException.class, - () -> PotentialSchemaSource.create(sourceIdentifier, TestSchemaSourceRepresentation.class, -1)); + () -> PotentialSchemaSource.create(sourceIdentifier, TestSourceRepresentation.class, -1)); } @Test void testMethods() { assertEquals(PotentialSchemaSource.Costs.LOCAL_IO.getValue(), source.getCost()); assertSame(sourceIdentifier, source.getSourceIdentifier()); - assertSame(TestSchemaSourceRepresentation.class, source.getRepresentation()); + assertSame(TestSourceRepresentation.class, source.getRepresentation()); assertEquals(same.hashCode(), source.hashCode()); assertNotEquals(null, source); assertEquals(source, source); diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java index f7d198dfa8..cfb5580dcf 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java @@ -19,19 +19,19 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation; +import org.opendaylight.yangtools.yang.model.api.source.YangSourceRepresentation; 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.SchemaRepository; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.YinXmlSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource.Costs; +import org.opendaylight.yangtools.yang.model.spi.source.YinXmlSource; @ExtendWith(MockitoExtension.class) class SchemaSourceTransformerTest { - public static final Class SRC_CLASS = YangSchemaSourceRepresentation.class; - public static final Class DST_CLASS = YinXmlSchemaSource.class; + public static final Class SRC_CLASS = YangSourceRepresentation.class; + public static final Class DST_CLASS = YinXmlSource.class; @Mock public SchemaRepository provider; @@ -40,9 +40,9 @@ class SchemaSourceTransformerTest { public SchemaSourceRegistry consumer; @Mock - public AsyncFunction function; + public AsyncFunction function; - public SchemaSourceTransformer schema; + public SchemaSourceTransformer schema; @Test void schemaSourceTransformerTest() { @@ -99,7 +99,7 @@ class SchemaSourceTransformerTest { assertNotNull(source2); } - private static class Foo { + private static class Foo { final PotentialSchemaSource src; Foo(final SourceIdentifier sourceIdentifier, final Class representation, final Costs cost) { @@ -111,20 +111,19 @@ class SchemaSourceTransformerTest { } } - private static class Registrator extends AbstractSchemaSourceCache { - Registrator(final SchemaSourceRegistry consumer, final Class srcClass, + private static class Registrator extends AbstractSchemaSourceCache { + Registrator(final SchemaSourceRegistry consumer, final Class srcClass, final Costs cost) { super(consumer, srcClass, cost); } @Override - protected void offer(final YangSchemaSourceRepresentation source) { + protected void offer(final YangSourceRepresentation source) { } @Override - public ListenableFuture getSource( - final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceId) { return SettableFuture.create(); } } diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java index cf9c3ad208..a3759c540a 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java @@ -16,20 +16,19 @@ import static org.mockito.Mockito.doReturn; import com.google.common.base.MoreObjects.ToStringHelper; import java.io.StringReader; -import java.util.Optional; import java.util.concurrent.ExecutionException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opendaylight.yangtools.concepts.Registration; -import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; -import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; -import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.api.source.YangSourceRepresentation; +import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource; @ExtendWith(MockitoExtension.class) class SoftSchemaSourceCacheTest { - private static final Class REPRESENTATION = YangSchemaSourceRepresentation.class; + private static final Class REPRESENTATION = YangSourceRepresentation.class; @Mock private SchemaSourceRegistry registry; @@ -57,7 +56,7 @@ class SoftSchemaSourceCacheTest { assertNotNull(checkedSource); final var yangSchemaSourceRepresentation = checkedSource.get(); assertNotNull(yangSchemaSourceRepresentation); - assertEquals(sourceIdentifier, yangSchemaSourceRepresentation.getIdentifier()); + assertEquals(sourceIdentifier, yangSchemaSourceRepresentation.sourceId()); } } @@ -94,7 +93,7 @@ class SoftSchemaSourceCacheTest { } } - private static class TestingYangSource extends YangTextSchemaSource { + private static class TestingYangSource extends YangTextSource { private final String content; TestingYangSource(final String name, final String revision, final String content) { @@ -108,8 +107,8 @@ class SoftSchemaSourceCacheTest { } @Override - public Optional getSymbolicName() { - return Optional.empty(); + public String symbolicName() { + return null; } @Override -- 2.36.6