*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import java.net.URI;
-import java.util.List;
-import java.util.Objects;
import java.util.Optional;
-import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
import org.opendaylight.yangtools.yang.model.api.NamespaceRevisionAware;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
-import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedDataNodeContainer;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
-
-final class AugmentEffectiveStatementImpl
- extends AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement>
- implements AugmentEffectiveStatement, AugmentationSchemaNode, NamespaceRevisionAware {
- private final SchemaPath targetPath;
- private final URI namespace;
- private final Revision revision;
- private final @NonNull ImmutableSet<ActionDefinition> actions;
- private final @NonNull ImmutableSet<NotificationDefinition> notifications;
- private final @NonNull ImmutableList<UnknownSchemaNode> unknownNodes;
- private final RevisionAwareXPath whenCondition;
- private final AugmentationSchemaNode copyOf;
-
- AugmentEffectiveStatementImpl(final StmtContext<SchemaNodeIdentifier, AugmentStatement,
- EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
- super(ctx);
-
- this.targetPath = ctx.coerceStatementArgument().asSchemaPath();
-
- final QNameModule rootModuleQName = StmtContextUtils.getRootModuleQName(ctx);
- this.namespace = rootModuleQName.getNamespace();
- this.revision = rootModuleQName.getRevision().orElse(null);
-
- this.copyOf = (AugmentationSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
- whenCondition = findFirstEffectiveSubstatementArgument(WhenEffectiveStatement.class).orElse(null);
-
- // initSubstatementCollections
- final ImmutableSet.Builder<ActionDefinition> actionsBuilder = ImmutableSet.builder();
- final ImmutableSet.Builder<NotificationDefinition> notificationsBuilder = ImmutableSet.builder();
- final ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
- for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
- if (effectiveStatement instanceof ActionDefinition) {
- actionsBuilder.add((ActionDefinition) effectiveStatement);
- } else if (effectiveStatement instanceof NotificationDefinition) {
- notificationsBuilder.add((NotificationDefinition) effectiveStatement);
- } else if (effectiveStatement instanceof UnknownSchemaNode) {
- listBuilder.add((UnknownSchemaNode) effectiveStatement);
- }
- }
-
- this.actions = actionsBuilder.build();
- this.notifications = notificationsBuilder.build();
- this.unknownNodes = listBuilder.build();
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultDataNodeContainer;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ActionNodeContainerMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.NotificationNodeContainerMixin;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.WhenConditionMixin;
+import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
+
+final class AugmentEffectiveStatementImpl extends DefaultDataNodeContainer<SchemaNodeIdentifier, AugmentStatement>
+ implements AugmentEffectiveStatement, AugmentationSchemaNode, NamespaceRevisionAware,
+ DocumentedNodeMixin.WithStatus<SchemaNodeIdentifier, AugmentStatement>,
+ ActionNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
+ NotificationNodeContainerMixin<SchemaNodeIdentifier, AugmentStatement>,
+ WhenConditionMixin<SchemaNodeIdentifier, AugmentStatement> {
+ private final @Nullable AugmentationSchemaNode original;
+ private final @NonNull QNameModule rootModuleQName;
+ private final int flags;
+
+ AugmentEffectiveStatementImpl(final AugmentStatement declared, final int flags, final QNameModule rootModuleQName,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final StatementSourceReference ref,
+ final @Nullable AugmentationSchemaNode original) {
+ super(declared, ref, substatements);
+ this.rootModuleQName = requireNonNull(rootModuleQName);
+ this.flags = flags;
+ this.original = original;
}
@Override
- public Optional<AugmentationSchemaNode> getOriginalDefinition() {
- return Optional.ofNullable(this.copyOf);
+ public SchemaNodeIdentifier argument() {
+ return getDeclared().argument();
}
@Override
- public SchemaPath getTargetPath() {
- return targetPath;
+ public Optional<AugmentationSchemaNode> getOriginalDefinition() {
+ return Optional.ofNullable(this.original);
}
@Override
- public Optional<RevisionAwareXPath> getWhenCondition() {
- return Optional.ofNullable(whenCondition);
+ public SchemaPath getTargetPath() {
+ return argument().asSchemaPath();
}
@Override
- public List<UnknownSchemaNode> getUnknownSchemaNodes() {
- return unknownNodes;
+ public int flags() {
+ return flags;
}
@Override
public URI getNamespace() {
- return namespace;
- }
-
- @Override
- public Set<ActionDefinition> getActions() {
- return actions;
- }
-
- @Override
- public Set<NotificationDefinition> getNotifications() {
- return notifications;
+ return rootModuleQName.getNamespace();
}
@Override
public Optional<Revision> getRevision() {
- return Optional.ofNullable(revision);
- }
-
- @Override
- public int hashCode() {
- final int prime = 17;
- int result = 1;
- result = prime * result + Objects.hashCode(targetPath);
- result = prime * result + Objects.hashCode(whenCondition);
- result = prime * result + getChildNodes().hashCode();
- return result;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (!(obj instanceof AugmentEffectiveStatementImpl)) {
- return false;
- }
- final AugmentEffectiveStatementImpl other = (AugmentEffectiveStatementImpl) obj;
- return Objects.equals(targetPath, other.targetPath) && Objects.equals(whenCondition, other.whenCondition)
- && getChildNodes().equals(other.getChildNodes());
+ return rootModuleQName.getRevision();
}
@Override
public String toString() {
- return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + targetPath + ", when="
- + whenCondition + "]";
+ return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + getTargetPath() + ", when="
+ + getWhenCondition() + "]";
}
+
}