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.controller.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.controller.yang.model.api.AugmentationSchema;
\r
19 import org.opendaylight.controller.yang.model.api.SchemaNode;
\r
20 import org.opendaylight.controller.yang.model.api.SchemaPath;
\r
21 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
\r
22 import org.opendaylight.controller.yang.model.api.UsesNode;
\r
23 import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;
\r
24 import org.opendaylight.controller.yang.parser.builder.api.DataNodeContainerBuilder;
\r
25 import org.opendaylight.controller.yang.parser.builder.api.SchemaNodeBuilder;
\r
26 import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder;
\r
27 import org.opendaylight.controller.yang.parser.util.RefineHolder;
\r
29 public final class UsesNodeBuilderImpl implements UsesNodeBuilder {
\r
30 private boolean isBuilt;
\r
31 private UsesNodeImpl instance;
\r
32 private final int line;
\r
33 private final DataNodeContainerBuilder parent;
\r
34 private final String groupingName;
\r
35 private SchemaPath groupingPath;
\r
36 private boolean augmenting;
\r
37 private boolean addedByUses;
\r
38 private final Set<AugmentationSchemaBuilder> addedAugments = new HashSet<AugmentationSchemaBuilder>();
\r
39 private final List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();
\r
40 private final List<RefineHolder> refines = new ArrayList<RefineHolder>();
\r
41 private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
\r
43 public UsesNodeBuilderImpl(final String groupingName, final int line, final DataNodeContainerBuilder parent) {
\r
44 this.groupingName = groupingName;
\r
46 this.parent = parent;
\r
49 public UsesNodeBuilderImpl(UsesNodeBuilder b) {
\r
50 groupingName = b.getGroupingName();
\r
52 parent = b.getParent();
\r
53 groupingPath = b.getGroupingPath();
\r
54 augmenting = b.isAugmenting();
\r
55 addedByUses = b.isAddedByUses();
\r
56 addedAugments.addAll(b.getAugmentations());
\r
57 refineBuilders.addAll(b.getRefineNodes());
\r
58 refines.addAll(b.getRefines());
\r
62 public UsesNode build() {
\r
64 instance = new UsesNodeImpl(groupingPath);
\r
65 instance.setAugmenting(augmenting);
\r
66 instance.setAddedByUses(addedByUses);
\r
69 final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();
\r
70 for (AugmentationSchemaBuilder builder : addedAugments) {
\r
71 augments.add(builder.build());
\r
73 instance.setAugmentations(augments);
\r
76 final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();
\r
77 for (SchemaNodeBuilder refineBuilder : refineBuilders) {
\r
78 SchemaNode refineNode = refineBuilder.build();
\r
79 refineNodes.put(refineNode.getPath(), refineNode);
\r
81 instance.setRefines(refineNodes);
\r
84 List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
\r
85 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
\r
86 unknownNodes.add(b.build());
\r
88 instance.setUnknownSchemaNodes(unknownNodes);
\r
96 public int getLine() {
\r
101 public DataNodeContainerBuilder getParent() {
\r
106 public SchemaPath getGroupingPath() {
\r
107 return groupingPath;
\r
111 public void setGroupingPath(SchemaPath groupingPath) {
\r
112 this.groupingPath = groupingPath;
\r
116 public String getGroupingName() {
\r
117 return groupingName;
\r
121 public Set<AugmentationSchemaBuilder> getAugmentations() {
\r
122 return addedAugments;
\r
126 public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {
\r
127 addedAugments.add(augmentBuilder);
\r
131 public boolean isAugmenting() {
\r
136 public void setAugmenting(final boolean augmenting) {
\r
137 this.augmenting = augmenting;
\r
141 public boolean isAddedByUses() {
\r
142 return addedByUses;
\r
146 public void setAddedByUses(final boolean addedByUses) {
\r
147 this.addedByUses = addedByUses;
\r
151 public List<SchemaNodeBuilder> getRefineNodes() {
\r
152 return refineBuilders;
\r
156 public void addRefineNode(SchemaNodeBuilder refineNode) {
\r
157 refineBuilders.add(refineNode);
\r
161 public List<RefineHolder> getRefines() {
\r
166 public void addRefine(RefineHolder refine) {
\r
167 refines.add(refine);
\r
170 public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
\r
171 return addedUnknownNodes;
\r
175 public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) {
\r
176 addedUnknownNodes.add(unknownNode);
\r
179 public final class UsesNodeImpl implements UsesNode {
\r
180 private final SchemaPath groupingPath;
\r
181 private Set<AugmentationSchema> augmentations = Collections.emptySet();
\r
182 private boolean augmenting;
\r
183 private boolean addedByUses;
\r
184 private Map<SchemaPath, SchemaNode> refines = Collections.emptyMap();
\r
185 private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
\r
187 private UsesNodeImpl(final SchemaPath groupingPath) {
\r
188 this.groupingPath = groupingPath;
\r
192 public SchemaPath getGroupingPath() {
\r
193 return groupingPath;
\r
197 public Set<AugmentationSchema> getAugmentations() {
\r
198 return augmentations;
\r
201 private void setAugmentations(final Set<AugmentationSchema> augmentations) {
\r
202 if (augmentations != null) {
\r
203 this.augmentations = augmentations;
\r
208 public boolean isAugmenting() {
\r
212 private void setAugmenting(final boolean augmenting) {
\r
213 this.augmenting = augmenting;
\r
217 public boolean isAddedByUses() {
\r
218 return addedByUses;
\r
221 private void setAddedByUses(final boolean addedByUses) {
\r
222 this.addedByUses = addedByUses;
\r
226 public Map<SchemaPath, SchemaNode> getRefines() {
\r
230 private void setRefines(Map<SchemaPath, SchemaNode> refines) {
\r
231 if (refines != null) {
\r
232 this.refines = refines;
\r
236 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
\r
237 return unknownNodes;
\r
240 private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
\r
241 if (unknownSchemaNodes != null) {
\r
242 this.unknownNodes = unknownSchemaNodes;
\r
246 public UsesNodeBuilder toBuilder() {
\r
247 return UsesNodeBuilderImpl.this;
\r
251 public int hashCode() {
\r
252 final int prime = 31;
\r
254 result = prime * result + ((groupingPath == null) ? 0 : groupingPath.hashCode());
\r
255 result = prime * result + ((augmentations == null) ? 0 : augmentations.hashCode());
\r
256 result = prime * result + (augmenting ? 1231 : 1237);
\r
261 public boolean equals(Object obj) {
\r
268 if (getClass() != obj.getClass()) {
\r
271 final UsesNodeImpl other = (UsesNodeImpl) obj;
\r
272 if (groupingPath == null) {
\r
273 if (other.groupingPath != null) {
\r
276 } else if (!groupingPath.equals(other.groupingPath)) {
\r
279 if (augmentations == null) {
\r
280 if (other.augmentations != null) {
\r
283 } else if (!augmentations.equals(other.augmentations)) {
\r
286 if (augmenting != other.augmenting) {
\r
293 public String toString() {
\r
294 StringBuilder sb = new StringBuilder(UsesNodeImpl.class.getSimpleName());
\r
295 sb.append("[groupingPath=" + groupingPath + "]");
\r
296 return sb.toString();
\r