YANGTOOLS-706: split out rfc8040-model-api 22/65122/8
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 3 Nov 2017 17:15:30 +0000 (18:15 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 8 Nov 2017 10:24:41 +0000 (11:24 +0100)
YangDataSchemaNode needs to live in a separate RFC8040-specific
module, as it is not part of RFC7950 semantic model. Split it
out.

This flushes out the need to properly define YangDataStatement,
which in turn cascades to discrepancies in the structure of our
support classes. Those are cleaned up, with extensions getting
their proper declared statement interfaces and packages.

Change-Id: I84f7ad882172806a5aac8362837b85b50dc3a387
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
39 files changed:
common/artifacts/pom.xml
yang/pom.xml
yang/rfc8040-model-api/pom.xml [new file with mode: 0644]
yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java [new file with mode: 0644]
yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataSchemaNode.java [moved from yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/YangDataSchemaNode.java with 51% similarity]
yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java [new file with mode: 0644]
yang/yang-parser-impl/pom.xml
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyxmlSchemaLocationEffectiveStatementImpl.java with 76% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationNamespace.java [moved from yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/AnyxmlSchemaLocationNamespace.java with 73% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatementImpl.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationSupport.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OpenconfigVersionEffectiveStatementImpl.java with 80% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatementImpl.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionSupport.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlSchemaLocationStatementImpl.java [deleted file]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OpenconfigVersionStatementImpl.java [deleted file]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SupportedExtensionsMapping.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementBase.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java [moved from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatement.java with 79% similarity]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatement.java [deleted file]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementImpl.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3874ExtensionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java [new file with mode: 0644]
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java [new file with mode: 0644]

index 490445ceb8a6bb9a14767d40780a343bca8d9289..3d6b1c7598e3323d66b302c5ff176bbe8fa77984 100644 (file)
                 <version>2.0.0-SNAPSHOT</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>rfc8040-model-api</artifactId>
+                <version>2.0.0-SNAPSHOT</version>
+            </dependency>
+
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>util</artifactId>
index 266ea28efd21196dfaeb213dd6034e428ce99b64..c565bce479aaceddcc3eab23e59f7e6aed905841 100644 (file)
         <module>yang-data-jaxen</module>
         <module>yang-model-validator</module>
         <module>yang-test-util</module>
+
+        <module>rfc8040-model-api</module>
+        <!-- FIXME: solve circular dependency with rfc6020 and activate this
+            <module>rfc8040-parser</module>
+        -->
     </modules>
 
     <!--
diff --git a/yang/rfc8040-model-api/pom.xml b/yang/rfc8040-model-api/pom.xml
new file mode 100644 (file)
index 0000000..36777b3
--- /dev/null
@@ -0,0 +1,81 @@
+<?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>rfc8040-model-api</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+    <name>${project.artifactId}</name>
+    <description>RFC8040 model API</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>yang-model-api</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/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java
new file mode 100644 (file)
index 0000000..8d99228
--- /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.rfc8040.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+/**
+ * Effective statement representation of 'yang-data' extension defined in
+ * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
+ */
+@Beta
+public interface YangDataEffectiveStatement extends EffectiveStatement<String, YangDataStatement>, YangDataSchemaNode {
+
+}
similarity index 51%
rename from yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/YangDataSchemaNode.java
rename to yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataSchemaNode.java
index ebf984941632b92a90c2d49636d7cc63c81c8f92..af7f5bc34902e72139facc0e35f118872dfea050 100644 (file)
@@ -5,20 +5,20 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
-package org.opendaylight.yangtools.yang.model.api;
+package org.opendaylight.yangtools.rfc8040.model.api;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 
 /**
- * Represents 'yang-data' extension statement defined in https://tools.ietf.org/html/rfc8040#section-8
- * This statement must appear as a top-level statement, otherwise it is ignored and does not appear in the final
- * schema context. It must contain exactly one top-level container node (directly or indirectly via a uses statement).
+ * Represents 'yang-data' extension statement defined in
+ * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC8040</a>. This statement must appear as a top-level
+ * statement, otherwise it is ignored and does not appear in the final schema context. It must contain exactly one
+ * top-level container node (directly or indirectly via a uses statement).
  */
-// FIXME: 2.0.0: this interface should live in a separate RFC8040 API artifact.
 @Beta
 public interface YangDataSchemaNode extends UnknownSchemaNode {
-
     /**
      * Returns container schema node.
      *
diff --git a/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java
new file mode 100644 (file)
index 0000000..c056a1e
--- /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.rfc8040.model.api;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+/**
+ * Declared statement representation of 'yang-data' extension defined in
+ * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
+ */
+@Beta
+public interface YangDataStatement extends UnknownStatement<String> {
+
+}
index 49f5f22d3b66890ae7bb97d1d11f6fec7268760c..72e675c610d2b3faf3eecc973cfc95507899989e 100644 (file)
             <groupId>${project.groupId}</groupId>
             <artifactId>yang-data-util</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>rfc8040-model-api</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.antlr</groupId>
             <artifactId>antlr4-runtime</artifactId>
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatement.java
new file mode 100644 (file)
index 0000000..0d63bbd
--- /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
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+
+@Beta
+public interface AnyxmlSchemaLocationEffectiveStatement
+    extends EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement> {
+
+}
@@ -5,28 +5,27 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
+package org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema;
 
-package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
-
-import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
 import java.util.Objects;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnknownEffectiveStatementBase;
 
-@Beta
-public final class AnyxmlSchemaLocationEffectiveStatementImpl extends
-        UnknownEffectiveStatementBase<SchemaNodeIdentifier> {
+@VisibleForTesting
+public final class AnyxmlSchemaLocationEffectiveStatementImpl
+        extends UnknownEffectiveStatementBase<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>
+        implements AnyxmlSchemaLocationEffectiveStatement {
 
     private final SchemaPath path;
 
-    public AnyxmlSchemaLocationEffectiveStatementImpl(
-            final StmtContext<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>, ?> ctx) {
+    AnyxmlSchemaLocationEffectiveStatementImpl(
+            final StmtContext<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement, ?> ctx) {
         super(ctx);
-
         path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
     }
 
@@ -5,20 +5,19 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.yangtools.yang.parser.spi.source;
+package org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema;
 
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 
 /**
  * Source-specific mapping of prefixes to namespaces.
  */
 public interface AnyxmlSchemaLocationNamespace extends IdentifierNamespace<StatementDefinition,
-    Mutable<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>,
-        EffectiveStatement<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>>>> {
+    Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
+        EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>>> {
 
 }
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatement.java
new file mode 100644 (file)
index 0000000..9b198aa
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface AnyxmlSchemaLocationStatement extends UnknownStatement<SchemaNodeIdentifier> {
+
+}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatementImpl.java
new file mode 100644 (file)
index 0000000..6def917
--- /dev/null
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2015 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
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema;
+
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class AnyxmlSchemaLocationStatementImpl extends AbstractDeclaredStatement<SchemaNodeIdentifier>
+        implements AnyxmlSchemaLocationStatement {
+    AnyxmlSchemaLocationStatementImpl(
+            final StmtContext<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement, ?> context) {
+        super(context);
+    }
+
+    @Override
+    public SchemaNodeIdentifier getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationSupport.java
new file mode 100644 (file)
index 0000000..a5db5d2
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema;
+
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+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;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+
+public final class AnyxmlSchemaLocationSupport
+        extends AbstractStatementSupport<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
+            EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
+        SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION).build();
+    private static final AnyxmlSchemaLocationSupport INSTANCE = new AnyxmlSchemaLocationSupport();
+
+    private AnyxmlSchemaLocationSupport() {
+        super(SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION);
+    }
+
+    public static AnyxmlSchemaLocationSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public SchemaNodeIdentifier parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return Utils.nodeIdentifierFromPath(ctx, value);
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
+            EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>> stmt) {
+        super.onFullDefinitionDeclared(stmt);
+        stmt.getParentContext().addToNs(AnyxmlSchemaLocationNamespace.class,
+                SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION, stmt);
+    }
+
+    @Override
+    public AnyxmlSchemaLocationStatement createDeclared(
+            final StmtContext<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement, ?> ctx) {
+        return new AnyxmlSchemaLocationStatementImpl(ctx);
+    }
+
+    @Override
+    public EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement> createEffective(
+            final StmtContext<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
+            EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>> ctx) {
+        return new AnyxmlSchemaLocationEffectiveStatementImpl(ctx);
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatement.java
new file mode 100644 (file)
index 0000000..51ad9d1
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.openconfig;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.concepts.SemVer;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+@Beta
+public interface OpenconfigVersionEffectiveStatement extends EffectiveStatement<SemVer, OpenconfigVersionStatement> {
+
+}
@@ -5,26 +5,23 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
+package org.opendaylight.yangtools.yang.parser.stmt.openconfig;
 
-package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
-
-import com.google.common.annotations.Beta;
 import java.util.Objects;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnknownEffectiveStatementBase;
 
-@Beta
-public final class OpenconfigVersionEffectiveStatementImpl extends
-        UnknownEffectiveStatementBase<SemVer> {
+final class OpenconfigVersionEffectiveStatementImpl extends
+        UnknownEffectiveStatementBase<SemVer, OpenconfigVersionStatement>
+        implements OpenconfigVersionEffectiveStatement {
 
     private final SchemaPath path;
 
-    public OpenconfigVersionEffectiveStatementImpl(
-            final StmtContext<SemVer, UnknownStatement<SemVer>, ?> ctx) {
+    OpenconfigVersionEffectiveStatementImpl(final StmtContext<SemVer, OpenconfigVersionStatement, ?> ctx) {
         super(ctx);
         path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
     }
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatement.java
new file mode 100644 (file)
index 0000000..0c352dc
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.openconfig;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.concepts.SemVer;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+@Beta
+public interface OpenconfigVersionStatement extends UnknownStatement<SemVer> {
+
+}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatementImpl.java
new file mode 100644 (file)
index 0000000..507e401
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2016 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
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.openconfig;
+
+import org.opendaylight.yangtools.concepts.SemVer;
+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) {
+        super(context);
+    }
+
+    @Override
+    public SemVer getArgument() {
+        return argument();
+    }
+}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionSupport.java
new file mode 100644 (file)
index 0000000..82469f8
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.openconfig;
+
+import org.opendaylight.yangtools.concepts.SemVer;
+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;
+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;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
+
+public final class OpenconfigVersionSupport extends AbstractStatementSupport<SemVer, OpenconfigVersionStatement,
+        EffectiveStatement<SemVer, OpenconfigVersionStatement>> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
+        SupportedExtensionsMapping.OPENCONFIG_VERSION).build();
+    private static final OpenconfigVersionSupport INSTANCE = new OpenconfigVersionSupport();
+
+    private OpenconfigVersionSupport() {
+        super(SupportedExtensionsMapping.OPENCONFIG_VERSION);
+    }
+
+    public static OpenconfigVersionSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public SemVer parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return SemVer.valueOf(value) ;
+    }
+
+    @Override
+    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);
+    }
+
+    @Override
+    public EffectiveStatement<SemVer, OpenconfigVersionStatement> createEffective(
+            final StmtContext<SemVer, OpenconfigVersionStatement,
+            EffectiveStatement<SemVer, OpenconfigVersionStatement>> ctx) {
+        return new OpenconfigVersionEffectiveStatementImpl(ctx);
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
+    }
+}
\ No newline at end of file
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlSchemaLocationStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlSchemaLocationStatementImpl.java
deleted file mode 100644 (file)
index 4eb19ac..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Copyright (c) 2015 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
- */
-package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
-
-import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
-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.StmtContext.Mutable;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-import org.opendaylight.yangtools.yang.parser.spi.source.AnyxmlSchemaLocationNamespace;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyxmlSchemaLocationEffectiveStatementImpl;
-
-@Beta
-public final class AnyxmlSchemaLocationStatementImpl extends AbstractDeclaredStatement<SchemaNodeIdentifier> implements
-        UnknownStatement<SchemaNodeIdentifier> {
-    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
-            SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION).build();
-
-    AnyxmlSchemaLocationStatementImpl(
-            final StmtContext<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>, ?> context) {
-        super(context);
-    }
-
-    public static class AnyxmlSchemaLocationSupport
-            extends AbstractStatementSupport<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>,
-                EffectiveStatement<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>>> {
-
-        public AnyxmlSchemaLocationSupport() {
-            super(SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION);
-        }
-
-        @Override
-        public SchemaNodeIdentifier parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.nodeIdentifierFromPath(ctx, value);
-        }
-
-        @Override
-        public void onFullDefinitionDeclared(final Mutable<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>,
-                EffectiveStatement<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>>> stmt) {
-            super.onFullDefinitionDeclared(stmt);
-            stmt.getParentContext().addToNs(AnyxmlSchemaLocationNamespace.class,
-                    SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION, stmt);
-        }
-
-        @Override
-        public UnknownStatement<SchemaNodeIdentifier> createDeclared(
-                final StmtContext<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>, ?> ctx) {
-            return new AnyxmlSchemaLocationStatementImpl(ctx);
-        }
-
-        @Override
-        public EffectiveStatement<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>> createEffective(
-                final StmtContext<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>,
-                EffectiveStatement<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>>> ctx) {
-            return new AnyxmlSchemaLocationEffectiveStatementImpl(ctx);
-        }
-
-        @Override
-        protected SubstatementValidator getSubstatementValidator() {
-            return SUBSTATEMENT_VALIDATOR;
-        }
-    }
-
-    @Override
-    public SchemaNodeIdentifier getArgument() {
-        return argument();
-    }
-}
index 6b54a12dc7b26f37d5dec0d4e62dcaf9432f2ab9..e999a33b2275a994f569e14e2d4d235d4d0f7f95 100644 (file)
@@ -25,7 +25,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
@@ -33,7 +32,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-import org.opendaylight.yangtools.yang.parser.spi.source.AnyxmlSchemaLocationNamespace;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationNamespace;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationStatement;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyXmlEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangModeledAnyXmlEffectiveStatementImpl;
 
@@ -81,8 +81,8 @@ public class AnyxmlStatementImpl extends AbstractDeclaredStatement<QName> implem
         @Override
         public EffectiveStatement<QName, AnyxmlStatement> createEffective(
                 final StmtContext<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> ctx) {
-            final Map<StatementDefinition, Mutable<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>,
-                EffectiveStatement<SchemaNodeIdentifier, UnknownStatement<SchemaNodeIdentifier>>>> schemaLocations =
+            final Map<StatementDefinition, Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
+                EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>>> schemaLocations =
                 ctx.getAllFromCurrentStmtCtxNamespace(AnyxmlSchemaLocationNamespace.class);
             if (schemaLocations != null && !schemaLocations.isEmpty()) {
                 final SchemaNodeIdentifier anyXmlSchemaNodeIdentifier = schemaLocations.values().iterator().next()
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OpenconfigVersionStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OpenconfigVersionStatementImpl.java
deleted file mode 100644 (file)
index 1a4a13e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2016 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
- */
-package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
-
-import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.concepts.SemVer;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
-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.SemanticVersionNamespace;
-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;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OpenconfigVersionEffectiveStatementImpl;
-
-@Beta
-public final class OpenconfigVersionStatementImpl extends AbstractDeclaredStatement<SemVer>
-        implements UnknownStatement<SemVer> {
-    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
-            SupportedExtensionsMapping.OPENCONFIG_VERSION).build();
-
-    OpenconfigVersionStatementImpl(
-            final StmtContext<SemVer, UnknownStatement<SemVer>, ?> context) {
-        super(context);
-    }
-
-    public static class OpenconfigVersionSupport extends AbstractStatementSupport<SemVer, UnknownStatement<SemVer>,
-            EffectiveStatement<SemVer, UnknownStatement<SemVer>>> {
-
-        public OpenconfigVersionSupport() {
-            super(SupportedExtensionsMapping.OPENCONFIG_VERSION);
-        }
-
-        @Override
-        public SemVer parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return SemVer.valueOf(value) ;
-        }
-
-        @Override
-        public void onLinkageDeclared(final Mutable<SemVer, UnknownStatement<SemVer>,
-                EffectiveStatement<SemVer, UnknownStatement<SemVer>>> stmt) {
-            stmt.addToNs(SemanticVersionNamespace.class, stmt.getParentContext(), stmt.getStatementArgument());
-        }
-
-        @Override
-        public UnknownStatement<SemVer> createDeclared(final StmtContext<SemVer, UnknownStatement<SemVer>, ?> ctx) {
-            return new OpenconfigVersionStatementImpl(ctx);
-        }
-
-        @Override
-        public EffectiveStatement<SemVer, UnknownStatement<SemVer>> createEffective(
-                final StmtContext<SemVer, UnknownStatement<SemVer>,
-                EffectiveStatement<SemVer, UnknownStatement<SemVer>>> ctx) {
-            return new OpenconfigVersionEffectiveStatementImpl(ctx);
-        }
-
-        @Override
-        protected SubstatementValidator getSubstatementValidator() {
-            return SUBSTATEMENT_VALIDATOR;
-        }
-    }
-
-    @Override
-    public SemVer getArgument() {
-        return argument();
-    }
-}
index d1f5f4a2f2378ef12f31a7b07083661a1bea3fa6..34524d07741d80ee8883e9952a5e64885d52e734 100644 (file)
@@ -12,22 +12,24 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.annotations.Beta;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyxmlSchemaLocationEffectiveStatementImpl;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OpenconfigVersionEffectiveStatementImpl;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc8040.YangDataStatement;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationStatement;
+import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionStatement;
 
 @Beta
 public enum SupportedExtensionsMapping implements StatementDefinition {
     ANYXML_SCHEMA_LOCATION("urn:opendaylight:yang:extension:yang-ext", "2013-07-09",
-        AnyxmlSchemaLocationStatementImpl.class, AnyxmlSchemaLocationEffectiveStatementImpl.class,
+        AnyxmlSchemaLocationStatement.class, AnyxmlSchemaLocationEffectiveStatement.class,
         "anyxml-schema-location", "target-node", false),
     OPENCONFIG_VERSION("http://openconfig.net/yang/openconfig-ext",
-        OpenconfigVersionStatementImpl.class, OpenconfigVersionEffectiveStatementImpl.class,
+        OpenconfigVersionStatement.class, OpenconfigVersionEffectiveStatement.class,
         "openconfig-version", "semver", false),
     YANG_DATA("urn:ietf:params:xml:ns:yang:ietf-restconf", "2017-01-26", YangDataStatement.class,
             YangDataEffectiveStatement.class, "yang-data", "name", true);
index 1a8c356ac034246bc6b3957510cb2873fae6b414..693bfd5c498ae9c850c838340f23cd99a02935d2 100644 (file)
@@ -109,7 +109,7 @@ public final class Utils {
             final String argumentValue) {
         final Set<SchemaNodeIdentifier.Relative> uniqueConstraintNodes = new HashSet<>();
         for (final String uniqueArgToken : SPACE_SPLITTER.split(argumentValue)) {
-            final SchemaNodeIdentifier nodeIdentifier = Utils.nodeIdentifierFromPath(ctx, uniqueArgToken);
+            final SchemaNodeIdentifier nodeIdentifier = nodeIdentifierFromPath(ctx, uniqueArgToken);
             SourceException.throwIf(nodeIdentifier.isAbsolute(), ctx.getStatementSourceReference(),
                     "Unique statement argument '%s' contains schema node identifier '%s' "
                             + "which is not in the descendant node identifier form.", argumentValue, uniqueArgToken);
@@ -182,7 +182,7 @@ public final class Utils {
     }
 
     @SuppressWarnings("checkstyle:illegalCatch")
-    static SchemaNodeIdentifier nodeIdentifierFromPath(final StmtContext<?, ?, ?> ctx, final String path) {
+    public static SchemaNodeIdentifier nodeIdentifierFromPath(final StmtContext<?, ?, ?> ctx, final String path) {
         // FIXME: is the path trimming really necessary??
         final List<QName> qNames = new ArrayList<>();
         for (final String nodeName : SLASH_SPLITTER.split(trimSingleLastSlashFromXPath(path))) {
index c40642e874268ae41f80724917301c644806f989..a45090486beac98f856bd2dc4a0bee5201389720 100644 (file)
@@ -35,7 +35,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleName
 import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementDefinitionNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
-import org.opendaylight.yangtools.yang.parser.spi.source.AnyxmlSchemaLocationNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToModuleContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleCtx;
@@ -59,6 +58,9 @@ import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationNamespace;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationSupport;
+import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionSupport;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ActionStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.AnydataStatementImpl;
@@ -142,7 +144,7 @@ public final class YangInferencePipeline {
             .addSupport(sourceLocal(BelongsToModuleContext.class))
             .addSupport(sourceLocal(QNameToStatementDefinition.class))
             .addSupport(sourceLocal(BelongsToPrefixToModuleName.class))
-            .addSupport(new OpenconfigVersionStatementImpl.OpenconfigVersionSupport())
+            .addSupport(OpenconfigVersionSupport.getInstance())
             .addSupport(global(SemanticVersionNamespace.class))
             .addSupport(global(SemanticVersionModuleNamespace.class))
             .addSupport(sourceLocal(ImportPrefixToSemVerSourceIdentifier.class))
@@ -235,7 +237,7 @@ public final class YangInferencePipeline {
             .addSupport(new FeatureStatementImpl.Definition())
             .addSupport(new PositionStatementImpl.Definition())
             .addSupport(new ValueStatementImpl.Definition())
-            .addSupport(new AnyxmlSchemaLocationStatementImpl.AnyxmlSchemaLocationSupport())
+            .addSupport(AnyxmlSchemaLocationSupport.getInstance())
             .addSupport(treeScoped(AnyxmlSchemaLocationNamespace.class))
             .addSupport(YangDataStatementSupport.getInstance())
             .addSupport(global(StmtOrderingNamespace.class))
index f6f77c740890f2000e34f2acb3e264bc2030385e..6d4b993bfa19b0fe6d4480612b79f6b79a668658 100644 (file)
@@ -56,6 +56,7 @@ 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.source.IncludedSubmoduleNameToModuleCtx;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+import org.opendaylight.yangtools.yang.parser.stmt.openconfig.OpenconfigVersionEffectiveStatement;
 
 abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> extends
         AbstractEffectiveDocumentedNode<String, D> implements Module, MutableStatement {
@@ -107,8 +108,8 @@ abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> exte
                 firstEffective(YangVersionEffectiveStatementImpl.class);
         this.yangVersion = yangVersionStmt == null ? YangVersion.VERSION_1 : yangVersionStmt.argument();
 
-        final OpenconfigVersionEffectiveStatementImpl semanticVersionStmt =
-                firstEffective(OpenconfigVersionEffectiveStatementImpl.class);
+        final OpenconfigVersionEffectiveStatement semanticVersionStmt =
+                firstEffective(OpenconfigVersionEffectiveStatement.class);
         this.semanticVersion = semanticVersionStmt == null ? null : semanticVersionStmt.argument();
 
         final OrganizationEffectiveStatementImpl organizationStmt =
index d41d307c4f447fc4da7ef28285aca6e30821c3db..1fde169de4fbab5af84a18540c746edc19482503 100644 (file)
@@ -24,8 +24,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.CopyHistory;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-public abstract class UnknownEffectiveStatementBase<A> extends AbstractEffectiveDocumentedNode<A, UnknownStatement<A>>
-        implements UnknownSchemaNode {
+public abstract class UnknownEffectiveStatementBase<A, D extends UnknownStatement<A>>
+        extends AbstractEffectiveDocumentedNode<A, D> implements UnknownSchemaNode {
 
     private final boolean addedByUses;
     private final boolean addedByAugmentation;
@@ -35,7 +35,7 @@ public abstract class UnknownEffectiveStatementBase<A> extends AbstractEffective
     private final QName nodeType;
     private final String nodeParameter;
 
-    protected UnknownEffectiveStatementBase(final StmtContext<A, UnknownStatement<A>, ?> ctx) {
+    protected UnknownEffectiveStatementBase(final StmtContext<A, D, ?> ctx) {
         super(ctx);
 
         final StmtContext<?, ExtensionStatement, EffectiveStatement<QName, ExtensionStatement>> extensionInit =
index bfcc758f65ca01d80a073e3b7759105818c2db2c..2c4a15476714541b76ee92484e6b3935651f6bbc 100644 (file)
@@ -17,7 +17,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
-public final class UnknownEffectiveStatementImpl extends UnknownEffectiveStatementBase<String> {
+public final class UnknownEffectiveStatementImpl
+        extends UnknownEffectiveStatementBase<String, UnknownStatement<String>> {
 
     private final QName maybeQNameArgument;
     private final SchemaPath path;
@@ -13,29 +13,25 @@ import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import java.util.Objects;
 import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.YangDataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnknownEffectiveStatementBase;
 
-/**
- * Effective statement representation of 'yang-data' extension defined in
- * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
- */
 @Beta
-public final class YangDataEffectiveStatement extends UnknownEffectiveStatementBase<String>
-        implements YangDataSchemaNode {
+final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase<String, YangDataStatement>
+        implements YangDataEffectiveStatement {
 
     private final SchemaPath path;
     private final QName maybeQNameArgument;
     private final ContainerSchemaNode containerSchemaNode;
 
-    YangDataEffectiveStatement(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
+    YangDataEffectiveStatementImpl(final StmtContext<String, YangDataStatement, ?> ctx) {
         super(ctx);
 
         QName maybeQNameArgumentInit;
@@ -79,11 +75,11 @@ public final class YangDataEffectiveStatement extends UnknownEffectiveStatementB
             return true;
         }
 
-        if (!(obj instanceof YangDataEffectiveStatement)) {
+        if (!(obj instanceof YangDataEffectiveStatementImpl)) {
             return false;
         }
 
-        final YangDataEffectiveStatement other = (YangDataEffectiveStatement) obj;
+        final YangDataEffectiveStatementImpl other = (YangDataEffectiveStatementImpl) obj;
         return Objects.equals(maybeQNameArgument, other.maybeQNameArgument) && Objects.equals(path, other.path);
     }
 
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatement.java
deleted file mode 100644 (file)
index 2e33a37..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.yangtools.yang.parser.stmt.rfc8040;
-
-import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
-
-/**
- * Declared statement representation of 'yang-data' extension defined in
- * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
- */
-@Beta
-public final class YangDataStatement extends AbstractDeclaredStatement<String> implements UnknownStatement<String> {
-    static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
-            SupportedExtensionsMapping.YANG_DATA)
-            .addMandatory(YangStmtMapping.CONTAINER)
-            .addOptional(YangStmtMapping.USES)
-            .build();
-
-    YangDataStatement(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
-        super(ctx);
-    }
-
-    @Override
-    public String getArgument() {
-        return argument();
-    }
-}
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementImpl.java
new file mode 100644 (file)
index 0000000..3d2b1b0
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.stmt.rfc8040;
+
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+/**
+ * Declared statement representation of 'yang-data' extension defined in
+ * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
+ */
+final class YangDataStatementImpl extends AbstractDeclaredStatement<String> implements YangDataStatement {
+    YangDataStatementImpl(final StmtContext<String, YangDataStatement, ?> ctx) {
+        super(ctx);
+    }
+
+    @Override
+    public String getArgument() {
+        return argument();
+    }
+}
index aff545e7f771f373fe1678e122284176d28e2f1e..82f2051c3608f4775efac7a1a12facc7e2eb6152 100644 (file)
@@ -8,8 +8,9 @@
 package org.opendaylight.yangtools.yang.parser.stmt.rfc8040;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 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;
@@ -17,8 +18,13 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
 
 @Beta
-public final class YangDataStatementSupport extends AbstractStatementSupport<String, UnknownStatement<String>,
-        EffectiveStatement<String, UnknownStatement<String>>> {
+public final class YangDataStatementSupport extends AbstractStatementSupport<String, YangDataStatement,
+        EffectiveStatement<String, YangDataStatement>> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
+        SupportedExtensionsMapping.YANG_DATA)
+            .addMandatory(YangStmtMapping.CONTAINER)
+            .addOptional(YangStmtMapping.USES)
+            .build();
     private static final YangDataStatementSupport INSTANCE = new YangDataStatementSupport();
 
     private YangDataStatementSupport() {
@@ -31,7 +37,7 @@ public final class YangDataStatementSupport extends AbstractStatementSupport<Str
 
     @Override
     protected SubstatementValidator getSubstatementValidator() {
-        return YangDataStatement.SUBSTATEMENT_VALIDATOR;
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
@@ -40,23 +46,23 @@ public final class YangDataStatementSupport extends AbstractStatementSupport<Str
     }
 
     @Override
-    public UnknownStatement<String> createDeclared(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
-        return new YangDataStatement(ctx);
+    public YangDataStatement createDeclared(final StmtContext<String, YangDataStatement, ?> ctx) {
+        return new YangDataStatementImpl(ctx);
     }
 
     @Override
-    public EffectiveStatement<String, UnknownStatement<String>> createEffective(final StmtContext<String,
-            UnknownStatement<String>, EffectiveStatement<String, UnknownStatement<String>>> ctx) {
+    public EffectiveStatement<String, YangDataStatement> createEffective(final StmtContext<String,
+            YangDataStatement, EffectiveStatement<String, YangDataStatement>> ctx) {
         // in case of yang-data node we need to perform substatement validation at the point when we have
         // effective substatement contexts already available - if the node has only a uses statement declared in it,
         // one top-level container node may very well be added to the yang-data as an effective statement
-        YangDataStatement.SUBSTATEMENT_VALIDATOR.validate(ctx);
-        return new YangDataEffectiveStatement(ctx);
+        SUBSTATEMENT_VALIDATOR.validate(ctx);
+        return new YangDataEffectiveStatementImpl(ctx);
     }
 
     @Override
-    public void onFullDefinitionDeclared(final Mutable<String, UnknownStatement<String>,
-            EffectiveStatement<String, UnknownStatement<String>>> ctx) {
+    public void onFullDefinitionDeclared(final Mutable<String, YangDataStatement,
+            EffectiveStatement<String, YangDataStatement>> ctx) {
         // as per https://tools.ietf.org/html/rfc8040#section-8,
         // yang-data is ignored unless it appears as a top-level statement
         if (ctx.getParentContext().getParentContext() != null) {
index 2c7e8a36a492c630c268f627c349a081adcfb607..e6912b0b799ccc5a6ef25d7e894f26413d2cdd39 100644 (file)
@@ -22,8 +22,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+import org.opendaylight.yangtools.yang.parser.stmt.anyxmlschema.AnyxmlSchemaLocationEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyxmlSchemaLocationEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangModeledAnyXmlEffectiveStatementImpl;
 
 public class Bug3874ExtensionTest {
index 354e968c5bf694b246d1d5d658ee469eeb90557c..9592d4cd63a7de79cb96d412ac6ad4a79628837b 100644 (file)
@@ -19,6 +19,7 @@ import java.net.URI;
 import java.util.List;
 import java.util.Set;
 import org.junit.Test;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataSchemaNode;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
@@ -27,7 +28,6 @@ import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.YangDataSchemaNode;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InvalidSubstatementException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.MissingSubstatementException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
index 8cfbcd8fdf419b05100b1be7e942f789c67025bd..17a7067945bdaafb02f24924a802eee1b9d2cf40 100644 (file)
@@ -16,8 +16,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ext.CustomStatementPa
 public final class CustomInferencePipeline {
     public static final CrossSourceStatementReactor CUSTOM_REACTOR = new CustomStatementParserBuilder()
             .addDefaultRFC6020Bundles()
-            .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION,
-                    new ThirdPartyExtensionStatementImpl.ThirdPartyExtensionSupport())
+            .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ThirdPartyExtensionSupport.getInstance())
             .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, sourceLocal(ThirdPartyNamespace.class))
             .build();
 
diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatement.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatement.java
new file mode 100644 (file)
index 0000000..a4d4aaa
--- /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.yang.thirdparty.plugin;
+
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+/**
+ * Public interface exposed to the effective world.
+ *
+ * @author Robert Varga
+ */
+public interface ThirdPartyExtensionEffectiveStatement
+    extends EffectiveStatement<String, ThirdPartyExtensionStatement> {
+
+    String getValueFromNamespace();
+}
index d1b74593a55285e441caec91887ef628ae837a36..03dc65f97ba50d2bc44be7a434630dc91e89e435 100644 (file)
@@ -8,27 +8,27 @@
 
 package org.opendaylight.yangtools.yang.thirdparty.plugin;
 
-import com.google.common.annotations.Beta;
 import java.util.Objects;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnknownEffectiveStatementBase;
 
-@Beta
-public final class ThirdPartyExtensionEffectiveStatementImpl extends UnknownEffectiveStatementBase<String> {
+final class ThirdPartyExtensionEffectiveStatementImpl
+        extends UnknownEffectiveStatementBase<String, ThirdPartyExtensionStatement>
+        implements ThirdPartyExtensionEffectiveStatement {
 
     private final SchemaPath path;
     private final String valueFromNamespace;
 
-    public ThirdPartyExtensionEffectiveStatementImpl(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
+    ThirdPartyExtensionEffectiveStatementImpl(final StmtContext<String, ThirdPartyExtensionStatement, ?> ctx) {
         super(ctx);
         path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
         valueFromNamespace = ctx.getFromNamespace(ThirdPartyNamespace.class, ctx);
     }
 
+    @Override
     public String getValueFromNamespace() {
         return valueFromNamespace;
     }
diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java
new file mode 100644 (file)
index 0000000..75173df
--- /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
+ */
+package org.opendaylight.yangtools.yang.thirdparty.plugin;
+
+import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
+
+/**
+ * Public declared statement definition that this plugin supports. This interface should generally depend only on
+ * concepts defined in yang-model-api.
+ */
+public interface ThirdPartyExtensionStatement extends UnknownStatement<String> {
+
+}
index 407bb370b7d40ac736b1bc9af039a4575f44b0c4..59e0cd7a3d3fcf4a31684c53236b16ec0851e044 100644 (file)
@@ -7,57 +7,20 @@
  */
 package org.opendaylight.yangtools.yang.thirdparty.plugin;
 
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 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.StmtContext.Mutable;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
-public class ThirdPartyExtensionStatementImpl extends AbstractDeclaredStatement<String> implements
-        UnknownStatement<String> {
+/**
+ * Private implementation of {@link ThirdPartyExtensionStatement}. This class can rely on parser internals and should
+ * never be exposed to the world.
+ */
+final class ThirdPartyExtensionStatementImpl extends AbstractDeclaredStatement<String> implements
+        ThirdPartyExtensionStatement {
 
-    ThirdPartyExtensionStatementImpl(final StmtContext<String, UnknownStatement<String>, ?> context) {
+    ThirdPartyExtensionStatementImpl(final StmtContext<String, ThirdPartyExtensionStatement, ?> context) {
         super(context);
     }
 
-    public static class ThirdPartyExtensionSupport extends AbstractStatementSupport<String, UnknownStatement<String>,
-            EffectiveStatement<String, UnknownStatement<String>>> {
-
-        public ThirdPartyExtensionSupport() {
-            super(ThirdPartyExtensionsMapping.THIRD_PARTY_EXTENSION);
-        }
-
-        @Override
-        public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return value;
-        }
-
-        @Override
-        public void onFullDefinitionDeclared(final Mutable<String, UnknownStatement<String>,
-                EffectiveStatement<String, UnknownStatement<String>>> stmt) {
-            super.onFullDefinitionDeclared(stmt);
-            stmt.addToNs(ThirdPartyNamespace.class, stmt, "Third-party namespace test.");
-        }
-
-        @Override
-        public UnknownStatement<String> createDeclared(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
-            return new ThirdPartyExtensionStatementImpl(ctx);
-        }
-
-        @Override
-        public EffectiveStatement<String, UnknownStatement<String>> createEffective(final StmtContext<String,
-                UnknownStatement<String>, EffectiveStatement<String, UnknownStatement<String>>> ctx) {
-            return new ThirdPartyExtensionEffectiveStatementImpl(ctx);
-        }
-
-        @Override
-        protected SubstatementValidator getSubstatementValidator() {
-            return null;
-        }
-    }
-
     @Override
     public String getArgument() {
         return argument();
diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java
new file mode 100644 (file)
index 0000000..d77f07e
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.thirdparty.plugin;
+
+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.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+
+public final class ThirdPartyExtensionSupport extends AbstractStatementSupport<String, ThirdPartyExtensionStatement,
+        EffectiveStatement<String, ThirdPartyExtensionStatement>> {
+
+    private static final ThirdPartyExtensionSupport INSTANCE = new ThirdPartyExtensionSupport();
+
+    private ThirdPartyExtensionSupport() {
+        super(ThirdPartyExtensionsMapping.THIRD_PARTY_EXTENSION);
+    }
+
+    public static ThirdPartyExtensionSupport getInstance() {
+        return INSTANCE;
+    }
+
+    @Override
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return value;
+    }
+
+    @Override
+    public void onFullDefinitionDeclared(final Mutable<String, ThirdPartyExtensionStatement,
+            EffectiveStatement<String, ThirdPartyExtensionStatement>> stmt) {
+        super.onFullDefinitionDeclared(stmt);
+        stmt.addToNs(ThirdPartyNamespace.class, stmt, "Third-party namespace test.");
+    }
+
+    @Override
+    public ThirdPartyExtensionStatement createDeclared(final StmtContext<String, ThirdPartyExtensionStatement, ?> ctx) {
+        return new ThirdPartyExtensionStatementImpl(ctx);
+    }
+
+    @Override
+    public EffectiveStatement<String, ThirdPartyExtensionStatement> createEffective(final StmtContext<String,
+            ThirdPartyExtensionStatement, EffectiveStatement<String, ThirdPartyExtensionStatement>> ctx) {
+        return new ThirdPartyExtensionEffectiveStatementImpl(ctx);
+    }
+
+    @Override
+    protected SubstatementValidator getSubstatementValidator() {
+        return null;
+    }
+}
\ No newline at end of file