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;
15 import java.util.Objects;
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.parser.builder.api.Builder;
21 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
28 * @deprecated Pre-Beryllium implementation, scheduled for removal.
31 public final class GroupingBuilderImpl extends AbstractDocumentedDataNodeContainerBuilder implements GroupingBuilder {
32 private GroupingDefinitionImpl instance;
34 private SchemaPath schemaPath;
35 // DataSchemaNode args
36 private boolean addedByUses;
38 public GroupingBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path) {
39 super(moduleName, line, qname);
40 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
43 public GroupingBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path,
44 final GroupingDefinition base) {
45 super(moduleName, line, base.getQName(), Preconditions.checkNotNull(path, "Schema Path must not be null"), base);
47 addedByUses = base.isAddedByUses();
48 addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
53 public GroupingDefinition build() {
54 if (instance != null) {
58 instance = new GroupingDefinitionImpl(qname, schemaPath, this);
59 instance.addedByUses = addedByUses;
62 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
63 unknownNodes.add(b.build());
65 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
71 public List<DataSchemaNodeBuilder> instantiateChildNodes(final Builder newParent) {
72 final List<DataSchemaNodeBuilder> nodes = new ArrayList<>();
73 for (DataSchemaNodeBuilder node : getChildNodeBuilders()) {
74 DataSchemaNodeBuilder copy = CopyUtils.copy(node, newParent, true);
75 BuilderUtils.setNodeAddedByUses(copy);
82 public Set<TypeDefinitionBuilder> instantiateTypedefs(final Builder newParent) {
83 final Set<TypeDefinitionBuilder> nodes = new HashSet<>();
84 for (TypeDefinitionBuilder node : getTypeDefinitionBuilders()) {
85 TypeDefinitionBuilder copy = CopyUtils.copy(node, newParent, true);
92 public Set<GroupingBuilder> instantiateGroupings(final Builder newParent) {
93 final Set<GroupingBuilder> nodes = new HashSet<>();
94 for (GroupingBuilder node : getGroupingBuilders()) {
95 GroupingBuilder copy = CopyUtils.copy(node, newParent, true);
96 copy.setAddedByUses(true);
97 for (DataSchemaNodeBuilder childNode : copy.getChildNodeBuilders()) {
98 BuilderUtils.setNodeAddedByUses(childNode);
106 public Set<UnknownSchemaNodeBuilder> instantiateUnknownNodes(final Builder newParent) {
107 final Set<UnknownSchemaNodeBuilder> nodes = new HashSet<>();
108 for (UnknownSchemaNodeBuilder node : addedUnknownNodes) {
109 UnknownSchemaNodeBuilderImpl copy = CopyUtils.copy(node, newParent, true);
110 copy.setAddedByUses(true);
117 public SchemaPath getPath() {
122 public void setPath(final SchemaPath path) {
123 this.schemaPath = path;
127 public boolean isAddedByUses() {
132 public void setAddedByUses(final boolean addedByUses) {
133 this.addedByUses = addedByUses;
137 public String toString() {
138 return "grouping " + qname.getLocalName();
142 public int hashCode() {
143 final int prime = 31;
145 result = prime * result + Objects.hashCode(getParent());
146 result = prime * result + Objects.hashCode(schemaPath);
151 public boolean equals(final Object obj) {
158 if (getClass() != obj.getClass()) {
161 if (!super.equals(obj)) {
164 final GroupingBuilderImpl other = (GroupingBuilderImpl) obj;
165 if (getParent() == null) {
166 if (other.getParent() != null) {
169 } else if (!getParent().equals(other.getParent())) {
172 if (schemaPath == null) {
173 if (other.schemaPath != null) {
176 } else if (!schemaPath.equals(other.schemaPath)) {
183 protected String getStatementName() {