Add RFC6643 parser support 82/92482/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 18 Sep 2020 15:54:47 +0000 (17:54 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 18 Sep 2020 17:34:11 +0000 (19:34 +0200)
RFC6643 defines a way to map SMIv2 to YANG. This mapping retains
the original SMI details using YANG extensions, so that the resulting
model can be mapped back.

This patch adds semantic support for these extensions, so that the
semantics are supported out of the box.

JIRA: YANGTOOLS-1134
Change-Id: I494b2537e89e5a104debe486a9012d22d5c7b3aa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
60 files changed:
artifacts/pom.xml
docs/pom.xml
features/odl-yangtools-parser-api/pom.xml
features/odl-yangtools-parser/pom.xml
yang/pom.xml
yang/rfc6643-model-api/pom.xml [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2ExtensionsMapping.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ObjectIdentifier.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdEffectiveStatement.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdSchemaNode.java [new file with mode: 0644]
yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/pom.xml [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2Namespace.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidIdStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementImpl.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionsMappingTest.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/ObjectIdentifierTest.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/test/resources/foo.yang [new file with mode: 0644]
yang/rfc6643-parser-support/src/test/resources/ietf-yang-smiv2.yang [new file with mode: 0644]
yang/yang-parser-impl/pom.xml
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java

index 45d1eee9bf8c0365c6b7f6dd68fb3e7452cf619e..14cd5fbf854434807dd5bf1386231fad8a322e18 100644 (file)
                 <version>4.0.14-SNAPSHOT</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>rfc6643-model-api</artifactId>
+                <version>4.0.14-SNAPSHOT</version>
+            </dependency>
+            <dependency>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>rfc6643-parser-support</artifactId>
+                <version>4.0.14-SNAPSHOT</version>
+            </dependency>
+
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>rfc7952-data-api</artifactId>
index ed21295cb4df80804fe0435b9f41f6fcd247078d..dc2d8010190609ff352f0121756692235b097cf9 100644 (file)
             <artifactId>rfc6536-parser-support</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-model-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-parser-support</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc7952-model-api</artifactId>
index 41752285ce986d8672a2f9b9c3d1f6016faa5ef9..0b9ae5a3908ce6a94e8a51f61ddaaf709de5c721 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc6536-model-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-model-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc7952-model-api</artifactId>
index 1d3ccc0ae46945e5e1a69811025c0a0e7d2524f0..f8667a3fbcf95855472796717e5b5f63043fddcc 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc6536-parser-support</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-parser-support</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc7952-parser-support</artifactId>
index 141937161efdd8ee2b34bdb1ba2ae0526bf62305..d25a63188d71563744ccca15c2ff6881d551d40c 100644 (file)
         <module>rfc6536-model-api</module>
         <module>rfc6536-parser-support</module>
 
+        <!-- SMIv2-to-YANG translations support -->
+        <module>rfc6643-model-api</module>
+        <module>rfc6643-parser-support</module>
+
         <!-- Metadata (annotation) metamodel support -->
         <module>rfc7952-data-api</module>
         <module>rfc7952-data-util</module>
diff --git a/yang/rfc6643-model-api/pom.xml b/yang/rfc6643-model-api/pom.xml
new file mode 100644 (file)
index 0000000..22af89d
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2020 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>bundle-parent</artifactId>
+        <version>4.0.14-SNAPSHOT</version>
+        <relativePath>../../bundle-parent</relativePath>
+    </parent>
+
+    <artifactId>rfc6643-model-api</artifactId>
+    <packaging>bundle</packaging>
+    <name>${project.artifactId}</name>
+    <description>RFC6643 extensions for SMIv2</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>concepts</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-model-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.opendaylight.yangtools.rfc6643.model.api</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasEffectiveStatement.java
new file mode 100644 (file)
index 0000000..e2cea3a
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface AliasEffectiveStatement extends EffectiveStatement<String, AliasStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasSchemaNode.java
new file mode 100644 (file)
index 0000000..b8d6a39
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface AliasSchemaNode extends UnknownSchemaNode {
+
+    String getArgument();
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/AliasStatement.java
new file mode 100644 (file)
index 0000000..c58615f
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.model.api.stmt.DocumentedDeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface AliasStatement extends UnknownStatement<String>, DocumentedDeclaredStatement.WithStatus<String> {
+
+    @NonNull OidStatement getOidStatement();
+}
+
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValEffectiveStatement.java
new file mode 100644 (file)
index 0000000..4083338
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface DefValEffectiveStatement extends EffectiveStatement<String, DefValStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValSchemaNode.java
new file mode 100644 (file)
index 0000000..b2f306b
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface DefValSchemaNode extends UnknownSchemaNode {
+
+    String getArgument();
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DefValStatement.java
new file mode 100644 (file)
index 0000000..73cbf9c
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface DefValStatement extends UnknownStatement<String> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintEffectiveStatement.java
new file mode 100644 (file)
index 0000000..fc91ab9
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface DisplayHintEffectiveStatement extends EffectiveStatement<String, DisplayHintStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintSchemaNode.java
new file mode 100644 (file)
index 0000000..8b8df5e
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface DisplayHintSchemaNode extends UnknownSchemaNode {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/DisplayHintStatement.java
new file mode 100644 (file)
index 0000000..11bd44a
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface DisplayHintStatement extends UnknownStatement<String> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java
new file mode 100644 (file)
index 0000000..0a54912
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import java.net.URI;
+import java.util.Collection;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+
+@Beta
+public final class IetfYangSmiv2Constants {
+    private static final String MODULE_NAME = "ietf-yang-smiv2";
+    private static final URI MODULE_NAMESPACE = URI.create("urn:ietf:params:xml:ns:yang:ietf-yang-smiv2");
+    private static final Revision RFC6643_REVISION = Revision.of("2012-06-22");
+
+    /**
+     * Runtime RFC6643 identity.
+     */
+    public static final QNameModule RFC6643_MODULE = QNameModule.create(MODULE_NAMESPACE, RFC6643_REVISION).intern();
+
+    /**
+     * RFC6643 model source name.
+     */
+    public static final SourceIdentifier RFC6643_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME,
+        RFC6643_REVISION);
+
+    /**
+     * Normative prefix to use when importing {@link #RFC6643_SOURCE}.
+     */
+    public static final String MODULE_PREFIX = "smiv2";
+
+    /**
+     * Return identifiers of all sources known to define NACM extension.
+     *
+     * @return Collection of identifiers.
+     */
+    public static Collection<SourceIdentifier> knownModelSources() {
+        return ImmutableList.of(RFC6643_SOURCE);
+    }
+
+    private IetfYangSmiv2Constants() {
+        // Hidden on purpose
+    }
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2ExtensionsMapping.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2ExtensionsMapping.java
new file mode 100644 (file)
index 0000000..38c00a5
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
+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;
+
+@Beta
+public enum IetfYangSmiv2ExtensionsMapping implements StatementDefinition {
+    DISPLAY_HINT(DisplayHintStatement.class, DisplayHintEffectiveStatement.class, "display-hint", "format"),
+    MAX_ACCESS(MaxAccessStatement.class, MaxAccessEffectiveStatement.class, "max-access", "access"),
+    DEFVAL(DefValStatement.class, DefValEffectiveStatement.class, "defval", "value"),
+    IMPLIED(ImpliedStatement.class, ImpliedEffectiveStatement.class, "implied", "index"),
+    SUB_ID(SubIdStatement.class, SubIdEffectiveStatement.class, "subid", "value"),
+    OBJECT_ID(OidStatement.class, OidEffectiveStatement.class, "oid", "value"),
+    ALIAS(AliasStatement.class, AliasEffectiveStatement.class, "alias", "descriptor");
+
+    private final @NonNull Class<? extends DeclaredStatement<?>> type;
+    private final @NonNull Class<? extends EffectiveStatement<?, ?>> effectiveType;
+    private final @NonNull QName name;
+    private final @NonNull ArgumentDefinition argument;
+
+    IetfYangSmiv2ExtensionsMapping(final Class<? extends DeclaredStatement<?>> declared,
+                                   final Class<? extends EffectiveStatement<?, ?>> effective, final String nameStr,
+                                   final String argumentStr) {
+        type = requireNonNull(declared);
+        effectiveType = requireNonNull(effective);
+        name = createQName(nameStr);
+        argument = ArgumentDefinition.of(createQName(argumentStr), false);
+    }
+
+    private static @NonNull QName createQName(final String localName) {
+        return QName.create(IetfYangSmiv2Constants.RFC6643_MODULE, localName).intern();
+    }
+
+    @Override
+    public QName getStatementName() {
+        return name;
+    }
+
+    @Override
+    public Optional<ArgumentDefinition> getArgumentDefinition() {
+        return Optional.of(argument);
+    }
+
+    @Override
+    public Class<? extends DeclaredStatement<?>> getDeclaredRepresentationClass() {
+        return type;
+    }
+
+    @Override
+    public Class<? extends EffectiveStatement<?, ?>> getEffectiveRepresentationClass() {
+        return effectiveType;
+    }
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedEffectiveStatement.java
new file mode 100644 (file)
index 0000000..5c51247
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface ImpliedEffectiveStatement extends EffectiveStatement<String, ImpliedStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedSchemaNode.java
new file mode 100644 (file)
index 0000000..c972435
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface ImpliedSchemaNode extends UnknownSchemaNode {
+
+    String getArgument();
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ImpliedStatement.java
new file mode 100644 (file)
index 0000000..6c7479b
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface ImpliedStatement extends UnknownStatement<String> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessEffectiveStatement.java
new file mode 100644 (file)
index 0000000..ff8ba64
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface MaxAccessEffectiveStatement extends EffectiveStatement<String, MaxAccessStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessSchemaNode.java
new file mode 100644 (file)
index 0000000..5a2fb8a
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface MaxAccessSchemaNode extends UnknownSchemaNode {
+
+    String getArgument();
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/MaxAccessStatement.java
new file mode 100644 (file)
index 0000000..e04dcbd
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface MaxAccessStatement extends UnknownStatement<String> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ObjectIdentifier.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/ObjectIdentifier.java
new file mode 100644 (file)
index 0000000..c97a123
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.Beta;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.regex.Pattern;
+import java.util.stream.IntStream;
+import org.checkerframework.checker.regex.qual.Regex;
+import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.concepts.WritableObject;
+
+/**
+ * An OID, or ObjectIdentifier, as defined by ITU and ISO/IEC.
+ */
+// TODO: this class could also be Comparable<ObjectIdentifier>
+@Beta
+public final class ObjectIdentifier implements Identifier, WritableObject {
+    private static final long serialVersionUID = 1L;
+    @Regex
+    private static final String CHECK_OID_REGEX = "^\\d+(\\.\\d+)*$";
+    private static final Pattern CHECK_OID_PATTERN = Pattern.compile(CHECK_OID_REGEX);
+    private static final Pattern SPLIT_PATTERN = Pattern.compile(".", Pattern.LITERAL);
+
+    private final int[] components;
+
+    private ObjectIdentifier(final int[] components) {
+        this.components = components;
+    }
+
+    /**
+     * Create an {@link ObjectIdentifier} from its integer components.
+     *
+     * @param components OID items
+     * @return An ObjectIdentifier.
+     */
+    public static ObjectIdentifier forComponents(final int... components) {
+        return new ObjectIdentifier(components.clone());
+    }
+
+    /**
+     * Create an {@link ObjectIdentifier} from its string representation.
+     *
+     * @param str String OID representation.
+     * @return An ObjectIdentifier.
+     */
+    public static ObjectIdentifier forString(final String str) {
+        return new ObjectIdentifier(parseObjectId(str));
+    }
+
+    public int[] getComponents() {
+        // Always make a defensive copy
+        return components.clone();
+    }
+
+    public IntStream streamComponents() {
+        return Arrays.stream(components);
+    }
+
+    /**
+     * Read an {@link ObjectIdentifier} from a DataInput, performing the inverse of {@link #writeTo(DataOutput)}. For
+     * details see {@link WritableObject}.
+     *
+     * @param in Data input
+     * @return Object identifier
+     * @throws IOException If an I/O error is reported
+     */
+    public static ObjectIdentifier readFrom(final DataInput in) throws IOException {
+        final int count = in.readInt();
+        checkArgument(count >= 0, "Illegal item count");
+
+        final int[] oid = new int[count];
+        for (int index = 0; index < count; ++index) {
+            oid[index] = in.readInt();
+        }
+
+        return new ObjectIdentifier(oid);
+    }
+
+    @Override
+    public void writeTo(final DataOutput out) throws IOException {
+        out.writeInt(components.length);
+        for (int i : components) {
+            out.writeInt(i);
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        return Arrays.hashCode(components);
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        return this == obj || obj instanceof ObjectIdentifier
+                && Arrays.equals(components, ((ObjectIdentifier) obj).components);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(components[0]);
+        for (int index = 1; index < components.length; index++) {
+            stringBuilder.append('.').append(components[index]);
+        }
+        return stringBuilder.toString();
+    }
+
+    private static int[] parseObjectId(final String objectId) {
+        checkArgument(CHECK_OID_PATTERN.matcher(objectId).matches(), "Wrong format for OID: '%s'", objectId);
+
+        final String[] splitOid = SPLIT_PATTERN.split(objectId);
+        final int[] oid = new int[splitOid.length];
+        for (int index = 0; index < splitOid.length; index ++) {
+            oid[index] = Integer.parseInt(splitOid[index]);
+        }
+        return oid;
+    }
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidEffectiveStatement.java
new file mode 100644 (file)
index 0000000..00000cb
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface OidEffectiveStatement extends EffectiveStatement<ObjectIdentifier, OidStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidSchemaNode.java
new file mode 100644 (file)
index 0000000..9721b33
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface OidSchemaNode extends UnknownSchemaNode {
+
+    ObjectIdentifier getArgument();
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/OidStatement.java
new file mode 100644 (file)
index 0000000..74035ee
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface OidStatement extends UnknownStatement<ObjectIdentifier> {
+
+    @NonNull ObjectIdentifier getOid();
+}
+
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdEffectiveStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdEffectiveStatement.java
new file mode 100644 (file)
index 0000000..a295784
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface SubIdEffectiveStatement extends EffectiveStatement<Integer, SubIdStatement> {
+
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdSchemaNode.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdSchemaNode.java
new file mode 100644 (file)
index 0000000..c696abe
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+@Beta
+public interface SubIdSchemaNode extends UnknownSchemaNode {
+
+    int getArgument();
+}
diff --git a/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdStatement.java b/yang/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/SubIdStatement.java
new file mode 100644 (file)
index 0000000..eba1c62
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface SubIdStatement extends UnknownStatement<Integer> {
+
+}
diff --git a/yang/rfc6643-parser-support/pom.xml b/yang/rfc6643-parser-support/pom.xml
new file mode 100644 (file)
index 0000000..53ebdd9
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2020 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>bundle-parent</artifactId>
+        <version>4.0.14-SNAPSHOT</version>
+        <relativePath>../../bundle-parent</relativePath>
+    </parent>
+
+    <artifactId>rfc6643-parser-support</artifactId>
+    <packaging>bundle</packaging>
+    <name>${project.artifactId}</name>
+    <description>RFC6643 parser support</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>concepts</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-common</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-model-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-rfc7950</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.opendaylight.yangtools.rfc6643.parser.support</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..8326ad8
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class AliasEffectiveStatementImpl extends UnknownEffectiveStatementBase<String, AliasStatement>
+        implements AliasEffectiveStatement, AliasSchemaNode {
+    private final SchemaPath path;
+
+    AliasEffectiveStatementImpl(final StmtContext<String, AliasStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final AliasEffectiveStatementImpl other = (AliasEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementImpl.java
new file mode 100644 (file)
index 0000000..fd010eb
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class AliasStatementImpl extends AbstractDeclaredStatement<String> implements AliasStatement {
+    AliasStatementImpl(final StmtContext<String, AliasStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+
+    @Override
+    public @NonNull OidStatement getOidStatement() {
+        return findFirstDeclaredSubstatement(OidStatement.class).get();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java
new file mode 100644 (file)
index 0000000..76d34f1
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+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.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+@Beta
+public final class AliasStatementSupport
+        extends AbstractStatementSupport<String, AliasStatement, AliasEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.ALIAS)
+                .add(YangStmtMapping.DESCRIPTION, 0, 1)
+                .add(YangStmtMapping.REFERENCE, 0, 1)
+                .add(YangStmtMapping.STATUS, 0, 1)
+                .add(IetfYangSmiv2ExtensionsMapping.OBJECT_ID, 0, 1)
+                .build();
+    private static final AliasStatementSupport INSTANCE = new AliasStatementSupport();
+
+    private AliasStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.ALIAS);
+    }
+
+    public static AliasStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return value;
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<String, AliasStatement, AliasEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+        getSubstatementValidator().validate(stmt);
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public AliasStatement createDeclared(final StmtContext<String, AliasStatement, ?> ctx) {
+        return new AliasStatementImpl(ctx);
+    }
+
+    @Override
+    public AliasEffectiveStatement createEffective(
+            final StmtContext<String, AliasStatement, AliasEffectiveStatement> ctx) {
+        return new AliasEffectiveStatementImpl(ctx);
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..e6220a7
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.DefValEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.DefValSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.DefValStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class DefValEffectiveStatementImpl extends UnknownEffectiveStatementBase<String, DefValStatement>
+        implements DefValEffectiveStatement, DefValSchemaNode {
+
+    private final SchemaPath path;
+    private final String valueFromNamespace;
+
+    DefValEffectiveStatementImpl(final StmtContext<String, DefValStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        valueFromNamespace = ctx.getFromNamespace(IetfYangSmiv2Namespace.class, ctx);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+
+    // FIXME: what good is this method?
+    public String getValueFromNamespace() {
+        return valueFromNamespace;
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final DefValEffectiveStatementImpl other = (DefValEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementImpl.java
new file mode 100644 (file)
index 0000000..853d38b
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.DefValStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class DefValStatementImpl extends AbstractDeclaredStatement<String> implements DefValStatement {
+    DefValStatementImpl(final StmtContext<String, DefValStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java
new file mode 100644 (file)
index 0000000..8b4e906
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.rfc6643.model.api.DefValEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.DefValStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+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.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+@Beta
+public final class DefValStatementSupport
+        extends AbstractStatementSupport<String, DefValStatement, DefValEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.DEFVAL).build();
+    private static final DefValStatementSupport INSTANCE = new DefValStatementSupport();
+
+    private DefValStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.DEFVAL);
+    }
+
+    public static DefValStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return value;
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<String, DefValStatement, DefValEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public DefValStatementImpl createDeclared(final StmtContext<String, DefValStatement, ?> ctx) {
+        return new DefValStatementImpl(ctx);
+    }
+
+    @Override
+    public DefValEffectiveStatement createEffective(
+            final StmtContext<String, DefValStatement, DefValEffectiveStatement> ctx) {
+        return new DefValEffectiveStatementImpl(ctx);
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..1e78fab
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class DisplayHintEffectiveStatementImpl extends UnknownEffectiveStatementBase<String, DisplayHintStatement>
+        implements DisplayHintEffectiveStatement, DisplayHintSchemaNode {
+
+    private final SchemaPath path;
+    private final String valueFromNamespace;
+
+    DisplayHintEffectiveStatementImpl(final StmtContext<String, DisplayHintStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        valueFromNamespace = ctx.getFromNamespace(IetfYangSmiv2Namespace.class, ctx);
+    }
+
+    public String getValueFromNamespace() {
+        return valueFromNamespace;
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final DisplayHintEffectiveStatementImpl other = (DisplayHintEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementImpl.java
new file mode 100644 (file)
index 0000000..a7d7d0d
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class DisplayHintStatementImpl extends AbstractDeclaredStatement<String> implements DisplayHintStatement {
+    DisplayHintStatementImpl(final StmtContext<String, DisplayHintStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java
new file mode 100644 (file)
index 0000000..8cb9160
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+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.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+@Beta
+public final class DisplayHintStatementSupport
+        extends AbstractStatementSupport<String, DisplayHintStatement, DisplayHintEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.DISPLAY_HINT).build();
+    private static final DisplayHintStatementSupport INSTANCE = new DisplayHintStatementSupport();
+
+    private DisplayHintStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.DISPLAY_HINT);
+    }
+
+    public static DisplayHintStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return value;
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(
+            final Mutable<String, DisplayHintStatement, DisplayHintEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public DisplayHintStatement createDeclared(final StmtContext<String, DisplayHintStatement, ?> ctx) {
+        return new DisplayHintStatementImpl(ctx);
+    }
+
+    @Override
+    public DisplayHintEffectiveStatement createEffective(
+            final StmtContext<String, DisplayHintStatement, DisplayHintEffectiveStatement> ctx) {
+        return new DisplayHintEffectiveStatementImpl(ctx);
+    }
+
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2Namespace.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2Namespace.java
new file mode 100644 (file)
index 0000000..00d52a6
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+@Beta
+public interface IetfYangSmiv2Namespace extends IdentifierNamespace<StmtContext<?, ?, ?>, String> {
+
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..37d40b2
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class ImpliedEffectiveStatementImpl extends UnknownEffectiveStatementBase<String, ImpliedStatement>
+        implements ImpliedEffectiveStatement, ImpliedSchemaNode {
+
+    private final SchemaPath path;
+    private final String valueFromNamespace;
+
+    ImpliedEffectiveStatementImpl(final StmtContext<String, ImpliedStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        valueFromNamespace = ctx.getFromNamespace(IetfYangSmiv2Namespace.class, ctx);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+
+    // FIXME: what good is this method?
+    public String getValueFromNamespace() {
+        return valueFromNamespace;
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final ImpliedEffectiveStatementImpl other = (ImpliedEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementImpl.java
new file mode 100644 (file)
index 0000000..55de645
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class ImpliedStatementImpl extends AbstractDeclaredStatement<String> implements ImpliedStatement {
+    ImpliedStatementImpl(final StmtContext<String, ImpliedStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java
new file mode 100644 (file)
index 0000000..55a20e3
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedStatement;
+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.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+@Beta
+public final class ImpliedStatementSupport
+        extends AbstractStatementSupport<String, ImpliedStatement, ImpliedEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.IMPLIED).build();
+    private static final ImpliedStatementSupport INSTANCE = new ImpliedStatementSupport();
+
+    private ImpliedStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.IMPLIED);
+    }
+
+    public static ImpliedStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return value;
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<String, ImpliedStatement, ImpliedEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public ImpliedStatement createDeclared(final StmtContext<String, ImpliedStatement, ?> ctx) {
+        return new ImpliedStatementImpl(ctx);
+    }
+
+    @Override
+    public ImpliedEffectiveStatement createEffective(
+            final StmtContext<String, ImpliedStatement, ImpliedEffectiveStatement> ctx) {
+        return new ImpliedEffectiveStatementImpl(ctx);
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..2c1fb20
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class MaxAccessEffectiveStatementImpl extends UnknownEffectiveStatementBase<String, MaxAccessStatement>
+        implements MaxAccessEffectiveStatement, MaxAccessSchemaNode {
+
+    private final SchemaPath path;
+    private final String valueFromNamespace;
+
+    MaxAccessEffectiveStatementImpl(final StmtContext<String, MaxAccessStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        valueFromNamespace = ctx.getFromNamespace(IetfYangSmiv2Namespace.class, ctx);
+    }
+
+    // FIXME: what good is this method?
+    public String getValueFromNamespace() {
+        return valueFromNamespace;
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final MaxAccessEffectiveStatementImpl other = (MaxAccessEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementImpl.java
new file mode 100644 (file)
index 0000000..701a7f8
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class MaxAccessStatementImpl extends AbstractDeclaredStatement<String> implements MaxAccessStatement {
+    MaxAccessStatementImpl(final StmtContext<String, MaxAccessStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java
new file mode 100644 (file)
index 0000000..3187d0b
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement;
+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.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+@Beta
+public final class MaxAccessStatementSupport
+        extends AbstractStatementSupport<String, MaxAccessStatement, MaxAccessEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS).build();
+    private static final MaxAccessStatementSupport INSTANCE = new MaxAccessStatementSupport();
+
+    private MaxAccessStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS);
+    }
+
+    public static MaxAccessStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return value;
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<String, MaxAccessStatement, MaxAccessEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+    }
+
+    @Nullable
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public MaxAccessStatement createDeclared(final StmtContext<String, MaxAccessStatement, ?> ctx) {
+        return new MaxAccessStatementImpl(ctx);
+    }
+
+    @Override
+    public MaxAccessEffectiveStatement createEffective(
+            final StmtContext<String, MaxAccessStatement, MaxAccessEffectiveStatement> ctx) {
+        return new MaxAccessEffectiveStatementImpl(ctx);
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..eb61726
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
+import org.opendaylight.yangtools.rfc6643.model.api.OidEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.OidSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class OidEffectiveStatementImpl extends UnknownEffectiveStatementBase<ObjectIdentifier, OidStatement>
+        implements OidEffectiveStatement, OidSchemaNode {
+
+    private final SchemaPath path;
+
+    OidEffectiveStatementImpl(final StmtContext<ObjectIdentifier, OidStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+    }
+
+    @Override
+    public ObjectIdentifier getArgument() {
+        return argument();
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final OidEffectiveStatementImpl other = (OidEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidIdStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidIdStatementImpl.java
new file mode 100644 (file)
index 0000000..0fcd9ba
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import static com.google.common.base.Verify.verifyNotNull;
+
+import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
+import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class OidIdStatementImpl extends AbstractDeclaredStatement<ObjectIdentifier> implements OidStatement {
+    OidIdStatementImpl(final StmtContext<ObjectIdentifier, OidStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public ObjectIdentifier getOid() {
+        return verifyNotNull(argument());
+    }
+
+    @Override
+    public ObjectIdentifier getArgument() {
+        return null;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java
new file mode 100644 (file)
index 0000000..5997496
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
+import org.opendaylight.yangtools.rfc6643.model.api.OidEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
+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;
+
+@Beta
+public final class OidStatementSupport
+        extends AbstractStatementSupport<ObjectIdentifier, OidStatement, OidEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.OBJECT_ID).build();
+    private static final OidStatementSupport INSTANCE = new OidStatementSupport();
+
+    private OidStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.OBJECT_ID);
+    }
+
+    public static OidStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public ObjectIdentifier parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return ObjectIdentifier.forString(value);
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(
+            final StmtContext.Mutable<ObjectIdentifier, OidStatement, OidEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+    }
+
+    @Nullable
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public OidStatement createDeclared(final StmtContext<ObjectIdentifier, OidStatement, ?> ctx) {
+        return new OidIdStatementImpl(ctx);
+    }
+
+    @Override
+    public OidEffectiveStatement createEffective(
+            final StmtContext<ObjectIdentifier, OidStatement, OidEffectiveStatement> ctx) {
+        return new OidEffectiveStatementImpl(ctx);
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdEffectiveStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..b65e526
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import java.util.Objects;
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class SubIdEffectiveStatementImpl extends UnknownEffectiveStatementBase<Integer, SubIdStatement>
+        implements SubIdEffectiveStatement, SubIdSchemaNode {
+
+    private final SchemaPath path;
+
+    SubIdEffectiveStatementImpl(final StmtContext<Integer, SubIdStatement, ?> ctx) {
+        super(ctx);
+        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+    }
+
+    @Override
+    public int getArgument() {
+        return argument().intValue();
+    }
+
+    @Override
+    public QName getQName() {
+        return getNodeType();
+    }
+
+    @Override
+    public SchemaPath getPath() {
+        return path;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(path, getNodeType(), getNodeParameter());
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final SubIdEffectiveStatementImpl other = (SubIdEffectiveStatementImpl) obj;
+        if (!Objects.equals(path, other.path)) {
+            return false;
+        }
+        if (!Objects.equals(getNodeType(), other.getNodeType())) {
+            return false;
+        }
+        if (!Objects.equals(getNodeParameter(), other.getNodeParameter())) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementImpl.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementImpl.java
new file mode 100644 (file)
index 0000000..ed77079
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class SubIdStatementImpl extends AbstractDeclaredStatement<Integer> implements SubIdStatement {
+    SubIdStatementImpl(final StmtContext<Integer, SubIdStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public Integer getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java
new file mode 100644 (file)
index 0000000..23adfa2
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdStatement;
+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.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+@Beta
+public final class SubIdStatementSupport
+        extends AbstractStatementSupport<Integer, SubIdStatement, SubIdEffectiveStatement> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+            SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.SUB_ID).build();
+    private static final SubIdStatementSupport INSTANCE = new SubIdStatementSupport();
+
+    private SubIdStatementSupport() {
+        super(IetfYangSmiv2ExtensionsMapping.SUB_ID);
+    }
+
+    public static SubIdStatementSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public Integer parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return Integer.parseUnsignedInt(value);
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<Integer, SubIdStatement, SubIdEffectiveStatement> stmt) {
+        stmt.addToNs(IetfYangSmiv2Namespace.class, stmt, "Ietf-yang-smiv2 namespace.");
+    }
+
+    @Nullable
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+
+    @Override
+    public SubIdStatement createDeclared(final StmtContext<Integer, SubIdStatement, ?> ctx) {
+        return new SubIdStatementImpl(ctx);
+    }
+
+    @Override
+    public SubIdEffectiveStatement createEffective(
+            final StmtContext<Integer, SubIdStatement, SubIdEffectiveStatement> ctx) {
+        return new SubIdEffectiveStatementImpl(ctx);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java b/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java
new file mode 100644 (file)
index 0000000..eecc69a
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2017, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
+
+import java.io.IOException;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.DefValSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
+import org.opendaylight.yangtools.rfc6643.model.api.OidSchemaNode;
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdSchemaNode;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+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.parser.rfc7950.reactor.RFC7950Reactors;
+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;
+
+public class IetfYangSmiv2ExtensionPluginTest {
+    private static final String NS = "urn:opendaylight:yang:extension:third-party";
+    private static final String REV = "2016-06-09";
+
+    private static CrossSourceStatementReactor reactor;
+
+    @BeforeClass
+    public static void createReactor() {
+        reactor = RFC7950Reactors.defaultReactorBuilder()
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DisplayHintStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MaxAccessStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DefValStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ImpliedStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AliasStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, OidStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, SubIdStatementSupport.getInstance())
+                .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, sourceLocal(IetfYangSmiv2Namespace.class))
+                .build();
+    }
+
+    @AfterClass
+    public static void freeReactor() {
+        reactor = null;
+    }
+
+    @Test
+    public void testExtensions() throws ReactorException, YangSyntaxErrorException, IOException {
+        SchemaContext schema = createSchema();
+
+        assertTrue(schema.getUnknownSchemaNodes().size() == 1);
+        AliasSchemaNode aliasExtEffectStmt = (AliasSchemaNode) schema.getUnknownSchemaNodes().get(0);
+        assertEquals(aliasExtEffectStmt.getArgument(), "ifXTable");
+        assertTrue(aliasExtEffectStmt.getUnknownSchemaNodes().size() == 1);
+        OidSchemaNode oidExtEffectStmt =
+                (OidSchemaNode) aliasExtEffectStmt.getUnknownSchemaNodes().get(0);
+        assertEquals(oidExtEffectStmt.getArgument().toString(), "1.3.6.1.2.1.31.1.1");
+
+        final DataSchemaNode dataChildByName = schema.getDataChildByName(QName.create(NS, REV, "root"));
+        assertTrue(dataChildByName instanceof ContainerSchemaNode);
+        final ContainerSchemaNode root = (ContainerSchemaNode) dataChildByName;
+        assertTrue(root.getUnknownSchemaNodes().size() == 1);
+        OidSchemaNode oid = (OidSchemaNode)
+                root.getUnknownSchemaNodes().get(0);
+        assertEquals(oid.getArgument().toString(), "1");
+
+        ListSchemaNode ifStackEntry = (ListSchemaNode) root.getDataChildByName(QName.create(NS, REV, "ifStackEntry"));
+        assertTrue(ifStackEntry.getUnknownSchemaNodes().size() == 2);
+        ifStackEntry.getUnknownSchemaNodes().forEach(unknownSchemaNode -> {
+            if (unknownSchemaNode instanceof OidSchemaNode) {
+                assertEquals(((OidSchemaNode) unknownSchemaNode).getArgument().toString(),
+                        ObjectIdentifier.forString("1.1").toString());
+            } else if (unknownSchemaNode instanceof ImpliedSchemaNode) {
+                assertEquals(((ImpliedSchemaNode) unknownSchemaNode).getArgument(), "ifStackHigherLayer");
+            }
+        });
+
+        LeafSchemaNode ifStackHigherLayer = (LeafSchemaNode)
+                ifStackEntry.getDataChildByName(QName.create(NS, REV, "ifStackHigherLayer"));
+
+        ifStackHigherLayer.getUnknownSchemaNodes().forEach(unknownSchemaNode -> {
+            if (unknownSchemaNode instanceof MaxAccessSchemaNode) {
+                final MaxAccessSchemaNode maxAccess = (MaxAccessSchemaNode) unknownSchemaNode;
+                assertEquals(maxAccess.getArgument(), "not-accessible");
+            }
+        });
+
+        LeafSchemaNode testNumberLeaf = (LeafSchemaNode)
+                ifStackEntry.getDataChildByName(QName.create(NS, REV, "test-number"));
+        assertTrue(testNumberLeaf.getUnknownSchemaNodes().size() == 3);
+        testNumberLeaf.getUnknownSchemaNodes().forEach(unknownSchemaNode -> {
+            if (unknownSchemaNode instanceof SubIdSchemaNode) {
+                assertEquals(((SubIdSchemaNode) unknownSchemaNode).getArgument(), 2);
+            } else if (unknownSchemaNode instanceof DefValSchemaNode) {
+                assertEquals(((DefValSchemaNode) unknownSchemaNode).getArgument(), "0");
+            }
+        });
+    }
+
+    private static SchemaContext createSchema() throws ReactorException, YangSyntaxErrorException, IOException {
+        return reactor.newBuild()
+                .addSources(
+                    YangStatementStreamSource.create(YangTextSchemaSource.forResource(
+                        IetfYangSmiv2ExtensionPluginTest.class, "/foo.yang")),
+                    YangStatementStreamSource.create(YangTextSchemaSource.forResource(
+                        IetfYangSmiv2ExtensionPluginTest.class, "/ietf-yang-smiv2.yang")))
+                .buildEffective();
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionsMappingTest.java b/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionsMappingTest.java
new file mode 100644 (file)
index 0000000..46ef7d8
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import org.junit.Test;
+import org.opendaylight.yangtools.rfc6643.model.api.AliasEffectiveStatement;
+import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+
+public class IetfYangSmiv2ExtensionsMappingTest {
+    @Test
+    public void testGetEffectiveRepresentationClass() {
+        IetfYangSmiv2ExtensionsMapping extensionMapping = IetfYangSmiv2ExtensionsMapping.ALIAS;
+        assertEquals(extensionMapping.getEffectiveRepresentationClass(), AliasEffectiveStatement.class);
+    }
+
+    @Test
+    public void testIsArgumentYinElement() {
+        IetfYangSmiv2ExtensionsMapping extensionMapping = IetfYangSmiv2ExtensionsMapping.ALIAS;
+        assertFalse(extensionMapping.getArgumentDefinition().get().isYinElement());
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/ObjectIdentifierTest.java b/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/ObjectIdentifierTest.java
new file mode 100644 (file)
index 0000000..0529558
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2015, 2020 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
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.junit.Test;
+import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
+
+public class ObjectIdentifierTest {
+    @Test(expected = IllegalArgumentException.class)
+    public void testObjectIdentifierCreationWithBadOID() {
+        ObjectIdentifier.forString("bad oid");
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/test/resources/foo.yang b/yang/rfc6643-parser-support/src/test/resources/foo.yang
new file mode 100644 (file)
index 0000000..eff1019
--- /dev/null
@@ -0,0 +1,64 @@
+module foo {
+    namespace "urn:opendaylight:yang:extension:third-party";
+    prefix foo;
+    yang-version 1;
+
+    import ietf-yang-smiv2 { prefix "smiv2"; }
+
+    revision 2016-06-09;
+
+    typedef InterfaceIndexOrZero {
+        type int32 {
+            range "0..2147483647";
+        }
+        description
+            "This textual convention is an extension of the
+             InterfaceIndex convention.  The latter defines a greater
+             than zero value used to identify an interface or interface
+             sub-layer in the managed system.  This extension permits the
+             additional value of zero.  the value zero is object-specific
+             and must therefore be defined as part of the description of
+             any object which uses this syntax.  Examples of the usage of
+             zero might include situations where interface was unknown,
+             or when none or all interfaces need to be referenced.";
+        smiv2:display-hint "d";
+    }
+
+    container root {
+        smiv2:oid "1";
+
+        list ifStackEntry {
+            smiv2:oid "1.1";
+            smiv2:implied "ifStackHigherLayer";
+            key "ifStackHigherLayer";
+
+            leaf ifStackHigherLayer {
+                type foo:InterfaceIndexOrZero;
+                smiv2:max-access "not-accessible";
+                description "The value of ifIndex corresponding to the higher sub-layer
+                            of the relationship, i.e., the sub-layer which runs on 'top'
+                            of the sub-layer identified by the corresponding instance of
+                            ifStackLowerLayer.  If there is no higher sub-layer (below
+                            the internetwork layer), then this object has the value 0.";
+                smiv2:oid "1.1.1";
+            }
+
+            leaf test-number {
+                type int32;
+                description "Test leaf;";
+                smiv2:max-access "not-accessible";
+                smiv2:subid "2";
+                smiv2:defval "0";
+            }
+        }
+    }
+
+    smiv2:alias "ifXTable" {
+        description "A list of interface entries.  The number of entries is
+                    given by the value of ifNumber.  This table contains
+                    additional objects for the interface table.";
+        smiv2:oid "1.3.6.1.2.1.31.1.1";
+    }
+
+
+}
diff --git a/yang/rfc6643-parser-support/src/test/resources/ietf-yang-smiv2.yang b/yang/rfc6643-parser-support/src/test/resources/ietf-yang-smiv2.yang
new file mode 100644 (file)
index 0000000..5127e22
--- /dev/null
@@ -0,0 +1,146 @@
+module ietf-yang-smiv2 {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-smiv2";
+  prefix "smiv2";
+
+  organization
+   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+  contact
+   "WG Web:   <http://tools.ietf.org/wg/netmod/>
+    WG List:  <mailto:netmod@ietf.org>
+
+    WG Chair: David Kessens
+              <mailto:david.kessens@nsn.com>
+
+    WG Chair: Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>
+
+    Editor:   Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>";
+
+  description
+   "This module defines YANG extensions that are used to translate
+    SMIv2 concepts into YANG.
+
+    Copyright (c) 2012 IETF Trust and the persons identified as
+    authors of the code.  All rights reserved.
+
+    Redistribution and use in source and binary forms, with or
+    without modification, is permitted pursuant to, and subject
+    to the license terms contained in, the Simplified BSD License
+    set forth in Section 4.c of the IETF Trust's Legal Provisions
+    Relating to IETF Documents
+    (http://trustee.ietf.org/license-info).
+
+    This version of this YANG module is part of RFC 6643; see
+    the RFC itself for full legal notices.";
+
+  revision 2012-06-22 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6643: Translation of Structure of Management Information
+      Version 2 (SMIv2) MIB Modules to YANG Modules";
+  }
+
+  identity object-identity {
+    description
+     "Base identity for all SMIv2 OBJECT-IDENTITYs.";
+  }
+
+  typedef opaque {
+    type binary;
+    description
+     "The Opaque type supports the capability to pass arbitrary ASN.1
+      syntax.  A value is encoded using the ASN.1 Basic Encoding Rules
+      into a string of octets.  This, in turn, is encoded as an OCTET
+      STRING, in effect 'double-wrapping' the original ASN.1 value.
+
+      In the value set and its semantics, this type is equivalent to
+      the Opaque type of the SMIv2.  This type exists in the SMIv2
+      solely for backward-compatibility reasons and this is also
+      true for this YANG data type.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension display-hint {
+    argument "format";
+    description
+     "The display-hint statement takes as an argument the DISPLAY-HINT
+      assigned to an SMIv2 textual convention.";
+    reference
+     "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  extension max-access {
+    argument "access";
+    description
+     "The max-access statement takes as an argument the MAX-ACCESS
+      assigned to an SMIv2 object definition.
+
+      The MAX-ACCESS value is SMIv2 specific and has no impact on
+      the access provided to YANG objects through protocols such
+      as NETCONF.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension defval {
+    argument "value";
+    description
+     "The defval statement takes as an argument a default value
+      defined by an SMIv2 DEFVAL clause.  Note that the value is in
+      the SMIv2 value space defined by the SMIv2 syntax of the
+      corresponding object and not in the YANG value space
+      defined by the corresponding YANG data type.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension implied {
+    argument "index";
+    description
+     "If an SMIv2 INDEX object is preceded by the IMPLIED keyword, then
+      the implied statement is present in the YANG module and takes as
+      an argument the name of the IMPLIED index object.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+   }
+
+  extension alias {
+    argument "descriptor";
+    description
+     "The alias statement introduces an SMIv2 descriptor.  The body of
+      the alias statement is expected to contain an oid statement that
+      provides the numeric OID associated with the descriptor.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension oid {
+    argument "value";
+    description
+     "The oid statement takes as an argument the object identifier
+      assigned to an SMIv2 definition.  The object identifier value
+      is written in decimal dotted notation.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+  extension subid {
+    argument "value";
+    description
+     "The subid statement takes as an argument the last sub-identifier
+      of the object identifier assigned to an SMIv2 definition.  The
+      sub-identifier value is a single positive decimal natural number.
+      The subid statement may not be used as a substatement to any
+      top-level node in a YANG document.  The subid substatement may
+      be used only as a substatement to a node having a parent node
+      defined with either an smiv2:oid or smiv2:subid substatement.";
+    reference
+     "RFC 2578: Structure of Management Information Version 2 (SMIv2)";
+  }
+
+}
index e3f1452f30c12ff17cf1efc0c00b15991683c557..9c914b2b07cbf6204de9f05ae1032b5c63f08fb1 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc6536-parser-support</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-model-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>rfc6643-parser-support</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>rfc7952-model-api</artifactId>
index 3bcd1c6107b9d2e33ce7f87fd916acf56e5c51c5..8d66a4d04d095770bdf04b8a5f5bf894c28e305e 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.parser.impl;
 
+import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
+
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.odlext.parser.AnyxmlSchemaLocationNamespace;
@@ -17,6 +19,14 @@ import org.opendaylight.yangtools.openconfig.parser.HashedValueStatementSupport;
 import org.opendaylight.yangtools.rfc6241.parser.GetFilterElementAttributesStatementSupport;
 import org.opendaylight.yangtools.rfc6536.parser.DefaultDenyAllStatementSupport;
 import org.opendaylight.yangtools.rfc6536.parser.DefaultDenyWriteStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.AliasStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.DefValStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.DisplayHintStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.IetfYangSmiv2Namespace;
+import org.opendaylight.yangtools.rfc6643.parser.ImpliedStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.MaxAccessStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.OidStatementSupport;
+import org.opendaylight.yangtools.rfc6643.parser.SubIdStatementSupport;
 import org.opendaylight.yangtools.rfc7952.parser.AnnotationStatementSupport;
 import org.opendaylight.yangtools.rfc8040.parser.YangDataStatementSupport;
 import org.opendaylight.yangtools.rfc8528.parser.MountPointStatementSupport;
@@ -81,6 +91,16 @@ public final class DefaultReactors {
                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
                     DefaultDenyWriteStatementSupport.getInstance())
 
+                // RFC6643 extensions
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DisplayHintStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MaxAccessStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DefValStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ImpliedStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AliasStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, OidStatementSupport.getInstance())
+                .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, SubIdStatementSupport.getInstance())
+                .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, sourceLocal(IetfYangSmiv2Namespace.class))
+
                 // RFC7952 annotation support
                 .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance())