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;
@Beta
public interface CaseEffectiveStatement extends SchemaTreeEffectiveStatement<CaseStatement>,
- SchemaTreeAwareEffectiveStatement<QName, CaseStatement> {
-
+ SchemaTreeAwareEffectiveStatement<QName, CaseStatement> {
+ @Override
+ default StatementDefinition statementDefinition() {
+ return YangStmtMapping.CASE;
+ }
}
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 CaseStatement extends DocumentedDeclaredStatement.WithStatus<QName>,
DataDefinitionAwareDeclaredStatement<QName>, WhenStatementAwareDeclaredStatement<QName> {
+ @Override
+ default StatementDefinition statementDefinition() {
+ return YangStmtMapping.CASE;
+ }
+
default @NonNull QName getName() {
// FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
return verifyNotNull(argument());
*/
public abstract static class DefaultWithSchemaTree<A, D extends DeclaredStatement<A>,
E extends SchemaTreeAwareEffectiveStatement<A, D>> extends WithSchemaTree<A, D, E> {
+ public abstract static class WithSubstatements<A, D extends DeclaredStatement<A>,
+ E extends SchemaTreeAwareEffectiveStatement<A, D>> extends DefaultWithSchemaTree<A, D, E> {
+ private final @NonNull Object substatements;
+
+ protected WithSubstatements(final D declared, final StmtContext<?, ?, ?> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(declared, ctx, substatements);
+ this.substatements = maskList(substatements);
+ }
+
+ @Override
+ public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+ }
+
private final @NonNull ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTree;
private final @NonNull D declared;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+@Deprecated(forRemoval = true)
public abstract class AbstractEffectiveSimpleDataNodeContainer<D extends DeclaredStatement<QName>> extends
AbstractEffectiveDocumentedDataNodeContainer<QName, D> implements AugmentationTarget, DataSchemaNode {
*/
public abstract static class DefaultWithSchemaTree<A, D extends DeclaredStatement<A>,
E extends SchemaTreeAwareEffectiveStatement<A, D>> extends WithSchemaTree<A, D, E> {
+ public abstract static class WithSubstatements<A, D extends DeclaredStatement<A>,
+ E extends SchemaTreeAwareEffectiveStatement<A, D>> extends DefaultWithSchemaTree<A, D, E> {
+ private final @NonNull Object substatements;
+
+ protected WithSubstatements(final StmtContext<?, ?, ?> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ super(ctx, substatements);
+ this.substatements = maskList(substatements);
+ }
+
+ @Override
+ public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
+ return unmaskList(substatements);
+ }
+ }
+
private final @NonNull ImmutableMap<QName, SchemaTreeEffectiveStatement<?>> schemaTree;
- protected DefaultWithSchemaTree(final D declared, final StmtContext<?, ?, ?> ctx,
+ protected DefaultWithSchemaTree(final StmtContext<?, ?, ?> ctx,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
this.schemaTree = ImmutableMap.copyOf(AbstractSchemaEffectiveDocumentedNode.createSchemaTreeNamespace(
ctx.getStatementSourceReference(), substatements));
--- /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;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+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.model.api.meta.StatementSource;
+import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+
+/**
+ * A massively-misnamed superclass for statements which are both schema tree participants and can be created as implicit
+ * nodes. This covers {@code case}, {@code input} and {@code output} statements.
+ *
+ * @param <D> Declared Statement representation
+ * @param <E> Effective Statement representation
+ */
+@Beta
+public abstract class BaseImplicitStatementSupport<D extends DeclaredStatement<QName>,
+ E extends EffectiveStatement<QName, D>> extends BaseQNameStatementSupport<D, E> {
+ protected BaseImplicitStatementSupport(final StatementDefinition publicDefinition) {
+ super(publicDefinition);
+ }
+
+ @Override
+ public final void onStatementAdded(final Mutable<QName, D, E> stmt) {
+ stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
+ }
+
+ @Override
+ protected final E createEffective(
+ final StmtContext<QName, D, E> ctx,
+ final D declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ final StatementSource source = ctx.getStatementSource();
+ switch (ctx.getStatementSource()) {
+ case CONTEXT:
+ return createUndeclaredEffective(ctx, substatements);
+ case DECLARATION:
+ return createDeclaredEffective(ctx, substatements, declared);
+ default:
+ throw new IllegalStateException("Unhandled statement source " + source);
+ }
+ }
+
+ @Override
+ protected final E createEmptyEffective(final StmtContext<QName, D, E> ctx, final D declared) {
+ return createEffective(ctx, declared, ImmutableList.of());
+ }
+
+ protected abstract @NonNull E createDeclaredEffective(@NonNull StmtContext<QName, D, E> ctx,
+ @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements, @NonNull D declared);
+
+ protected abstract @NonNull E createUndeclaredEffective(@NonNull StmtContext<QName, D, E> ctx,
+ @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements);
+
+}
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.model.api.meta.StatementSource;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
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;
/**
* Specialization of {@link BaseQNameStatementSupport} for {@code input} and {@code output} statements.
*/
@Beta
public abstract class BaseOperationContainerStatementSupport<D extends DeclaredStatement<QName>,
- E extends EffectiveStatement<QName, D>> extends BaseQNameStatementSupport<D, E> {
+ E extends EffectiveStatement<QName, D>> extends BaseImplicitStatementSupport<D, E> {
protected BaseOperationContainerStatementSupport(final StatementDefinition publicDefinition) {
super(publicDefinition);
}
@Override
- public final void onStatementAdded(final Mutable<QName, D, E> stmt) {
- stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
+ protected final @NonNull E createDeclaredEffective(final StmtContext<QName, D, E> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final D declared) {
+ return createDeclaredEffective(computeFlags(ctx, substatements), ctx, substatements, declared);
}
- @Override
- protected final E createEffective(
- final StmtContext<QName, D, E> ctx,
- final D declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- final StatementSource source = ctx.getStatementSource();
- final int flags = computeFlags(ctx, substatements);
- switch (source) {
- case CONTEXT:
- return createUndeclaredEffective(flags, ctx, substatements);
- case DECLARATION:
- return createDeclaredEffective(flags, ctx, substatements, declared);
- default:
- throw new IllegalStateException("Unhandled statement source " + source);
- }
- }
+ protected abstract @NonNull E createDeclaredEffective(int flags, @NonNull StmtContext<QName, D, E> ctx,
+ @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements, @NonNull D declared);
@Override
- protected final E createEmptyEffective(final StmtContext<QName, D, E> ctx, final D declared) {
- return createEffective(ctx, declared, ImmutableList.of());
+ protected final E createUndeclaredEffective(final StmtContext<QName, D, E> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return createUndeclaredEffective(computeFlags(ctx, substatements), ctx, substatements);
}
- protected abstract @NonNull E createDeclaredEffective(int flags, @NonNull StmtContext<QName, D, E> ctx,
- @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements, @NonNull D declared);
-
protected abstract @NonNull E createUndeclaredEffective(int flags, @NonNull StmtContext<QName, D, E> ctx,
@NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements);
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_;
+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.CaseSchemaNode;
+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.meta.StatementSource;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseImplicitStatementSupport;
+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;
abstract class AbstractCaseStatementSupport
- extends AbstractQNameStatementSupport<CaseStatement, CaseEffectiveStatement> {
+ extends BaseImplicitStatementSupport<CaseStatement, CaseEffectiveStatement> {
AbstractCaseStatementSupport() {
super(YangStmtMapping.CASE);
}
}
@Override
- public final void onStatementAdded(final Mutable<QName, CaseStatement, CaseEffectiveStatement> stmt) {
- stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
+ protected final CaseStatement createDeclared(final StmtContext<QName, CaseStatement, ?> ctx,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ final StatementSource source = ctx.getStatementSource();
+ switch (ctx.getStatementSource()) {
+ case CONTEXT:
+ return new RegularUndeclaredCaseStatement(ctx.coerceStatementArgument(), substatements);
+ case DECLARATION:
+ return new RegularCaseStatement(ctx.coerceStatementArgument(), substatements);
+ default:
+ throw new IllegalStateException("Unhandled statement source " + source);
+ }
}
@Override
- public final CaseStatement createDeclared(final StmtContext<QName, CaseStatement, ?> ctx) {
- return new CaseStatementImpl(ctx);
+ protected final CaseStatement createEmptyDeclared(final StmtContext<QName, CaseStatement, ?> ctx) {
+ final StatementSource source = ctx.getStatementSource();
+ switch (ctx.getStatementSource()) {
+ case CONTEXT:
+ return new EmptyUndeclaredCaseStatement(ctx.coerceStatementArgument());
+ case DECLARATION:
+ return new EmptyCaseStatement(ctx.coerceStatementArgument());
+ default:
+ throw new IllegalStateException("Unhandled statement source " + source);
+ }
}
@Override
- public final CaseEffectiveStatement createEffective(
- final StmtContext<QName, CaseStatement, CaseEffectiveStatement> ctx) {
- return new CaseEffectiveStatementImpl(ctx);
+ protected final CaseEffectiveStatement createDeclaredEffective(
+ final StmtContext<QName, CaseStatement, CaseEffectiveStatement> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final CaseStatement declared) {
+ return new DeclaredCaseEffectiveStatement(declared, ctx, substatements, computeFlags(ctx, substatements),
+ findOriginal(ctx));
+ }
+
+ @Override
+ protected final CaseEffectiveStatement createUndeclaredEffective(
+ final StmtContext<QName, CaseStatement, CaseEffectiveStatement> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new UndeclaredCaseEffectiveStatement(ctx, substatements, computeFlags(ctx, substatements),
+ findOriginal(ctx));
+ }
+
+ private static @Nullable CaseSchemaNode findOriginal(final StmtContext<?, ?, ?> ctx) {
+ return (CaseSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
+ }
+
+ 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()
+ && ctx.allSubstatementsStream().anyMatch(StmtContext::isConfiguration))
+ .toFlags();
}
}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_;
-
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSimpleDataNodeContainer;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class CaseEffectiveStatementImpl extends AbstractEffectiveSimpleDataNodeContainer<CaseStatement>
- implements CaseEffectiveStatement, CaseSchemaNode, DerivableSchemaNode {
-
- private final CaseSchemaNode original;
- private final boolean configuration;
-
- CaseEffectiveStatementImpl(final StmtContext<QName, CaseStatement, CaseEffectiveStatement> ctx) {
- super(ctx);
- this.original = (CaseSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
-
- if (ctx.isConfiguration()) {
- configuration = ctx.allSubstatementsStream().anyMatch(StmtContext::isConfiguration);
- } else {
- configuration = false;
- }
- }
-
- @Override
- public Optional<CaseSchemaNode> getOriginal() {
- return Optional.ofNullable(original);
- }
-
- @Override
- public boolean isConfiguration() {
- return configuration;
- }
-
- @Override
- public String toString() {
- return CaseEffectiveStatementImpl.class.getSimpleName() + "[" + "qname=" + getQName() + "]";
- }
-}
--- /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.case_;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.AugmentationTargetMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataNodeContainerMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataSchemaNodeMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MustConstraintMixin;
+
+interface CaseEffectiveStatementMixin extends CaseEffectiveStatement, CaseSchemaNode, DerivableSchemaNode,
+ DataSchemaNodeMixin<QName, CaseStatement>, DocumentedNodeMixin.WithStatus<QName, CaseStatement>,
+ DataNodeContainerMixin<QName, CaseStatement>, MustConstraintMixin<QName, CaseStatement>,
+ AugmentationTargetMixin<QName, CaseStatement> {
+
+ @Override
+ default @NonNull QName argument() {
+ return getPath().getLastComponent();
+ }
+
+ @Override
+ default @NonNull QName getQName() {
+ return 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.case_;
+
+import com.google.common.collect.ImmutableList;
+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.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+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.CaseEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultWithSchemaTree.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class DeclaredCaseEffectiveStatement extends WithSubstatements<QName, CaseStatement, CaseEffectiveStatement>
+ implements CaseEffectiveStatementMixin {
+ private final CaseSchemaNode original;
+ private final @NonNull SchemaPath path;
+ private final int flags;
+
+ DeclaredCaseEffectiveStatement(final CaseStatement declared,
+ final StmtContext<QName, CaseStatement, CaseEffectiveStatement> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+ final @Nullable CaseSchemaNode original) {
+ super(declared, ctx, substatements);
+ this.flags = flags;
+ this.path = ctx.getSchemaPath().get();
+ this.original = original;
+ }
+
+ @Override
+ public int flags() {
+ return flags;
+ }
+
+ @Override
+ public SchemaPath getPath() {
+ return path;
+ }
+
+ @Override
+ public Optional<CaseSchemaNode> getOriginal() {
+ return Optional.ofNullable(original);
+ }
+
+ @Override
+ public Optional<DataSchemaNode> findDataChildByName(final QName name) {
+ return findDataSchemaNode(name);
+ }
+
+ @Override
+ public String toString() {
+ return DeclaredCaseEffectiveStatement.class.getSimpleName() + "[" + "qname=" + getQName() + "]";
+ }
+}
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
-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;
-final class CaseStatementImpl extends AbstractDeclaredStatement<QName> implements CaseStatement {
- CaseStatementImpl(final StmtContext<QName, CaseStatement, ?> context) {
- super(context);
+class EmptyCaseStatement extends WithQNameArgument implements CaseStatement {
+ EmptyCaseStatement(final QName argument) {
+ super(argument);
}
}
--- /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.case_;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
+
+final class EmptyUndeclaredCaseStatement extends EmptyCaseStatement {
+ EmptyUndeclaredCaseStatement(final QName argument) {
+ super(argument);
+ }
+
+ @Override
+ public StatementSource getStatementSource() {
+ return StatementSource.CONTEXT;
+ }
+}
--- /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.case_;
+
+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.CaseStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+
+class RegularCaseStatement extends WithSubstatements implements CaseStatement {
+ RegularCaseStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ super(argument, substatements);
+ }
+}
--- /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.case_;
+
+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.meta.StatementSource;
+
+final class RegularUndeclaredCaseStatement extends RegularCaseStatement {
+ RegularUndeclaredCaseStatement(final QName argument,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ super(argument, substatements);
+ }
+
+ @Override
+ public StatementSource getStatementSource() {
+ return StatementSource.CONTEXT;
+ }
+}
--- /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.case_;
+
+import com.google.common.collect.ImmutableList;
+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.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+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.CaseEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractUndeclaredEffectiveStatement.DefaultWithSchemaTree.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class UndeclaredCaseEffectiveStatement extends WithSubstatements<QName, CaseStatement, CaseEffectiveStatement>
+ implements CaseEffectiveStatementMixin {
+ private final CaseSchemaNode original;
+ private final @NonNull SchemaPath path;
+ private final int flags;
+
+ UndeclaredCaseEffectiveStatement(final StmtContext<QName, CaseStatement, CaseEffectiveStatement> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+ final @Nullable CaseSchemaNode original) {
+ super(ctx, substatements);
+ this.flags = flags;
+ this.path = ctx.getSchemaPath().get();
+ this.original = original;
+ }
+
+ @Override
+ public int flags() {
+ return flags;
+ }
+
+ @Override
+ public SchemaPath getPath() {
+ return path;
+ }
+
+ @Override
+ public Optional<CaseSchemaNode> getOriginal() {
+ return Optional.ofNullable(original);
+ }
+
+ @Override
+ public Optional<DataSchemaNode> findDataChildByName(final QName name) {
+ return findDataSchemaNode(name);
+ }
+
+ @Override
+ public String toString() {
+ return UndeclaredCaseEffectiveStatement.class.getSimpleName() + "[" + "qname=" + getQName() + "]";
+ }
+}