final Date maybeDate = Utils.getLatestRevision(stmt.declaredSubstatements());
final Optional<Date> revisionDate = maybeDate != null ? Optional.of(maybeDate) : DEFAULT_REVISION;
- ModuleIdentifier submoduleIdentifier = ModuleIdentifierImpl.create(stmt.getStatementArgument(),
+ final ModuleIdentifier submoduleIdentifier = ModuleIdentifierImpl.create(stmt.getStatementArgument(),
Optional.empty(), revisionDate);
stmt.addContext(SubmoduleNamespace.class, submoduleIdentifier, stmt);
- String belongsToModuleName = firstAttributeOf(
+ final String belongsToModuleName = firstAttributeOf(
stmt.declaredSubstatements(), BelongsToStatement.class);
- StmtContext<?, ?, ?> prefixSubStmtCtx = findFirstDeclaredSubstatement(
+ final StmtContext<?, ?, ?> prefixSubStmtCtx = findFirstDeclaredSubstatement(
stmt, 0, BelongsToStatement.class, PrefixStatement.class);
SourceException.throwIfNull(prefixSubStmtCtx, stmt.getStatementSourceReference(),
"Prefix of belongsTo statement is missing in submodule [%s]", stmt.getStatementArgument());
- String prefix = (String) prefixSubStmtCtx.getStatementArgument();
+ final String prefix = (String) prefixSubStmtCtx.getStatementArgument();
stmt.addToNs(BelongsToPrefixToModuleName.class, prefix, belongsToModuleName);
}
import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.AnydataStatementImpl;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.AugmentStatementRfc7950Support;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.CaseStatementRfc7950Support;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ChoiceStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ContainerStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.GroupingStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ImportStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.IncludeStatementRfc7950Support;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.InputStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ListStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.ModuleStatementRfc7950Support;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.NotificationStatementRfc7950Support;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.OutputStatementRfc7950Support;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.SubmoduleStatementRfc7950Support;
public final class YangInferencePipeline {
public static final Set<YangVersion> SUPPORTED_VERSIONS = Sets.immutableEnumSet(VERSION_1, VERSION_1_1);
.derivedFrom(INIT_BUNDLE)
.addVersionSpecificSupport(VERSION_1, new ModuleStatementSupport())
.addVersionSpecificSupport(VERSION_1_1, new ModuleStatementRfc7950Support())
- .addSupport(new SubmoduleStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1, new SubmoduleStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1_1, new SubmoduleStatementRfc7950Support())
.addSupport(new NamespaceStatementImpl.Definition())
.addVersionSpecificSupport(VERSION_1, new ImportStatementDefinition())
.addVersionSpecificSupport(VERSION_1_1, new ImportStatementRfc7950Support())
.addVersionSpecificSupport(VERSION_1_1, new ListStatementRfc7950Support())
.addSupport(new UniqueStatementImpl.Definition())
.addSupport(new RpcStatementImpl.Definition())
- .addSupport(new InputStatementImpl.Definition())
- .addSupport(new OutputStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1, new InputStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1_1, new InputStatementRfc7950Support())
+ .addVersionSpecificSupport(VERSION_1, new OutputStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1_1, new OutputStatementRfc7950Support())
.addVersionSpecificSupport(VERSION_1, new NotificationStatementImpl.Definition())
.addVersionSpecificSupport(VERSION_1_1, new NotificationStatementRfc7950Support())
.addSupport(new FractionDigitsStatementImpl.Definition())
.addSupport(new ConfigStatementImpl.Definition())
.addSupport(new DeviationStatementImpl.Definition())
.addSupport(new DeviateStatementImpl.Definition())
- .addSupport(new ChoiceStatementImpl.Definition())
- .addSupport(new CaseStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1, new ChoiceStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1_1, new ChoiceStatementRfc7950Support())
+ .addVersionSpecificSupport(VERSION_1, new CaseStatementImpl.Definition())
+ .addVersionSpecificSupport(VERSION_1_1, new CaseStatementRfc7950Support())
.addSupport(new MustStatementImpl.Definition())
.addSupport(new MandatoryStatementImpl.Definition())
.addSupport(new AnyxmlStatementImpl.Definition())
final Builder<StatementDefinition, Set<StatementDefinition>> b = ImmutableMap.builder();
b.put(YangStmtMapping.DEFAULT, ImmutableSet.of(YangStmtMapping.LEAF, YangStmtMapping.CHOICE));
b.put(YangStmtMapping.MANDATORY, ImmutableSet.of(
- YangStmtMapping.LEAF, YangStmtMapping.CHOICE, YangStmtMapping.ANYXML));
+ YangStmtMapping.LEAF, YangStmtMapping.CHOICE, YangStmtMapping.ANYXML, YangStmtMapping.ANYDATA));
b.put(YangStmtMapping.PRESENCE, ImmutableSet.of(YangStmtMapping.CONTAINER));
b.put(YangStmtMapping.MUST, ImmutableSet.of(
YangStmtMapping.CONTAINER, YangStmtMapping.LIST, YangStmtMapping.LEAF,
- YangStmtMapping.LEAF_LIST, YangStmtMapping.ANYXML));
+ YangStmtMapping.LEAF_LIST, YangStmtMapping.ANYXML, YangStmtMapping.ANYDATA));
b.put(YangStmtMapping.MIN_ELEMENTS, ImmutableSet.of(
YangStmtMapping.LIST, YangStmtMapping.LEAF_LIST));
b.put(YangStmtMapping.MAX_ELEMENTS, ImmutableSet.of(
public static final Set<StatementDefinition> SUPPORTED_CASE_SHORTHANDS = ImmutableSet.of(
YangStmtMapping.CONTAINER, YangStmtMapping.LIST, YangStmtMapping.LEAF, YangStmtMapping.LEAF_LIST,
- YangStmtMapping.ANYXML);
+ YangStmtMapping.ANYXML, YangStmtMapping.ANYDATA);
public static final Set<StatementDefinition> SUPPORTED_DATA_NODES = ImmutableSet.of(
YangStmtMapping.CONTAINER, YangStmtMapping.LIST, YangStmtMapping.LEAF, YangStmtMapping.LEAF_LIST,
- YangStmtMapping.ANYXML);
+ YangStmtMapping.ANYXML, YangStmtMapping.ANYDATA);
}
import java.util.SortedSet;
import java.util.TreeSet;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangValidationBundles;
public final class ChoiceEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<ChoiceStatement> implements
ChoiceSchemaNode, DerivableSchemaNode {
super(ctx);
this.original = ctx.getOriginalCtx() == null ? null : (ChoiceSchemaNode) ctx.getOriginalCtx().buildEffective();
- DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
+ final DefaultEffectiveStatementImpl defaultStmt = firstEffective(DefaultEffectiveStatementImpl.class);
this.defaultCase = (defaultStmt == null) ? null : defaultStmt.argument();
// initSubstatementCollectionsAndFields
- Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
- Set<AugmentationSchema> augmentationsInit = new LinkedHashSet<>();
- SortedSet<ChoiceCaseNode> casesInit = new TreeSet<>(SCHEMA_NODE_COMP);
+ final Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
+ final Set<AugmentationSchema> augmentationsInit = new LinkedHashSet<>();
+ final SortedSet<ChoiceCaseNode> casesInit = new TreeSet<>(SCHEMA_NODE_COMP);
- for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
+ for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
if (effectiveStatement instanceof AugmentationSchema) {
- AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
+ final AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement;
augmentationsInit.add(augmentationSchema);
}
if (effectiveStatement instanceof ChoiceCaseNode) {
- ChoiceCaseNode choiceCaseNode = (ChoiceCaseNode) effectiveStatement;
+ final ChoiceCaseNode choiceCaseNode = (ChoiceCaseNode) effectiveStatement;
casesInit.add(choiceCaseNode);
}
- if (effectiveStatement instanceof AnyXmlSchemaNode || effectiveStatement instanceof ContainerSchemaNode
- || effectiveStatement instanceof ListSchemaNode || effectiveStatement instanceof LeafListSchemaNode
- || effectiveStatement instanceof LeafSchemaNode) {
-
- DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
- ChoiceCaseNode shorthandCase = new CaseShorthandImpl(dataSchemaNode);
+ if (YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(effectiveStatement.statementDefinition())) {
+ final DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
+ final ChoiceCaseNode shorthandCase = new CaseShorthandImpl(dataSchemaNode);
casesInit.add(shorthandCase);
-
if (dataSchemaNode.isAugmenting() && !this.augmenting) {
resetAugmenting(dataSchemaNode);
}
private static void resetAugmenting(final DataSchemaNode dataSchemaNode) {
if (dataSchemaNode instanceof LeafEffectiveStatementImpl) {
- LeafEffectiveStatementImpl leaf = (LeafEffectiveStatementImpl) dataSchemaNode;
+ final LeafEffectiveStatementImpl leaf = (LeafEffectiveStatementImpl) dataSchemaNode;
leaf.augmenting = false;
} else if (dataSchemaNode instanceof ContainerEffectiveStatementImpl) {
- ContainerEffectiveStatementImpl container = (ContainerEffectiveStatementImpl) dataSchemaNode;
+ final ContainerEffectiveStatementImpl container = (ContainerEffectiveStatementImpl) dataSchemaNode;
container.augmenting = false;
} else if (dataSchemaNode instanceof LeafListEffectiveStatementImpl) {
- LeafListEffectiveStatementImpl leafList = (LeafListEffectiveStatementImpl) dataSchemaNode;
+ final LeafListEffectiveStatementImpl leafList = (LeafListEffectiveStatementImpl) dataSchemaNode;
leafList.augmenting = false;
} else if (dataSchemaNode instanceof ListEffectiveStatementImpl) {
- ListEffectiveStatementImpl list = (ListEffectiveStatementImpl) dataSchemaNode;
+ final ListEffectiveStatementImpl list = (ListEffectiveStatementImpl) dataSchemaNode;
list.augmenting = false;
} else if (dataSchemaNode instanceof AnyXmlEffectiveStatementImpl) {
- AnyXmlEffectiveStatementImpl anyXml = (AnyXmlEffectiveStatementImpl) dataSchemaNode;
+ final AnyXmlEffectiveStatementImpl anyXml = (AnyXmlEffectiveStatementImpl) dataSchemaNode;
anyXml.augmenting = false;
}
}
if (getClass() != obj.getClass()) {
return false;
}
- ChoiceEffectiveStatementImpl other = (ChoiceEffectiveStatementImpl) obj;
+ final ChoiceEffectiveStatementImpl other = (ChoiceEffectiveStatementImpl) obj;
return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
}
-/**
+/*
* Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective.AnyDataEffectiveStatementImpl;
+/**
+ * YANG 1.1 AnyData declared statement implementation.
+ */
@Beta
-public class AnydataStatementImpl extends AbstractDeclaredStatement<QName> implements AnydataStatement {
+public final class AnydataStatementImpl extends AbstractDeclaredStatement<QName> implements AnydataStatement {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.ANYDATA)
.addOptional(YangStmtMapping.CONFIG)
public final class AugmentStatementRfc7950Support extends AugmentStatementImpl.Definition {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator
.builder(YangStmtMapping.AUGMENT)
+ .addAny(YangStmtMapping.ANYDATA)
.addAny(YangStmtMapping.ANYXML)
.addAny(YangStmtMapping.CASE)
.addAny(YangStmtMapping.CHOICE)
--- /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.rfc7950;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.CaseStatementImpl;
+
+/**
+ * Class providing necessary support for processing YANG 1.1 Case statement.
+ */
+@Beta
+public final class CaseStatementRfc7950Support extends CaseStatementImpl.Definition {
+ private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+ .CASE)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CHOICE)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addOptional(YangStmtMapping.DESCRIPTION)
+ .addAny(YangStmtMapping.IF_FEATURE)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addOptional(YangStmtMapping.REFERENCE)
+ .addOptional(YangStmtMapping.STATUS)
+ .addAny(YangStmtMapping.USES)
+ .addOptional(YangStmtMapping.WHEN)
+ .build();
+
+ @Override
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
+ }
+}
--- /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.rfc7950;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChoiceStatementImpl;
+
+/**
+ * Class providing necessary support for processing YANG 1.1 Choice statement.
+ */
+@Beta
+public final class ChoiceStatementRfc7950Support extends ChoiceStatementImpl.Definition {
+ private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+ .CHOICE)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CASE)
+ .addOptional(YangStmtMapping.CONFIG)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addOptional(YangStmtMapping.DEFAULT)
+ .addOptional(YangStmtMapping.DESCRIPTION)
+ .addAny(YangStmtMapping.IF_FEATURE)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addOptional(YangStmtMapping.MANDATORY)
+ .addOptional(YangStmtMapping.REFERENCE)
+ .addOptional(YangStmtMapping.STATUS)
+ .addOptional(YangStmtMapping.WHEN)
+ .build();
+
+ @Override
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
+ }
+}
public final class ContainerStatementRfc7950Support extends ContainerStatementImpl.Definition {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.CONTAINER)
+ .addAny(YangStmtMapping.ANYDATA)
.addAny(YangStmtMapping.ANYXML)
.addAny(YangStmtMapping.CHOICE)
.addOptional(YangStmtMapping.CONFIG)
public final class GroupingStatementRfc7950Support extends GroupingStatementImpl.Definition {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.GROUPING)
+ .addAny(YangStmtMapping.ANYDATA)
.addAny(YangStmtMapping.ANYXML)
.addAny(YangStmtMapping.CHOICE)
.addAny(YangStmtMapping.CONTAINER)
--- /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.rfc7950;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.InputStatementImpl;
+
+/**
+ * Class providing necessary support for processing YANG 1.1 Input statement.
+ */
+@Beta
+public final class InputStatementRfc7950Support extends InputStatementImpl.Definition {
+ private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+ .INPUT)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CHOICE)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addAny(YangStmtMapping.GROUPING)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addAny(YangStmtMapping.TYPEDEF)
+ .addAny(YangStmtMapping.USES)
+ .build();
+
+ @Override
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
+ }
+}
public final class ListStatementRfc7950Support extends ListStatementImpl.Definition {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.LIST)
+ .addAny(YangStmtMapping.ANYDATA)
.addAny(YangStmtMapping.ANYXML)
.addAny(YangStmtMapping.CHOICE)
.addOptional(YangStmtMapping.CONFIG)
public class ModuleStatementRfc7950Support extends ModuleStatementSupport {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.MODULE)
- .addAny(YangStmtMapping.ANYXML)
.addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
.addAny(YangStmtMapping.AUGMENT)
.addAny(YangStmtMapping.CHOICE)
.addOptional(YangStmtMapping.CONTACT)
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
+import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
*/
@Beta
public final class NotificationStatementRfc7950Support extends NotificationStatementImpl.Definition {
+ private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+ .NOTIFICATION)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CHOICE)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addOptional(YangStmtMapping.DESCRIPTION)
+ .addAny(YangStmtMapping.GROUPING)
+ .addAny(YangStmtMapping.IF_FEATURE)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addOptional(YangStmtMapping.REFERENCE)
+ .addOptional(YangStmtMapping.STATUS)
+ .addAny(YangStmtMapping.TYPEDEF)
+ .addAny(YangStmtMapping.USES)
+ .build();
+
// :FIXME add action statement to the set of illegal parents, once bug-6896
// will be resolved.
private static final Set<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(YangStmtMapping.NOTIFICATION,
"Notification %s is defined within a case statement", ctx.getStatementArgument());
return new NotificationEffectiveStatementImpl(ctx);
}
+
+ @Override
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
+ }
}
--- /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.rfc7950;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.OutputStatementImpl;
+
+/**
+ * Class providing necessary support for processing YANG 1.1 Output statement.
+ */
+@Beta
+public final class OutputStatementRfc7950Support extends OutputStatementImpl.Definition {
+ private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+ .OUTPUT)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.CHOICE)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addAny(YangStmtMapping.GROUPING)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addAny(YangStmtMapping.TYPEDEF)
+ .addAny(YangStmtMapping.USES)
+ .build();
+
+ @Override
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
+ }
+}
+
--- /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.rfc7950;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SubmoduleStatementImpl;
+
+/**
+ * Class providing necessary support for processing YANG 1.1 Submodule statement.
+ */
+@Beta
+public final class SubmoduleStatementRfc7950Support extends SubmoduleStatementImpl.Definition {
+ private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+ .SUBMODULE)
+ .addAny(YangStmtMapping.ANYDATA)
+ .addAny(YangStmtMapping.ANYXML)
+ .addAny(YangStmtMapping.AUGMENT)
+ .addMandatory(YangStmtMapping.BELONGS_TO)
+ .addAny(YangStmtMapping.CHOICE)
+ .addOptional(YangStmtMapping.CONTACT)
+ .addAny(YangStmtMapping.CONTAINER)
+ .addOptional(YangStmtMapping.DESCRIPTION)
+ .addAny(YangStmtMapping.DEVIATION)
+ .addAny(YangStmtMapping.EXTENSION)
+ .addAny(YangStmtMapping.FEATURE)
+ .addAny(YangStmtMapping.GROUPING)
+ .addAny(YangStmtMapping.IDENTITY)
+ .addAny(YangStmtMapping.IMPORT)
+ .addAny(YangStmtMapping.INCLUDE)
+ .addAny(YangStmtMapping.LEAF)
+ .addAny(YangStmtMapping.LEAF_LIST)
+ .addAny(YangStmtMapping.LIST)
+ .addAny(YangStmtMapping.NOTIFICATION)
+ .addOptional(YangStmtMapping.ORGANIZATION)
+ .addOptional(YangStmtMapping.REFERENCE)
+ .addAny(YangStmtMapping.REVISION)
+ .addAny(YangStmtMapping.RPC)
+ .addAny(YangStmtMapping.TYPEDEF)
+ .addAny(YangStmtMapping.USES)
+ .addOptional(YangStmtMapping.YANG_VERSION)
+ .build();
+
+ @Override
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
+ }
+}
*/
package org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective;
+import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.base.Optional;
import java.util.Objects;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AbstractEffectiveDataSchemaNode;
-public class AnyDataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnydataStatement> implements
+/**
+ * YANG 1.1 AnyData effective statement implementation.
+ */
+@Beta
+public final class AnyDataEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnydataStatement> implements
AnyDataSchemaNode, DerivableSchemaNode {
private final AnyDataSchemaNode original;
+ private final ContainerSchemaNode schema;
public AnyDataEffectiveStatementImpl(
final StmtContext<QName, AnydataStatement, EffectiveStatement<QName, AnydataStatement>> ctx) {
super(ctx);
this.original = ctx.getOriginalCtx() == null ? null : (AnyDataSchemaNode) ctx.getOriginalCtx().buildEffective();
+ /*
+ * :TODO we need to determine a way how to set schema of AnyData
+ */
+ this.schema = null;
}
@Override
@Override
public ContainerSchemaNode getSchemaOfAnyData() {
- // TODO Auto-generated method stub
- return null;
+ return schema;
}
}
--- /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.rfc7950;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import java.io.FileNotFoundException;
+import java.net.URISyntaxException;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.Status;
+import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
+
+public class Bug6883Test {
+ private static final String FOO_NS = "foo";
+ private static final String FOO_REV = "1970-01-01";
+
+ @Test
+ public void test() throws ReactorException, SourceException, FileNotFoundException, URISyntaxException {
+ final SchemaContext schemaContext = StmtTestUtils.parseYangSources("/rfc7950/bug6883");
+ assertNotNull(schemaContext);
+
+ final AnyDataSchemaNode topAnyData = assertAnyData(schemaContext, ImmutableList.of("top"));
+ assertEquals(Status.DEPRECATED, topAnyData.getStatus());
+ assertEquals("top anydata", topAnyData.getDescription());
+
+ assertAnyData(schemaContext, ImmutableList.of("root", "root-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("root", "aug-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("root", "grp-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("my-list", "list-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("sub-data"));
+
+ assertAnyData(schemaContext, ImmutableList.of("my-rpc", "input", "input-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("my-rpc", "output", "output-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("my-notification", "notification-anydata"));
+
+ assertAnyData(schemaContext, ImmutableList.of("my-choice", "one", "case-anydata"));
+ assertAnyData(schemaContext, ImmutableList.of("my-choice", "case-shorthand-anydata", "case-shorthand-anydata"));
+ }
+
+ private static AnyDataSchemaNode assertAnyData(final SchemaContext context, final Iterable<String> localNamesPath) {
+ final Iterable<QName> qNames = Iterables.transform(localNamesPath,
+ localName -> QName.create(FOO_NS, FOO_REV, localName));
+ final SchemaNode findDataSchemaNode = SchemaContextUtil.findDataSchemaNode(context,
+ SchemaPath.create(qNames, true));
+ assertTrue(findDataSchemaNode instanceof AnyDataSchemaNode);
+ return (AnyDataSchemaNode) findDataSchemaNode;
+ }
+}
\ No newline at end of file
--- /dev/null
+module foo {
+ namespace "foo";
+ prefix foo;
+ yang-version 1.1;
+
+ include sub-foo;
+
+ anydata top {
+ description "top anydata";
+ status deprecated;
+ mandatory true;
+ must "1!=0";
+ }
+
+ container root {
+ anydata root-anydata;
+ }
+
+ list my-list {
+ anydata list-anydata;
+ }
+
+ rpc my-rpc {
+ input {
+ anydata input-anydata;
+ }
+ output {
+ anydata output-anydata;
+ }
+ }
+
+ notification my-notification {
+ anydata notification-anydata;
+ }
+
+ choice my-choice {
+ case one {
+ anydata case-anydata;
+ }
+ anydata case-shorthand-anydata;
+ }
+
+ grouping grp {
+ anydata grp-anydata;
+ }
+
+ augment "/root" {
+ uses grp;
+ anydata aug-anydata;
+ }
+}
--- /dev/null
+submodule sub-foo {
+ yang-version 1.1;
+
+ belongs-to foo {
+ prefix foo;
+ }
+
+ anydata sub-data {
+ description "submodule anydata";
+ status current;
+ mandatory true;
+ must "1!=0";
+ }
+}