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
diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/model/parser/builder/GroupingBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/model/parser/builder/GroupingBuilderImpl.java
new file mode 100644 (file)
index 0000000..5ffe307
--- /dev/null
@@ -0,0 +1,245 @@
+/*\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