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=a861f354dd5d37abec80825b80232e6cc57ec763;hb=17d60496211e0b223a63329528352ee7e26e14ff;hp=f506bd091ccd0f24999f3c8e747f40024c276efe;hpb=633b8903e8f04899350224ea9a6a1ba51a580f71;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 f506bd091c..a861f354dd 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,4 +1,4 @@ -/** +/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -7,12 +7,13 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective; +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.Collection; import java.util.HashMap; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -20,6 +21,7 @@ import java.util.Objects; import java.util.Set; 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; @@ -31,64 +33,58 @@ 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.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; -public class UsesEffectiveStatementImpl extends EffectiveStatementBase implements UsesNode { - private SchemaPath groupingPath; - private boolean addedByUses; - private ImmutableMap refines; - private ImmutableSet augmentations; - private 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(final StmtContext> ctx) { + public UsesEffectiveStatementImpl( + final StmtContext> ctx) { super(ctx); - initGroupingPath(ctx); - initCopyType(ctx); - initSubstatementCollections(); - } - - private void initGroupingPath(final StmtContext> ctx) { - StmtContext> grpCtx = ctx.getFromNamespace( + // initGroupingPath + final StmtContext> grpCtx = ctx.getFromNamespace( GroupingNamespace.class, ctx.getStatementArgument()); - this.groupingPath = Utils.getSchemaPath(grpCtx); - } - - private void initSubstatementCollections() { - Collection> effectiveSubstatements = effectiveSubstatements(); + this.groupingPath = grpCtx.getSchemaPath().get(); - List unknownNodesInit = new LinkedList<>(); - Set augmentationsInit = new HashSet<>(); - Map refinesInit = new HashMap<>(); + // initCopyType + final List copyTypesFromOriginal = ctx.getCopyHistory(); + if (copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) { + addedByUses = true; + } else { + addedByUses = false; + } - for (EffectiveStatement effectiveStatement : effectiveSubstatements) { + // initSubstatementCollections + final Collection> effectiveSubstatements = effectiveSubstatements(); + final List unknownNodesInit = new LinkedList<>(); + final Set augmentationsInit = new LinkedHashSet<>(); + final Map refinesInit = new HashMap<>(); + for (final EffectiveStatement effectiveStatement : effectiveSubstatements) { if (effectiveStatement instanceof UnknownSchemaNode) { - UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; + final UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement; unknownNodesInit.add(unknownNode); } if (effectiveStatement instanceof AugmentationSchema) { - AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; + final AugmentationSchema augmentationSchema = (AugmentationSchema) effectiveStatement; augmentationsInit.add(augmentationSchema); } if (effectiveStatement instanceof RefineEffectiveStatementImpl) { - RefineEffectiveStatementImpl refineStmt = (RefineEffectiveStatementImpl) effectiveStatement; - SchemaNodeIdentifier identifier = refineStmt.argument(); + 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); - } - private void initCopyType( - final StmtContext> ctx) { - - List copyTypesFromOriginal = ctx.getCopyHistory(); - if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) { - addedByUses = true; - } + final WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class); + this.whenCondition = (whenStmt == null) ? null : whenStmt.argument(); } @Override @@ -111,19 +107,21 @@ public class UsesEffectiveStatementImpl extends EffectiveStatementBase getRefines() { return refines; } + @Override public List getUnknownSchemaNodes() { return unknownNodes; } + @Override + public Optional getWhenCondition() { + return Optional.fromNullable(whenCondition); + } + @Override public int hashCode() { final int prime = 31; @@ -150,10 +148,8 @@ public class UsesEffectiveStatementImpl extends EffectiveStatementBase