Implemented ordering of yang module data nodes. Added Comparators utility class.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / UsesNodeBuilderImpl.java
index 77a465d5fd3346ab41657c84421f5cd35c1c6e98..ecbc1c54fd0f9a0edaf0367f8008eaade0da99dd 100644 (file)
@@ -21,16 +21,18 @@ import org.opendaylight.controller.yang.model.api.SchemaPath;
 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;\r
 import org.opendaylight.controller.yang.model.api.UsesNode;\r
 import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;\r
+import org.opendaylight.controller.yang.parser.builder.api.Builder;\r
 import org.opendaylight.controller.yang.parser.builder.api.DataNodeContainerBuilder;\r
 import org.opendaylight.controller.yang.parser.builder.api.SchemaNodeBuilder;\r
 import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder;\r
 import org.opendaylight.controller.yang.parser.util.RefineHolder;\r
+import org.opendaylight.controller.yang.parser.util.YangParseException;\r
 \r
 public final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
     private boolean isBuilt;\r
     private UsesNodeImpl instance;\r
     private final int line;\r
-    private final DataNodeContainerBuilder parent;\r
+    private DataNodeContainerBuilder parent;\r
     private final String groupingName;\r
     private SchemaPath groupingPath;\r
     private boolean augmenting;\r
@@ -40,10 +42,9 @@ public final class UsesNodeBuilderImpl implements UsesNodeBuilder {
     private final List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
     private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();\r
 \r
-    public UsesNodeBuilderImpl(final String groupingName, final int line, final DataNodeContainerBuilder parent) {\r
+    public UsesNodeBuilderImpl(final int line, final String groupingName) {\r
         this.groupingName = groupingName;\r
         this.line = line;\r
-        this.parent = parent;\r
     }\r
 \r
     public UsesNodeBuilderImpl(UsesNodeBuilder b) {\r
@@ -102,6 +103,14 @@ public final class UsesNodeBuilderImpl implements UsesNodeBuilder {
         return parent;\r
     }\r
 \r
+    @Override\r
+    public void setParent(Builder parent) {\r
+        if (!(parent instanceof DataNodeContainerBuilder)) {\r
+            throw new YangParseException(line, "Unresolved parent of uses '" + groupingName + "'.");\r
+        }\r
+        this.parent = (DataNodeContainerBuilder) parent;\r
+    }\r
+\r
     @Override\r
     public SchemaPath getGroupingPath() {\r
         return groupingPath;\r
@@ -176,6 +185,47 @@ public final class UsesNodeBuilderImpl implements UsesNodeBuilder {
         addedUnknownNodes.add(unknownNode);\r
     }\r
 \r
+    @Override\r
+    public int hashCode() {\r
+        final int prime = 31;\r
+        int result = 1;\r
+        result = prime * result + ((groupingName == null) ? 0 : groupingName.hashCode());\r
+        return result;\r
+    }\r
+\r
+    @Override\r
+    public boolean equals(Object obj) {\r
+        if (this == obj)\r
+            return true;\r
+        if (obj == null)\r
+            return false;\r
+        if (getClass() != obj.getClass())\r
+            return false;\r
+        UsesNodeBuilderImpl other = (UsesNodeBuilderImpl) obj;\r
+        if (groupingName == null) {\r
+            if (other.groupingName != null)\r
+                return false;\r
+        } else if (!groupingName.equals(other.groupingName))\r
+            return false;\r
+\r
+        if (parent == null) {\r
+            if (other.parent != null)\r
+                return false;\r
+        } else if (!parent.equals(other.parent))\r
+            return false;\r
+        if (refines == null) {\r
+            if (other.refines != null)\r
+                return false;\r
+        } else if (!refines.equals(other.refines))\r
+            return false;\r
+        return true;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "uses '" + groupingName + "'";\r
+    }\r
+\r
     public final class UsesNodeImpl implements UsesNode {\r
         private final SchemaPath groupingPath;\r
         private Set<AugmentationSchema> augmentations = Collections.emptySet();\r
@@ -296,4 +346,5 @@ public final class UsesNodeBuilderImpl implements UsesNodeBuilder {
             return sb.toString();\r
         }\r
     }\r
+\r
 }\r