2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
\r
10 import java.util.ArrayList;
\r
11 import java.util.Collections;
\r
12 import java.util.HashMap;
\r
13 import java.util.HashSet;
\r
14 import java.util.List;
\r
15 import java.util.Map;
\r
16 import java.util.Set;
\r
18 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
\r
19 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
\r
20 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
\r
21 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
\r
22 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
\r
23 import org.opendaylight.yangtools.yang.model.api.UsesNode;
\r
24 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractBuilder;
\r
25 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
\r
26 import org.opendaylight.yangtools.yang.parser.builder.api.Builder;
\r
27 import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder;
\r
28 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
\r
29 import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
\r
30 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
\r
31 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
\r
32 import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;
\r
33 import org.opendaylight.yangtools.yang.parser.util.RefineHolder;
\r
34 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
\r
36 public final class UsesNodeBuilderImpl extends AbstractBuilder implements UsesNodeBuilder {
\r
37 private boolean isBuilt;
\r
38 private UsesNodeImpl instance;
\r
39 private DataNodeContainerBuilder parent;
\r
40 private final String groupingName;
\r
41 private SchemaPath groupingPath;
\r
42 private GroupingDefinition groupingDefinition;
\r
43 private GroupingBuilder groupingBuilder;
\r
44 private boolean augmenting;
\r
45 private boolean addedByUses;
\r
46 private final Set<AugmentationSchemaBuilder> addedAugments = new HashSet<AugmentationSchemaBuilder>();
\r
47 private final List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();
\r
48 private final List<RefineHolder> refines = new ArrayList<RefineHolder>();
\r
50 private Set<DataSchemaNodeBuilder> targetChildren = new HashSet<>();
\r
51 private Set<GroupingBuilder> targetGroupings = new HashSet<>();
\r
52 private Set<TypeDefinitionBuilder> targetTypedefs = new HashSet<>();
\r
53 private List<UnknownSchemaNodeBuilder> targetUnknownNodes = new ArrayList<>();
\r
55 private final boolean isCopy;
\r
56 private boolean dataCollected;
\r
57 private boolean parentUpdated;
\r
60 public boolean isCopy() {
\r
65 public boolean isDataCollected() {
\r
66 return dataCollected;
\r
70 public void setDataCollected(boolean dataCollected) {
\r
71 this.dataCollected = dataCollected;
\r
75 public boolean isParentUpdated() {
\r
76 return parentUpdated;
\r
80 public void setParentUpdated(boolean parentUpdated) {
\r
81 this.parentUpdated = parentUpdated;
\r
84 public UsesNodeBuilderImpl(final String moduleName, final int line, final String groupingName) {
\r
85 super(moduleName, line);
\r
86 this.groupingName = groupingName;
\r
90 public UsesNodeBuilderImpl(final String moduleName, final int line, final String groupingName, final boolean isCopy) {
\r
91 super(moduleName, line);
\r
92 this.groupingName = groupingName;
\r
93 this.isCopy = isCopy;
\r
97 public UsesNode build() {
\r
99 instance = new UsesNodeImpl(groupingPath);
\r
100 instance.setAugmenting(augmenting);
\r
101 instance.setAddedByUses(addedByUses);
\r
104 final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();
\r
105 for (AugmentationSchemaBuilder builder : addedAugments) {
\r
106 augments.add(builder.build());
\r
108 instance.setAugmentations(augments);
\r
111 final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();
\r
112 for (SchemaNodeBuilder refineBuilder : refineBuilders) {
\r
113 SchemaNode refineNode = refineBuilder.build();
\r
114 refineNodes.put(refineNode.getPath(), refineNode);
\r
116 instance.setRefines(refineNodes);
\r
119 List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
\r
120 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
\r
121 unknownNodes.add(b.build());
\r
123 instance.setUnknownSchemaNodes(unknownNodes);
\r
132 public DataNodeContainerBuilder getParent() {
\r
137 public void setParent(Builder parent) {
\r
138 if (!(parent instanceof DataNodeContainerBuilder)) {
\r
139 throw new YangParseException(moduleName, line, "Unresolved parent of uses '" + groupingName + "'.");
\r
141 this.parent = (DataNodeContainerBuilder) parent;
\r
145 public SchemaPath getGroupingPath() {
\r
146 return groupingPath;
\r
150 public GroupingDefinition getGroupingDefinition() {
\r
151 return groupingDefinition;
\r
155 public void setGroupingDefinition(GroupingDefinition groupingDefinition) {
\r
156 this.groupingDefinition = groupingDefinition;
\r
157 if (groupingDefinition != null) {
\r
158 this.groupingPath = groupingDefinition.getPath();
\r
163 public GroupingBuilder getGroupingBuilder() {
\r
164 return groupingBuilder;
\r
168 public void setGrouping(GroupingBuilder grouping) {
\r
169 this.groupingBuilder = grouping;
\r
170 if (groupingBuilder != null) {
\r
171 this.groupingPath = groupingBuilder.getPath();
\r
176 public String getGroupingName() {
\r
177 return groupingName;
\r
181 public Set<AugmentationSchemaBuilder> getAugmentations() {
\r
182 return addedAugments;
\r
186 public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {
\r
187 addedAugments.add(augmentBuilder);
\r
191 public boolean isAugmenting() {
\r
196 public void setAugmenting(final boolean augmenting) {
\r
197 this.augmenting = augmenting;
\r
201 public boolean isAddedByUses() {
\r
202 return addedByUses;
\r
206 public void setAddedByUses(final boolean addedByUses) {
\r
207 this.addedByUses = addedByUses;
\r
211 public List<SchemaNodeBuilder> getRefineNodes() {
\r
212 return refineBuilders;
\r
216 public void addRefineNode(DataSchemaNodeBuilder refineNode) {
\r
217 refineBuilders.add(refineNode);
\r
221 public List<RefineHolder> getRefines() {
\r
226 public void addRefine(RefineHolder refine) {
\r
227 refines.add(refine);
\r
231 public Set<DataSchemaNodeBuilder> getTargetChildren() {
\r
232 return targetChildren;
\r
236 public void setTargetChildren(Set<DataSchemaNodeBuilder> targetChildren) {
\r
237 this.targetChildren = targetChildren;
\r
241 public Set<GroupingBuilder> getTargetGroupings() {
\r
242 return targetGroupings;
\r
246 public void setTargetGroupings(Set<GroupingBuilder> targetGroupings) {
\r
247 this.targetGroupings = targetGroupings;
\r
251 public Set<TypeDefinitionBuilder> getTargetTypedefs() {
\r
252 return targetTypedefs;
\r
256 public void setTargetTypedefs(Set<TypeDefinitionBuilder> targetTypedefs) {
\r
257 this.targetTypedefs = targetTypedefs;
\r
261 public List<UnknownSchemaNodeBuilder> getTargetUnknownNodes() {
\r
262 return targetUnknownNodes;
\r
266 public void setTargetUnknownNodes(List<UnknownSchemaNodeBuilder> targetUnknownNodes) {
\r
267 this.targetUnknownNodes = targetUnknownNodes;
\r
271 public int hashCode() {
\r
272 final int prime = 31;
\r
274 result = prime * result + ((groupingName == null) ? 0 : groupingName.hashCode());
\r
279 public boolean equals(Object obj) {
\r
284 if (getClass() != obj.getClass())
\r
286 UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj;
\r
287 if (groupingName == null) {
\r
288 if (other.groupingName != null)
\r
290 } else if (!groupingName.equals(other.groupingName))
\r
293 if (parent == null) {
\r
294 if (other.parent != null)
\r
296 } else if (!parent.equals(other.parent))
\r
298 if (refines == null) {
\r
299 if (other.refines != null)
\r
301 } else if (!refines.equals(other.refines))
\r
307 public String toString() {
\r
308 return "uses '" + groupingName + "'";
\r
311 public final class UsesNodeImpl implements UsesNode {
\r
312 private final SchemaPath groupingPath;
\r
313 private Set<AugmentationSchema> augmentations = Collections.emptySet();
\r
314 private boolean augmenting;
\r
315 private boolean addedByUses;
\r
316 private Map<SchemaPath, SchemaNode> refines = Collections.emptyMap();
\r
317 private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
\r
319 private UsesNodeImpl(final SchemaPath groupingPath) {
\r
320 this.groupingPath = groupingPath;
\r
324 public SchemaPath getGroupingPath() {
\r
325 return groupingPath;
\r
329 public Set<AugmentationSchema> getAugmentations() {
\r
330 return augmentations;
\r
333 private void setAugmentations(final Set<AugmentationSchema> augmentations) {
\r
334 if (augmentations != null) {
\r
335 this.augmentations = augmentations;
\r
340 public boolean isAugmenting() {
\r
344 private void setAugmenting(final boolean augmenting) {
\r
345 this.augmenting = augmenting;
\r
349 public boolean isAddedByUses() {
\r
350 return addedByUses;
\r
353 private void setAddedByUses(final boolean addedByUses) {
\r
354 this.addedByUses = addedByUses;
\r
358 public Map<SchemaPath, SchemaNode> getRefines() {
\r
362 private void setRefines(Map<SchemaPath, SchemaNode> refines) {
\r
363 if (refines != null) {
\r
364 this.refines = refines;
\r
368 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
\r
369 return unknownNodes;
\r
372 private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
\r
373 if (unknownSchemaNodes != null) {
\r
374 this.unknownNodes = unknownSchemaNodes;
\r
378 public UsesNodeBuilder toBuilder() {
\r
379 return UsesNodeBuilderImpl.this;
\r
383 public int hashCode() {
\r
384 final int prime = 31;
\r
386 result = prime * result + ((groupingPath == null) ? 0 : groupingPath.hashCode());
\r
387 result = prime * result + ((augmentations == null) ? 0 : augmentations.hashCode());
\r
388 result = prime * result + (augmenting ? 1231 : 1237);
\r
393 public boolean equals(Object obj) {
\r
400 if (getClass() != obj.getClass()) {
\r
403 final UsesNodeImpl other = (UsesNodeImpl) obj;
\r
404 if (groupingPath == null) {
\r
405 if (other.groupingPath != null) {
\r
408 } else if (!groupingPath.equals(other.groupingPath)) {
\r
411 if (augmentations == null) {
\r
412 if (other.augmentations != null) {
\r
415 } else if (!augmentations.equals(other.augmentations)) {
\r
418 if (augmenting != other.augmenting) {
\r
425 public String toString() {
\r
426 StringBuilder sb = new StringBuilder(UsesNodeImpl.class.getSimpleName());
\r
427 sb.append("[groupingPath=" + groupingPath + "]");
\r
428 return sb.toString();
\r