YANGTOOLS-829: add parser support for openconfig-hashed-value 49/65449/9
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 11 Nov 2017 22:27:22 +0000 (23:27 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 13 Nov 2017 13:28:25 +0000 (14:28 +0100)
This patch adds metamodel and parsing support for openconfig-hashed-value
and its predecessor, openconfig-encrypted-value.

Change-Id: Iac44d2e34a9b4ccc931ddb69e3d6709b962e7378
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
20 files changed:
common/artifacts/pom.xml
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigConstants.java
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueEffectiveStatement.java [new file with mode: 0644]
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueSchemaNode.java [new file with mode: 0644]
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueStatement.java [new file with mode: 0644]
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigStatements.java
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigVersionEffectiveStatement.java [moved from yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenconfigVersionEffectiveStatement.java with 82% similarity]
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigVersionStatement.java [moved from yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenconfigVersionStatement.java with 89% similarity]
yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/package-info.java [new file with mode: 0644]
yang/openconfig-parser-support/pom.xml [new file with mode: 0644]
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValue.java [new file with mode: 0644]
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java [new file with mode: 0644]
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java [new file with mode: 0644]
yang/pom.xml
yang/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/package-info.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenconfigVersionEffectiveStatementImpl.java with 81% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionStatementImpl.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenconfigVersionStatementImpl.java with 72% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenconfigVersionSupport.java with 63% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java

index 6afe3f0790808ca44c3abe1e6c1f2fbf9b4e73e5..d7926fb6e7d9b27d2ebe54e503138e7eaf406d4c 100644 (file)
                 <artifactId>openconfig-model-api</artifactId>
                 <version>2.0.0-SNAPSHOT</version>
             </dependency>
+            <dependency>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>openconfig-parser-support</artifactId>
+                <version>2.0.0-SNAPSHOT</version>
+            </dependency>
 
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
index f75910fadad3197806d5715bee8383e50ccc4dbb..07d71b16977e6ee4c4772b9cdfa87796486a4ef0 100644 (file)
@@ -22,7 +22,9 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
  */
 public final class OpenConfigConstants {
     private static final String MODULE_NAME = "yang-ext";
-    private static final URI MODULE_NAMESPACE = URI.create("http://openconfig.net/yang/openconfig-ext");
+
+    // Package-visible, because openconfig-version applies across all known revisions and needs to bind to all of them
+    static final URI MODULE_NAMESPACE = URI.create("http://openconfig.net/yang/openconfig-ext");
 
     // Initial revision, defining semantic-version
     private static final Revision SEMVER_REVISION = Revision.of("2015-10-09");
diff --git a/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueEffectiveStatement.java b/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueEffectiveStatement.java
new file mode 100644 (file)
index 0000000..5ee1197
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.model.api;
+
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+/**
+ * Effective statement corresponding to config's "openconfig-hashed-value" (new name) or "openconfig-encrypted-value"
+ * (old name).
+ *
+ * @author Robert Varga
+ */
+public interface OpenConfigHashedValueEffectiveStatement
+    extends EffectiveStatement<Void, OpenConfigHashedValueStatement> {
+
+}
diff --git a/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueSchemaNode.java b/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueSchemaNode.java
new file mode 100644 (file)
index 0000000..494997d
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+
+/**
+ * SchemaNode presence in SchemaNode API space.
+ *
+ * @author Robert Varga
+ */
+@Beta
+public interface OpenConfigHashedValueSchemaNode extends UnknownSchemaNode {
+    /**
+     * Determine if specified SchemaNode is marked to report its value in hashed form.
+     *
+     * @param schemaNode schema node to examine
+     * @return True if specified node is marked, false otherwise
+     * @throws NullPointerException if schemaNode is null
+     */
+    static boolean isPresentIn(final SchemaNode schemaNode) {
+        return schemaNode.getUnknownSchemaNodes().stream().anyMatch(OpenConfigHashedValueSchemaNode.class::isInstance);
+    }
+}
diff --git a/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueStatement.java b/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigHashedValueStatement.java
new file mode 100644 (file)
index 0000000..f96439a
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.model.api;
+
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+/**
+ * Declared statement corresponding to config's "openconfig-hashed-value" (new name) or "openconfig-encrypted-value"
+ * (old name).
+ *
+ * @author Robert Varga
+ */
+public interface OpenConfigHashedValueStatement extends UnknownStatement<Void> {
+
+}
index ffdde636fa45028bc7a55d3af93cf8a267a5e416..2cef28e0e7addcfbf4942ad6391510bdf6b68dd3 100644 (file)
@@ -19,20 +19,23 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
 public enum OpenConfigStatements implements StatementDefinition {
-    // FIXME: add support for hashed value
-    OPENCONFIG_VERSION(QName.create(OpenConfigConstants.SEMVER_MODULE.getNamespace(), "openconfig-version"), "semver",
-        OpenconfigVersionStatement.class, OpenconfigVersionEffectiveStatement.class);
+    OPENCONFIG_ENCRYPTED_VALUE(QName.create(OpenConfigConstants.ENCRYPTED_VALUE_MODULE, "openconfig-encrypted-value"),
+        null, OpenConfigHashedValueStatement.class, OpenConfigHashedValueEffectiveStatement.class),
+    OPENCONFIG_HASHED_VALUE(QName.create(OpenConfigConstants.HASHED_VALUE_MODULE, "openconfig-hashed-value"), null,
+        OpenConfigHashedValueStatement.class, OpenConfigHashedValueEffectiveStatement.class),
+    OPENCONFIG_VERSION(QName.create(OpenConfigConstants.MODULE_NAMESPACE, "openconfig-version"), "semver",
+        OpenConfigVersionStatement.class, OpenConfigVersionEffectiveStatement.class);
 
     private final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation;
     private final Class<? extends DeclaredStatement<?>> declaredRepresentation;
     private final QName statementName;
     private final QName argumentName;
 
-    OpenConfigStatements(final QName statementName, final String argumentName,
+    OpenConfigStatements(final QName statementName, @Nullable final String argumentName,
             final Class<? extends DeclaredStatement<?>> declaredRepresentation,
             final Class<? extends EffectiveStatement<?, ?>> effectiveRepresentation) {
         this.statementName = statementName.intern();
-        this.argumentName = QName.create(statementName, argumentName);
+        this.argumentName = argumentName != null ? QName.create(statementName, argumentName) : null;
         this.declaredRepresentation = requireNonNull(declaredRepresentation);
         this.effectiveRepresentation = requireNonNull(effectiveRepresentation);
     }
@@ -12,6 +12,6 @@ import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 
 @Beta
-public interface OpenconfigVersionEffectiveStatement extends EffectiveStatement<SemVer, OpenconfigVersionStatement> {
+public interface OpenConfigVersionEffectiveStatement extends EffectiveStatement<SemVer, OpenConfigVersionStatement> {
 
 }
@@ -12,6 +12,6 @@ import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 
 @Beta
-public interface OpenconfigVersionStatement extends UnknownStatement<SemVer> {
+public interface OpenConfigVersionStatement extends UnknownStatement<SemVer> {
 
 }
diff --git a/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/package-info.java b/yang/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/package-info.java
new file mode 100644 (file)
index 0000000..434cecf
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+/**
+ * YANG parser support for metamodel extensions defined in
+ * <a href="https://github.com/openconfig/public/blob/master/release/models/openconfig-extensions.yang">OpenConfig</a>.
+ *
+ * <p>
+ * The openconfig-version extension is integrated in the parser, as it supports the semantic version import resolution,
+ * for other extensions use
+ * {@link org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements}. SchemaNode world
+ * primary entry point is defined in
+ * {@link org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueSchemaNode#isPresentIn(
+ * org.opendaylight.yangtools.yang.model.api.SchemaNode)}.
+ *
+ * @author Robert Varga
+ */
+package org.opendaylight.yangtools.openconfig.model.api;
diff --git a/yang/openconfig-parser-support/pom.xml b/yang/openconfig-parser-support/pom.xml
new file mode 100644 (file)
index 0000000..d8f9c99
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<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">
+
+    <parent>
+        <groupId>org.opendaylight.odlparent</groupId>
+        <artifactId>bundle-parent</artifactId>
+        <version>2.0.5</version>
+        <relativePath/>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.opendaylight.yangtools</groupId>
+    <artifactId>openconfig-parser-support</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+    <name>${project.artifactId}</name>
+    <description>OpenConfig extensions parser support</description>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>yangtools-artifacts</artifactId>
+                <version>2.0.0-SNAPSHOT</version>
+                <scope>import</scope>
+                <type>pom</type>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>concepts</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>yang-common</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rfc7952-model-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <!-- FIXME: this needs to be trimmed down to the point of requiring only yang-parser-spi
+                        and yang-parser-reactor -->
+            <artifactId>yang-parser-impl</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>checkstyle.violationSeverity=error</propertyExpansion>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <!--
+        Maven Site Configuration
+
+        The following configuration is necessary for maven-site-plugin to
+        correctly identify the correct deployment path for OpenDaylight Maven
+        sites.
+    -->
+    <url>${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/</url>
+
+    <distributionManagement>
+        <site>
+            <id>opendaylight-site</id>
+            <url>${nexus.site.url}/${project.artifactId}/</url>
+        </site>
+    </distributionManagement>
+</project>
diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValue.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValue.java
new file mode 100644 (file)
index 0000000..29000c3
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.parser;
+
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+final class HashedValue extends AbstractStatementSupport<Void, OpenConfigHashedValueStatement,
+        OpenConfigHashedValueEffectiveStatement> {
+
+    private static final class Declared extends AbstractDeclaredStatement<Void>
+        implements OpenConfigHashedValueStatement {
+        Declared(final StmtContext<Void, ?, ?> context) {
+            super(context);
+        }
+
+        @Override
+        public Void getArgument() {
+            return null;
+        }
+    }
+
+    private static final class Effective
+            extends UnknownEffectiveStatementBase<Void, OpenConfigHashedValueStatement>
+            implements OpenConfigHashedValueEffectiveStatement {
+
+        private final SchemaPath path;
+
+        Effective(final StmtContext<Void, OpenConfigHashedValueStatement, ?> ctx) {
+            super(ctx);
+            path = ctx.getParentContext().getSchemaPath().get().createChild(
+                ctx.getPublicDefinition().getStatementName());
+        }
+
+        @Override
+        public QName getQName() {
+            return path.getLastComponent();
+        }
+
+        @Override
+        public SchemaPath getPath() {
+            return path;
+        }
+    }
+
+    private static final HashedValue ENCRYPTED_INSTANCE =
+            new HashedValue(OpenConfigStatements.OPENCONFIG_ENCRYPTED_VALUE);
+    private static final HashedValue HASHED_INSTANCE = new HashedValue(OpenConfigStatements.OPENCONFIG_HASHED_VALUE);
+
+    private final SubstatementValidator validator;
+
+    HashedValue(final StatementDefinition definition) {
+        super(definition);
+        this.validator = SubstatementValidator.builder(definition).build();
+    }
+
+    static HashedValue getEncryptedInstance() {
+        return ENCRYPTED_INSTANCE;
+    }
+
+    static HashedValue getHashedInstance() {
+        return HASHED_INSTANCE;
+    }
+
+    @Override
+    public OpenConfigHashedValueStatement createDeclared(
+            final StmtContext<Void, OpenConfigHashedValueStatement, ?> ctx) {
+        return new Declared(ctx);
+    }
+
+    @Override
+    public OpenConfigHashedValueEffectiveStatement createEffective(
+            final StmtContext<Void, OpenConfigHashedValueStatement, OpenConfigHashedValueEffectiveStatement> ctx) {
+        return new Effective(ctx);
+    }
+
+    @Override
+    public Void parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return null;
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return validator;
+    }
+}
diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfig.java
new file mode 100644 (file)
index 0000000..9b22cbb
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.parser;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import java.util.Collection;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
+
+/**
+ * Primary entry point into this implementation. Use {@link #getStatements()} to acquire a collection of
+ * {@link StatementSupport} instances, which need to be registered with the parser.
+ *
+ * @author Robert Varga
+ */
+@Beta
+public final class OpenConfig {
+
+    private OpenConfig() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Return a collection of statements which need to be added into parser reactor to enable support for OpenConfig
+     * YANG extensions.
+     *
+     * @return Collection of statements to be added.
+     */
+    public static Collection<StatementSupport<?, ?, ?>> getStatements() {
+        return ImmutableList.of(HashedValue.getHashedInstance(), HashedValue.getEncryptedInstance());
+    }
+}
diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/package-info.java
new file mode 100644 (file)
index 0000000..c6c5830
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+/**
+ * YANG parser support for metamodel extensions defined in
+ * <a href="https://github.com/openconfig/public/blob/master/release/models/openconfig-extensions.yang">OpenConfig</a>.
+ *
+ * <p>
+ * The openconfig-version extension is integrated in the parser, as it supports the semantic version import resoltion,
+ * for other extensions use {@link OpenConfig#getStatements()}.
+ *
+ * @author Robert Varga
+ */
+package org.opendaylight.yangtools.openconfig.parser;
index 801faf41a5afcdd1281b3f79425e4122acd6f9f9..6c9738079d337a903644487e6d1b4f4696d04b06 100644 (file)
@@ -45,8 +45,9 @@
         <module>yang-model-validator</module>
         <module>yang-test-util</module>
 
-        <!-- OpenConfig (semantic version) metamodel support -->
+        <!-- OpenConfig (semantic version, hashed value) metamodel support -->
         <module>openconfig-model-api</module>
+        <module>openconfig-parser-support</module>
 
         <!-- OpenDaylight messy extensions -->
         <module>odlext-model-api</module>
index 0b62777666e1e981cc875ca400c4d2004fa9b371..fd32f5a2f95e93cc70a34d2daca217c6779b9f0b 100644 (file)
@@ -7,7 +7,8 @@
  */
 /**
  * YANG metamodel extensions to support metadata, as defined in
- * <a href="https://tools.ietf.org/html/rfc7952">RFC7952</a>.
+ * <a href="https://tools.ietf.org/html/rfc7952">RFC7952</a>. For SchemaNode world entry space is defined via
+ * {@link org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode}'s static methods.
  *
  * @author Robert Varga
  */
@@ -10,20 +10,20 @@ package org.opendaylight.yangtools.yang.parser.openconfig.stmt;
 import java.util.Objects;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.concepts.SemVer;
-import org.opendaylight.yangtools.openconfig.model.api.OpenconfigVersionEffectiveStatement;
-import org.opendaylight.yangtools.openconfig.model.api.OpenconfigVersionStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement;
 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 OpenconfigVersionEffectiveStatementImpl extends
-        UnknownEffectiveStatementBase<SemVer, OpenconfigVersionStatement>
-        implements OpenconfigVersionEffectiveStatement {
+final class OpenConfigVersionEffectiveStatementImpl extends
+        UnknownEffectiveStatementBase<SemVer, OpenConfigVersionStatement>
+        implements OpenConfigVersionEffectiveStatement {
 
     private final SchemaPath path;
 
-    OpenconfigVersionEffectiveStatementImpl(final StmtContext<SemVer, OpenconfigVersionStatement, ?> ctx) {
+    OpenConfigVersionEffectiveStatementImpl(final StmtContext<SemVer, OpenConfigVersionStatement, ?> ctx) {
         super(ctx);
         path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
     }
@@ -61,7 +61,7 @@ final class OpenconfigVersionEffectiveStatementImpl extends
         if (getClass() != obj.getClass()) {
             return false;
         }
-        OpenconfigVersionEffectiveStatementImpl other = (OpenconfigVersionEffectiveStatementImpl) obj;
+        OpenConfigVersionEffectiveStatementImpl other = (OpenConfigVersionEffectiveStatementImpl) obj;
         if (!Objects.equals(path, other.path)) {
             return false;
         }
@@ -8,13 +8,13 @@
 package org.opendaylight.yangtools.yang.parser.openconfig.stmt;
 
 import org.opendaylight.yangtools.concepts.SemVer;
-import org.opendaylight.yangtools.openconfig.model.api.OpenconfigVersionStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class OpenconfigVersionStatementImpl extends AbstractDeclaredStatement<SemVer>
-        implements OpenconfigVersionStatement {
-    OpenconfigVersionStatementImpl(final StmtContext<SemVer, OpenconfigVersionStatement, ?> context) {
+final class OpenConfigVersionStatementImpl extends AbstractDeclaredStatement<SemVer>
+        implements OpenConfigVersionStatement {
+    OpenConfigVersionStatementImpl(final StmtContext<SemVer, OpenConfigVersionStatement, ?> context) {
         super(context);
     }
 
@@ -9,7 +9,7 @@ package org.opendaylight.yangtools.yang.parser.openconfig.stmt;
 
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements;
-import org.opendaylight.yangtools.openconfig.model.api.OpenconfigVersionStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace;
@@ -17,17 +17,17 @@ 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;
 
-public final class OpenconfigVersionSupport extends AbstractStatementSupport<SemVer, OpenconfigVersionStatement,
-        EffectiveStatement<SemVer, OpenconfigVersionStatement>> {
+public final class OpenConfigVersionSupport extends AbstractStatementSupport<SemVer, OpenConfigVersionStatement,
+        EffectiveStatement<SemVer, OpenConfigVersionStatement>> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
         OpenConfigStatements.OPENCONFIG_VERSION).build();
-    private static final OpenconfigVersionSupport INSTANCE = new OpenconfigVersionSupport();
+    private static final OpenConfigVersionSupport INSTANCE = new OpenConfigVersionSupport();
 
-    private OpenconfigVersionSupport() {
+    private OpenConfigVersionSupport() {
         super(OpenConfigStatements.OPENCONFIG_VERSION);
     }
 
-    public static OpenconfigVersionSupport getInstance() {
+    public static OpenConfigVersionSupport getInstance() {
         return INSTANCE;
     }
 
@@ -37,21 +37,21 @@ public final class OpenconfigVersionSupport extends AbstractStatementSupport<Sem
     }
 
     @Override
-    public void onLinkageDeclared(final Mutable<SemVer, OpenconfigVersionStatement,
-            EffectiveStatement<SemVer, OpenconfigVersionStatement>> stmt) {
+    public void onLinkageDeclared(final Mutable<SemVer, OpenConfigVersionStatement,
+            EffectiveStatement<SemVer, OpenConfigVersionStatement>> stmt) {
         stmt.addToNs(SemanticVersionNamespace.class, stmt.getParentContext(), stmt.getStatementArgument());
     }
 
     @Override
-    public OpenconfigVersionStatement createDeclared(final StmtContext<SemVer, OpenconfigVersionStatement, ?> ctx) {
-        return new OpenconfigVersionStatementImpl(ctx);
+    public OpenConfigVersionStatement createDeclared(final StmtContext<SemVer, OpenConfigVersionStatement, ?> ctx) {
+        return new OpenConfigVersionStatementImpl(ctx);
     }
 
     @Override
-    public EffectiveStatement<SemVer, OpenconfigVersionStatement> createEffective(
-            final StmtContext<SemVer, OpenconfigVersionStatement,
-            EffectiveStatement<SemVer, OpenconfigVersionStatement>> ctx) {
-        return new OpenconfigVersionEffectiveStatementImpl(ctx);
+    public EffectiveStatement<SemVer, OpenConfigVersionStatement> createEffective(
+            final StmtContext<SemVer, OpenConfigVersionStatement,
+            EffectiveStatement<SemVer, OpenConfigVersionStatement>> ctx) {
+        return new OpenConfigVersionEffectiveStatementImpl(ctx);
     }
 
     @Override
index 02479036094e0dc8821acc21ab506c140c21af56..6fcb060af822f7f2a94ca21584a8697867710d1f 100644 (file)
@@ -30,7 +30,7 @@ import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.SemVer;
-import org.opendaylight.yangtools.openconfig.model.api.OpenconfigVersionEffectiveStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.YangVersion;
@@ -119,7 +119,7 @@ public abstract class AbstractEffectiveModule<D extends DeclaredStatement<String
         this.prefix = prefixStmt.get().argument();
         this.yangVersion = findFirstEffectiveSubstatementArgument(YangVersionEffectiveStatement.class)
                 .orElse(YangVersion.VERSION_1);
-        this.semanticVersion = findFirstEffectiveSubstatementArgument(OpenconfigVersionEffectiveStatement.class)
+        this.semanticVersion = findFirstEffectiveSubstatementArgument(OpenConfigVersionEffectiveStatement.class)
                 .orElse(null);
         this.organization = findFirstEffectiveSubstatementArgument(OrganizationEffectiveStatement.class)
                 .orElse(null);
index 61878968744048e23ef74ffe1cea552de6667b7b..436dab4dfd60eb1e302dd7b04e5df2d7cb1c0424 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.parser.odlext.namespace.AnyxmlSchemaLocationNamespace;
 import org.opendaylight.yangtools.yang.parser.odlext.stmt.AnyxmlSchemaLocationSupport;
-import org.opendaylight.yangtools.yang.parser.openconfig.stmt.OpenconfigVersionSupport;
+import org.opendaylight.yangtools.yang.parser.openconfig.stmt.OpenConfigVersionSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
 import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.SchemaNodeIdentifierBuildNamespace;
 import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.URIStringToImportPrefix;
@@ -213,7 +213,7 @@ public final class YangInferencePipeline {
             .addSupport(sourceLocal(BelongsToModuleContext.class))
             .addSupport(sourceLocal(QNameToStatementDefinition.class))
             .addSupport(sourceLocal(BelongsToPrefixToModuleName.class))
-            .addSupport(OpenconfigVersionSupport.getInstance())
+            .addSupport(OpenConfigVersionSupport.getInstance())
             .addSupport(global(SemanticVersionNamespace.class))
             .addSupport(global(SemanticVersionModuleNamespace.class))
             .addSupport(sourceLocal(ImportPrefixToSemVerSourceIdentifier.class))