X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2Feffective%2FUsesEffectiveStatementImpl.java;h=103f5d99c83f07249e8dae6c05ef1182b3120fa1;hb=refs%2Fchanges%2F98%2F58698%2F2;hp=f2c7f508aa1515840a82c837e12669e67f43e5f1;hpb=481a692d463636bbcf75f023da71703913e1b605;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java index f2c7f508aa..103f5d99c8 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UsesEffectiveStatementImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2015 Cisco Systems, Inc. and others. All rights reserved. + * 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, @@ -7,41 +7,87 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; - -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; +import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.UsesNode; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; +import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; +import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -public class UsesEffectiveStatementImpl extends EffectiveStatementBaseimplements UsesNode { - private SchemaPath groupingPath; - ImmutableSet augmentations; - private boolean addedByUses; - ImmutableMap refines; - ImmutableList unknownNodes; +public final class UsesEffectiveStatementImpl extends AbstractEffectiveDocumentedNode implements UsesNode { + private final SchemaPath groupingPath; + private final boolean addedByUses; + private final Map refines; + private final Set augmentations; + private final List unknownNodes; + private final RevisionAwareXPath whenCondition; - public UsesEffectiveStatementImpl(StmtContext> ctx) { + public UsesEffectiveStatementImpl( + final StmtContext> ctx) { super(ctx); - this.groupingPath = null; + // initGroupingPath + final StmtContext> grpCtx = ctx.getFromNamespace( + GroupingNamespace.class, ctx.getStatementArgument()); + this.groupingPath = grpCtx.getSchemaPath().get(); + + // initCopyType + addedByUses = ctx.getCopyHistory().contains(CopyType.ADDED_BY_USES); + + // initSubstatementCollections + final List unknownNodesInit = new ArrayList<>(); + final Set augmentationsInit = new LinkedHashSet<>(); + final Map refinesInit = new HashMap<>(); + for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { + if (effectiveStatement instanceof UnknownSchemaNode) { + final UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + unknownNodesInit.add(unknownNode); + } + if (effectiveStatement instanceof AugmentationSchema) { + final AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + augmentationsInit.add(augmentationSchema); + } + if (effectiveStatement instanceof RefineEffectiveStatementImpl) { + final RefineEffectiveStatementImpl refineStmt = (RefineEffectiveStatementImpl) effectiveStatement; + final SchemaNodeIdentifier identifier = refineStmt.argument(); + refinesInit.put(identifier.asSchemaPath(), refineStmt.getRefineTargetNode()); + } + } + this.unknownNodes = ImmutableList.copyOf(unknownNodesInit); + this.augmentations = ImmutableSet.copyOf(augmentationsInit); + this.refines = ImmutableMap.copyOf(refinesInit); + + final WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class); + this.whenCondition = whenStmt == null ? null : whenStmt.argument(); } + @Nonnull @Override public SchemaPath getGroupingPath() { return groupingPath; } + @Nonnull @Override public Set getAugmentations() { return augmentations; @@ -57,25 +103,30 @@ public class UsesEffectiveStatementImpl extends EffectiveStatementBase getRefines() { return refines; } + @Nonnull + @Override public List getUnknownSchemaNodes() { return unknownNodes; } + @Nonnull + @Override + public Optional getWhenCondition() { + return Optional.fromNullable(whenCondition); + } + @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((groupingPath == null) ? 0 : groupingPath.hashCode()); - result = prime * result + ((augmentations == null) ? 0 : augmentations.hashCode()); + result = prime * result + Objects.hashCode(groupingPath); + result = prime * result + Objects.hashCode(augmentations); return result; } @@ -91,29 +142,13 @@ public class UsesEffectiveStatementImpl extends EffectiveStatementBase