Merge "Add IfNewHostNotify to DeviceManager"
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / ChoiceBuilder.java
index 7f3680ee533c81bc6f0677e394dc8abd88bce1f9..a9e2b3b0feb8c09340901df26adfb6efc03a8dba 100644 (file)
@@ -23,14 +23,10 @@ import org.opendaylight.controller.yang.model.api.Status;
 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;
 import org.opendaylight.controller.yang.parser.builder.api.AugmentationTargetBuilder;
-import org.opendaylight.controller.yang.parser.builder.api.ChildNodeBuilder;
 import org.opendaylight.controller.yang.parser.builder.api.DataSchemaNodeBuilder;
-import org.opendaylight.controller.yang.parser.builder.api.GroupingBuilder;
-import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder;
-import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder;
 
-public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
-        AugmentationTargetBuilder {
+public final class ChoiceBuilder implements DataSchemaNodeBuilder, AugmentationTargetBuilder {
+    private boolean built;
     private final ChoiceNodeImpl instance;
     private final int line;
     // SchemaNode args
@@ -44,9 +40,6 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
     private boolean augmenting;
     private boolean configuration;
     private final ConstraintsBuilder constraints;
-    // DataNodeContainer args
-    private final Set<TypeDefinitionBuilder> addedTypedefs = new HashSet<TypeDefinitionBuilder>();
-    private final Set<UsesNodeBuilder> addedUsesNodes = new HashSet<UsesNodeBuilder>();
     // AugmentationTarget args
     private final Set<AugmentationSchemaBuilder> addedAugmentations = new HashSet<AugmentationSchemaBuilder>();
     // ChoiceNode args
@@ -62,36 +55,39 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
 
     @Override
     public ChoiceNode build() {
-        instance.setPath(schemaPath);
-        instance.setDescription(description);
-        instance.setReference(reference);
-        instance.setStatus(status);
-        instance.setAugmenting(augmenting);
-        instance.setConfiguration(configuration);
-        instance.setConstraints(constraints.build());
-        instance.setDefaultCase(defaultCase);
-
-        // CASES
-        final Set<ChoiceCaseNode> choiceCases = new HashSet<ChoiceCaseNode>();
-        for (ChoiceCaseBuilder caseBuilder : cases) {
-            choiceCases.add(caseBuilder.build());
-        }
-        instance.setCases(choiceCases);
+        if (!built) {
+            instance.setPath(schemaPath);
+            instance.setDescription(description);
+            instance.setReference(reference);
+            instance.setStatus(status);
+            instance.setAugmenting(augmenting);
+            instance.setConfiguration(configuration);
+            instance.setConstraints(constraints.build());
+            instance.setDefaultCase(defaultCase);
+
+            // CASES
+            final Set<ChoiceCaseNode> choiceCases = new HashSet<ChoiceCaseNode>();
+            for (ChoiceCaseBuilder caseBuilder : cases) {
+                choiceCases.add(caseBuilder.build());
+            }
+            instance.setCases(choiceCases);
 
-        // AUGMENTATIONS
-        final Set<AugmentationSchema> augmentations = new HashSet<AugmentationSchema>();
-        for (AugmentationSchemaBuilder builder : addedAugmentations) {
-            augmentations.add(builder.build());
-        }
-        instance.setAvailableAugmentations(augmentations);
+            // AUGMENTATIONS
+            final Set<AugmentationSchema> augmentations = new HashSet<AugmentationSchema>();
+            for (AugmentationSchemaBuilder builder : addedAugmentations) {
+                augmentations.add(builder.build());
+            }
+            instance.setAvailableAugmentations(augmentations);
 
-        // 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());
+            }
+            instance.setUnknownSchemaNodes(unknownNodes);
 
+            built = true;
+        }
         return instance;
     }
 
@@ -104,7 +100,6 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
         return cases;
     }
 
-    @Override
     public void addChildNode(DataSchemaNodeBuilder childNode) {
         if (!(childNode instanceof ChoiceCaseBuilder)) {
             ChoiceCaseBuilder caseBuilder = new ChoiceCaseBuilder(
@@ -121,31 +116,6 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
         return qname;
     }
 
-    /**
-     * Choice can not contains grouping statements, so this method always
-     * returns an empty set.
-     *
-     * @return
-     */
-    public Set<GroupingBuilder> getGroupings() {
-        return Collections.emptySet();
-    }
-
-    @Override
-    public void addGrouping(GroupingBuilder groupingBuilder) {
-        throw new IllegalStateException(
-                "Can not add grouping to 'choice' node.");
-    }
-
-    public Set<TypeDefinitionBuilder> getTypedefs() {
-        return addedTypedefs;
-    }
-
-    @Override
-    public void addTypedef(final TypeDefinitionBuilder type) {
-        addedTypedefs.add(type);
-    }
-
     public SchemaPath getPath() {
         return schemaPath;
     }
@@ -207,15 +177,6 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
         return constraints;
     }
 
-    public Set<UsesNodeBuilder> getUsesNodes() {
-        return addedUsesNodes;
-    }
-
-    @Override
-    public void addUsesNode(UsesNodeBuilder usesNodeBuilder) {
-        addedUsesNodes.add(usesNodeBuilder);
-    }
-
     public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
         return addedUnknownNodes;
     }
@@ -242,12 +203,8 @@ public class ChoiceBuilder implements DataSchemaNodeBuilder, ChildNodeBuilder,
         this.defaultCase = defaultCase;
     }
 
-    @Override
-    public Set<DataSchemaNodeBuilder> getChildNodes() {
-        return new HashSet<DataSchemaNodeBuilder>(cases);
-    }
 
-    private static class ChoiceNodeImpl implements ChoiceNode {
+    private final class ChoiceNodeImpl implements ChoiceNode {
         private final QName qname;
         private SchemaPath path;
         private String description;