import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
/**
}
private EffectiveStatementMixins() {
+ // Hidden on purpose
}
static <T extends ContainerLike> T findAsContainer(final EffectiveStatement<?, ?> stmt,
return Collections2.transform(stmt.filterEffectiveStatements(TypedefEffectiveStatement.class),
TypedefEffectiveStatement::getTypeDefinition);
}
-
- public static int historyAndStatusFlags(final CopyableNode history,
- final Collection<? extends EffectiveStatement<?, ?>> substatements) {
- return new FlagsBuilder()
- .setHistory(history)
- .setStatus(substatements.stream()
- .filter(StatusEffectiveStatement.class::isInstance)
- .findAny()
- .map(stmt -> ((StatusEffectiveStatement) stmt).argument())
- .orElse(Status.CURRENT))
- .toFlags();
- }
}
import java.util.Set;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.YangVersion;
+import org.opendaylight.yangtools.yang.model.api.CopyableNode;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode;
import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.UsesNode;
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.MaxElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
+import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
}
}
}
+
+ public static int historyAndStatusFlags(final CopyableNode history,
+ final Collection<? extends EffectiveStatement<?, ?>> substatements) {
+ return new FlagsBuilder()
+ .setHistory(history)
+ .setStatus(substatements.stream()
+ .filter(StatusEffectiveStatement.class::isInstance)
+ .findAny()
+ .map(stmt -> ((StatusEffectiveStatement) stmt).argument())
+ .orElse(Status.CURRENT))
+ .toFlags();
+ }
+
+ public static <T extends CopyableNode & DocumentedNode.WithStatus> int historyAndStatusFlags(final T stmt) {
+ return new FlagsBuilder().setHistory(stmt).setStatus(stmt.getStatus()).toFlags();
+ }
}
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent.EffectiveConfig;
import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
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;
}
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final ListEffectiveStatement stmt) {
+ verify(stmt instanceof ListSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (ListSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setUserOrdered(schema.isUserOrdered())
+ .toFlags());
+ }
+
private static int computeFlags(final Current<?, ?> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
import static java.util.Objects.requireNonNull;
import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.ContainerLike;
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.stmt.SchemaTreeEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
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.meta.SubstatementValidator;
@Override
final @NonNull E copyDeclaredEffective(final Current<QName, D> stmt, final E original) {
return copyDeclaredEffective(
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()),
- stmt, original);
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()), stmt,
+ original);
}
abstract @NonNull E copyDeclaredEffective(int flags, @NonNull Current<QName, D> stmt,
@Override
final @NonNull E copyUndeclaredEffective(final Current<QName, D> stmt, final E original) {
return copyUndeclaredEffective(
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()),
- stmt, original);
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()), stmt,
+ original);
}
abstract @NonNull E copyUndeclaredEffective(int flags, @NonNull Current<QName, D> stmt, @NonNull E original);
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
try {
return createDeclaredEffective(
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), stmt, substatements);
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), substatements), stmt, substatements);
} catch (SubstatementIndexingException e) {
throw new SourceException(e.getMessage(), stmt, e);
}
@Override
final E createUndeclaredEffective(final Current<QName, D> stmt,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- return createUndeclaredEffective(EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements),
- stmt, substatements);
+ return createUndeclaredEffective(EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), substatements), stmt,
+ substatements);
}
abstract @NonNull E createUndeclaredEffective(int flags, @NonNull Current<QName, D> stmt,
@NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements);
+
+ @Override
+ public final EffectiveStatementState extractEffectiveState(final E stmt) {
+ verify(stmt instanceof ContainerLike, "Unexpected statement %s", stmt);
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(),
+ EffectiveStmtUtils.historyAndStatusFlags((ContainerLike) stmt));
+ }
}
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
-import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
try {
return EffectiveStatements.createAction(stmt.declared(), stmt.getArgument(),
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), substatements);
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), substatements), substatements);
} catch (SubstatementIndexingException e) {
throw new SourceException(e.getMessage(), stmt, e);
}
public ActionEffectiveStatement copyEffective(final Current<QName, ActionStatement> stmt,
final ActionEffectiveStatement original) {
return EffectiveStatements.copyAction(original, stmt.getArgument(),
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()));
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()));
+ }
+
+ @Override
+ public EffectiveStatementState extractEffectiveState(final ActionEffectiveStatement stmt) {
+ verify(stmt instanceof ActionDefinition, "Unexpected statement %s", stmt);
+ final var schema = (ActionDefinition) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(),
+ EffectiveStmtUtils.historyAndStatusFlags(schema));
}
private static void appendImplicitSubstatement(final Mutable<QName, ActionStatement, ActionEffectiveStatement> stmt,
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
createFlags(stmt, original.effectiveSubstatements()), stmt.original(AnydataSchemaNode.class));
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final AnydataEffectiveStatement stmt) {
+ verify(stmt instanceof AnydataSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (AnydataSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setMandatory(schema.isMandatory())
+ .toFlags());
+ }
+
private static int createFlags(final Current<?, ?> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
createFlags(stmt, original.effectiveSubstatements()), stmt.original(AnyxmlSchemaNode.class));
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final AnyxmlEffectiveStatement stmt) {
+ verify(stmt instanceof AnyxmlSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (AnyxmlSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setMandatory(schema.isMandatory())
+ .toFlags());
+ }
+
private static int createFlags(final Current<QName, AnyxmlStatement> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent.EffectiveConfig;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
}
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final CaseEffectiveStatement stmt) {
+ verify(stmt instanceof CaseSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (CaseSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .toFlags());
+ }
+
private static int computeFlags(final Current<?, ?> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
final Boolean config;
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
import org.opendaylight.yangtools.yang.parser.spi.meta.ImplicitParentAwareStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceStmtCtx;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
}
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final ChoiceEffectiveStatement stmt) {
+ verify(stmt instanceof ChoiceSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (ChoiceSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setMandatory(schema.isMandatory())
+ .toFlags());
+ }
+
private static int computeFlags(final Current<?, ?> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
createFlags(stmt, original.effectiveSubstatements()), stmt.original(ContainerSchemaNode.class));
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final ContainerEffectiveStatement stmt) {
+ verify(stmt instanceof ContainerSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (ContainerSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setPresence(schema.isPresenceContainer())
+ .toFlags());
+ }
+
private static int createFlags(final Current<?, ?> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
-import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
try {
return EffectiveStatements.createGrouping(stmt.declared(), substatements, stmt.getArgument(),
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements));
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), substatements));
} catch (SubstatementIndexingException e) {
throw new SourceException(e.getMessage(), stmt, e);
}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
stmt.original(LeafListSchemaNode.class));
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final LeafListEffectiveStatement stmt) {
+ verify(stmt instanceof LeafListSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (LeafListSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setUserOrdered(schema.isUserOrdered())
+ .toFlags());
+ }
+
private static int computeFlags(final Current<?, ?> stmt,
final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
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;
substatements, stmt.original(LeafSchemaNode.class));
}
+ @Override
+ public EffectiveStatementState extractEffectiveState(final LeafEffectiveStatement stmt) {
+ verify(stmt instanceof LeafSchemaNode, "Unexpected statement %s", stmt);
+ final var schema = (LeafSchemaNode) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(), new FlagsBuilder()
+ .setHistory(schema)
+ .setStatus(schema.getStatus())
+ .setConfiguration(schema.effectiveConfig().orElse(null))
+ .setMandatory(schema.isMandatory())
+ .toFlags());
+ }
+
private static int computeFlags(final Current<?, ?> stmt,
- final Collection<? extends EffectiveStatement<?, ?>> substatements) {
+ final Collection<? extends EffectiveStatement<?, ?>> substatements) {
return new FlagsBuilder()
.setHistory(stmt.history())
.setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.collect.ImmutableList;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
-import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameWithFlagsEffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
try {
return EffectiveStatements.createNotification(stmt.declared(), stmt.getArgument(),
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements), substatements);
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), substatements), substatements);
} catch (SubstatementIndexingException e) {
throw new SourceException(e.getMessage(), stmt, e);
}
public final NotificationEffectiveStatement copyEffective(final Current<QName, NotificationStatement> stmt,
final NotificationEffectiveStatement original) {
return EffectiveStatements.copyNotification(original, stmt.getArgument(),
- EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()));
+ EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), original.effectiveSubstatements()));
+ }
+
+ @Override
+ public final EffectiveStatementState extractEffectiveState(final NotificationEffectiveStatement stmt) {
+ verify(stmt instanceof NotificationDefinition, "Unexpected statement %s", stmt);
+ final var schema = (NotificationDefinition) stmt;
+ return new QNameWithFlagsEffectiveStatementState(stmt.argument(),
+ EffectiveStmtUtils.historyAndStatusFlags(schema));
}
}
import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
-import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.refine.RefineTargetNamespace;
import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace;
verify(source instanceof GroupingDefinition, "Unexpected source %s", source);
final GroupingDefinition sourceGrouping = (GroupingDefinition) source;
- final int flags = EffectiveStatementMixins.historyAndStatusFlags(stmt.history(), substatements);
+ final int flags = EffectiveStmtUtils.historyAndStatusFlags(stmt.history(), substatements);
final QName argument = stmt.getArgument();
final UsesStatement declared = stmt.declared();
--- /dev/null
+/*
+ * Copyright (c) 2021 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.spi.meta;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects.ToStringHelper;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement;
+
+/**
+ * Simple {@link EffectiveStatementState} for use with typical {@link SchemaTreeEffectiveStatement}s. It differentiates
+ * on QName and an {@code int} flags field.
+ */
+@Beta
+public final class QNameWithFlagsEffectiveStatementState extends EffectiveStatementState {
+ private final QName qname;
+ private final int flags;
+
+ public QNameWithFlagsEffectiveStatementState(final QName qname, final int flags) {
+ this.qname = requireNonNull(qname);
+ this.flags = flags;
+ }
+
+ @Override
+ public int hashCode() {
+ return qname.hashCode() * 31 + Integer.hashCode(flags);
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof QNameWithFlagsEffectiveStatementState)) {
+ return false;
+ }
+ final var other = (QNameWithFlagsEffectiveStatementState) obj;
+ return flags == other.flags && qname.equals(other.qname);
+ }
+
+ @Override
+ protected ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return helper.add("qname", qname).add("flags", flags);
+ }
+}