Merge "Formatting cleanup of POM files"
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / UnionTypeBuilder.java
index fd9a3aabc84cc5d10b7d1d41cca9a4b5787de809..811b77566836b0f95ad9844562117bc239b569a1 100644 (file)
@@ -22,8 +22,8 @@ import org.opendaylight.controller.yang.model.api.type.PatternConstraint;
 import org.opendaylight.controller.yang.model.api.type.RangeConstraint;
 import org.opendaylight.controller.yang.model.util.UnionType;
 import org.opendaylight.controller.yang.parser.builder.api.AbstractTypeAwareBuilder;
-import org.opendaylight.controller.yang.parser.builder.api.Builder;
 import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder;
+import org.opendaylight.controller.yang.parser.util.YangParseException;
 
 /**
  * Builder for YANG union type. User can add type to this union as
@@ -32,11 +32,14 @@ import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder
  * types.
  */
 public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
-        TypeDefinitionBuilder, Builder {
+        TypeDefinitionBuilder {
+    private final static String NAME = "union";
+
     private final int line;
     private final List<TypeDefinition<?>> types;
     private final List<TypeDefinitionBuilder> typedefs;
     private final UnionType instance;
+    private boolean built;
 
     private final List<String> actualPath;
     private final URI namespace;
@@ -89,40 +92,41 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public UnionType build() {
-        for (TypeDefinitionBuilder tdb : typedefs) {
-            types.add(tdb.build());
+        if (built) {
+            return instance;
+        } else {
+            for (TypeDefinitionBuilder tdb : typedefs) {
+                types.add(tdb.build());
+            }
+            built = true;
+            return instance;
         }
-        return instance;
     }
 
     @Override
     public void setPath(final SchemaPath schemaPath) {
-        throw new IllegalStateException("Can not set path to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set path to " + NAME);
     }
 
     @Override
     public void setDescription(final String description) {
-        throw new IllegalStateException("Can not set description to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set description to " + NAME);
     }
 
     @Override
     public void setReference(final String reference) {
-        throw new IllegalStateException("Can not set reference to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set reference to " + NAME);
     }
 
     @Override
     public void setStatus(final Status status) {
-        throw new IllegalStateException("Can not set status to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set status to " + NAME);
     }
 
     @Override
     public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) {
-        throw new IllegalStateException("Can not add unknown node to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not add unknown node to "
+                + NAME);
     }
 
     @Override
@@ -157,8 +161,7 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public void setRanges(List<RangeConstraint> ranges) {
-        throw new IllegalStateException("Can not set ranges to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set ranges to " + NAME);
     }
 
     @Override
@@ -168,8 +171,7 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public void setLengths(List<LengthConstraint> lengths) {
-        throw new IllegalStateException("Can not set lengths to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set lengths to " + NAME);
     }
 
     @Override
@@ -179,8 +181,7 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public void setPatterns(List<PatternConstraint> patterns) {
-        throw new IllegalStateException("Can not set patterns to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set patterns to " + NAME);
     }
 
     @Override
@@ -190,8 +191,8 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public void setFractionDigits(Integer fractionDigits) {
-        throw new IllegalStateException("Can not set fraction digits to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set fraction digits to "
+                + NAME);
     }
 
     @Override
@@ -206,8 +207,8 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public void setDefaultValue(Object defaultValue) {
-        throw new IllegalStateException("Can not set default value to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set default value to "
+                + NAME);
     }
 
     @Override
@@ -217,8 +218,7 @@ public class UnionTypeBuilder extends AbstractTypeAwareBuilder implements
 
     @Override
     public void setUnits(String units) {
-        throw new IllegalStateException("Can not set units to "
-                + UnionTypeBuilder.class.getSimpleName());
+        throw new YangParseException(line, "Can not set units to " + NAME);
     }
 
     public List<String> getActualPath() {