850938161bf4c25cc30fd5d7e7270d0056d9f596
[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.UsesNode;\r
22 import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;\r
23 import org.opendaylight.controller.yang.parser.builder.api.SchemaNodeBuilder;\r
24 import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder;\r
25 import org.opendaylight.controller.yang.parser.util.RefineHolder;\r
26 \r
27 public final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
28     private boolean isBuilt;\r
29     private UsesNodeImpl instance;\r
30     private final int line;\r
31     private SchemaPath schemaPath;\r
32     private final String groupingName;\r
33     private SchemaPath groupingPath;\r
34     private boolean augmenting;\r
35     private final Set<AugmentationSchemaBuilder> addedAugments = new HashSet<AugmentationSchemaBuilder>();\r
36     private List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();\r
37     private List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
38 \r
39     public UsesNodeBuilderImpl(final String groupingName, final int line) {\r
40         this.groupingName = groupingName;\r
41         this.line = line;\r
42     }\r
43 \r
44     @Override\r
45     public UsesNode build() {\r
46         if (!isBuilt) {\r
47             instance = new UsesNodeImpl(groupingPath);\r
48             instance.setAugmenting(augmenting);\r
49 \r
50             // AUGMENTATIONS\r
51             final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
52             for (AugmentationSchemaBuilder builder : addedAugments) {\r
53                 augments.add(builder.build());\r
54             }\r
55             instance.setAugmentations(augments);\r
56 \r
57             // REFINES\r
58             final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();\r
59             for (SchemaNodeBuilder refineBuilder : refineBuilders) {\r
60                 SchemaNode refineNode = refineBuilder.build();\r
61                 refineNodes.put(refineNode.getPath(), refineNode);\r
62             }\r
63             instance.setRefines(refineNodes);\r
64 \r
65             isBuilt = true;\r
66         }\r
67         return instance;\r
68     }\r
69 \r
70     @Override\r
71     public int getLine() {\r
72         return line;\r
73     }\r
74 \r
75     @Override\r
76     public void setGroupingPath(SchemaPath groupingPath) {\r
77         this.groupingPath = groupingPath;\r
78     }\r
79 \r
80     @Override\r
81     public SchemaPath getPath() {\r
82         return schemaPath;\r
83     }\r
84 \r
85     @Override\r
86     public void setPath(SchemaPath path) {\r
87         this.schemaPath = path;\r
88     }\r
89 \r
90     @Override\r
91     public String getGroupingName() {\r
92         return groupingName;\r
93     }\r
94 \r
95     @Override\r
96     public Set<AugmentationSchemaBuilder> getAugmentations() {\r
97         return addedAugments;\r
98     }\r
99 \r
100     @Override\r
101     public void addAugment(final AugmentationSchemaBuilder augmentBuilder) {\r
102         addedAugments.add(augmentBuilder);\r
103     }\r
104 \r
105     @Override\r
106     public boolean isAugmenting() {\r
107         return augmenting;\r
108     }\r
109 \r
110     @Override\r
111     public void setAugmenting(final boolean augmenting) {\r
112         this.augmenting = augmenting;\r
113     }\r
114 \r
115     @Override\r
116     public List<SchemaNodeBuilder> getRefineNodes() {\r
117         return refineBuilders;\r
118     }\r
119 \r
120     @Override\r
121     public void addRefineNode(SchemaNodeBuilder refineNode) {\r
122         refineBuilders.add(refineNode);\r
123     }\r
124 \r
125     @Override\r
126     public List<RefineHolder> getRefines() {\r
127         return refines;\r
128     }\r
129 \r
130     @Override\r
131     public void addRefine(RefineHolder refine) {\r
132         refines.add(refine);\r
133     }\r
134 \r
135 \r
136     private final class UsesNodeImpl implements UsesNode {\r
137         private final SchemaPath groupingPath;\r
138         private Set<AugmentationSchema> augmentations = Collections.emptySet();\r
139         private boolean augmenting;\r
140         private Map<SchemaPath, SchemaNode> refines = Collections.emptyMap();\r
141 \r
142         private UsesNodeImpl(final SchemaPath groupingPath) {\r
143             this.groupingPath = groupingPath;\r
144         }\r
145 \r
146         @Override\r
147         public SchemaPath getGroupingPath() {\r
148             return groupingPath;\r
149         }\r
150 \r
151         @Override\r
152         public Set<AugmentationSchema> getAugmentations() {\r
153             return augmentations;\r
154         }\r
155 \r
156         private void setAugmentations(\r
157                 final Set<AugmentationSchema> augmentations) {\r
158             if (augmentations != null) {\r
159                 this.augmentations = augmentations;\r
160             }\r
161         }\r
162 \r
163         @Override\r
164         public boolean isAugmenting() {\r
165             return augmenting;\r
166         }\r
167 \r
168         private void setAugmenting(final boolean augmenting) {\r
169             this.augmenting = augmenting;\r
170         }\r
171 \r
172         @Override\r
173         public Map<SchemaPath, SchemaNode> getRefines() {\r
174             return refines;\r
175         }\r
176 \r
177         private void setRefines(Map<SchemaPath, SchemaNode> refines) {\r
178             if (refines != null) {\r
179                 this.refines = refines;\r
180             }\r
181         }\r
182 \r
183         @Override\r
184         public int hashCode() {\r
185             final int prime = 31;\r
186             int result = 1;\r
187             result = prime * result\r
188                     + ((groupingPath == null) ? 0 : groupingPath.hashCode());\r
189             result = prime * result\r
190                     + ((augmentations == null) ? 0 : augmentations.hashCode());\r
191             result = prime * result + (augmenting ? 1231 : 1237);\r
192             return result;\r
193         }\r
194 \r
195         @Override\r
196         public boolean equals(Object obj) {\r
197             if (this == obj) {\r
198                 return true;\r
199             }\r
200             if (obj == null) {\r
201                 return false;\r
202             }\r
203             if (getClass() != obj.getClass()) {\r
204                 return false;\r
205             }\r
206             final UsesNodeImpl other = (UsesNodeImpl) obj;\r
207             if (groupingPath == null) {\r
208                 if (other.groupingPath != null) {\r
209                     return false;\r
210                 }\r
211             } else if (!groupingPath.equals(other.groupingPath)) {\r
212                 return false;\r
213             }\r
214             if (augmentations == null) {\r
215                 if (other.augmentations != null) {\r
216                     return false;\r
217                 }\r
218             } else if (!augmentations.equals(other.augmentations)) {\r
219                 return false;\r
220             }\r
221             if (augmenting != other.augmenting) {\r
222                 return false;\r
223             }\r
224             return true;\r
225         }\r
226 \r
227         @Override\r
228         public String toString() {\r
229             StringBuilder sb = new StringBuilder(\r
230                     UsesNodeImpl.class.getSimpleName());\r
231             sb.append("[groupingPath=" + groupingPath + "]");\r
232             return sb.toString();\r
233         }\r
234     }\r
235 }\r