Clean up DataTreeCandidateNode contract
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / NoopDataTreeCandidate.java
index 08e15d07a83ef2938311e6b4edc66a998306db03..f445721946a775d241278d268745d16ae8b0c7ba 100644 (file)
@@ -7,15 +7,19 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.collect.ImmutableList;
+import java.util.Collection;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
-
-import java.util.Collections;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
 
 /**
  * Internal utility class for an empty candidate. We instantiate this class
@@ -30,8 +34,8 @@ final class NoopDataTreeCandidate extends AbstractDataTreeCandidate {
         }
 
         @Override
-        public Iterable<DataTreeCandidateNode> getChildNodes() {
-            return Collections.emptyList();
+        public Collection<DataTreeCandidateNode> getChildNodes() {
+            return ImmutableList.of();
         }
 
         @Override
@@ -41,22 +45,36 @@ final class NoopDataTreeCandidate extends AbstractDataTreeCandidate {
 
         @Override
         public Optional<NormalizedNode<?, ?>> getDataAfter() {
-            return Optional.absent();
+            return Optional.empty();
         }
 
         @Override
         public Optional<NormalizedNode<?, ?>> getDataBefore() {
-            return Optional.absent();
+            return Optional.empty();
+        }
+
+        @Override
+        public Optional<DataTreeCandidateNode> getModifiedChild(final PathArgument identifier) {
+            return Optional.empty();
         }
     };
 
-    protected NoopDataTreeCandidate(final YangInstanceIdentifier rootPath, final ModifiedNode modificationRoot) {
+    private final @NonNull TreeNode afterRoot;
+
+    protected NoopDataTreeCandidate(final YangInstanceIdentifier rootPath, final ModifiedNode modificationRoot,
+            final TreeNode afterRoot) {
         super(rootPath);
-        Preconditions.checkArgument(modificationRoot.getType() == ModificationType.UNMODIFIED);
+        checkArgument(modificationRoot.getOperation() == LogicalOperation.NONE);
+        this.afterRoot = requireNonNull(afterRoot);
     }
 
     @Override
     public DataTreeCandidateNode getRootNode() {
         return ROOT;
     }
+
+    @Override
+    protected TreeNode getTipRoot() {
+        return afterRoot;
+    }
 }