package org.opendaylight.yangtools.yang.model.api.stmt;
import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
@Beta
public interface AnydataEffectiveStatement extends DataTreeEffectiveStatement<AnydataStatement> {
-
+ @Override
+ default StatementDefinition statementDefinition() {
+ return YangStmtMapping.ANYDATA;
+ }
}
import com.google.common.annotations.Beta;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
/**
* The "anydata" statement defines an interior node in the schema tree. It takes one argument, which is an identifier,
*/
@Beta
public interface AnydataStatement extends DataDefinitionStatement, ConfigStatementAwareDeclaredStatement<QName>,
- MandatoryStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
-
+ MandatoryStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
+ @Override
+ default StatementDefinition statementDefinition() {
+ return YangStmtMapping.ANYDATA;
+ }
}
package org.opendaylight.yangtools.yang.model.api.stmt;
import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
@Beta
public interface AnyxmlEffectiveStatement extends DataTreeEffectiveStatement<AnyxmlStatement> {
-
+ @Override
+ default @NonNull StatementDefinition statementDefinition() {
+ return YangStmtMapping.ANYXML;
+ }
}
*/
package org.opendaylight.yangtools.yang.model.api.stmt;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
public interface AnyxmlStatement extends DataDefinitionStatement, ConfigStatementAwareDeclaredStatement<QName>,
- MandatoryStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
-
+ MandatoryStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
+ @Override
+ default @NonNull StatementDefinition statementDefinition() {
+ return YangStmtMapping.ANYXML;
+ }
}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
-import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableSet;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-@Beta
+@Deprecated(forRemoval = true)
public abstract class AbstractEffectiveMustConstraintAwareDataSchemaNode<D extends DeclaredStatement<QName>>
extends AbstractEffectiveDataSchemaNode<D> implements MustConstraintAware {
private static final VarHandle MUST_CONSTRAINTS;
import org.opendaylight.yangtools.yang.model.api.CopyableNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
import org.opendaylight.yangtools.yang.model.api.MandatoryAware;
*
* @param <D> Class representing declared version of this statement.
*/
- @Beta
public interface OperationContainerMixin<D extends DeclaredStatement<QName>>
extends ContainerSchemaNode, DocumentedNodeMixin.WithStatus<QName, D>, DataNodeContainerMixin<QName, D>,
MustConstraintMixin<QName, D>, WhenConditionMixin<QName, D>, AugmentationTargetMixin<QName, D>,
}
}
+ /**
+ * Helper bridge for {@code anydata} and {@code anyxml} opaque data..
+ *
+ * @param <D> Class representing declared version of this statement.
+ */
+ public interface OpaqueDataSchemaNodeMixin<D extends DeclaredStatement<QName>>
+ extends DerivableSchemaNode, DataSchemaNodeMixin<QName, D>, DocumentedNodeMixin.WithStatus<QName, D>,
+ MandatoryMixin<QName, D>, MustConstraintMixin<QName, D>, WhenConditionMixin<QName, D> {
+ @Override
+ default @NonNull QName argument() {
+ return getPath().getLastComponent();
+ }
+
+ @Override
+ default QName getQName() {
+ return argument();
+ }
+ }
+
/**
* Support interface for various mixins. Implementations are required to store 32bits worth of flags, which are
* globally assigned to sub-interfaces -- thus providing storage for many low-cardinality properties.
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects;
-import java.util.Objects;
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveMustConstraintAwareDataSchemaNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-/**
- * YANG 1.1 AnyData effective statement implementation.
- */
-@Beta
-final class AnydataEffectiveStatementImpl extends AbstractEffectiveMustConstraintAwareDataSchemaNode<AnydataStatement>
- implements AnydataEffectiveStatement, AnydataSchemaNode, DerivableSchemaNode {
-
- private final AnydataSchemaNode original;
- private final ContainerSchemaNode schema;
- private final boolean mandatory;
-
- AnydataEffectiveStatementImpl(final StmtContext<QName, AnydataStatement, AnydataEffectiveStatement> ctx) {
- super(ctx);
- this.original = (AnydataSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
- mandatory = findFirstEffectiveSubstatementArgument(MandatoryEffectiveStatement.class).orElse(Boolean.FALSE)
- .booleanValue();
-
- /*
- * :TODO we need to determine a way how to set schema of AnyData
- */
- this.schema = null;
- }
-
- @Override
- public Optional<AnydataSchemaNode> getOriginal() {
- return Optional.ofNullable(original);
- }
-
- @Override
- public Optional<ContainerSchemaNode> getDataSchema() {
- return Optional.ofNullable(schema);
- }
-
- @Override
- public boolean isMandatory() {
- return mandatory;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(getQName(),getPath());
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
-
- final AnydataEffectiveStatementImpl other = (AnydataEffectiveStatementImpl) obj;
- return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this).add("qname", getQName()).add("path", getPath()).toString();
- }
-}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata;
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+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.stmt.AnydataEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
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;
public final class AnydataStatementSupport
- extends AbstractQNameStatementSupport<AnydataStatement, AnydataEffectiveStatement> {
+ extends BaseQNameStatementSupport<AnydataStatement, AnydataEffectiveStatement> {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
YangStmtMapping.ANYDATA)
.addOptional(YangStmtMapping.CONFIG)
}
@Override
- public AnydataStatement createDeclared(final StmtContext<QName, AnydataStatement, ?> ctx) {
- return new AnydataStatementImpl(ctx);
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
}
@Override
- public AnydataEffectiveStatement createEffective(
- final StmtContext<QName, AnydataStatement, AnydataEffectiveStatement> ctx) {
- return new AnydataEffectiveStatementImpl(ctx);
+ protected AnydataStatement createDeclared(final StmtContext<QName, AnydataStatement, ?> ctx,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ return new RegularAnydataStatement(ctx.coerceStatementArgument(), substatements);
}
@Override
- protected SubstatementValidator getSubstatementValidator() {
- return SUBSTATEMENT_VALIDATOR;
+ protected AnydataStatement createEmptyDeclared(final StmtContext<QName, AnydataStatement, ?> ctx) {
+ return new EmptyAnydataStatement(ctx.coerceStatementArgument());
+ }
+
+ @Override
+ protected AnydataEffectiveStatement createEffective(
+ final StmtContext<QName, AnydataStatement, AnydataEffectiveStatement> ctx,
+ final AnydataStatement declared,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new RegularAnydataEffectiveStatement(declared, ctx.getSchemaPath().get(),
+ computeFlags(ctx, substatements), findOriginal(ctx), substatements);
+ }
+
+ @Override
+ protected AnydataEffectiveStatement createEmptyEffective(
+ final StmtContext<QName, AnydataStatement, AnydataEffectiveStatement> ctx,
+ final AnydataStatement declared) {
+ return new EmptyAnydataEffectiveStatement(declared, ctx.getSchemaPath().get(),
+ computeFlags(ctx, ImmutableList.of()), findOriginal(ctx));
+ }
+
+ private static int computeFlags(final StmtContext<?, ?, ?> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new FlagsBuilder()
+ .setHistory(ctx.getCopyHistory())
+ .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
+ .setConfiguration(ctx.isConfiguration())
+ .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE))
+ .toFlags();
+ }
+
+ private static @Nullable AnydataSchemaNode findOriginal(final StmtContext<?, ?, ?> ctx) {
+ return (AnydataSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, 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.rfc7950.stmt.anydata;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.Default;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OpaqueDataSchemaNodeMixin;
+
+class EmptyAnydataEffectiveStatement extends Default<QName, AnydataStatement>
+ implements AnydataEffectiveStatement, AnydataSchemaNode, OpaqueDataSchemaNodeMixin<AnydataStatement> {
+ private final @NonNull SchemaPath path;
+ private final AnydataSchemaNode original;
+ private final int flags;
+
+ EmptyAnydataEffectiveStatement(final AnydataStatement declared, final SchemaPath path, final int flags,
+ final @Nullable AnydataSchemaNode original) {
+ super(declared);
+ this.path = requireNonNull(path);
+ this.flags = flags;
+ this.original = original;
+ }
+
+ @Override
+ public final @NonNull SchemaPath getPath() {
+ return path;
+ }
+
+ @Override
+ public final int flags() {
+ return flags;
+ }
+
+ @Override
+ public final Optional<AnydataSchemaNode> getOriginal() {
+ return Optional.ofNullable(original);
+ }
+
+ @Override
+ public final Optional<ContainerSchemaNode> getDataSchema() {
+ /*
+ * :TODO we need to determine a way how to set schema of AnyData
+ */
+ return Optional.empty();
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(getQName(), getPath());
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof EmptyAnydataEffectiveStatement)) {
+ return false;
+ }
+ final EmptyAnydataEffectiveStatement other = (EmptyAnydataEffectiveStatement) obj;
+ return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
+ }
+
+ @Override
+ public final String toString() {
+ return MoreObjects.toStringHelper(this).add("qname", getQName()).add("path", getPath()).toString();
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, 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.rfc7950.stmt.anydata;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
+
+final class EmptyAnydataStatement extends WithQNameArgument implements AnydataStatement {
+ EmptyAnydataStatement(final QName argument) {
+ super(argument);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
+
+/**
+ * YANG 1.1 AnyData effective statement implementation.
+ */
+final class RegularAnydataEffectiveStatement extends EmptyAnydataEffectiveStatement {
+ private final @NonNull Object substatements;
+
+ RegularAnydataEffectiveStatement(final AnydataStatement declared, final SchemaPath path, final int flags,
+ final @Nullable AnydataSchemaNode original,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(declared, path, flags, original);
+ this.substatements = maskList(substatements);
+ }
+
+ @Override
+ public ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anydata;
-import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
/**
* YANG 1.1 AnyData declared statement implementation.
*/
-@Beta
-final class AnydataStatementImpl extends AbstractDeclaredStatement<QName> implements AnydataStatement {
- AnydataStatementImpl(final StmtContext<QName, AnydataStatement, ?> context) {
- super(context);
+final class RegularAnydataStatement extends WithSubstatements implements AnydataStatement {
+ RegularAnydataStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ super(argument, substatements);
}
}
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
-
-import java.util.Objects;
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveMustConstraintAwareDataSchemaNode;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class AnyxmlEffectiveStatementImpl extends AbstractEffectiveMustConstraintAwareDataSchemaNode<AnyxmlStatement>
- implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, DerivableSchemaNode {
-
- private final AnyxmlSchemaNode original;
- private final boolean mandatory;
-
- AnyxmlEffectiveStatementImpl(final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx) {
- super(ctx);
- this.original = (AnyxmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
- mandatory = findFirstEffectiveSubstatementArgument(MandatoryEffectiveStatement.class).orElse(Boolean.FALSE)
- .booleanValue();
- }
-
- @Override
- public boolean isMandatory() {
- return mandatory;
- }
-
- @Override
- public Optional<AnyxmlSchemaNode> getOriginal() {
- return Optional.ofNullable(original);
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + Objects.hashCode(getQName());
- result = prime * result + Objects.hashCode(getPath());
- return result;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
-
- AnyxmlEffectiveStatementImpl other = (AnyxmlEffectiveStatementImpl) obj;
- return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
- }
-
- @Override
- public String toString() {
- return AnyxmlEffectiveStatementImpl.class.getSimpleName() + "["
- + "qname=" + getQName()
- + ", path=" + getPath()
- + "]";
- }
-}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+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.stmt.AnyxmlEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
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;
public final class AnyxmlStatementSupport
- extends AbstractQNameStatementSupport<AnyxmlStatement, AnyxmlEffectiveStatement> {
+ extends BaseQNameStatementSupport<AnyxmlStatement, AnyxmlEffectiveStatement> {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
.ANYXML)
.addOptional(YangStmtMapping.CONFIG)
}
@Override
- public AnyxmlStatement createDeclared(final StmtContext<QName, AnyxmlStatement, ?> ctx) {
- return new AnyxmlStatementImpl(ctx);
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
}
@Override
- public AnyxmlEffectiveStatement createEffective(
- final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx) {
- return new AnyxmlEffectiveStatementImpl(ctx);
+ protected AnyxmlStatement createDeclared(final StmtContext<QName, AnyxmlStatement, ?> ctx,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ return new RegularAnyxmlStatement(ctx.coerceStatementArgument(), substatements);
}
@Override
- protected SubstatementValidator getSubstatementValidator() {
- return SUBSTATEMENT_VALIDATOR;
+ protected AnyxmlStatement createEmptyDeclared(final StmtContext<QName, AnyxmlStatement, ?> ctx) {
+ return new EmptyAnyxmlStatement(ctx.coerceStatementArgument());
+ }
+
+ @Override
+ protected AnyxmlEffectiveStatement createEffective(
+ final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx,
+ final AnyxmlStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new RegularAnyxmlEffectiveStatement(declared, ctx.getSchemaPath().get(),
+ computeFlags(ctx, substatements), findOriginal(ctx),substatements);
+ }
+
+ @Override
+ protected AnyxmlEffectiveStatement createEmptyEffective(
+ final StmtContext<QName, AnyxmlStatement, AnyxmlEffectiveStatement> ctx, final AnyxmlStatement declared) {
+ return new EmptyAnyxmlEffectiveStatement(declared, ctx.getSchemaPath().get(),
+ computeFlags(ctx, ImmutableList.of()), findOriginal(ctx));
+ }
+
+ private static int computeFlags(final StmtContext<?, ?, ?> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new FlagsBuilder()
+ .setHistory(ctx.getCopyHistory())
+ .setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
+ .setConfiguration(ctx.isConfiguration())
+ .setMandatory(findFirstArgument(substatements, MandatoryEffectiveStatement.class, Boolean.FALSE))
+ .toFlags();
+ }
+
+ private static @Nullable AnyxmlSchemaNode findOriginal(final StmtContext<?, ?, ?> ctx) {
+ return (AnyxmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
}
}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, 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.rfc7950.stmt.anyxml;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.Default;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.OpaqueDataSchemaNodeMixin;
+
+class EmptyAnyxmlEffectiveStatement extends Default<QName, AnyxmlStatement>
+ implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, OpaqueDataSchemaNodeMixin<AnyxmlStatement> {
+ private final @NonNull SchemaPath path;
+ private final AnyxmlSchemaNode original;
+ private final int flags;
+
+ EmptyAnyxmlEffectiveStatement(final AnyxmlStatement declared, final SchemaPath path, final int flags,
+ final @Nullable AnyxmlSchemaNode original) {
+ super(declared);
+ this.path = requireNonNull(path);
+ this.flags = flags;
+ this.original = original;
+ }
+
+ @Override
+ public final @NonNull SchemaPath getPath() {
+ return path;
+ }
+
+ @Override
+ public final int flags() {
+ return flags;
+ }
+
+ @Override
+ public final Optional<AnyxmlSchemaNode> getOriginal() {
+ return Optional.ofNullable(original);
+ }
+
+ @Override
+ public final int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Objects.hashCode(getQName());
+ result = prime * result + Objects.hashCode(getPath());
+ return result;
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof EmptyAnyxmlEffectiveStatement)) {
+ return false;
+ }
+
+ EmptyAnyxmlEffectiveStatement other = (EmptyAnyxmlEffectiveStatement) obj;
+ return Objects.equals(getQName(), other.getQName()) && Objects.equals(getPath(), other.getPath());
+ }
+
+ @Override
+ public final String toString() {
+ return MoreObjects.toStringHelper(this).add("qname", getQName()).add("path", getPath()).toString();
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, 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.rfc7950.stmt.anyxml;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
+
+final class EmptyAnyxmlStatement extends WithQNameArgument implements AnyxmlStatement {
+ EmptyAnyxmlStatement(final QName argument) {
+ super(argument);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
+
+final class RegularAnyxmlEffectiveStatement extends EmptyAnyxmlEffectiveStatement {
+ private final @NonNull Object substatements;
+
+ RegularAnyxmlEffectiveStatement(final AnyxmlStatement declared, final SchemaPath path, final int flags,
+ final @Nullable AnyxmlSchemaNode original,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(declared, path, flags, original);
+ this.substatements = maskList(substatements);
+ }
+
+ @Override
+ public ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
+import com.google.common.collect.ImmutableList;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
-final class AnyxmlStatementImpl extends AbstractDeclaredStatement<QName> implements AnyxmlStatement {
- AnyxmlStatementImpl(final StmtContext<QName, AnyxmlStatement, ?> context) {
- super(context);
+final class RegularAnyxmlStatement extends WithSubstatements implements AnyxmlStatement {
+ RegularAnyxmlStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ super(argument, substatements);
}
}
QName.create(testModule.getQNameModule(), "data"));
assertNotNull("'anyxml data not found'", data);
assertFalse(data.equals(null));
- assertEquals("AnyxmlEffectiveStatementImpl[qname=(urn:opendaylight:simple-nodes?revision=2013-07-30)data, "
- + "path=AbsoluteSchemaPath{path=[(urn:opendaylight:simple-nodes?revision=2013-07-30)data]}]",
+ assertEquals("RegularAnyxmlEffectiveStatement{qname=(urn:opendaylight:simple-nodes?revision=2013-07-30)data, "
+ + "path=AbsoluteSchemaPath{path=[(urn:opendaylight:simple-nodes?revision=2013-07-30)data]}}",
data.toString());
// test SchemaNode args
QName.create(testModule.getQNameModule(), "data2")).orElse(null);
assertNotNull("'anydata data not found'", anydata);
- assertEquals("AnydataEffectiveStatementImpl{qname=(urn:opendaylight:simple-nodes?revision=2013-07-30)data2, "
+ assertEquals("RegularAnydataEffectiveStatement{qname=(urn:opendaylight:simple-nodes?revision=2013-07-30)data2, "
+ "path=AbsoluteSchemaPath{path=[(urn:opendaylight:simple-nodes?revision=2013-07-30)data2]}}",
anydata.toString());