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.model.parser.builder;
\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
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
30 public class GroupingBuilderImpl implements GroupingBuilder {
\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
38 GroupingBuilderImpl(QName qname) {
\r
39 this.instance = new GroupingDefinitionImpl(qname);
\r
43 public GroupingDefinition build() {
\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
49 instance.setChildNodes(childs);
\r
52 Set<GroupingDefinition> groupingDefinitions = new HashSet<GroupingDefinition>();
\r
53 for(GroupingBuilder builder : groupings) {
\r
54 groupingDefinitions.add(builder.build());
\r
56 instance.setGroupings(groupingDefinitions);
\r
59 Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();
\r
60 for (TypeDefinitionBuilder entry : addedTypedefs) {
\r
61 typedefs.add(entry.build());
\r
63 instance.setTypeDefinitions(typedefs);
\r
66 Set<UsesNode> usesNodeDefinitions = new HashSet<UsesNode>();
\r
67 for(UsesNodeBuilder builder : usesNodes) {
\r
68 usesNodeDefinitions.add(builder.build());
\r
70 instance.setUses(usesNodeDefinitions);
\r
76 public void addTypedef(TypeDefinitionBuilder type) {
\r
77 addedTypedefs.add(type);
\r
80 public void setPath(SchemaPath schemaPath) {
\r
81 instance.setPath(schemaPath);
\r
84 public void setDescription(String description) {
\r
85 instance.setDescription(description);
\r
88 public void setReference(String reference) {
\r
89 instance.setReference(reference);
\r
92 public void setStatus(Status status) {
\r
93 instance.setStatus(status);
\r
97 public void addChildNode(DataSchemaNodeBuilder childNode) {
\r
98 childNodes.add(childNode);
\r
102 public void addGrouping(GroupingBuilder grouping) {
\r
103 groupings.add(grouping);
\r
107 public void addUsesNode(UsesNodeBuilder usesBuilder) {
\r
108 usesNodes.add(usesBuilder);
\r
113 private static class GroupingDefinitionImpl implements GroupingDefinition {
\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
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
126 private GroupingDefinitionImpl(QName qname) {
\r
127 this.qname = qname;
\r
131 public QName getQName() {
\r
136 public SchemaPath getPath() {
\r
139 private void setPath(SchemaPath path) {
\r
144 public String getDescription() {
\r
145 return description;
\r
147 private void setDescription(String description) {
\r
148 this.description = description;
\r
152 public String getReference() {
\r
155 private void setReference(String reference) {
\r
156 this.reference = reference;
\r
160 public Status getStatus() {
\r
163 private void setStatus(Status status) {
\r
164 this.status = status;
\r
168 public Set<DataSchemaNode> getChildNodes() {
\r
169 return new HashSet<DataSchemaNode>(childNodes.values());
\r
171 private void setChildNodes(Map<QName, DataSchemaNode> childNodes) {
\r
172 this.childNodes = childNodes;
\r
176 public Set<GroupingDefinition> getGroupings() {
\r
179 private void setGroupings(Set<GroupingDefinition> groupings) {
\r
180 this.groupings = groupings;
\r
184 public Set<UsesNode> getUses() {
\r
187 private void setUses(Set<UsesNode> uses) {
\r
192 public Set<TypeDefinition<?>> getTypeDefinitions() {
\r
193 return typeDefinitions;
\r
195 private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {
\r
196 this.typeDefinitions = typeDefinitions;
\r
200 public List<ExtensionDefinition> getExtensionSchemaNodes() {
\r
201 // TODO Auto-generated method stub
\r
206 public DataSchemaNode getDataChildByName(QName name) {
\r
207 return childNodes.get(name);
\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
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
238 * Always returns null.
\r
241 public QName getQName() {
\r