2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
12 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
14 import java.util.Collection;
15 import java.util.LinkedList;
16 import java.util.List;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
19 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
20 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
23 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy;
25 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
27 public class GroupingEffectiveStatementImpl extends
28 AbstractEffectiveDocumentedDataNodeContainer<QName, GroupingStatement> implements GroupingDefinition {
29 private final QName qname;
30 private final SchemaPath path;
32 private boolean addedByUses;
33 private List<UnknownSchemaNode> unknownNodes;
35 public GroupingEffectiveStatementImpl(
36 StmtContext<QName, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> ctx) {
39 qname = ctx.getStatementArgument();
40 path = Utils.getSchemaPath(ctx);
43 initSubstatementCollections();
46 private void initCopyType(
47 StmtContext<QName, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> ctx) {
49 Set<TypeOfCopy> copyTypesFromOriginal = StmtContextUtils.getCopyTypesFromOriginal(ctx);
51 if(copyTypesFromOriginal.contains(TypeOfCopy.ADDED_BY_USES)) {
56 private void initSubstatementCollections() {
57 Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
59 unknownNodes = new LinkedList<>();
61 for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
62 if (effectiveStatement instanceof UnknownSchemaNode) {
63 UnknownSchemaNode unknownNode = (UnknownSchemaNode) effectiveStatement;
64 unknownNodes.add(unknownNode);
71 public QName getQName() {
76 public SchemaPath getPath() {
81 public boolean isAddedByUses() {
86 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
91 public int hashCode() {
94 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
95 result = prime * result + ((path == null) ? 0 : path.hashCode());
100 public boolean equals(final Object obj) {
107 if (getClass() != obj.getClass()) {
110 final GroupingEffectiveStatementImpl other = (GroupingEffectiveStatementImpl) obj;
112 if (other.qname != null) {
115 } else if (!qname.equals(other.qname)) {
119 if (other.path != null) {
122 } else if (!path.equals(other.path)) {
129 public String toString() {
130 StringBuilder sb = new StringBuilder(GroupingEffectiveStatementImpl.class.getSimpleName());
132 sb.append("qname=").append(qname);
134 return sb.toString();