Merge "Making javadoc actually get flagged as javadoc"
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ContainerSchemaNodeBuilder.java
index 25602c0cc624202d25be85bc06f56719dfdb8fc7..c77444269c297c75acacc650254dc2cc26a1a707 100644 (file)
@@ -15,16 +15,19 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
+import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer;
 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -39,6 +42,8 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
     private boolean augmenting;
     private boolean addedByUses;
     private boolean configuration;
+    private ContainerSchemaNode originalNode;
+    private ContainerSchemaNodeBuilder originalBuilder;
     private final ConstraintsBuilder constraints;
     // AugmentationTarget args
     private final List<AugmentationSchema> augmentations = new ArrayList<>();
@@ -60,6 +65,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
 
         augmenting = base.isAugmenting();
         addedByUses = base.isAddedByUses();
+        originalNode = base;
         configuration = base.isConfiguration();
         presence = base.isPresenceContainer();
 
@@ -87,6 +93,12 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
         instance.constraints = constraints.toInstance();
         instance.presence = presence;
 
+        // ORIGINAL NODE
+        if (originalNode == null && originalBuilder != null) {
+            originalNode = originalBuilder.build();
+        }
+        instance.original = originalNode;
+
         // AUGMENTATIONS
         for (AugmentationSchemaBuilder builder : augmentationBuilders) {
             augmentations.add(builder.build());
@@ -141,6 +153,18 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
         this.addedByUses = addedByUses;
     }
 
+    @Override
+    public ContainerSchemaNodeBuilder getOriginal() {
+        return originalBuilder;
+    }
+
+    @Override
+    public void setOriginal(final SchemaNodeBuilder builder) {
+        Preconditions.checkArgument(builder instanceof ContainerSchemaNodeBuilder, "Original of container cannot be "
+                + builder);
+        this.originalBuilder = (ContainerSchemaNodeBuilder) builder;
+    }
+
     @Override
     public boolean isConfiguration() {
         return configuration;
@@ -191,8 +215,6 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
         } else if (!path.equals(other.path)) {
             return false;
         }
-        // FIXME: Do we really need this? This actually triggers equals
-        // up to the root builder.
         if (getParent() == null) {
             if (other.getParent() != null) {
                 return false;
@@ -209,13 +231,14 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
     }
 
     private static final class ContainerSchemaNodeImpl extends AbstractDocumentedDataNodeContainer implements
-            ContainerSchemaNode {
+            ContainerSchemaNode, DerivableSchemaNode {
         private final QName qname;
         private final SchemaPath path;
 
         private boolean augmenting;
         private boolean addedByUses;
         private boolean configuration;
+        private ContainerSchemaNode original;
         private ConstraintDefinition constraints;
 
         private ImmutableSet<AugmentationSchema> augmentations;
@@ -249,6 +272,11 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
             return addedByUses;
         }
 
+        @Override
+        public Optional<ContainerSchemaNode> getOriginal() {
+            return Optional.fromNullable(original);
+        }
+
         @Override
         public boolean isConfiguration() {
             return configuration;
@@ -316,6 +344,7 @@ public final class ContainerSchemaNodeBuilder extends AbstractDocumentedDataNode
         public String toString() {
             return "container " + qname.getLocalName();
         }
+
     }
 
 }