Move CustomStatementParserBuilder and YangInferencePipeline 51/65451/10
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 11 Nov 2017 23:29:19 +0000 (00:29 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 13 Nov 2017 13:28:26 +0000 (14:28 +0100)
Both these classes relate to reactor integration. Move them to
parser.rfc7950.reactor for further evolution. Furthermore
YangValidationBundles can be moved to reactor utilities.

This eliminates parser.stmt.rfc6020 package, paving the way
for splitting out parser.rfc7950.* into a separate artifact.

Change-Id: I44d10f49368d252dd0dfd02b03b3413b53f3331b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
15 files changed:
yang/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/CustomStatementParserBuilder.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ext/CustomStatementParserBuilder.java with 98% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/YangInferencePipeline.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java with 99% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/YangValidationBundles.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangValidationBundles.java with 98% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/package-info.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveDocumentedDataNodeContainer.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/ChoiceEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ext/package-info.java [deleted file]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/package-info.java [deleted file]
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java

index d2de4c0d452a72035be5b92079ef6dbf46b48baa..89aac0a73aa4af1ff1f8642402a87a49c8460645 100644 (file)
@@ -23,12 +23,12 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.util.type.BaseTypes;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.CustomStatementParserBuilder;
 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.BuildAction;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ext.CustomStatementParserBuilder;
 
 public class AnnotationTest {
     private static final QName LAST_MODIFIED_QNAME = QName.create("http://example.org/example-last-modified",
index 086ce9c3ecdd8a1da6e07e449712288345ca9252..6bc8406594ca72676162261789a201945648bdd3 100644 (file)
@@ -8,9 +8,9 @@
 package org.opendaylight.yangtools.yang.parser.impl;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangInferencePipeline;
 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.rfc6020.YangInferencePipeline;
 
 /**
  * Utility class for instantiating default-configured {@link CrossSourceStatementReactor}s.
@@ -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.rfc6020.ext;
+package org.opendaylight.yangtools.yang.parser.rfc7950.reactor;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Table;
@@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
 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.rfc6020.YangInferencePipeline;
 
 public class CustomStatementParserBuilder {
     private final Map<ModelProcessingPhase, StatementSupportBundle.Builder> reactorSupportBundles;
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java
new file mode 100644 (file)
index 0000000..bad402d
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * 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.yang.parser.rfc7950.reactor;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
+
+/**
+ * Utility class holding entrypoints for assembling RFC6020/RFC7950 statement {@link CrossSourceStatementReactor}s.
+ *
+ * @author Robert Varga
+ */
+@Beta
+public final class RFC7950Reactors {
+    private static final CrossSourceStatementReactor DEFAULT_RFC6020_RFC7950_REACTOR =
+            YangInferencePipeline.newReactorBuilder().build();
+    // FIXME: this is incorrect, as it includes semver support.
+    private static final CrossSourceStatementReactor VANILLA_RFC6020_RFC7950_REACTOR =
+            YangInferencePipeline.newReactorBuilder().build();
+
+    private RFC7950Reactors() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a pre-built {@link CrossSourceStatementReactor} supporting RFC6020 and RFC7950, along with OpenConfig's
+     * semantic-version extension. This is useful for parsing near-vanilla YANG models while providing complete
+     * support for semantic versions.
+     *
+     * @return A shared reactor instance.
+     */
+    public static CrossSourceStatementReactor defaultReactor() {
+        return DEFAULT_RFC6020_RFC7950_REACTOR;
+    }
+
+    /**
+     * Returns a pre-built {@link CrossSourceStatementReactor} supporting both RFC6020 and RFC7950. This is useful
+     * for parsing vanilla YANG models without any semantic support for extensions. Notably missing is the semantic
+     * version extension, hence attempts to use semantic version mode will cause failures.
+     *
+     * @return A shared reactor instance.
+     */
+    public static CrossSourceStatementReactor vanillaReactor() {
+        return VANILLA_RFC6020_RFC7950_REACTOR;
+    }
+}
@@ -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.rfc6020;
+package org.opendaylight.yangtools.yang.parser.rfc7950.reactor;
 
 import static org.opendaylight.yangtools.yang.common.YangVersion.VERSION_1;
 import static org.opendaylight.yangtools.yang.common.YangVersion.VERSION_1_1;
@@ -13,6 +13,7 @@ import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour
 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.treeScoped;
 
+import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
 import java.util.Collection;
@@ -158,6 +159,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementR
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.Builder;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataStatementSupport;
 
+@Beta
 public final class YangInferencePipeline {
     public static final Set<YangVersion> SUPPORTED_VERSIONS = Sets.immutableEnumSet(VERSION_1, VERSION_1_1);
 
@@ -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.rfc6020;
+package org.opendaylight.yangtools.yang.parser.rfc7950.reactor;
 
 import static org.opendaylight.yangtools.yang.common.YangVersion.VERSION_1;
 import static org.opendaylight.yangtools.yang.common.YangVersion.VERSION_1_1;
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/package-info.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/package-info.java
new file mode 100644 (file)
index 0000000..3164c39
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * 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
+ */
+/**
+ * Base RFC7950 reactor and supporting classes. This package is not intended to be consumed by most applications, but
+ * rather by tests in artifacts providing parser extensions.
+ *
+ * @author Robert Varga
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.reactor;
\ No newline at end of file
index 052b247dce46ae0e7f691f558a06d646b94b6764..5cccb68fa596272142327a7944bd6ee8df7de03f 100644 (file)
@@ -29,10 +29,10 @@ import org.opendaylight.yangtools.yang.model.api.UsesNode;
 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.stmt.TypedefEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice.ImplicitChoiceCaseNode;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles;
 
 public abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends DeclaredStatement<A>>
         extends AbstractEffectiveDocumentedNode<A, D> implements DataNodeContainer {
index 5dc21bdca3c9d745f5b161a689474024086825eb..c9b43becee97c247ef8d0550df14a3697df0b4fc 100644 (file)
@@ -14,12 +14,12 @@ 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.stmt.ChoiceStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles;
 
 abstract class AbstractChoiceStatementSupport extends
         AbstractQNameStatementSupport<ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> {
index 974783526e8c682aa3a18c296c8b5346cb71ea29..d191ac1b37af3f980cc87736ef135cc9e631a8e6 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDataSchemaNode;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml.AnyxmlEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerEffectiveStatementImpl;
@@ -35,7 +36,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListEffectiveSta
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles;
 
 final class ChoiceEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<ChoiceStatement>
         implements ChoiceEffectiveStatement, ChoiceSchemaNode, DerivableSchemaNode {
index 6963d8f3f74f3c77fd63b31bcf1ae5259b0ad460..2c13541396c0959d0acc6ad2e539f58ceec86dfb 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.SchemaNodeIdentifierBuildNamespace;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -40,7 +41,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModule
 import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules.SupportedModules;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index c04a210ffc112affb97a20ea4282a00dc35dce4b..b4fc5230ae8a19839fd0e999191d8fcec6e5b86b 100644 (file)
@@ -30,6 +30,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.SchemaNodeIdentifierBuildNamespace;
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -41,7 +42,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ext/package-info.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ext/package-info.java
deleted file mode 100644 (file)
index 12179e3..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco Systems, Inc. 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
- */
-/**
- * Provides builders and classes necessary for customization of YANG stmt parser
- * (e.g. add support for an third-party extension etc.).
- * {@link org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ext.CustomStatementParserBuilder} is designed for building
- * a custom YANG statement parser with extended support for a custom statement or YANG extension.
- */
-package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ext;
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/package-info.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/package-info.java
deleted file mode 100644 (file)
index 31c0c78..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco Systems, Inc. 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
- */
-
-/**
- * Contains implementation of statement supports for Rfc6020 statements and
- * implementation of declared statements. This package may also contain common
- * implementation of statement supports and declared statements for both Rfc6020 and Rfc7950
- * statements, if there are no or minimal differences between these statements.
- */
-package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
\ No newline at end of file
index 17a7067945bdaafb02f24924a802eee1b9d2cf40..d51052ee3d9a259ad207eae39f8eabf1105cb629 100644 (file)
@@ -9,9 +9,9 @@ package org.opendaylight.yangtools.yang.thirdparty.plugin;
 
 import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
 
+import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.CustomStatementParserBuilder;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ext.CustomStatementParserBuilder;
 
 public final class CustomInferencePipeline {
     public static final CrossSourceStatementReactor CUSTOM_REACTOR = new CustomStatementParserBuilder()