*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
-import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.compat.ActionNodeContainerCompat;
import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
public abstract class AbstractEffectiveContainerSchemaNode<D extends DeclaredStatement<QName>>
- extends AbstractEffectiveSimpleDataNodeContainer<D>
+ extends AbstractEffectiveMustConstraintAwareSimpleDataNodeContainer<D>
implements ContainerSchemaNode, ActionNodeContainerCompat<QName, D>, NotificationNodeContainerCompat<QName, D> {
- private final ImmutableSet<MustDefinition> mustConstraints;
-
protected AbstractEffectiveContainerSchemaNode(final StmtContext<QName, D, ?> ctx) {
super(ctx);
- mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
- }
-
- @Override
- public final Collection<MustDefinition> getMustConstraints() {
- return mustConstraints;
}
}
--- /dev/null
+/*
+ * Copyright (c) 2019 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.ImmutableSet;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.MustConstraintAware;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+@Beta
+public abstract class AbstractEffectiveMustConstraintAwareDataSchemaNode<D extends DeclaredStatement<QName>>
+ extends AbstractEffectiveDataSchemaNode<D> implements MustConstraintAware {
+ private final @NonNull ImmutableSet<MustDefinition> mustConstraints;
+
+ protected AbstractEffectiveMustConstraintAwareDataSchemaNode(final StmtContext<QName, D, ?> ctx) {
+ super(ctx);
+ mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
+ }
+
+ @Override
+ public final ImmutableSet<MustDefinition> getMustConstraints() {
+ return mustConstraints;
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2019 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.ImmutableSet;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.MustConstraintAware;
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+@Beta
+public abstract class AbstractEffectiveMustConstraintAwareSimpleDataNodeContainer<D extends DeclaredStatement<QName>>
+ extends AbstractEffectiveSimpleDataNodeContainer<D> implements MustConstraintAware {
+ private final @NonNull ImmutableSet<MustDefinition> mustConstraints;
+
+ protected AbstractEffectiveMustConstraintAwareSimpleDataNodeContainer(final StmtContext<QName, D, ?> ctx) {
+ super(ctx);
+ mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
+ }
+
+ @Override
+ public final ImmutableSet<MustDefinition> getMustConstraints() {
+ return mustConstraints;
+ }
+}
import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
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.MustDefinition;
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.parser.rfc7950.stmt.AbstractEffectiveDataSchemaNode;
+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 AbstractEffectiveDataSchemaNode<AnydataStatement>
+final class AnydataEffectiveStatementImpl extends AbstractEffectiveMustConstraintAwareDataSchemaNode<AnydataStatement>
implements AnydataEffectiveStatement, AnydataSchemaNode, DerivableSchemaNode {
- private final ImmutableSet<MustDefinition> mustConstraints;
private final AnydataSchemaNode original;
private final ContainerSchemaNode schema;
private final boolean mandatory;
this.original = (AnydataSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
mandatory = findFirstEffectiveSubstatementArgument(MandatoryEffectiveStatement.class).orElse(Boolean.FALSE)
.booleanValue();
- mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
/*
* :TODO we need to determine a way how to set schema of AnyData
return mandatory;
}
- @Override
- public Collection<MustDefinition> getMustConstraints() {
- return mustConstraints;
- }
-
@Override
public int hashCode() {
return Objects.hash(getQName(),getPath());
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.anyxml;
-import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
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.MustDefinition;
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.AbstractEffectiveDataSchemaNode;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveMustConstraintAwareDataSchemaNode;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-final class AnyxmlEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<AnyxmlStatement>
+final class AnyxmlEffectiveStatementImpl extends AbstractEffectiveMustConstraintAwareDataSchemaNode<AnyxmlStatement>
implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, DerivableSchemaNode {
- private final ImmutableSet<MustDefinition> mustConstraints;
private final AnyxmlSchemaNode original;
private final boolean mandatory;
this.original = (AnyxmlSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
mandatory = findFirstEffectiveSubstatementArgument(MandatoryEffectiveStatement.class).orElse(Boolean.FALSE)
.booleanValue();
- mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
}
@Override
return mandatory;
}
- @Override
- public Collection<MustDefinition> getMustConstraints() {
- return mustConstraints;
- }
-
@Override
public Optional<AnyxmlSchemaNode> getOriginal() {
return Optional.ofNullable(original);
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf;
-import com.google.common.collect.ImmutableSet;
-import java.util.Collection;
import java.util.Objects;
import java.util.Optional;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder;
import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDataSchemaNode;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveMustConstraintAwareDataSchemaNode;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-final class LeafEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<LeafStatement>
+final class LeafEffectiveStatementImpl extends AbstractEffectiveMustConstraintAwareDataSchemaNode<LeafStatement>
implements LeafEffectiveStatement, LeafSchemaNode, DerivableSchemaNode {
- private final ImmutableSet<MustDefinition> mustConstraints;
private final LeafSchemaNode original;
private final TypeDefinition<?> type;
private final String defaultStr;
type = builder.build();
mandatory = findFirstEffectiveSubstatementArgument(MandatoryEffectiveStatement.class).orElse(Boolean.FALSE)
.booleanValue();
- mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
}
@Override
return type;
}
- @Override
- public Collection<MustDefinition> getMustConstraints() {
- return mustConstraints;
- }
-
@Override
public int hashCode() {
final int prime = 31;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder;
import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDataSchemaNode;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveMustConstraintAwareDataSchemaNode;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode<LeafListStatement>
+final class LeafListEffectiveStatementImpl extends AbstractEffectiveMustConstraintAwareDataSchemaNode<LeafListStatement>
implements LeafListEffectiveStatement, LeafListSchemaNode, DerivableSchemaNode {
private static final String ORDER_BY_USER_KEYWORD = "user";
private final LeafListSchemaNode original;
private final boolean userOrdered;
private final @NonNull ImmutableSet<String> defaultValues;
- private final ImmutableSet<MustDefinition> mustConstraints;
private final ElementCountConstraint elementCountConstraint;
LeafListEffectiveStatementImpl(
type = builder.build();
userOrdered = isUserOrdered;
elementCountConstraint = EffectiveStmtUtils.createElementCountConstraint(this).orElse(null);
- mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
}
@Override
return Optional.ofNullable(elementCountConstraint);
}
- @Override
- public Collection<MustDefinition> getMustConstraints() {
- return mustConstraints;
- }
-
@Override
public int hashCode() {
final int prime = 31;
import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.compat.ActionNodeContainerCompat;
import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveSimpleDataNodeContainer;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveMustConstraintAwareSimpleDataNodeContainer;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-final class ListEffectiveStatementImpl extends AbstractEffectiveSimpleDataNodeContainer<ListStatement>
+final class ListEffectiveStatementImpl
+ extends AbstractEffectiveMustConstraintAwareSimpleDataNodeContainer<ListStatement>
implements ListEffectiveStatement, ListSchemaNode, DerivableSchemaNode,
ActionNodeContainerCompat<QName, ListStatement>, NotificationNodeContainerCompat<QName, ListStatement> {
private static final String ORDER_BY_USER_KEYWORD = "user";
private final @NonNull ImmutableSet<NotificationDefinition> notifications;
private final @NonNull ImmutableList<UniqueConstraint> uniqueConstraints;
private final ElementCountConstraint elementCountConstraint;
- private final ImmutableSet<MustDefinition> mustConstraints;
ListEffectiveStatementImpl(
final StmtContext<QName, ListStatement, EffectiveStatement<QName, ListStatement>> ctx) {
this.actions = actionsBuilder.build();
this.notifications = notificationsBuilder.build();
elementCountConstraint = EffectiveStmtUtils.createElementCountConstraint(this).orElse(null);
- mustConstraints = ImmutableSet.copyOf(allSubstatementsOfType(MustDefinition.class));
}
@Override
return Optional.ofNullable(elementCountConstraint);
}
- @Override
- public Collection<MustDefinition> getMustConstraints() {
- return mustConstraints;
- }
-
@Override
public int hashCode() {
final int prime = 31;