Initial opendaylight infrastructure commit!!
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / model / parser / builder / GroupingBuilderImpl.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.model.parser.builder;\r
9 \r
10 import java.util.HashMap;\r
11 import java.util.HashSet;\r
12 import java.util.List;\r
13 import java.util.Map;\r
14 import java.util.Set;\r
15 \r
16 import org.opendaylight.controller.model.parser.api.DataSchemaNodeBuilder;\r
17 import org.opendaylight.controller.model.parser.api.GroupingBuilder;\r
18 import org.opendaylight.controller.model.parser.api.TypeDefinitionBuilder;\r
19 import org.opendaylight.controller.model.parser.api.UsesNodeBuilder;\r
20 import org.opendaylight.controller.yang.common.QName;\r
21 import org.opendaylight.controller.yang.model.api.DataSchemaNode;\r
22 import org.opendaylight.controller.yang.model.api.ExtensionDefinition;\r
23 import org.opendaylight.controller.yang.model.api.GroupingDefinition;\r
24 import org.opendaylight.controller.yang.model.api.SchemaPath;\r
25 import org.opendaylight.controller.yang.model.api.Status;\r
26 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
27 import org.opendaylight.controller.yang.model.api.UsesNode;\r
28 \r
29 \r
30 public class GroupingBuilderImpl implements GroupingBuilder {\r
31 \r
32         private final GroupingDefinitionImpl instance;\r
33         private final Set<DataSchemaNodeBuilder> childNodes = new HashSet<DataSchemaNodeBuilder>();\r
34         private final Set<GroupingBuilder> groupings = new HashSet<GroupingBuilder>();\r
35         private final Set<TypeDefinitionBuilder> addedTypedefs = new HashSet<TypeDefinitionBuilder>();\r
36         private final Set<UsesNodeBuilder> usesNodes = new HashSet<UsesNodeBuilder>();\r
37 \r
38         GroupingBuilderImpl(QName qname) {\r
39                 this.instance = new GroupingDefinitionImpl(qname);\r
40         }\r
41 \r
42         @Override\r
43         public GroupingDefinition build() {\r
44                 // CHILD NODES\r
45                 Map<QName, DataSchemaNode> childs = new HashMap<QName, DataSchemaNode>();\r
46                 for(DataSchemaNodeBuilder node : childNodes) {\r
47                         childs.put(node.getQName(), node.build());\r
48                 }\r
49                 instance.setChildNodes(childs);\r
50 \r
51                 // GROUPINGS\r
52                 Set<GroupingDefinition> groupingDefinitions = new HashSet<GroupingDefinition>();\r
53                 for(GroupingBuilder builder : groupings) {\r
54                         groupingDefinitions.add(builder.build());\r
55                 }\r
56                 instance.setGroupings(groupingDefinitions);\r
57 \r
58                 // TYPEDEFS\r
59                 Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();\r
60                 for (TypeDefinitionBuilder entry : addedTypedefs) {\r
61                         typedefs.add(entry.build());\r
62                 }\r
63                 instance.setTypeDefinitions(typedefs);\r
64 \r
65                 // USES\r
66                 Set<UsesNode> usesNodeDefinitions = new HashSet<UsesNode>();\r
67                 for(UsesNodeBuilder builder : usesNodes) {\r
68                         usesNodeDefinitions.add(builder.build());\r
69                 }\r
70                 instance.setUses(usesNodeDefinitions);\r
71 \r
72                 return instance;\r
73         }\r
74 \r
75         @Override\r
76         public void addTypedef(TypeDefinitionBuilder type) {\r
77                 addedTypedefs.add(type);\r
78         }\r
79         @Override\r
80         public void setPath(SchemaPath schemaPath) {\r
81                 instance.setPath(schemaPath);\r
82         }\r
83         @Override\r
84         public void setDescription(String description) {\r
85                 instance.setDescription(description);\r
86         }\r
87         @Override\r
88         public void setReference(String reference) {\r
89                 instance.setReference(reference);\r
90         }\r
91         @Override\r
92         public void setStatus(Status status) {\r
93                 instance.setStatus(status);\r
94         }\r
95 \r
96         @Override\r
97         public void addChildNode(DataSchemaNodeBuilder childNode) {\r
98                 childNodes.add(childNode);\r
99         }\r
100 \r
101         @Override\r
102         public void addGrouping(GroupingBuilder grouping) {\r
103                 groupings.add(grouping);\r
104         }\r
105 \r
106         @Override\r
107         public void addUsesNode(UsesNodeBuilder usesBuilder) {\r
108                 usesNodes.add(usesBuilder);\r
109         }\r
110 \r
111 \r
112 \r
113         private static class GroupingDefinitionImpl implements GroupingDefinition {\r
114 \r
115                 private final QName qname;\r
116                 private SchemaPath path;\r
117                 private String description;\r
118                 private String reference;\r
119                 private Status status;\r
120 \r
121                 private Map<QName, DataSchemaNode> childNodes;\r
122                 private Set<GroupingDefinition> groupings;\r
123                 private Set<TypeDefinition<?>> typeDefinitions;\r
124                 private Set<UsesNode> uses;\r
125 \r
126                 private GroupingDefinitionImpl(QName qname) {\r
127                         this.qname = qname;\r
128                 }\r
129 \r
130                 @Override\r
131                 public QName getQName() {\r
132                         return qname;\r
133                 }\r
134 \r
135                 @Override\r
136                 public SchemaPath getPath() {\r
137                         return path;\r
138                 }\r
139                 private void setPath(SchemaPath path) {\r
140                         this.path = path;\r
141                 }\r
142 \r
143                 @Override\r
144                 public String getDescription() {\r
145                         return description;\r
146                 }\r
147                 private void setDescription(String description) {\r
148                         this.description = description;\r
149                 }\r
150 \r
151                 @Override\r
152                 public String getReference() {\r
153                         return reference;\r
154                 }\r
155                 private void setReference(String reference) {\r
156                         this.reference = reference;\r
157                 }\r
158 \r
159                 @Override\r
160                 public Status getStatus() {\r
161                         return status;\r
162                 }\r
163                 private void setStatus(Status status) {\r
164                         this.status = status;\r
165                 }\r
166 \r
167                 @Override\r
168                 public Set<DataSchemaNode> getChildNodes() {\r
169                         return new HashSet<DataSchemaNode>(childNodes.values());\r
170                 }\r
171                 private void setChildNodes(Map<QName, DataSchemaNode> childNodes) {\r
172                         this.childNodes = childNodes;\r
173                 }\r
174 \r
175                 @Override\r
176                 public Set<GroupingDefinition> getGroupings() {\r
177                         return groupings;\r
178                 }\r
179                 private void setGroupings(Set<GroupingDefinition> groupings) {\r
180                         this.groupings = groupings;\r
181                 }\r
182 \r
183                 @Override\r
184                 public Set<UsesNode> getUses() {\r
185                         return uses;\r
186                 }\r
187                 private void setUses(Set<UsesNode> uses) {\r
188                         this.uses = uses;\r
189                 }\r
190 \r
191                 @Override\r
192                 public Set<TypeDefinition<?>> getTypeDefinitions() {\r
193                         return typeDefinitions;\r
194                 }\r
195                 private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {\r
196                         this.typeDefinitions = typeDefinitions;\r
197                 }\r
198 \r
199                 @Override\r
200                 public List<ExtensionDefinition> getExtensionSchemaNodes() {\r
201                         // TODO Auto-generated method stub\r
202                         return null;\r
203                 }\r
204 \r
205                 @Override\r
206                 public DataSchemaNode getDataChildByName(QName name) {\r
207                         return childNodes.get(name);\r
208                 }\r
209 \r
210                 @Override\r
211                 public DataSchemaNode getDataChildByName(String name) {\r
212                         DataSchemaNode result = null;\r
213                         for(Map.Entry<QName, DataSchemaNode> entry : childNodes.entrySet()) {\r
214                                 if(entry.getKey().getLocalName().equals(name)) {\r
215                                         result = entry.getValue();\r
216                                         break;\r
217                                 }\r
218                         }\r
219                         return result;\r
220                 }\r
221 \r
222                 @Override\r
223                 public String toString() {\r
224                         StringBuilder sb = new StringBuilder();\r
225                         sb.append(GroupingDefinitionImpl.class.getSimpleName() +"[\n");\r
226                         sb.append("qname="+ qname +", \n");\r
227                         sb.append("path="+ path +", \n");\r
228                         sb.append("description="+ description +", \n");\r
229                         sb.append("reference="+ reference +", \n");\r
230                         sb.append("status="+ status +", \n");\r
231                         sb.append("childNodes="+ childNodes.values() +", \n");\r
232                         sb.append("groupings="+ groupings +"]");\r
233                         return sb.toString();\r
234                 }\r
235         }\r
236 \r
237         /**\r
238          * Always returns null.\r
239          */\r
240         @Override\r
241         public QName getQName() {\r
242                 return null;\r
243         }\r
244 \r
245 }\r