Merge "Parents pom distribution"
[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 c54a0dc03673f315c349b98541d5465994db01e7..850938161bf4c25cc30fd5d7e7270d0056d9f596 100644 (file)
@@ -15,7 +15,6 @@ import java.util.List;
 import java.util.Map;\r
 import java.util.Set;\r
 \r
-import org.opendaylight.controller.yang.common.QName;\r
 import org.opendaylight.controller.yang.model.api.AugmentationSchema;\r
 import org.opendaylight.controller.yang.model.api.SchemaNode;\r
 import org.opendaylight.controller.yang.model.api.SchemaPath;\r
@@ -25,37 +24,46 @@ import org.opendaylight.controller.yang.parser.builder.api.SchemaNodeBuilder;
 import org.opendaylight.controller.yang.parser.builder.api.UsesNodeBuilder;\r
 import org.opendaylight.controller.yang.parser.util.RefineHolder;\r
 \r
-final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
-    private final UsesNodeImpl instance;\r
+public final class UsesNodeBuilderImpl implements UsesNodeBuilder {\r
+    private boolean isBuilt;\r
+    private UsesNodeImpl instance;\r
     private final int line;\r
-    private final SchemaPath groupingPath;\r
+    private SchemaPath schemaPath;\r
+    private final String groupingName;\r
+    private SchemaPath groupingPath;\r
+    private boolean augmenting;\r
     private final Set<AugmentationSchemaBuilder> addedAugments = new HashSet<AugmentationSchemaBuilder>();\r
     private List<SchemaNodeBuilder> refineBuilders = new ArrayList<SchemaNodeBuilder>();\r
     private List<RefineHolder> refines = new ArrayList<RefineHolder>();\r
 \r
-    UsesNodeBuilderImpl(final String groupingPathStr, final int line) {\r
-        this.groupingPath = parseUsesPath(groupingPathStr);\r
+    public UsesNodeBuilderImpl(final String groupingName, final int line) {\r
+        this.groupingName = groupingName;\r
         this.line = line;\r
-        instance = new UsesNodeImpl(groupingPath);\r
     }\r
 \r
     @Override\r
     public UsesNode build() {\r
-        // AUGMENTATIONS\r
-        final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
-        for (AugmentationSchemaBuilder builder : addedAugments) {\r
-            augments.add(builder.build());\r
-        }\r
-        instance.setAugmentations(augments);\r
+        if (!isBuilt) {\r
+            instance = new UsesNodeImpl(groupingPath);\r
+            instance.setAugmenting(augmenting);\r
+\r
+            // AUGMENTATIONS\r
+            final Set<AugmentationSchema> augments = new HashSet<AugmentationSchema>();\r
+            for (AugmentationSchemaBuilder builder : addedAugments) {\r
+                augments.add(builder.build());\r
+            }\r
+            instance.setAugmentations(augments);\r
 \r
-        // REFINES\r
-        final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();\r
-        for (SchemaNodeBuilder refineBuilder : refineBuilders) {\r
-            SchemaNode refineNode = refineBuilder.build();\r
-            refineNodes.put(refineNode.getPath(), refineNode);\r
-        }\r
-        instance.setRefines(refineNodes);\r
+            // REFINES\r
+            final Map<SchemaPath, SchemaNode> refineNodes = new HashMap<SchemaPath, SchemaNode>();\r
+            for (SchemaNodeBuilder refineBuilder : refineBuilders) {\r
+                SchemaNode refineNode = refineBuilder.build();\r
+                refineNodes.put(refineNode.getPath(), refineNode);\r
+            }\r
+            instance.setRefines(refineNodes);\r
 \r
+            isBuilt = true;\r
+        }\r
         return instance;\r
     }\r
 \r
@@ -65,8 +73,28 @@ final class UsesNodeBuilderImpl implements UsesNodeBuilder {
     }\r
 \r
     @Override\r
-    public SchemaPath getGroupingPath() {\r
-        return groupingPath;\r
+    public void setGroupingPath(SchemaPath groupingPath) {\r
+        this.groupingPath = groupingPath;\r
+    }\r
+\r
+    @Override\r
+    public SchemaPath getPath() {\r
+        return schemaPath;\r
+    }\r
+\r
+    @Override\r
+    public void setPath(SchemaPath path) {\r
+        this.schemaPath = path;\r
+    }\r
+\r
+    @Override\r
+    public String getGroupingName() {\r
+        return groupingName;\r
+    }\r
+\r
+    @Override\r
+    public Set<AugmentationSchemaBuilder> getAugmentations() {\r
+        return addedAugments;\r
     }\r
 \r
     @Override\r
@@ -74,9 +102,19 @@ final class UsesNodeBuilderImpl implements UsesNodeBuilder {
         addedAugments.add(augmentBuilder);\r
     }\r
 \r
+    @Override\r
+    public boolean isAugmenting() {\r
+        return augmenting;\r
+    }\r
+\r
     @Override\r
     public void setAugmenting(final boolean augmenting) {\r
-        instance.setAugmenting(augmenting);\r
+        this.augmenting = augmenting;\r
+    }\r
+\r
+    @Override\r
+    public List<SchemaNodeBuilder> getRefineNodes() {\r
+        return refineBuilders;\r
     }\r
 \r
     @Override\r
@@ -94,23 +132,6 @@ final class UsesNodeBuilderImpl implements UsesNodeBuilder {
         refines.add(refine);\r
     }\r
 \r
-    private SchemaPath parseUsesPath(final String groupingPathStr) {\r
-        final String[] splittedPath = groupingPathStr.split("/");\r
-        final List<QName> path = new ArrayList<QName>();\r
-        QName name;\r
-        for (String pathElement : splittedPath) {\r
-            final String[] splittedElement = pathElement.split(":");\r
-            if (splittedElement.length == 1) {\r
-                name = new QName(null, null, null, splittedElement[0]);\r
-            } else {\r
-                name = new QName(null, null, splittedElement[0],\r
-                        splittedElement[1]);\r
-            }\r
-            path.add(name);\r
-        }\r
-        final boolean absolute = groupingPathStr.startsWith("/");\r
-        return new SchemaPath(path, absolute);\r
-    }\r
 \r
     private final class UsesNodeImpl implements UsesNode {\r
         private final SchemaPath groupingPath;\r