2 * Copyright (c) 2013 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
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import java.util.ArrayList;
13 import java.util.HashSet;
14 import java.util.List;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
18 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
19 import org.opendaylight.yangtools.yang.parser.builder.api.Builder;
20 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
26 public final class GroupingBuilderImpl extends AbstractDocumentedDataNodeContainerBuilder implements GroupingBuilder {
27 private GroupingDefinitionImpl instance;
29 private SchemaPath schemaPath;
30 // DataSchemaNode args
31 private boolean addedByUses;
33 public GroupingBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path) {
34 super(moduleName, line, qname);
35 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
38 public GroupingBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path,
39 final GroupingDefinition base) {
40 super(moduleName, line, base.getQName(), Preconditions.checkNotNull(path, "Schema Path must not be null"), base);
42 addedByUses = base.isAddedByUses();
43 addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
48 public GroupingDefinition build() {
49 if (instance != null) {
53 instance = new GroupingDefinitionImpl(qname, schemaPath, this);
54 instance.addedByUses = addedByUses;
57 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
58 unknownNodes.add(b.build());
60 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
66 public List<DataSchemaNodeBuilder> instantiateChildNodes(final Builder newParent) {
67 final List<DataSchemaNodeBuilder> nodes = new ArrayList<>();
68 for (DataSchemaNodeBuilder node : getChildNodeBuilders()) {
69 DataSchemaNodeBuilder copy = CopyUtils.copy(node, newParent, true);
70 BuilderUtils.setNodeAddedByUses(copy);
77 public Set<TypeDefinitionBuilder> instantiateTypedefs(final Builder newParent) {
78 final Set<TypeDefinitionBuilder> nodes = new HashSet<>();
79 for (TypeDefinitionBuilder node : getTypeDefinitionBuilders()) {
80 TypeDefinitionBuilder copy = CopyUtils.copy(node, newParent, true);
87 public Set<GroupingBuilder> instantiateGroupings(final Builder newParent) {
88 final Set<GroupingBuilder> nodes = new HashSet<>();
89 for (GroupingBuilder node : getGroupingBuilders()) {
90 GroupingBuilder copy = CopyUtils.copy(node, newParent, true);
91 copy.setAddedByUses(true);
92 for (DataSchemaNodeBuilder childNode : copy.getChildNodeBuilders()) {
93 BuilderUtils.setNodeAddedByUses(childNode);
101 public Set<UnknownSchemaNodeBuilder> instantiateUnknownNodes(final Builder newParent) {
102 final Set<UnknownSchemaNodeBuilder> nodes = new HashSet<>();
103 for (UnknownSchemaNodeBuilder node : addedUnknownNodes) {
104 UnknownSchemaNodeBuilderImpl copy = CopyUtils.copy(node, newParent, true);
105 copy.setAddedByUses(true);
112 public SchemaPath getPath() {
117 public void setPath(final SchemaPath path) {
118 this.schemaPath = path;
122 public boolean isAddedByUses() {
127 public void setAddedByUses(final boolean addedByUses) {
128 this.addedByUses = addedByUses;
132 public String toString() {
133 return "grouping " + qname.getLocalName();
137 public int hashCode() {
138 final int prime = 31;
140 result = prime * result + ((getParent() == null) ? 0 : getParent().hashCode());
141 result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
146 public boolean equals(final Object obj) {
153 if (getClass() != obj.getClass()) {
156 if (!super.equals(obj)) {
159 final GroupingBuilderImpl other = (GroupingBuilderImpl) obj;
160 if (getParent() == null) {
161 if (other.getParent() != null) {
164 } else if (!getParent().equals(other.getParent())) {
167 if (schemaPath == null) {
168 if (other.schemaPath != null) {
171 } else if (!schemaPath.equals(other.schemaPath)) {
178 protected String getStatementName() {