From fbd46e18bcd3a7996c530052d2177f9e5f47bee6 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 12 Nov 2017 19:57:58 +0100 Subject: [PATCH] YANGTOOLS-706: separate out RFC8040 extension support yang-data support should live in its own artifact, now that it can (with proper UT), move it out of yang-parser-impl. Also refactor the way extensions are exposed to be consistent with yang-parser-rfc7950: each extension needs to expose StatementSupports and NamespaceBehaviours. Change-Id: Ia691bd9ab4dd78c076ac7874fc91d9e597a8d2cc Signed-off-by: Robert Varga --- common/artifacts/pom.xml | 5 ++ ... AbstractHashedValueStatementSupport.java} | 26 ++---- .../EncryptedValueStatementSupport.java | 22 +++++ .../parser/HashedValueStatementSupport.java | 22 +++++ .../openconfig/parser/OpenConfig.java | 37 -------- .../openconfig/parser/package-info.java | 5 +- yang/pom.xml | 25 ++++-- ...n.java => AnnotationStatementSupport.java} | 12 +-- .../yangtools/rfc7952/parser/Metadata.java | 36 -------- .../rfc7952/parser/package-info.java | 6 +- .../rfc7952/parser/AnnotationTest.java | 2 +- yang/rfc8040-parser-support/pom.xml | 87 +++++++++++++++++++ .../YangDataEffectiveStatementImpl.java | 3 +- .../parser}/YangDataStatementSupport.java | 2 +- .../rfc8040/parser}/package-info.java | 2 +- .../parser}/YangDataExtensionTest.java | 40 +++++---- .../yang-data-extension-test/bar.yang | 0 .../yang-data-extension-test/baz.yang | 0 .../foo-invalid-1.yang | 0 .../foo-invalid-2.yang | 0 .../foo-invalid-3.yang | 0 .../yang-data-extension-test/foo.yang | 0 .../yang-data-extension-test/foobar.yang | 0 .../ietf-restconf.yang | 0 yang/yang-parser-impl/pom.xml | 4 + .../yang/parser/impl/DefaultReactors.java | 39 ++++----- yang/yang-parser-rfc7950/pom.xml | 4 - 27 files changed, 222 insertions(+), 157 deletions(-) rename yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/{HashedValue.java => AbstractHashedValueStatementSupport.java} (75%) create mode 100644 yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java create mode 100644 yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java delete mode 100644 yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java rename yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/{Annotation.java => AnnotationStatementSupport.java} (91%) delete mode 100644 yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/Metadata.java create mode 100644 yang/rfc8040-parser-support/pom.xml rename yang/{yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040 => rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser}/YangDataEffectiveStatementImpl.java (98%) rename yang/{yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040 => rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser}/YangDataStatementSupport.java (98%) rename yang/{yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040 => rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser}/package-info.java (88%) rename yang/{yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt => rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser}/YangDataExtensionTest.java (87%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/bar.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/baz.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/foo-invalid-1.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/foo-invalid-2.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/foo-invalid-3.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/foo.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/foobar.yang (100%) rename yang/{yang-parser-impl => rfc8040-parser-support}/src/test/resources/yang-data-extension-test/ietf-restconf.yang (100%) diff --git a/common/artifacts/pom.xml b/common/artifacts/pom.xml index d33b4d866c..bfccdeeee4 100644 --- a/common/artifacts/pom.xml +++ b/common/artifacts/pom.xml @@ -174,6 +174,11 @@ rfc8040-model-api 2.0.0-SNAPSHOT + + org.opendaylight.yangtools + rfc8040-parser-support + 2.0.0-SNAPSHOT + org.opendaylight.yangtools diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValue.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java similarity index 75% rename from yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValue.java rename to yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java index 29000c354f..1e6a7dddf2 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValue.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.openconfig.parser; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement; -import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; @@ -19,8 +18,9 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; -final class HashedValue extends AbstractStatementSupport { +abstract class AbstractHashedValueStatementSupport + extends AbstractStatementSupport { private static final class Declared extends AbstractDeclaredStatement implements OpenConfigHashedValueStatement { @@ -57,39 +57,27 @@ final class HashedValue extends AbstractStatementSupport ctx) { return new Declared(ctx); } @Override - public OpenConfigHashedValueEffectiveStatement createEffective( + public final OpenConfigHashedValueEffectiveStatement createEffective( final StmtContext ctx) { return new Effective(ctx); } @Override - public Void parseArgumentValue(final StmtContext ctx, final String value) { + public final Void parseArgumentValue(final StmtContext ctx, final String value) { return null; } diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java new file mode 100644 index 0000000000..22cf3052b4 --- /dev/null +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, 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 + */ +package org.opendaylight.yangtools.openconfig.parser; + +import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; + +public final class EncryptedValueStatementSupport extends AbstractHashedValueStatementSupport { + private static final EncryptedValueStatementSupport INSTANCE = new EncryptedValueStatementSupport(); + + private EncryptedValueStatementSupport() { + super(OpenConfigStatements.OPENCONFIG_ENCRYPTED_VALUE); + } + + public static EncryptedValueStatementSupport getInstance() { + return INSTANCE; + } +} diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java new file mode 100644 index 0000000000..5ed33d8a1e --- /dev/null +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017 Pantheon Technologies, 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 + */ +package org.opendaylight.yangtools.openconfig.parser; + +import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; + +public final class HashedValueStatementSupport extends AbstractHashedValueStatementSupport { + private static final HashedValueStatementSupport INSTANCE = new HashedValueStatementSupport(); + + private HashedValueStatementSupport() { + super(OpenConfigStatements.OPENCONFIG_HASHED_VALUE); + } + + public static HashedValueStatementSupport getInstance() { + return INSTANCE; + } +} diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java deleted file mode 100644 index 9b22cbb1d5..0000000000 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2017 Pantheon Technologies, 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 - */ -package org.opendaylight.yangtools.openconfig.parser; - -import com.google.common.annotations.Beta; -import com.google.common.collect.ImmutableList; -import java.util.Collection; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; - -/** - * Primary entry point into this implementation. Use {@link #getStatements()} to acquire a collection of - * {@link StatementSupport} instances, which need to be registered with the parser. - * - * @author Robert Varga - */ -@Beta -public final class OpenConfig { - - private OpenConfig() { - throw new UnsupportedOperationException(); - } - - /** - * Return a collection of statements which need to be added into parser reactor to enable support for OpenConfig - * YANG extensions. - * - * @return Collection of statements to be added. - */ - public static Collection> getStatements() { - return ImmutableList.of(HashedValue.getHashedInstance(), HashedValue.getEncryptedInstance()); - } -} diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java index c6c5830304..98fa75e68d 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java @@ -10,8 +10,9 @@ * OpenConfig. * *

- * The openconfig-version extension is integrated in the parser, as it supports the semantic version import resoltion, - * for other extensions use {@link OpenConfig#getStatements()}. + * The openconfig-version extension is integrated in the parser, as it supports the semantic version import resolution, + * for other extensions use {@link org.opendaylight.yangtools.openconfig.parser.EncryptedValueStatementSupport} + * and {@link org.opendaylight.yangtools.openconfig.parser.HashedValueStatementSupport}. * * @author Robert Varga */ diff --git a/yang/pom.xml b/yang/pom.xml index d985a3a1a7..1f329bb61a 100644 --- a/yang/pom.xml +++ b/yang/pom.xml @@ -25,6 +25,7 @@ yang-common yang-data-api + yang-data-jaxen yang-data-util yang-data-impl yang-data-transform @@ -37,17 +38,28 @@ yang-model-export yang-model-immutable yang-model-util + + + yang-model-validator + + yang-parser-api + yang-test-util + + + yang-parser-impl + + yang-parser-spi yang-parser-reactor + + yang-parser-rfc7950 - yang-parser-impl - yang-data-jaxen - yang-model-validator - yang-test-util openconfig-model-api + openconfig-parser-support @@ -57,10 +69,9 @@ rfc7952-model-api rfc7952-parser-support + rfc8040-model-api - + rfc8040-parser-support + + + + + org.opendaylight.odlparent + bundle-parent + 2.0.5 + + + + 4.0.0 + org.opendaylight.yangtools + rfc8040-parser-support + 2.0.0-SNAPSHOT + bundle + ${project.artifactId} + RFC8040 parser support + + + + + org.opendaylight.yangtools + yangtools-artifacts + 2.0.0-SNAPSHOT + import + pom + + + + + + + ${project.groupId} + concepts + + + ${project.groupId} + yang-common + + + + ${project.groupId} + rfc8040-model-api + + + + ${project.groupId} + yang-parser-rfc7950 + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + checkstyle.violationSeverity=error + + + + + + + ${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/ + + + + opendaylight-site + ${nexus.site.url}/${project.artifactId}/ + + + diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java similarity index 98% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java rename to yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java index a6cbc696a2..3429a04381 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java @@ -5,8 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - -package org.opendaylight.yangtools.yang.parser.stmt.rfc8040; +package org.opendaylight.yangtools.rfc8040.parser; import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java similarity index 98% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java rename to yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java index 1f4588089e..d7179ae1a1 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.stmt.rfc8040; +package org.opendaylight.yangtools.rfc8040.parser; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/package-info.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/package-info.java similarity index 88% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/package-info.java rename to yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/package-info.java index e7c34f26e7..1cba690c6b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/package-info.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/package-info.java @@ -9,4 +9,4 @@ * Support package for semantics defined in RFC8040, most notably yang-data statement. */ // FIXME: 2.0.0: this package should be an independent plugin -package org.opendaylight.yangtools.yang.parser.stmt.rfc8040; \ No newline at end of file +package org.opendaylight.yangtools.rfc8040.parser; \ No newline at end of file diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java b/yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java similarity index 87% rename from yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java rename to yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java index 159c0f2d80..69c58ff5cb 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java +++ b/yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.stmt; +package org.opendaylight.yangtools.rfc8040.parser; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -18,6 +18,7 @@ import java.io.IOException; import java.net.URI; import java.util.List; import java.util.Set; +import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yangtools.rfc8040.model.api.YangDataSchemaNode; import org.opendaylight.yangtools.yang.common.QName; @@ -30,12 +31,14 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang.parser.impl.DefaultReactors; +import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; import org.opendaylight.yangtools.yang.parser.spi.meta.InvalidSubstatementException; import org.opendaylight.yangtools.yang.parser.spi.meta.MissingSubstatementException; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; public class YangDataExtensionTest { @@ -61,10 +64,18 @@ public class YangDataExtensionTest { private static final QName MY_YANG_DATA_A = QName.create(FOO_QNAMEMODULE, "my-yang-data-a"); private static final QName MY_YANG_DATA_B = QName.create(FOO_QNAMEMODULE, "my-yang-data-b"); + private static CrossSourceStatementReactor reactor; + + @BeforeClass + public static void createReactor() { + reactor = RFC7950Reactors.vanillaReactorBuilder() + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance()) + .build(); + } + @Test public void testYangData() throws Exception { - final SchemaContext schemaContext = DefaultReactors.defaultReactor().newBuild() - .addSources(FOO_MODULE, IETF_RESTCONF_MODULE) + final SchemaContext schemaContext = reactor.newBuild().addSources(FOO_MODULE, IETF_RESTCONF_MODULE) .buildEffective(); assertNotNull(schemaContext); @@ -96,8 +107,7 @@ public class YangDataExtensionTest { @Test public void testConfigStatementBeingIgnoredInYangDataBody() throws Exception { - final SchemaContext schemaContext = DefaultReactors.defaultReactor().newBuild() - .addSources(BAZ_MODULE, IETF_RESTCONF_MODULE) + final SchemaContext schemaContext = reactor.newBuild().addSources(BAZ_MODULE, IETF_RESTCONF_MODULE) .buildEffective(); assertNotNull(schemaContext); @@ -125,10 +135,8 @@ public class YangDataExtensionTest { @Test public void testIfFeatureStatementBeingIgnoredInYangDataBody() throws Exception { - final SchemaContext schemaContext = DefaultReactors.defaultReactor().newBuild() - .setSupportedFeatures(ImmutableSet.of()) - .addSources(FOOBAR_MODULE, IETF_RESTCONF_MODULE) - .buildEffective(); + final SchemaContext schemaContext = reactor.newBuild().setSupportedFeatures(ImmutableSet.of()) + .addSources(FOOBAR_MODULE, IETF_RESTCONF_MODULE).buildEffective(); assertNotNull(schemaContext); final Module foobar = schemaContext.findModule("foobar", REVISION).get(); @@ -154,8 +162,7 @@ public class YangDataExtensionTest { public void testYangDataBeingIgnored() throws Exception { // yang-data statement is ignored if it does not appear as a top-level statement // i.e., it will not appear in the final SchemaContext - final SchemaContext schemaContext = DefaultReactors.defaultReactor().newBuild() - .addSources(BAR_MODULE, IETF_RESTCONF_MODULE) + final SchemaContext schemaContext = reactor.newBuild().addSources(BAR_MODULE, IETF_RESTCONF_MODULE) .buildEffective(); assertNotNull(schemaContext); @@ -174,8 +181,7 @@ public class YangDataExtensionTest { @Test public void testYangDataWithMissingTopLevelContainer() { try { - DefaultReactors.defaultReactor().newBuild().addSources(FOO_INVALID_1_MODULE, IETF_RESTCONF_MODULE) - .buildEffective(); + reactor.newBuild().addSources(FOO_INVALID_1_MODULE, IETF_RESTCONF_MODULE).buildEffective(); fail("Exception should have been thrown because of missing top-level container in yang-data statement."); } catch (final ReactorException ex) { final Throwable cause = ex.getCause(); @@ -187,8 +193,7 @@ public class YangDataExtensionTest { @Test public void testYangDataWithTwoTopLevelContainers() { try { - DefaultReactors.defaultReactor().newBuild().addSources(FOO_INVALID_2_MODULE, IETF_RESTCONF_MODULE) - .buildEffective(); + reactor.newBuild().addSources(FOO_INVALID_2_MODULE, IETF_RESTCONF_MODULE).buildEffective(); fail("Exception should have been thrown because of two top-level containers in yang-data statement."); } catch (final ReactorException ex) { final Throwable cause = ex.getCause(); @@ -200,8 +205,7 @@ public class YangDataExtensionTest { @Test public void testYangDataWithInvalidToplevelNode() { try { - DefaultReactors.defaultReactor().newBuild().addSources(FOO_INVALID_3_MODULE, IETF_RESTCONF_MODULE) - .buildEffective(); + reactor.newBuild().addSources(FOO_INVALID_3_MODULE, IETF_RESTCONF_MODULE).buildEffective(); fail("Exception should have been thrown because of invalid top-level node in yang-data statement."); } catch (final ReactorException ex) { final Throwable cause = ex.getCause(); diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/bar.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/bar.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/bar.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/bar.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/baz.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/baz.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/baz.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/baz.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo-invalid-1.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo-invalid-1.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo-invalid-1.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo-invalid-1.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo-invalid-2.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo-invalid-2.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo-invalid-2.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo-invalid-2.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo-invalid-3.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo-invalid-3.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo-invalid-3.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo-invalid-3.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foo.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foo.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foobar.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foobar.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/foobar.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/foobar.yang diff --git a/yang/yang-parser-impl/src/test/resources/yang-data-extension-test/ietf-restconf.yang b/yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/ietf-restconf.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/yang-data-extension-test/ietf-restconf.yang rename to yang/rfc8040-parser-support/src/test/resources/yang-data-extension-test/ietf-restconf.yang diff --git a/yang/yang-parser-impl/pom.xml b/yang/yang-parser-impl/pom.xml index bf63eb5228..fd4ef73af6 100644 --- a/yang/yang-parser-impl/pom.xml +++ b/yang/yang-parser-impl/pom.xml @@ -97,6 +97,10 @@ ${project.groupId} rfc8040-model-api + + ${project.groupId} + rfc8040-parser-support + org.mockito diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java index 1f07e75741..4f13cfda62 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java @@ -10,17 +10,17 @@ package org.opendaylight.yangtools.yang.parser.impl; import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.treeScoped; import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.openconfig.parser.OpenConfig; -import org.opendaylight.yangtools.rfc7952.parser.Metadata; +import org.opendaylight.yangtools.openconfig.parser.EncryptedValueStatementSupport; +import org.opendaylight.yangtools.openconfig.parser.HashedValueStatementSupport; +import org.opendaylight.yangtools.rfc7952.parser.AnnotationStatementSupport; +import org.opendaylight.yangtools.rfc8040.parser.YangDataStatementSupport; import org.opendaylight.yangtools.yang.parser.odlext.namespace.AnyxmlSchemaLocationNamespace; import org.opendaylight.yangtools.yang.parser.odlext.stmt.AnyxmlSchemaLocationSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.CustomCrossSourceStatementReactorBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; -import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.Builder; -import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataStatementSupport; /** * Utility class for instantiating default-configured {@link CrossSourceStatementReactor}s. @@ -52,25 +52,22 @@ public final class DefaultReactors { * @return A populated CrossSourceStatementReactor builder. */ public static CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() { - final CustomCrossSourceStatementReactorBuilder ret = RFC7950Reactors.defaultReactorBuilder(); + return RFC7950Reactors.defaultReactorBuilder() + // AnyxmlSchemaLocation support + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationSupport.getInstance()) + .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, + treeScoped(AnyxmlSchemaLocationNamespace.class)) - // AnyxmlSchemaLocation support - ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnyxmlSchemaLocationSupport.getInstance()); - ret.addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, treeScoped(AnyxmlSchemaLocationNamespace.class)); + // RFC7952 annotation support + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance()) - // RFC7952 annotation support - for (StatementSupport support : Metadata.getStatements()) { - ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, support); - } + // RFC8040 yang-data support + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance()) - // RFC8040 yang-data support - ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance()); - - // OpenConfig extensions support (except openconfig-version) - for (StatementSupport support : OpenConfig.getStatements()) { - ret.addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, support); - } - - return ret; + // OpenConfig extensions support (except openconfig-version) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + EncryptedValueStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + HashedValueStatementSupport.getInstance()); } } diff --git a/yang/yang-parser-rfc7950/pom.xml b/yang/yang-parser-rfc7950/pom.xml index 2698de2d83..101b2e94e9 100644 --- a/yang/yang-parser-rfc7950/pom.xml +++ b/yang/yang-parser-rfc7950/pom.xml @@ -74,10 +74,6 @@ ${project.groupId} openconfig-model-api - - ${project.groupId} - rfc8040-model-api - org.antlr -- 2.36.6