Update CursorAwareDataTree{Modification,Snapshot} API 05/74605/2
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 28 Jul 2018 08:26:56 +0000 (10:26 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 28 Jul 2018 10:49:24 +0000 (12:49 +0200)
Create an explicit openCursor() method and return Optional instead
of a Nullable.

Change-Id: I6a9f11726f85acb86e6aaf30b7ede12b8420da37
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/CursorAwareDataTreeModification.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/CursorAwareDataTreeSnapshot.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidates.java
yang/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/tree/DataTreeCandidatesTest.java
yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/DataTreeCandidatesTest.java

index 9154d0a273a011613d4a77d6e3d526157b4a65f1..e03056ea989413938ba06276f4b03461e0da450e 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.data.api.schema.tree;
 
 import com.google.common.annotations.Beta;
+import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -21,12 +22,38 @@ public interface CursorAwareDataTreeModification extends DataTreeModification, C
      * Create a new {@link DataTreeModificationCursor} at specified path. May fail
      * if specified path does not exist. It is a programming error to use normal
      *
-     *
      * @param path Path at which the cursor is to be anchored
      * @return A new cursor, or null if the path does not exist.
      * @throws IllegalStateException if there is another cursor currently open,
      *                               or the modification is already {@link #ready()}.
+     * @deprecated Use {@link #openCursor(YangInstanceIdentifier)} instead.
      */
+    @Deprecated
     @Override
     @Nullable DataTreeModificationCursor createCursor(@Nonnull YangInstanceIdentifier path);
+
+    /**
+     * Create a new {@link DataTreeModificationCursor} at specified path. May fail
+     * if specified path does not exist.
+     *
+     * @param path Path at which the cursor is to be anchored
+     * @return A new cursor, or empty if the path does not exist.
+     * @throws IllegalStateException if there is another cursor currently open,
+     *                               or the modification is already {@link #ready()}.
+     */
+    @Override
+    default Optional<? extends DataTreeModificationCursor> openCursor(@Nonnull final YangInstanceIdentifier path) {
+        return Optional.ofNullable(createCursor(path));
+    }
+
+    /**
+     * Create a new {@link DataTreeModificationCursor} at the root of the modification.
+     *
+     * @return A new cursor
+     * @throws IllegalStateException if there is another cursor currently open.
+     */
+    @Override
+    default DataTreeModificationCursor openCursor() {
+        return openCursor(YangInstanceIdentifier.EMPTY).get();
+    }
 }
index c5be257be383af2d095db732cf60e8c54953476c..de49f2a2b087c4a5d1fbfd5db1a0991e02322165 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.data.api.schema.tree;
 
 import com.google.common.annotations.Beta;
+import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -24,9 +25,33 @@ public interface CursorAwareDataTreeSnapshot extends DataTreeSnapshot {
      * @param path Path at which the cursor is to be anchored
      * @return A new cursor, or null if the path does not exist.
      * @throws IllegalStateException if there is another cursor currently open.
+     * @deprecated Use {@link #openCursor(YangInstanceIdentifier)} instead.
      */
+    @Deprecated
     @Nullable DataTreeSnapshotCursor createCursor(@Nonnull YangInstanceIdentifier path);
 
+    /**
+     * Create a new {@link DataTreeSnapshotCursor} at specified path. May fail
+     * if specified path does not exist.
+     *
+     * @param path Path at which the cursor is to be anchored
+     * @return A new cursor, or empty if the path does not exist.
+     * @throws IllegalStateException if there is another cursor currently open.
+     */
+    default Optional<? extends DataTreeSnapshotCursor> openCursor(@Nonnull final YangInstanceIdentifier path) {
+        return Optional.ofNullable(createCursor(path));
+    }
+
+    /**
+     * Create a new {@link DataTreeSnapshotCursor} at the root of the modification.
+     *
+     * @return A new cursor
+     * @throws IllegalStateException if there is another cursor currently open.
+     */
+    default DataTreeSnapshotCursor openCursor() {
+        return openCursor(YangInstanceIdentifier.EMPTY).get();
+    }
+
     @Override
     CursorAwareDataTreeModification newModification();
 }
index 840ceab47f680f63f4fc36ddaf3cc4140ea8f2d9..b933ce1e3e248d5e213c0f2cd891ca89024ba1ef 100644 (file)
@@ -82,11 +82,11 @@ public final class DataTreeCandidates {
             final DataTreeCandidate candidate) {
         final YangInstanceIdentifier candidatePath = candidate.getRootPath();
         if (candidatePath.isEmpty()) {
-            try (DataTreeModificationCursor cursor = modification.createCursor(candidatePath)) {
+            try (DataTreeModificationCursor cursor = modification.openCursor()) {
                 DataTreeCandidateNodes.applyRootToCursor(cursor, candidate.getRootNode());
             }
         } else {
-            try (DataTreeModificationCursor cursor = modification.createCursor(candidatePath.getParent())) {
+            try (DataTreeModificationCursor cursor = modification.openCursor(candidatePath.getParent()).get()) {
                 DataTreeCandidateNodes.applyRootedNodeToCursor(cursor, candidatePath, candidate.getRootNode());
             }
         }
index 1062a497840a9655add6fa0366b160df51d84165..e1874e390ed84383722564a42b05e198c5301084 100644 (file)
@@ -77,14 +77,14 @@ public class DataTreeCandidatesTest {
         final YangInstanceIdentifier mockedRootPath = mock(YangInstanceIdentifier.class);
         doReturn(mockedRootPath).when(mockedDataTreeCandidate).getRootPath();
         final DataTreeModificationCursor mockedCursor = mock(DataTreeModificationCursor.class);
-        doReturn(mockedCursor).when(mockedModification).createCursor(any(YangInstanceIdentifier.class));
+        doReturn(Optional.of(mockedCursor)).when(mockedModification).openCursor(any(YangInstanceIdentifier.class));
         final DataTreeCandidateNode mockedDataTreeCandidateNode = mock(DataTreeCandidateNode.class);
         doReturn(mockedDataTreeCandidateNode).when(mockedDataTreeCandidate).getRootNode();
 
         doReturn(ModificationType.DELETE).when(mockedDataTreeCandidateNode).getModificationType();
 
         DataTreeCandidates.applyToModification(mockedModification, mockedDataTreeCandidate);
-        verify(mockedModification, times(1)).createCursor(any(YangInstanceIdentifier.class));
+        verify(mockedModification, times(1)).openCursor(any(YangInstanceIdentifier.class));
         verify(mockedCursor, times(1)).delete(any(PathArgument.class));
 
         doReturn(Boolean.TRUE).when(mockedRootPath).isEmpty();
index 3de42a5592ea7b8e7674e1d55ca4dab787ac4223..20361ddacff64cc772e23908b37f153153409459 100644 (file)
@@ -13,7 +13,6 @@ import static org.junit.Assert.fail;
 
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
@@ -52,7 +51,7 @@ public class DataTreeCandidatesTest {
 
         final InMemoryDataTreeModification modification = (InMemoryDataTreeModification) dataTree.takeSnapshot()
                 .newModification();
-        final DataTreeModificationCursor cursor = modification.createCursor(YangInstanceIdentifier.EMPTY);
+        final DataTreeModificationCursor cursor = modification.openCursor();
         cursor.write(TestModel.TEST_PATH.getLastPathArgument(), testContainer);
         modification.ready();