--- /dev/null
+/*\r
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.controller.model.parser.builder;\r
+\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.opendaylight.controller.model.parser.api.DataSchemaNodeBuilder;\r
+import org.opendaylight.controller.model.parser.api.GroupingBuilder;\r
+import org.opendaylight.controller.model.parser.api.TypeDefinitionBuilder;\r
+import org.opendaylight.controller.model.parser.api.UsesNodeBuilder;\r
+import org.opendaylight.controller.yang.common.QName;\r
+import org.opendaylight.controller.yang.model.api.DataSchemaNode;\r
+import org.opendaylight.controller.yang.model.api.ExtensionDefinition;\r
+import org.opendaylight.controller.yang.model.api.GroupingDefinition;\r
+import org.opendaylight.controller.yang.model.api.SchemaPath;\r
+import org.opendaylight.controller.yang.model.api.Status;\r
+import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
+import org.opendaylight.controller.yang.model.api.UsesNode;\r
+\r
+\r
+public class GroupingBuilderImpl implements GroupingBuilder {\r
+\r
+ private final GroupingDefinitionImpl instance;\r
+ private final Set<DataSchemaNodeBuilder> childNodes = new HashSet<DataSchemaNodeBuilder>();\r
+ private final Set<GroupingBuilder> groupings = new HashSet<GroupingBuilder>();\r
+ private final Set<TypeDefinitionBuilder> addedTypedefs = new HashSet<TypeDefinitionBuilder>();\r
+ private final Set<UsesNodeBuilder> usesNodes = new HashSet<UsesNodeBuilder>();\r
+\r
+ GroupingBuilderImpl(QName qname) {\r
+ this.instance = new GroupingDefinitionImpl(qname);\r
+ }\r
+\r
+ @Override\r
+ public GroupingDefinition build() {\r
+ // CHILD NODES\r
+ Map<QName, DataSchemaNode> childs = new HashMap<QName, DataSchemaNode>();\r
+ for(DataSchemaNodeBuilder node : childNodes) {\r
+ childs.put(node.getQName(), node.build());\r
+ }\r
+ instance.setChildNodes(childs);\r
+\r
+ // GROUPINGS\r
+ Set<GroupingDefinition> groupingDefinitions = new HashSet<GroupingDefinition>();\r
+ for(GroupingBuilder builder : groupings) {\r
+ groupingDefinitions.add(builder.build());\r
+ }\r
+ instance.setGroupings(groupingDefinitions);\r
+\r
+ // TYPEDEFS\r
+ Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();\r
+ for (TypeDefinitionBuilder entry : addedTypedefs) {\r
+ typedefs.add(entry.build());\r
+ }\r
+ instance.setTypeDefinitions(typedefs);\r
+\r
+ // USES\r
+ Set<UsesNode> usesNodeDefinitions = new HashSet<UsesNode>();\r
+ for(UsesNodeBuilder builder : usesNodes) {\r
+ usesNodeDefinitions.add(builder.build());\r
+ }\r
+ instance.setUses(usesNodeDefinitions);\r
+\r
+ return instance;\r
+ }\r
+\r
+ @Override\r
+ public void addTypedef(TypeDefinitionBuilder type) {\r
+ addedTypedefs.add(type);\r
+ }\r
+ @Override\r
+ public void setPath(SchemaPath schemaPath) {\r
+ instance.setPath(schemaPath);\r
+ }\r
+ @Override\r
+ public void setDescription(String description) {\r
+ instance.setDescription(description);\r
+ }\r
+ @Override\r
+ public void setReference(String reference) {\r
+ instance.setReference(reference);\r
+ }\r
+ @Override\r
+ public void setStatus(Status status) {\r
+ instance.setStatus(status);\r
+ }\r
+\r
+ @Override\r
+ public void addChildNode(DataSchemaNodeBuilder childNode) {\r
+ childNodes.add(childNode);\r
+ }\r
+\r
+ @Override\r
+ public void addGrouping(GroupingBuilder grouping) {\r
+ groupings.add(grouping);\r
+ }\r
+\r
+ @Override\r
+ public void addUsesNode(UsesNodeBuilder usesBuilder) {\r
+ usesNodes.add(usesBuilder);\r
+ }\r
+\r
+\r
+\r
+ private static class GroupingDefinitionImpl implements GroupingDefinition {\r
+\r
+ private final QName qname;\r
+ private SchemaPath path;\r
+ private String description;\r
+ private String reference;\r
+ private Status status;\r
+\r
+ private Map<QName, DataSchemaNode> childNodes;\r
+ private Set<GroupingDefinition> groupings;\r
+ private Set<TypeDefinition<?>> typeDefinitions;\r
+ private Set<UsesNode> uses;\r
+\r
+ private GroupingDefinitionImpl(QName qname) {\r
+ this.qname = qname;\r
+ }\r
+\r
+ @Override\r
+ public QName getQName() {\r
+ return qname;\r
+ }\r
+\r
+ @Override\r
+ public SchemaPath getPath() {\r
+ return path;\r
+ }\r
+ private void setPath(SchemaPath path) {\r
+ this.path = path;\r
+ }\r
+\r
+ @Override\r
+ public String getDescription() {\r
+ return description;\r
+ }\r
+ private void setDescription(String description) {\r
+ this.description = description;\r
+ }\r
+\r
+ @Override\r
+ public String getReference() {\r
+ return reference;\r
+ }\r
+ private void setReference(String reference) {\r
+ this.reference = reference;\r
+ }\r
+\r
+ @Override\r
+ public Status getStatus() {\r
+ return status;\r
+ }\r
+ private void setStatus(Status status) {\r
+ this.status = status;\r
+ }\r
+\r
+ @Override\r
+ public Set<DataSchemaNode> getChildNodes() {\r
+ return new HashSet<DataSchemaNode>(childNodes.values());\r
+ }\r
+ private void setChildNodes(Map<QName, DataSchemaNode> childNodes) {\r
+ this.childNodes = childNodes;\r
+ }\r
+\r
+ @Override\r
+ public Set<GroupingDefinition> getGroupings() {\r
+ return groupings;\r
+ }\r
+ private void setGroupings(Set<GroupingDefinition> groupings) {\r
+ this.groupings = groupings;\r
+ }\r
+\r
+ @Override\r
+ public Set<UsesNode> getUses() {\r
+ return uses;\r
+ }\r
+ private void setUses(Set<UsesNode> uses) {\r
+ this.uses = uses;\r
+ }\r
+\r
+ @Override\r
+ public Set<TypeDefinition<?>> getTypeDefinitions() {\r
+ return typeDefinitions;\r
+ }\r
+ private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {\r
+ this.typeDefinitions = typeDefinitions;\r
+ }\r
+\r
+ @Override\r
+ public List<ExtensionDefinition> getExtensionSchemaNodes() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public DataSchemaNode getDataChildByName(QName name) {\r
+ return childNodes.get(name);\r
+ }\r
+\r
+ @Override\r
+ public DataSchemaNode getDataChildByName(String name) {\r
+ DataSchemaNode result = null;\r
+ for(Map.Entry<QName, DataSchemaNode> entry : childNodes.entrySet()) {\r
+ if(entry.getKey().getLocalName().equals(name)) {\r
+ result = entry.getValue();\r
+ break;\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append(GroupingDefinitionImpl.class.getSimpleName() +"[\n");\r
+ sb.append("qname="+ qname +", \n");\r
+ sb.append("path="+ path +", \n");\r
+ sb.append("description="+ description +", \n");\r
+ sb.append("reference="+ reference +", \n");\r
+ sb.append("status="+ status +", \n");\r
+ sb.append("childNodes="+ childNodes.values() +", \n");\r
+ sb.append("groupings="+ groupings +"]");\r
+ return sb.toString();\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Always returns null.\r
+ */\r
+ @Override\r
+ public QName getQName() {\r
+ return null;\r
+ }\r
+\r
+}\r