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