From 6091945d1061ed49976423fb8be771f4c0ec6972 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 3 Nov 2017 18:15:30 +0100 Subject: [PATCH] YANGTOOLS-706: split out rfc8040-model-api 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 --- common/artifacts/pom.xml | 6 ++ yang/pom.xml | 5 ++ yang/rfc8040-model-api/pom.xml | 81 +++++++++++++++++++ .../model/api/YangDataEffectiveStatement.java | 20 +++++ .../model/api/YangDataSchemaNode.java | 14 ++-- .../rfc8040/model/api/YangDataStatement.java | 20 +++++ yang/yang-parser-impl/pom.xml | 6 ++ ...nyxmlSchemaLocationEffectiveStatement.java | 18 +++++ ...lSchemaLocationEffectiveStatementImpl.java | 19 +++-- .../AnyxmlSchemaLocationNamespace.java | 7 +- .../AnyxmlSchemaLocationStatement.java | 17 ++++ .../AnyxmlSchemaLocationStatementImpl.java | 25 ++++++ .../AnyxmlSchemaLocationSupport.java | 64 +++++++++++++++ .../OpenconfigVersionEffectiveStatement.java | 17 ++++ ...enconfigVersionEffectiveStatementImpl.java | 15 ++-- .../OpenconfigVersionStatement.java | 17 ++++ .../OpenconfigVersionStatementImpl.java | 24 ++++++ .../openconfig/OpenconfigVersionSupport.java | 60 ++++++++++++++ .../AnyxmlSchemaLocationStatementImpl.java | 77 ------------------ .../stmt/rfc6020/AnyxmlStatementImpl.java | 8 +- .../OpenconfigVersionStatementImpl.java | 73 ----------------- .../rfc6020/SupportedExtensionsMapping.java | 14 ++-- .../yang/parser/stmt/rfc6020/Utils.java | 4 +- .../stmt/rfc6020/YangInferencePipeline.java | 8 +- .../effective/AbstractEffectiveModule.java | 5 +- .../UnknownEffectiveStatementBase.java | 6 +- .../UnknownEffectiveStatementImpl.java | 3 +- ...va => YangDataEffectiveStatementImpl.java} | 18 ++--- .../stmt/rfc8040/YangDataStatement.java | 39 --------- .../stmt/rfc8040/YangDataStatementImpl.java | 27 +++++++ .../rfc8040/YangDataStatementSupport.java | 30 ++++--- .../yang/stmt/Bug3874ExtensionTest.java | 2 +- .../yang/stmt/YangDataExtensionTest.java | 2 +- .../plugin/CustomInferencePipeline.java | 3 +- ...ThirdPartyExtensionEffectiveStatement.java | 21 +++++ ...dPartyExtensionEffectiveStatementImpl.java | 10 +-- .../plugin/ThirdPartyExtensionStatement.java | 18 +++++ .../ThirdPartyExtensionStatementImpl.java | 51 ++---------- .../plugin/ThirdPartyExtensionSupport.java | 56 +++++++++++++ 39 files changed, 594 insertions(+), 316 deletions(-) create mode 100644 yang/rfc8040-model-api/pom.xml create mode 100644 yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java rename yang/{yang-model-api/src/main/java/org/opendaylight/yangtools/yang => rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040}/model/api/YangDataSchemaNode.java (51%) create mode 100644 yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatement.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/{rfc6020/effective => anyxmlschema}/AnyxmlSchemaLocationEffectiveStatementImpl.java (76%) rename yang/{yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source => yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema}/AnyxmlSchemaLocationNamespace.java (73%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatement.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationSupport.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatement.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/{rfc6020/effective => openconfig}/OpenconfigVersionEffectiveStatementImpl.java (80%) create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatement.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatementImpl.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionSupport.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlSchemaLocationStatementImpl.java delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OpenconfigVersionStatementImpl.java rename yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/{YangDataEffectiveStatement.java => YangDataEffectiveStatementImpl.java} (79%) delete mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatement.java create mode 100644 yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementImpl.java create mode 100644 yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatement.java create mode 100644 yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java create mode 100644 yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java diff --git a/common/artifacts/pom.xml b/common/artifacts/pom.xml index 490445ceb8..3d6b1c7598 100644 --- a/common/artifacts/pom.xml +++ b/common/artifacts/pom.xml @@ -136,6 +136,12 @@ 2.0.0-SNAPSHOT + + org.opendaylight.yangtools + rfc8040-model-api + 2.0.0-SNAPSHOT + + org.opendaylight.yangtools util diff --git a/yang/pom.xml b/yang/pom.xml index 266ea28efd..c565bce479 100644 --- a/yang/pom.xml +++ b/yang/pom.xml @@ -44,6 +44,11 @@ yang-data-jaxen yang-model-validator yang-test-util + + rfc8040-model-api + + + + + + org.opendaylight.odlparent + bundle-parent + 2.0.5 + + + + 4.0.0 + org.opendaylight.yangtools + rfc8040-model-api + 2.0.0-SNAPSHOT + bundle + ${project.artifactId} + RFC8040 model API + + + + + org.opendaylight.yangtools + yangtools-artifacts + 2.0.0-SNAPSHOT + import + pom + + + + + + + ${project.groupId} + concepts + + + ${project.groupId} + yang-common + + + ${project.groupId} + yang-model-api + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + checkstyle.violationSeverity=error + + + + + + + ${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/ + + + + opendaylight-site + ${nexus.site.url}/${project.artifactId}/ + + + 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 index 0000000000..8d99228f15 --- /dev/null +++ b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataEffectiveStatement.java @@ -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 + * RFC 8040. + */ +@Beta +public interface YangDataEffectiveStatement extends EffectiveStatement, YangDataSchemaNode { + +} diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/YangDataSchemaNode.java b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataSchemaNode.java 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 ebf9849416..af7f5bc349 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/YangDataSchemaNode.java +++ b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataSchemaNode.java @@ -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 + * RFC8040. 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 index 0000000000..c056a1ef60 --- /dev/null +++ b/yang/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataStatement.java @@ -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 + * RFC 8040. + */ +@Beta +public interface YangDataStatement extends UnknownStatement { + +} diff --git a/yang/yang-parser-impl/pom.xml b/yang/yang-parser-impl/pom.xml index 49f5f22d3b..72e675c610 100644 --- a/yang/yang-parser-impl/pom.xml +++ b/yang/yang-parser-impl/pom.xml @@ -65,6 +65,12 @@ ${project.groupId} yang-data-util + + + ${project.groupId} + rfc8040-model-api + + org.antlr antlr4-runtime 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 index 0000000000..0d63bbddd0 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatement.java @@ -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 { + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyxmlSchemaLocationEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java similarity index 76% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyxmlSchemaLocationEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java index dc3e1c92ea..bccb30afe5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AnyxmlSchemaLocationEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationEffectiveStatementImpl.java @@ -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 { +@VisibleForTesting +public final class AnyxmlSchemaLocationEffectiveStatementImpl + extends UnknownEffectiveStatementBase + implements AnyxmlSchemaLocationEffectiveStatement { private final SchemaPath path; - public AnyxmlSchemaLocationEffectiveStatementImpl( - final StmtContext, ?> ctx) { + AnyxmlSchemaLocationEffectiveStatementImpl( + final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType()); } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/AnyxmlSchemaLocationNamespace.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationNamespace.java similarity index 73% rename from yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/AnyxmlSchemaLocationNamespace.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationNamespace.java index 24d54e5076..5204c1f3c3 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/AnyxmlSchemaLocationNamespace.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationNamespace.java @@ -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, - EffectiveStatement>>> { + Mutable>> { } 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 index 0000000000..9b198aa797 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatement.java @@ -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 { + +} 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 index 0000000000..6def917d89 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationStatementImpl.java @@ -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 + implements AnyxmlSchemaLocationStatement { + AnyxmlSchemaLocationStatementImpl( + final StmtContext 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 index 0000000000..a5db5d235b --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/anyxmlschema/AnyxmlSchemaLocationSupport.java @@ -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> { + 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> stmt) { + super.onFullDefinitionDeclared(stmt); + stmt.getParentContext().addToNs(AnyxmlSchemaLocationNamespace.class, + SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION, stmt); + } + + @Override + public AnyxmlSchemaLocationStatement createDeclared( + final StmtContext ctx) { + return new AnyxmlSchemaLocationStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> 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 index 0000000000..51ad9d12a4 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatement.java @@ -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 { + +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OpenconfigVersionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java similarity index 80% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OpenconfigVersionEffectiveStatementImpl.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java index 6d8d68fe63..2cf494efde 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/OpenconfigVersionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionEffectiveStatementImpl.java @@ -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 { +final class OpenconfigVersionEffectiveStatementImpl extends + UnknownEffectiveStatementBase + implements OpenconfigVersionEffectiveStatement { private final SchemaPath path; - public OpenconfigVersionEffectiveStatementImpl( - final StmtContext, ?> ctx) { + OpenconfigVersionEffectiveStatementImpl(final StmtContext 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 index 0000000000..0c352dcc98 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatement.java @@ -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 { + +} 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 index 0000000000..507e40181a --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionStatementImpl.java @@ -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 + implements OpenconfigVersionStatement { + OpenconfigVersionStatementImpl(final StmtContext 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 index 0000000000..82469f8069 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/openconfig/OpenconfigVersionSupport.java @@ -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> { + 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> stmt) { + stmt.addToNs(SemanticVersionNamespace.class, stmt.getParentContext(), stmt.getStatementArgument()); + } + + @Override + public OpenconfigVersionStatement createDeclared(final StmtContext ctx) { + return new OpenconfigVersionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective( + final StmtContext> 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 index 4eb19ac277..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlSchemaLocationStatementImpl.java +++ /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 implements - UnknownStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION).build(); - - AnyxmlSchemaLocationStatementImpl( - final StmtContext, ?> context) { - super(context); - } - - public static class AnyxmlSchemaLocationSupport - extends AbstractStatementSupport, - EffectiveStatement>> { - - 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, - EffectiveStatement>> stmt) { - super.onFullDefinitionDeclared(stmt); - stmt.getParentContext().addToNs(AnyxmlSchemaLocationNamespace.class, - SupportedExtensionsMapping.ANYXML_SCHEMA_LOCATION, stmt); - } - - @Override - public UnknownStatement createDeclared( - final StmtContext, ?> ctx) { - return new AnyxmlSchemaLocationStatementImpl(ctx); - } - - @Override - public EffectiveStatement> createEffective( - final StmtContext, - EffectiveStatement>> ctx) { - return new AnyxmlSchemaLocationEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public SchemaNodeIdentifier getArgument() { - return argument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java index 6b54a12dc7..e999a33b22 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java @@ -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 implem @Override public EffectiveStatement createEffective( final StmtContext> ctx) { - final Map, - EffectiveStatement>>> schemaLocations = + final Map>> 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 index 1a4a13e7f3..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OpenconfigVersionStatementImpl.java +++ /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 - implements UnknownStatement { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - SupportedExtensionsMapping.OPENCONFIG_VERSION).build(); - - OpenconfigVersionStatementImpl( - final StmtContext, ?> context) { - super(context); - } - - public static class OpenconfigVersionSupport extends AbstractStatementSupport, - EffectiveStatement>> { - - 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, - EffectiveStatement>> stmt) { - stmt.addToNs(SemanticVersionNamespace.class, stmt.getParentContext(), stmt.getStatementArgument()); - } - - @Override - public UnknownStatement createDeclared(final StmtContext, ?> ctx) { - return new OpenconfigVersionStatementImpl(ctx); - } - - @Override - public EffectiveStatement> createEffective( - final StmtContext, - EffectiveStatement>> ctx) { - return new OpenconfigVersionEffectiveStatementImpl(ctx); - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } - } - - @Override - public SemVer getArgument() { - return argument(); - } -} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SupportedExtensionsMapping.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SupportedExtensionsMapping.java index d1f5f4a2f2..34524d0774 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SupportedExtensionsMapping.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SupportedExtensionsMapping.java @@ -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); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java index 1a8c356ac0..693bfd5c49 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java @@ -109,7 +109,7 @@ public final class Utils { final String argumentValue) { final Set 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 qNames = new ArrayList<>(); for (final String nodeName : SLASH_SPLITTER.split(trimSingleLastSlashFromXPath(path))) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java index c40642e874..a45090486b 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java @@ -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)) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java index f6f77c7408..6d4b993bfa 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java @@ -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> extends AbstractEffectiveDocumentedNode implements Module, MutableStatement { @@ -107,8 +108,8 @@ abstract class AbstractEffectiveModule> 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 = diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementBase.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementBase.java index d41d307c4f..1fde169de4 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementBase.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementBase.java @@ -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 extends AbstractEffectiveDocumentedNode> - implements UnknownSchemaNode { +public abstract class UnknownEffectiveStatementBase> + extends AbstractEffectiveDocumentedNode implements UnknownSchemaNode { private final boolean addedByUses; private final boolean addedByAugmentation; @@ -35,7 +35,7 @@ public abstract class UnknownEffectiveStatementBase extends AbstractEffective private final QName nodeType; private final String nodeParameter; - protected UnknownEffectiveStatementBase(final StmtContext, ?> ctx) { + protected UnknownEffectiveStatementBase(final StmtContext ctx) { super(ctx); final StmtContext> extensionInit = diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java index bfcc758f65..2c4a154767 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java @@ -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 { +public final class UnknownEffectiveStatementImpl + extends UnknownEffectiveStatementBase> { private final QName maybeQNameArgument; private final SchemaPath path; diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java similarity index 79% rename from yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatement.java rename to yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java index e3e998a7ca..9c0db5cd39 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatement.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataEffectiveStatementImpl.java @@ -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 - * RFC 8040. - */ @Beta -public final class YangDataEffectiveStatement extends UnknownEffectiveStatementBase - implements YangDataSchemaNode { +final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase + implements YangDataEffectiveStatement { private final SchemaPath path; private final QName maybeQNameArgument; private final ContainerSchemaNode containerSchemaNode; - YangDataEffectiveStatement(final StmtContext, ?> ctx) { + YangDataEffectiveStatementImpl(final StmtContext 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 index 2e33a373bb..0000000000 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatement.java +++ /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 - * RFC 8040. - */ -@Beta -public final class YangDataStatement extends AbstractDeclaredStatement implements UnknownStatement { - static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - SupportedExtensionsMapping.YANG_DATA) - .addMandatory(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.USES) - .build(); - - YangDataStatement(final StmtContext, ?> 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 index 0000000000..3d2b1b065f --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementImpl.java @@ -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 + * RFC 8040. + */ +final class YangDataStatementImpl extends AbstractDeclaredStatement implements YangDataStatement { + YangDataStatementImpl(final StmtContext 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/YangDataStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java index aff545e7f7..82f2051c36 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc8040/YangDataStatementSupport.java @@ -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, - EffectiveStatement>> { +public final class YangDataStatementSupport extends AbstractStatementSupport> { + 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 createDeclared(final StmtContext, ?> ctx) { - return new YangDataStatement(ctx); + public YangDataStatement createDeclared(final StmtContext ctx) { + return new YangDataStatementImpl(ctx); } @Override - public EffectiveStatement> createEffective(final StmtContext, EffectiveStatement>> ctx) { + public EffectiveStatement createEffective(final StmtContext> 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, - EffectiveStatement>> ctx) { + public void onFullDefinitionDeclared(final Mutable> 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) { diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3874ExtensionTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3874ExtensionTest.java index 2c7e8a36a4..e6912b0b79 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3874ExtensionTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3874ExtensionTest.java @@ -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 { diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java index 354e968c5b..9592d4cd63 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangDataExtensionTest.java @@ -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; diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java index 8cfbcd8fdf..17a7067945 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java @@ -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 index 0000000000..a4d4aaa235 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatement.java @@ -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 getValueFromNamespace(); +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java index d1b74593a5..03dc65f97b 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java @@ -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 { +final class ThirdPartyExtensionEffectiveStatementImpl + extends UnknownEffectiveStatementBase + implements ThirdPartyExtensionEffectiveStatement { private final SchemaPath path; private final String valueFromNamespace; - public ThirdPartyExtensionEffectiveStatementImpl(final StmtContext, ?> ctx) { + ThirdPartyExtensionEffectiveStatementImpl(final StmtContext 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 index 0000000000..75173df3fc --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatement.java @@ -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 { + +} diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java index 407bb370b7..59e0cd7a3d 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionStatementImpl.java @@ -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 implements - UnknownStatement { +/** + * 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 implements + ThirdPartyExtensionStatement { - ThirdPartyExtensionStatementImpl(final StmtContext, ?> context) { + ThirdPartyExtensionStatementImpl(final StmtContext context) { super(context); } - public static class ThirdPartyExtensionSupport extends AbstractStatementSupport, - EffectiveStatement>> { - - 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, - EffectiveStatement>> stmt) { - super.onFullDefinitionDeclared(stmt); - stmt.addToNs(ThirdPartyNamespace.class, stmt, "Third-party namespace test."); - } - - @Override - public UnknownStatement createDeclared(final StmtContext, ?> ctx) { - return new ThirdPartyExtensionStatementImpl(ctx); - } - - @Override - public EffectiveStatement> createEffective(final StmtContext, EffectiveStatement>> 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 index 0000000000..d77f07e695 --- /dev/null +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java @@ -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> { + + 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> stmt) { + super.onFullDefinitionDeclared(stmt); + stmt.addToNs(ThirdPartyNamespace.class, stmt, "Third-party namespace test."); + } + + @Override + public ThirdPartyExtensionStatement createDeclared(final StmtContext ctx) { + return new ThirdPartyExtensionStatementImpl(ctx); + } + + @Override + public EffectiveStatement createEffective(final StmtContext> ctx) { + return new ThirdPartyExtensionEffectiveStatementImpl(ctx); + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return null; + } +} \ No newline at end of file -- 2.36.6