Refactored yang-model-parser-impl to improve readability. SchemaContextImpl moved...
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / RpcDefinitionBuilder.java
index 39dde73680482a716de697e59d11dcb8ec13fac2..003ccced4ab2d72476ff8360efea25e9e3e62b73 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder
 
 public class RpcDefinitionBuilder implements SchemaNodeBuilder,
         TypeDefinitionAwareBuilder {
+    private boolean built;
     private final RpcDefinitionImpl instance;
     private final int line;
     private final QName qname;
@@ -46,34 +47,37 @@ public class RpcDefinitionBuilder implements SchemaNodeBuilder,
 
     @Override
     public RpcDefinition build() {
-        final ContainerSchemaNode input = inputBuilder.build();
-        final ContainerSchemaNode output = outputBuilder.build();
-        instance.setInput(input);
-        instance.setOutput(output);
-
-        instance.setPath(schemaPath);
+        if(!built) {
+            final ContainerSchemaNode input = inputBuilder.build();
+            final ContainerSchemaNode output = outputBuilder.build();
+            instance.setInput(input);
+            instance.setOutput(output);
+
+            instance.setPath(schemaPath);
+
+            // TYPEDEFS
+            final Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();
+            for (TypeDefinitionBuilder entry : addedTypedefs) {
+                typedefs.add(entry.build());
+            }
+            instance.setTypeDefinitions(typedefs);
 
-        // TYPEDEFS
-        final Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();
-        for (TypeDefinitionBuilder entry : addedTypedefs) {
-            typedefs.add(entry.build());
-        }
-        instance.setTypeDefinitions(typedefs);
+            // GROUPINGS
+            final Set<GroupingDefinition> groupings = new HashSet<GroupingDefinition>();
+            for (GroupingBuilder entry : addedGroupings) {
+                groupings.add(entry.build());
+            }
+            instance.setGroupings(groupings);
 
-        // GROUPINGS
-        final Set<GroupingDefinition> groupings = new HashSet<GroupingDefinition>();
-        for (GroupingBuilder entry : addedGroupings) {
-            groupings.add(entry.build());
-        }
-        instance.setGroupings(groupings);
+            // UNKNOWN NODES
+            final List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
+            for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+                unknownNodes.add(b.build());
+            }
+            instance.setUnknownSchemaNodes(unknownNodes);
 
-        // UNKNOWN NODES
-        final List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
-        for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
-            unknownNodes.add(b.build());
+            built = true;
         }
-        instance.setUnknownSchemaNodes(unknownNodes);
-
         return instance;
     }
 
@@ -154,8 +158,7 @@ public class RpcDefinitionBuilder implements SchemaNodeBuilder,
         return true;
     }
 
-    private static class RpcDefinitionImpl implements RpcDefinition {
-
+    private class RpcDefinitionImpl implements RpcDefinition {
         private final QName qname;
         private SchemaPath path;
         private String description;
@@ -264,6 +267,7 @@ public class RpcDefinitionBuilder implements SchemaNodeBuilder,
             final int prime = 31;
             int result = 1;
             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
+            result = prime * result + ((path == null) ? 0 : path.hashCode());
             return result;
         }
 
@@ -286,6 +290,13 @@ public class RpcDefinitionBuilder implements SchemaNodeBuilder,
             } else if (!qname.equals(other.qname)) {
                 return false;
             }
+            if (path == null) {
+                if (other.path != null) {
+                    return false;
+                }
+            } else if (!path.equals(other.path)) {
+                return false;
+            }
             return true;
         }