Refactored parsing of YANG uses statement.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / AugmentationSchemaBuilderImpl.java
index 775751a166ef7d2c58a9565d3cd9bb1bef5692c4..b18f2558f74e6f559c023693c480708c7d3d6668 100644 (file)
@@ -7,9 +7,11 @@
  */
 package org.opendaylight.controller.yang.parser.builder.impl;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -21,9 +23,11 @@ import org.opendaylight.controller.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.controller.yang.model.api.SchemaPath;
 import org.opendaylight.controller.yang.model.api.Status;
 import org.opendaylight.controller.yang.model.api.TypeDefinition;
+import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.controller.yang.model.api.UsesNode;
 import org.opendaylight.controller.yang.model.util.RevisionAwareXPathImpl;
 import org.opendaylight.controller.yang.parser.builder.api.AugmentationSchemaBuilder;
+import org.opendaylight.controller.yang.parser.builder.api.Builder;
 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;
@@ -35,21 +39,30 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
     private boolean built;
     private final AugmentationSchemaImpl instance;
     private final int line;
+    private final Builder parent;
+
+    private String whenCondition;
+    private String description;
+    private String reference;
+    private Status status = Status.CURRENT;
+
     private final String augmentTargetStr;
-    private SchemaPath augmentTarget;
+    private SchemaPath dirtyAugmentTarget;
     private SchemaPath finalAugmentTarget;
-    private String whenCondition;
+
     private final Set<DataSchemaNodeBuilder> childNodes = new HashSet<DataSchemaNodeBuilder>();
     private final Set<GroupingBuilder> groupings = new HashSet<GroupingBuilder>();
     private final Set<UsesNodeBuilder> usesNodes = new HashSet<UsesNodeBuilder>();
+    private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
     private boolean resolved;
 
-    AugmentationSchemaBuilderImpl(final String augmentTargetStr, final int line) {
+    AugmentationSchemaBuilderImpl(final String augmentTargetStr, final int line, final Builder parent) {
         this.augmentTargetStr = augmentTargetStr;
         this.line = line;
+        this.parent = parent;
         final SchemaPath targetPath = YangModelBuilderUtil
                 .parseAugmentPath(augmentTargetStr);
-        augmentTarget = targetPath;
+        dirtyAugmentTarget = targetPath;
         instance = new AugmentationSchemaImpl(targetPath);
     }
 
@@ -58,18 +71,34 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
         return line;
     }
 
+    @Override
+    public Builder getParent() {
+        return parent;
+    }
+
+
     @Override
     public void addChildNode(DataSchemaNodeBuilder childNode) {
         childNodes.add(childNode);
     }
 
     @Override
-    public Set<DataSchemaNodeBuilder> getChildNodes() {
+    public Set<DataSchemaNode> getChildNodes() {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public Set<DataSchemaNodeBuilder> getChildNodeBuilders() {
         return childNodes;
     }
 
     @Override
-    public Set<GroupingBuilder> getGroupings() {
+    public Set<GroupingDefinition> getGroupings() {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public Set<GroupingBuilder> getGroupingBuilders() {
         return groupings;
     }
 
@@ -102,6 +131,9 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
     @Override
     public AugmentationSchema build() {
         if (!built) {
+            instance.setDescription(description);
+            instance.setReference(reference);
+            instance.setStatus(status);
             instance.setTargetPath(finalAugmentTarget);
 
             RevisionAwareXPath whenStmt;
@@ -133,6 +165,13 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
             }
             instance.setUses(usesNodeDefinitions);
 
+            // UNKNOWN NODES
+            List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
+            for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
+                unknownNodes.add(b.build());
+            }
+            instance.setUnknownSchemaNodes(unknownNodes);
+
             built = true;
         }
         return instance;
@@ -157,34 +196,36 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
     }
 
     @Override
-    public Set<TypeDefinitionBuilder> getTypeDefinitions() {
+    public Set<TypeDefinitionBuilder> getTypeDefinitionBuilders() {
         return Collections.emptySet();
     }
 
     @Override
     public void addTypedef(TypeDefinitionBuilder type) {
         throw new YangParseException(line,
-                "Augmentation can not contains type definitions");
+                "Augmentation can not contains typedef statement.");
     }
 
     @Override
     public void setDescription(String description) {
-        instance.setDescription(description);
+        this.description = description;
     }
 
     @Override
     public void setReference(String reference) {
-        instance.setReference(reference);
+        this.reference = reference;
     }
 
     @Override
     public void setStatus(Status status) {
-        instance.setStatus(status);
+        if(status != null) {
+            this.status = status;
+        }
     }
 
     @Override
     public SchemaPath getTargetPath() {
-        return augmentTarget;
+        return dirtyAugmentTarget;
     }
 
     @Override
@@ -197,6 +238,15 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
         return augmentTargetStr;
     }
 
+    public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
+        return addedUnknownNodes;
+    }
+
+    @Override
+    public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownNode) {
+        addedUnknownNodes.add(unknownNode);
+    }
+
     @Override
     public int hashCode() {
         final int prime = 17;
@@ -253,10 +303,10 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
         private Map<QName, DataSchemaNode> childNodes = Collections.emptyMap();
         private Set<GroupingDefinition> groupings = Collections.emptySet();
         private Set<UsesNode> uses = Collections.emptySet();
-
         private String description;
         private String reference;
         private Status status;
+        private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
 
         private AugmentationSchemaImpl(SchemaPath targetPath) {
             this.targetPath = targetPath;
@@ -349,6 +399,17 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
             this.status = status;
         }
 
+        public List<UnknownSchemaNode> getUnknownSchemaNodes() {
+            return unknownNodes;
+        }
+
+        private void setUnknownSchemaNodes(
+                List<UnknownSchemaNode> unknownSchemaNodes) {
+            if (unknownSchemaNodes != null) {
+                this.unknownNodes = unknownSchemaNodes;
+            }
+        }
+
         @Override
         public DataSchemaNode getDataChildByName(QName name) {
             return childNodes.get(name);
@@ -421,9 +482,7 @@ public final class AugmentationSchemaBuilderImpl implements AugmentationSchemaBu
                     AugmentationSchemaImpl.class.getSimpleName());
             sb.append("[");
             sb.append("targetPath=" + targetPath);
-            sb.append(", childNodes=" + childNodes.values());
-            sb.append(", groupings=" + groupings);
-            sb.append(", uses=" + uses);
+            sb.append(", when=" + whenCondition);
             sb.append("]");
             return sb.toString();
         }