77a465d5fd3346ab41657c84421f5cd35c1c6e98
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / UsesNodeBuilderImpl.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\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
7  */\r
8 package org.opendaylight.controller.yang.parser.builder.impl;\r
9 \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
17 \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
28 \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
42 \r
43     public UsesNodeBuilderImpl(final String groupingName, final int line, final DataNodeContainerBuilder parent) {\r
44         this.groupingName = groupingName;\r
45         this.line = line;\r
46         this.parent = parent;\r
47     }\r
48 \r
49     public UsesNodeBuilderImpl(UsesNodeBuilder b) {\r
50         groupingName = b.getGroupingName();\r
51         line = b.getLine();\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
59     }\r
60 \r
61     @Override\r
62     public UsesNode build() {\r
63         if (!isBuilt) {\r
64             instance = new UsesNodeImpl(groupingPath);\r
65             instance.setAugmenting(augmenting);\r
66             instance.setAddedByUses(addedByUses);\r
67 \r
68             // AUGMENTATIONS\r
69             final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
70             for (AugmentationSchemaBuilder builder : addedAugments) {\r
71                 augments.add(builder.build());\r
72             }\r
73             instance.setAugmentations(augments);\r
74 \r
75             // REFINES\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
80             }\r
81             instance.setRefines(refineNodes);\r
82 \r
83             // UNKNOWN NODES\r
84             List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();\r
85             for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {\r
86                 unknownNodes.add(b.build());\r
87             }\r
88             instance.setUnknownSchemaNodes(unknownNodes);\r
89 \r
90             isBuilt = true;\r
91         }\r
92         return instance;\r
93     }\r
94 \r
95     @Override\r
96     public int getLine() {\r
97         return line;\r
98     }\r
99 \r
100     @Override\r
101     public DataNodeContainerBuilder getParent() {\r
102         return parent;\r
103     }\r
104 \r
105     @Override\r
106     public SchemaPath getGroupingPath() {\r
107         return groupingPath;\r
108     }\r
109 \r
110     @Override\r
111     public void setGroupingPath(SchemaPath groupingPath) {\r
112         this.groupingPath = groupingPath;\r
113     }\r
114 \r
115     @Override\r
116     public String getGroupingName() {\r
117         return groupingName;\r
118     }\r
119 \r
120     @Override\r
121     public Set<AugmentationSchemaBuilder> getAugmentations() {\r
122         return addedAugments;\r
123     }\r
124 \r
125     @Override\r
126     public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {\r
127         addedAugments.add(augmentBuilder);\r
128     }\r
129 \r
130     @Override\r
131     public boolean isAugmenting() {\r
132         return augmenting;\r
133     }\r
134 \r
135     @Override\r
136     public void setAugmenting(final boolean augmenting) {\r
137         this.augmenting = augmenting;\r
138     }\r
139 \r
140     @Override\r
141     public boolean isAddedByUses() {\r
142         return addedByUses;\r
143     }\r
144 \r
145     @Override\r
146     public void setAddedByUses(final boolean addedByUses) {\r
147         this.addedByUses = addedByUses;\r
148     }\r
149 \r
150     @Override\r
151     public List<SchemaNodeBuilder> getRefineNodes() {\r
152         return refineBuilders;\r
153     }\r
154 \r
155     @Override\r
156     public void addRefineNode(SchemaNodeBuilder refineNode) {\r
157         refineBuilders.add(refineNode);\r
158     }\r
159 \r
160     @Override\r
161     public List<RefineHolder> getRefines() {\r
162         return refines;\r
163     }\r
164 \r
165     @Override\r
166     public void addRefine(RefineHolder refine) {\r
167         refines.add(refine);\r
168     }\r
169 \r
170     public List<UnknownSchemaNodeBuilder> getUnknownNodes() {\r
171         return addedUnknownNodes;\r
172     }\r
173 \r
174     @Override\r
175     public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) {\r
176         addedUnknownNodes.add(unknownNode);\r
177     }\r
178 \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
186 \r
187         private UsesNodeImpl(final SchemaPath groupingPath) {\r
188             this.groupingPath = groupingPath;\r
189         }\r
190 \r
191         @Override\r
192         public SchemaPath getGroupingPath() {\r
193             return groupingPath;\r
194         }\r
195 \r
196         @Override\r
197         public Set<AugmentationSchema> getAugmentations() {\r
198             return augmentations;\r
199         }\r
200 \r
201         private void setAugmentations(final Set<AugmentationSchema> augmentations) {\r
202             if (augmentations != null) {\r
203                 this.augmentations = augmentations;\r
204             }\r
205         }\r
206 \r
207         @Override\r
208         public boolean isAugmenting() {\r
209             return augmenting;\r
210         }\r
211 \r
212         private void setAugmenting(final boolean augmenting) {\r
213             this.augmenting = augmenting;\r
214         }\r
215 \r
216         @Override\r
217         public boolean isAddedByUses() {\r
218             return addedByUses;\r
219         }\r
220 \r
221         private void setAddedByUses(final boolean addedByUses) {\r
222             this.addedByUses = addedByUses;\r
223         }\r
224 \r
225         @Override\r
226         public Map<SchemaPath, SchemaNode> getRefines() {\r
227             return refines;\r
228         }\r
229 \r
230         private void setRefines(Map<SchemaPath, SchemaNode> refines) {\r
231             if (refines != null) {\r
232                 this.refines = refines;\r
233             }\r
234         }\r
235 \r
236         public List<UnknownSchemaNode> getUnknownSchemaNodes() {\r
237             return unknownNodes;\r
238         }\r
239 \r
240         private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {\r
241             if (unknownSchemaNodes != null) {\r
242                 this.unknownNodes = unknownSchemaNodes;\r
243             }\r
244         }\r
245 \r
246         public UsesNodeBuilder toBuilder() {\r
247             return UsesNodeBuilderImpl.this;\r
248         }\r
249 \r
250         @Override\r
251         public int hashCode() {\r
252             final int prime = 31;\r
253             int result = 1;\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
257             return result;\r
258         }\r
259 \r
260         @Override\r
261         public boolean equals(Object obj) {\r
262             if (this == obj) {\r
263                 return true;\r
264             }\r
265             if (obj == null) {\r
266                 return false;\r
267             }\r
268             if (getClass() != obj.getClass()) {\r
269                 return false;\r
270             }\r
271             final UsesNodeImpl other = (UsesNodeImpl) obj;\r
272             if (groupingPath == null) {\r
273                 if (other.groupingPath != null) {\r
274                     return false;\r
275                 }\r
276             } else if (!groupingPath.equals(other.groupingPath)) {\r
277                 return false;\r
278             }\r
279             if (augmentations == null) {\r
280                 if (other.augmentations != null) {\r
281                     return false;\r
282                 }\r
283             } else if (!augmentations.equals(other.augmentations)) {\r
284                 return false;\r
285             }\r
286             if (augmenting != other.augmenting) {\r
287                 return false;\r
288             }\r
289             return true;\r
290         }\r
291 \r
292         @Override\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
297         }\r
298     }\r
299 }\r