Merge "Implemented ordering of yang module data nodes. Added Comparators utility...
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / TypeDefinitionBuilderImpl.java
index d60dbbb615c71449bd74adfb3e9f3c391b2eb027..1d1d24b6add76f10a1c15a29a02e6dd7eae9c382 100644 (file)
@@ -23,14 +23,12 @@ import org.opendaylight.controller.yang.model.util.ExtendedType;
 import org.opendaylight.controller.yang.model.util.UnknownType;
 import org.opendaylight.controller.yang.parser.builder.api.AbstractTypeAwareBuilder;
 import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder;
+import org.opendaylight.controller.yang.parser.util.Comparators;
 import org.opendaylight.controller.yang.parser.util.YangParseException;
 
-public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
-        implements TypeDefinitionBuilder {
-    private final int line;
-    private final QName qname;
+public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
     private SchemaPath schemaPath;
-
+    private List<UnknownSchemaNode> unknownNodes;
     private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
     private List<RangeConstraint> ranges = Collections.emptyList();
     private List<LengthConstraint> lengths = Collections.emptyList();
@@ -42,10 +40,34 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
     private Status status = Status.CURRENT;
     private String units;
     private Object defaultValue;
+    private boolean addedByUses;
 
     public TypeDefinitionBuilderImpl(final QName qname, final int line) {
-        this.qname = qname;
-        this.line = line;
+        super(line, qname);
+    }
+
+    public TypeDefinitionBuilderImpl(TypeDefinitionBuilder tdb) {
+        super(tdb.getLine(), tdb.getQName());
+        schemaPath = tdb.getPath();
+
+        type = tdb.getType();
+        typedef = tdb.getTypedef();
+
+        unknownNodes = tdb.getUnknownNodes();
+        for (UnknownSchemaNodeBuilder usnb : tdb.getUnknownNodeBuilders()) {
+            addedUnknownNodes.add(usnb);
+        }
+        ranges = tdb.getRanges();
+        lengths = tdb.getLengths();
+        patterns = tdb.getPatterns();
+        fractionDigits = tdb.getFractionDigits();
+
+        description = tdb.getDescription();
+        reference = tdb.getReference();
+        status = tdb.getStatus();
+        units = tdb.getUnits();
+        defaultValue = tdb.getDefaultValue();
+        addedByUses = tdb.isAddedByUses();
     }
 
     @Override
@@ -53,19 +75,18 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
         TypeDefinition<?> result = null;
         ExtendedType.Builder typeBuilder = null;
         if ((type == null || type instanceof UnknownType) && typedef == null) {
-            throw new YangParseException("Unresolved type: '"
-                    + qname.getLocalName() + "'.");
+            throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
         }
         if (type == null || type instanceof UnknownType) {
             type = typedef.build();
         }
 
-        typeBuilder = new ExtendedType.Builder(qname, type, description,
-                reference, schemaPath);
+        typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
 
         typeBuilder.status(status);
         typeBuilder.units(units);
         typeBuilder.defaultValue(defaultValue);
+        typeBuilder.addedByUses(addedByUses);
 
         typeBuilder.ranges(ranges);
         typeBuilder.lengths(lengths);
@@ -73,25 +94,18 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
         typeBuilder.fractionDigits(fractionDigits);
 
         // UNKNOWN NODES
-        final List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
-        for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
-            unknownNodes.add(b.build());
+        if (unknownNodes == null) {
+            unknownNodes = new ArrayList<UnknownSchemaNode>();
+            for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+                unknownNodes.add(b.build());
+            }
+            Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
         }
         typeBuilder.unknownSchemaNodes(unknownNodes);
         result = typeBuilder.build();
         return result;
     }
 
-    @Override
-    public int getLine() {
-        return line;
-    }
-
-    @Override
-    public QName getQName() {
-        return qname;
-    }
-
     @Override
     public SchemaPath getPath() {
         return schemaPath;
@@ -134,6 +148,16 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
         }
     }
 
+    @Override
+    public boolean isAddedByUses() {
+        return addedByUses;
+    }
+
+    @Override
+    public void setAddedByUses(final boolean addedByUses) {
+        this.addedByUses = addedByUses;
+    }
+
     @Override
     public String getUnits() {
         return units;
@@ -155,7 +179,12 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
     }
 
     @Override
-    public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
+    public List<UnknownSchemaNode> getUnknownNodes() {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
         return addedUnknownNodes;
     }
 
@@ -164,6 +193,10 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
         addedUnknownNodes.add(unknownNode);
     }
 
+    public void setUnknownNodes(List<UnknownSchemaNode> unknownNodes) {
+        this.unknownNodes = unknownNodes;
+    }
+
     @Override
     public List<RangeConstraint> getRanges() {
         return ranges;
@@ -212,8 +245,7 @@ public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder
 
     @Override
     public String toString() {
-        final StringBuilder result = new StringBuilder("TypedefBuilder["
-                + qname.getLocalName());
+        final StringBuilder result = new StringBuilder("TypedefBuilder[" + qname.getLocalName());
         result.append(", type=");
         if (type == null) {
             result.append(typedef);