<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>
<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>
<!--
--- /dev/null
+<?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>
--- /dev/null
+/*
+ * 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 {
+
+}
* 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.
*
--- /dev/null
+/*
+ * 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> {
+
+}
<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>
--- /dev/null
+/*
+ * 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> {
+
+}
* 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());
}
* 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>>> {
}
--- /dev/null
+/*
+ * 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> {
+
+}
--- /dev/null
+/**
+ * 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();
+ }
+}
--- /dev/null
+/*
+ * 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
--- /dev/null
+/*
+ * 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> {
+
+}
* 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());
}
--- /dev/null
+/*
+ * 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> {
+
+}
--- /dev/null
+/*
+ * 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();
+ }
+}
--- /dev/null
+/*
+ * 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
+++ /dev/null
-/**
- * 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();
- }
-}
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;
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;
@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()
+++ /dev/null
-/*
- * 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();
- }
-}
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);
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);
}
@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))) {
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;
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;
.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))
.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))
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 {
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 =
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;
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 =
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;
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;
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);
}
+++ /dev/null
-/*
- * 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();
- }
-}
--- /dev/null
+/*
+ * 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();
+ }
+}
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;
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() {
@Override
protected SubstatementValidator getSubstatementValidator() {
- return YangDataStatement.SUBSTATEMENT_VALIDATOR;
+ return SUBSTATEMENT_VALIDATOR;
}
@Override
}
@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) {
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 {
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;
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;
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();
--- /dev/null
+/*
+ * 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();
+}
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;
}
--- /dev/null
+/*
+ * 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> {
+
+}
*/
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();
--- /dev/null
+/*
+ * 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