Propagate WriteDataParams in utilities 06/98106/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 24 Oct 2021 16:25:45 +0000 (18:25 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 14 Nov 2021 13:54:43 +0000 (14:54 +0100)
We have the two variables neatly tied together, there is no reason
to split in invocation paths.

JIRA: NETCONF-718
Change-Id: Ic3befbb97538a2ef3e8352f6585a76572523581f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/WriteDataParams.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtilTest.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java

index 6004c8b967aebb19ea9c464ca2bee0e84e8084bd..0d70ae422f3a65a9c6617cc6cf0c86e6e62c7992 100644 (file)
@@ -7,6 +7,9 @@
  */
 package org.opendaylight.restconf.nb.rfc8040;
 
+import static com.google.common.base.Verify.verifyNotNull;
+
+import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
@@ -68,6 +71,12 @@ public final class WriteDataParams implements Immutable {
         return point;
     }
 
+    @Beta
+    // FIXME: it seems callers' structure should be able to cater with just point() and insert()
+    public @NonNull PointParam getPoint() {
+        return verifyNotNull(point);
+    }
+
     @Override
     public String toString() {
         final var helper = MoreObjects.toStringHelper(this).omitNullValues();
index b3375a8c340b5466c37cdd53c9111d032c34b1af..a221043bb06fe8619e707c9cba66b83f60e050eb 100644 (file)
@@ -218,7 +218,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
     public Response putData(final String identifier, final NormalizedNodePayload payload, final UriInfo uriInfo) {
         requireNonNull(payload);
 
-        final WriteDataParams checkedParms = QueryParams.newWriteDataParams(uriInfo);
+        final WriteDataParams params = QueryParams.newWriteDataParams(uriInfo);
 
         final InstanceIdentifierContext<? extends SchemaNode> iid = payload.getInstanceIdentifierContext();
 
@@ -231,7 +231,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
                 ? schemaContextHandler.get() : modelContext(mountPoint);
 
         final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-        return PutDataTransactionUtil.putData(payload, ref, strategy, checkedParms.insert(), checkedParms.point());
+        return PutDataTransactionUtil.putData(payload, ref, strategy, params);
     }
 
     @Override
@@ -246,11 +246,10 @@ public class RestconfDataServiceImpl implements RestconfDataService {
             return invokeAction(payload);
         }
 
-        final WriteDataParams checkedParms = QueryParams.newWriteDataParams(uriInfo);
+        final WriteDataParams params = QueryParams.newWriteDataParams(uriInfo);
         final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
         final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-        return PostDataTransactionUtil.postData(uriInfo, payload, strategy,
-                getSchemaContext(mountPoint), checkedParms.insert(), checkedParms.point());
+        return PostDataTransactionUtil.postData(uriInfo, payload, strategy, getSchemaContext(mountPoint), params);
     }
 
     @Override
index b07e4f91f88c50fbbb554a20f0df59d96289b8ac..cd5e8ce51c09f7f4cf0e5d4f337251dbe025a04e 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.InsertParam;
 import org.opendaylight.restconf.nb.rfc8040.PointParam;
+import org.opendaylight.restconf.nb.rfc8040.WriteDataParams;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfTransaction;
@@ -58,17 +59,15 @@ public final class PostDataTransactionUtil {
      * @param payload       data
      * @param strategy      Object that perform the actual DS operations
      * @param schemaContext reference to actual {@link EffectiveModelContext}
-     * @param point         point
-     * @param insert        insert
+     * @param params        {@link WriteDataParams}
      * @return {@link Response}
      */
     public static Response postData(final UriInfo uriInfo, final NormalizedNodePayload payload,
                                     final RestconfStrategy strategy,
-                                    final EffectiveModelContext schemaContext, final InsertParam insert,
-                                    final PointParam point) {
+                                    final EffectiveModelContext schemaContext, final WriteDataParams params) {
         final YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier();
         final FluentFuture<? extends CommitInfo> future = submitData(path, payload.getData(),
-                strategy, schemaContext, insert, point);
+                strategy, schemaContext, params);
         final URI location = resolveLocation(uriInfo, path, schemaContext, payload.getData());
         final ResponseFactory dataFactory = new ResponseFactory(Status.CREATED).location(location);
         //This method will close transactionChain if any
@@ -91,9 +90,9 @@ public final class PostDataTransactionUtil {
                                                                  final NormalizedNode data,
                                                                  final RestconfStrategy strategy,
                                                                  final EffectiveModelContext schemaContext,
-                                                                 final InsertParam insert,
-                                                                 final PointParam point) {
+                                                                 final WriteDataParams params) {
         final RestconfTransaction transaction = strategy.prepareWriteExecution();
+        final InsertParam insert = params.insert();
         if (insert == null) {
             makePost(path, data, schemaContext, transaction);
             return transaction.commit();
@@ -123,7 +122,7 @@ public final class PostDataTransactionUtil {
                     return transaction.commit();
                 }
                 checkItemDoesNotExists(strategy.exists(LogicalDatastoreType.CONFIGURATION, path), path);
-                insertWithPointPost(path, data, schemaContext, point,
+                insertWithPointPost(path, data, schemaContext, params.getPoint(),
                     (NormalizedNodeContainer<?>) readData, true, transaction);
                 return transaction.commit();
             case AFTER:
@@ -133,7 +132,7 @@ public final class PostDataTransactionUtil {
                     return transaction.commit();
                 }
                 checkItemDoesNotExists(strategy.exists(LogicalDatastoreType.CONFIGURATION, path), path);
-                insertWithPointPost(path, data, schemaContext, point,
+                insertWithPointPost(path, data, schemaContext, params.getPoint(),
                     (NormalizedNodeContainer<?>) readData, false, transaction);
                 return transaction.commit();
             default:
index 26339e0360a08cdc4653e31a8d8d73bfd49e0c73..c0f3e866af207aaec8402a2a8831c93238dd5352 100644 (file)
@@ -18,6 +18,7 @@ import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.InsertParam;
 import org.opendaylight.restconf.nb.rfc8040.PointParam;
+import org.opendaylight.restconf.nb.rfc8040.WriteDataParams;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfTransaction;
@@ -53,13 +54,11 @@ public final class PutDataTransactionUtil {
      * @param payload       data to put
      * @param schemaContext reference to {@link EffectiveModelContext}
      * @param strategy      object that perform the actual DS operations
-     * @param point         query parameter
-     * @param insert        query parameter
+     * @param params        {@link WriteDataParams}
      * @return {@link Response}
      */
     public static Response putData(final NormalizedNodePayload payload, final EffectiveModelContext schemaContext,
-                                   final RestconfStrategy strategy, final InsertParam insert,
-                                   final PointParam point) {
+                                   final RestconfStrategy strategy, final WriteDataParams params) {
         final YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier();
 
         final FluentFuture<Boolean> existsFuture = strategy.exists(LogicalDatastoreType.CONFIGURATION, path);
@@ -69,7 +68,7 @@ public final class PutDataTransactionUtil {
         final ResponseFactory responseFactory =
             new ResponseFactory(existsResponse.result ? Status.NO_CONTENT : Status.CREATED);
         final FluentFuture<? extends CommitInfo> submitData = submitData(path, schemaContext, strategy,
-            payload.getData(), insert, point);
+            payload.getData(), params);
         //This method will close transactionChain if any
         FutureCallbackTx.addCallback(submitData, PUT_TX_TYPE, responseFactory, path);
         return responseFactory.build();
@@ -82,17 +81,16 @@ public final class PutDataTransactionUtil {
      * @param schemaContext {@link SchemaContext}
      * @param strategy      object that perform the actual DS operations
      * @param data          data
-     * @param point         query parameter
-     * @param insert        query parameter
+     * @param params        {@link WriteDataParams}
      * @return {@link FluentFuture}
      */
     private static FluentFuture<? extends CommitInfo> submitData(final YangInstanceIdentifier path,
                                                                  final EffectiveModelContext schemaContext,
                                                                  final RestconfStrategy strategy,
                                                                  final NormalizedNode data,
-                                                                 final InsertParam insert,
-                                                                 final PointParam point) {
+                                                                 final WriteDataParams params) {
         final RestconfTransaction transaction = strategy.prepareWriteExecution();
+        final InsertParam insert = params.insert();
         if (insert == null) {
             return makePut(path, schemaContext, transaction, data);
         }
@@ -116,16 +114,16 @@ public final class PutDataTransactionUtil {
                 if (readData == null || ((NormalizedNodeContainer<?>) readData).isEmpty()) {
                     return makePut(path, schemaContext, transaction, data);
                 }
-                insertWithPointPut(transaction, path, data, schemaContext, point, (NormalizedNodeContainer<?>) readData,
-                    true);
+                insertWithPointPut(transaction, path, data, schemaContext, params.getPoint(),
+                    (NormalizedNodeContainer<?>) readData, true);
                 return transaction.commit();
             case AFTER:
                 readData = readList(strategy, path.getParent());
                 if (readData == null || ((NormalizedNodeContainer<?>) readData).isEmpty()) {
                     return makePut(path, schemaContext, transaction, data);
                 }
-                insertWithPointPut(transaction, path, data, schemaContext, point, (NormalizedNodeContainer<?>) readData,
-                    false);
+                insertWithPointPut(transaction, path, data, schemaContext, params.getPoint(),
+                    (NormalizedNodeContainer<?>) readData, false);
                 return transaction.commit();
             default:
                 throw new RestconfDocumentedException(
index ba5039ef8c4efd3975117f9c1628348587357c92..4f67b760dadba052ec5c40951537e29ee0923348 100644 (file)
@@ -10,8 +10,7 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
@@ -41,6 +40,7 @@ import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
+import org.opendaylight.restconf.nb.rfc8040.WriteDataParams;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.MdsalRestconfStrategy;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.NetconfRestconfStrategy;
@@ -141,31 +141,26 @@ public class PostDataTransactionUtilTest {
                 new InstanceIdentifierContext<>(iid2, null, null, schema);
         final NormalizedNodePayload payload = NormalizedNodePayload.of(iidContext, buildBaseCont);
 
-        doReturn(immediateFalseFluentFuture()).when(readWrite).exists(LogicalDatastoreType.CONFIGURATION,
-            iid2);
+        doReturn(immediateFalseFluentFuture()).when(readWrite).exists(LogicalDatastoreType.CONFIGURATION, iid2);
         final NodeIdentifier identifier =
                 ((ContainerNode) ((Collection<?>) payload.getData().body()).iterator().next()).getIdentifier();
-        final YangInstanceIdentifier node =
-                payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
+        final YangInstanceIdentifier node = iid2.node(identifier);
         doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION, node.getParent(), payload.getData());
         doReturn(CommitInfo.emptyFluentFuture()).when(readWrite).commit();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).commit();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService)
-            .create(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(),
-                payload.getData(), Optional.empty());
+            .create(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
 
         Response response = PostDataTransactionUtil.postData(uriInfo, payload,
-                        new MdsalRestconfStrategy(mockDataBroker), schema, null, null);
+            new MdsalRestconfStrategy(mockDataBroker), schema, WriteDataParams.empty());
         assertEquals(201, response.getStatus());
         verify(readWrite).exists(LogicalDatastoreType.CONFIGURATION, iid2);
-        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
+        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData());
 
         response = PostDataTransactionUtil.postData(uriInfo, payload,
-                new NetconfRestconfStrategy(netconfService), schema, null, null);
+                new NetconfRestconfStrategy(netconfService), schema, WriteDataParams.empty());
         assertEquals(201, response.getStatus());
-        verify(netconfService).create(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+        verify(netconfService).create(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
     }
 
     @Test
@@ -177,8 +172,7 @@ public class PostDataTransactionUtilTest {
         final MapNode data = (MapNode) payload.getData();
         final MapEntryNode entryNode = data.body().iterator().next();
         final NodeIdentifierWithPredicates identifier = entryNode.getIdentifier();
-        final YangInstanceIdentifier node =
-                payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
+        final YangInstanceIdentifier node = iidList.node(identifier);
         doReturn(immediateFalseFluentFuture()).when(readWrite).exists(LogicalDatastoreType.CONFIGURATION, node);
         doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION, node, entryNode);
         doReturn(CommitInfo.emptyFluentFuture()).when(readWrite).commit();
@@ -189,7 +183,7 @@ public class PostDataTransactionUtilTest {
             LogicalDatastoreType.CONFIGURATION, node, entryNode, Optional.empty());
 
         Response response = PostDataTransactionUtil.postData(uriInfo, payload,
-                        new MdsalRestconfStrategy(mockDataBroker), schema, null, null);
+                        new MdsalRestconfStrategy(mockDataBroker), schema, WriteDataParams.empty());
         assertEquals(201, response.getStatus());
         assertThat(URLDecoder.decode(response.getLocation().toString(), StandardCharsets.UTF_8),
             containsString(identifier.getValue(identifier.keySet().iterator().next()).toString()));
@@ -197,7 +191,7 @@ public class PostDataTransactionUtilTest {
         verify(readWrite).put(LogicalDatastoreType.CONFIGURATION, node, entryNode);
 
         response = PostDataTransactionUtil.postData(uriInfo, payload,
-                new NetconfRestconfStrategy(netconfService), schema, null, null);
+                new NetconfRestconfStrategy(netconfService), schema, WriteDataParams.empty());
         assertEquals(201, response.getStatus());
         assertThat(URLDecoder.decode(response.getLocation().toString(), StandardCharsets.UTF_8),
                 containsString(identifier.getValue(identifier.keySet().iterator().next()).toString()));
@@ -215,8 +209,7 @@ public class PostDataTransactionUtilTest {
             iid2);
         final NodeIdentifier identifier =
                 ((ContainerNode) ((Collection<?>) payload.getData().body()).iterator().next()).getIdentifier();
-        final YangInstanceIdentifier node =
-                payload.getInstanceIdentifierContext().getInstanceIdentifier().node(identifier);
+        final YangInstanceIdentifier node = iid2.node(identifier);
         doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION, node.getParent(), payload.getData());
         final DOMException domException = new DOMException((short) 414, "Post request failed");
         doReturn(immediateFailedFluentFuture(domException)).when(readWrite).commit();
@@ -225,29 +218,20 @@ public class PostDataTransactionUtilTest {
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).discardChanges();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).unlock();
 
-        try {
-            PostDataTransactionUtil.postData(uriInfo, payload,
-                    new MdsalRestconfStrategy(mockDataBroker), schema, null, null);
-            fail("Expected RestconfDocumentedException");
-        } catch (final RestconfDocumentedException e) {
-            assertEquals(1, e.getErrors().size());
-            assertTrue(e.getErrors().get(0).getErrorInfo().contains(domException.getMessage()));
-        }
+        RestconfDocumentedException ex = assertThrows(RestconfDocumentedException.class,
+            () -> PostDataTransactionUtil.postData(uriInfo, payload, new MdsalRestconfStrategy(mockDataBroker), schema,
+                WriteDataParams.empty()));
+        assertEquals(1, ex.getErrors().size());
+        assertThat(ex.getErrors().get(0).getErrorInfo(), containsString(domException.getMessage()));
 
         verify(readWrite).exists(LogicalDatastoreType.CONFIGURATION, iid2);
-        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
-
-        try {
-            PostDataTransactionUtil.postData(uriInfo, payload,
-                    new NetconfRestconfStrategy(netconfService), schema, null, null);
-            fail("Expected RestconfDocumentedException");
-        } catch (final RestconfDocumentedException e) {
-            assertEquals(1, e.getErrors().size());
-            assertTrue(e.getErrors().get(0).getErrorInfo().contains(domException.getMessage()));
-        }
-
-        verify(netconfService).create(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData());
+
+        ex = assertThrows(RestconfDocumentedException.class, () -> PostDataTransactionUtil.postData(uriInfo, payload,
+            new NetconfRestconfStrategy(netconfService), schema, WriteDataParams.empty()));
+        assertEquals(1, ex.getErrors().size());
+        assertThat(ex.getErrors().get(0).getErrorInfo(), containsString(domException.getMessage()));
+
+        verify(netconfService).create(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
     }
 }
index 46960927ca518202f956c74f9c9286c51ed61572..93ff49ef55e8b272a44d7bdfb4c453c8d5a32b94 100644 (file)
@@ -33,6 +33,7 @@ import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
+import org.opendaylight.restconf.nb.rfc8040.WriteDataParams;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfDataServiceImpl;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.MdsalRestconfStrategy;
@@ -169,22 +170,16 @@ public class PutDataTransactionUtilTest {
 
     @Test
     public void testValidInputData() {
-        final InstanceIdentifierContext<DataSchemaNode> iidContext =
-                new InstanceIdentifierContext<>(iid, schemaNode, null, schema);
-        RestconfDataServiceImpl.validInputData(iidContext.getSchemaNode(),
-            NormalizedNodePayload.of(iidContext, buildLeaf));
+        RestconfDataServiceImpl.validInputData(schemaNode, NormalizedNodePayload.of(
+            new InstanceIdentifierContext<>(iid, schemaNode, null, schema), buildLeaf));
     }
 
     @Test
     public void testValidTopLevelNodeName() {
-        InstanceIdentifierContext<DataSchemaNode> iidContext =
-                new InstanceIdentifierContext<>(iid, schemaNode, null, schema);
-        NormalizedNodePayload payload = NormalizedNodePayload.of(iidContext, buildLeaf);
-        RestconfDataServiceImpl.validTopLevelNodeName(iidContext.getInstanceIdentifier(), payload);
-
-        iidContext = new InstanceIdentifierContext<>(iid2, schemaNode2, null, schema);
-        payload = NormalizedNodePayload.of(iidContext, buildBaseCont);
-        RestconfDataServiceImpl.validTopLevelNodeName(iidContext.getInstanceIdentifier(), payload);
+        RestconfDataServiceImpl.validTopLevelNodeName(iid, NormalizedNodePayload.of(
+            new InstanceIdentifierContext<>(iid, schemaNode, null, schema), buildLeaf));
+        RestconfDataServiceImpl.validTopLevelNodeName(iid2, NormalizedNodePayload.of(
+            new InstanceIdentifierContext<>(iid2, schemaNode2, null, schema), buildBaseCont));
     }
 
     @Test
@@ -225,17 +220,14 @@ public class PutDataTransactionUtilTest {
 
         doReturn(readWrite).when(mockDataBroker).newReadWriteTransaction();
         doReturn(read).when(mockDataBroker).newReadOnlyTransaction();
-        doReturn(immediateFalseFluentFuture())
-                .when(read).exists(LogicalDatastoreType.CONFIGURATION, iid2);
-        doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
+        doReturn(immediateFalseFluentFuture()).when(read).exists(LogicalDatastoreType.CONFIGURATION, iid2);
+        doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData());
         doReturn(CommitInfo.emptyFluentFuture()).when(readWrite).commit();
 
-        PutDataTransactionUtil.putData(payload, schema, new MdsalRestconfStrategy(mockDataBroker), null, null);
-        verify(read).exists(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier());
-        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
+        PutDataTransactionUtil.putData(payload, schema, new MdsalRestconfStrategy(mockDataBroker),
+            WriteDataParams.empty());
+        verify(read).exists(LogicalDatastoreType.CONFIGURATION, iid2);
+        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData());
     }
 
     @Test
@@ -247,15 +239,13 @@ public class PutDataTransactionUtilTest {
         doReturn(immediateFluentFuture(Optional.empty())).when(netconfService).getConfig(iid2);
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).commit();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService)
-            .replace(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(),
-                payload.getData(), Optional.empty());
+            .replace(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
 
         PutDataTransactionUtil.putData(payload, schema, new NetconfRestconfStrategy(netconfService),
-                null, null);
+            WriteDataParams.empty());
         verify(netconfService).lock();
-        verify(netconfService).getConfig(payload.getInstanceIdentifierContext().getInstanceIdentifier());
-        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+        verify(netconfService).getConfig(iid2);
+        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
     }
 
     @Test
@@ -264,18 +254,15 @@ public class PutDataTransactionUtilTest {
                 new InstanceIdentifierContext<>(iid2, schemaNode2, null, schema);
         final NormalizedNodePayload payload = NormalizedNodePayload.of(iidContext, buildBaseCont);
 
-        doReturn(immediateFluentFuture(Optional.of(mock(NormalizedNode.class))))
-                .when(netconfService).getConfig(iid2);
+        doReturn(immediateFluentFuture(Optional.of(mock(NormalizedNode.class)))).when(netconfService).getConfig(iid2);
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).commit();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService)
-            .replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+            .replace(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
 
         PutDataTransactionUtil.putData(payload, schema, new NetconfRestconfStrategy(netconfService),
-                null, null);
-        verify(netconfService).getConfig(payload.getInstanceIdentifierContext().getInstanceIdentifier());
-        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+            WriteDataParams.empty());
+        verify(netconfService).getConfig(iid2);
+        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
     }
 
     @Test
@@ -286,17 +273,14 @@ public class PutDataTransactionUtilTest {
 
         doReturn(readWrite).when(mockDataBroker).newReadWriteTransaction();
         doReturn(read).when(mockDataBroker).newReadOnlyTransaction();
-        doReturn(immediateFalseFluentFuture())
-                .when(read).exists(LogicalDatastoreType.CONFIGURATION, iid);
-        doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
+        doReturn(immediateFalseFluentFuture()).when(read).exists(LogicalDatastoreType.CONFIGURATION, iid);
+        doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid, payload.getData());
         doReturn(CommitInfo.emptyFluentFuture()).when(readWrite).commit();
 
-        PutDataTransactionUtil.putData(payload, schema, new MdsalRestconfStrategy(mockDataBroker), null, null);
-        verify(read).exists(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier());
-        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
+        PutDataTransactionUtil.putData(payload, schema, new MdsalRestconfStrategy(mockDataBroker),
+            WriteDataParams.empty());
+        verify(read).exists(LogicalDatastoreType.CONFIGURATION, iid);
+        verify(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid, payload.getData());
     }
 
     @Test
@@ -308,14 +292,12 @@ public class PutDataTransactionUtilTest {
         doReturn(immediateFluentFuture(Optional.empty())).when(netconfService).getConfig(iid);
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).commit();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService)
-            .replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+            .replace(LogicalDatastoreType.CONFIGURATION, iid, payload.getData(), Optional.empty());
 
         PutDataTransactionUtil.putData(payload, schema, new NetconfRestconfStrategy(netconfService),
-                null, null);
-        verify(netconfService).getConfig(payload.getInstanceIdentifierContext().getInstanceIdentifier());
-        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+            WriteDataParams.empty());
+        verify(netconfService).getConfig(iid);
+        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid, payload.getData(), Optional.empty());
     }
 
     @Test
@@ -324,18 +306,15 @@ public class PutDataTransactionUtilTest {
                 new InstanceIdentifierContext<>(iid, schemaNode, null, schema);
         final NormalizedNodePayload payload = NormalizedNodePayload.of(iidContext, buildLeaf);
 
-        doReturn(immediateFluentFuture(Optional.of(mock(NormalizedNode.class))))
-                .when(netconfService).getConfig(iid);
+        doReturn(immediateFluentFuture(Optional.of(mock(NormalizedNode.class)))).when(netconfService).getConfig(iid);
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService).commit();
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult())).when(netconfService)
-            .replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+            .replace(LogicalDatastoreType.CONFIGURATION, iid, payload.getData(), Optional.empty());
 
-        PutDataTransactionUtil.putData(payload, schema,
-                new NetconfRestconfStrategy(netconfService), null, null);
-        verify(netconfService).getConfig(payload.getInstanceIdentifierContext().getInstanceIdentifier());
-        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), Optional.empty());
+        PutDataTransactionUtil.putData(payload, schema, new NetconfRestconfStrategy(netconfService),
+            WriteDataParams.empty());
+        verify(netconfService).getConfig(iid);
+        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid, payload.getData(), Optional.empty());
     }
 
     @Test
@@ -348,10 +327,10 @@ public class PutDataTransactionUtilTest {
         doReturn(read).when(mockDataBroker).newReadOnlyTransaction();
         doReturn(immediateFalseFluentFuture())
                 .when(read).exists(LogicalDatastoreType.CONFIGURATION, iid2);
-        doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION,
-                payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData());
+        doNothing().when(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData());
         doReturn(CommitInfo.emptyFluentFuture()).when(readWrite).commit();
-        PutDataTransactionUtil.putData(payload, schema, new MdsalRestconfStrategy(mockDataBroker), null, null);
+        PutDataTransactionUtil.putData(payload, schema, new MdsalRestconfStrategy(mockDataBroker),
+            WriteDataParams.empty());
         verify(read).exists(LogicalDatastoreType.CONFIGURATION, iid2);
         verify(readWrite).put(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData());
     }
@@ -369,7 +348,7 @@ public class PutDataTransactionUtilTest {
             .replace(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
 
         PutDataTransactionUtil.putData(payload, schema, new NetconfRestconfStrategy(netconfService),
-                null, null);
+            WriteDataParams.empty());
         verify(netconfService).getConfig(iid2);
         verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid2,
                 payload.getData(), Optional.empty());
@@ -388,10 +367,9 @@ public class PutDataTransactionUtilTest {
             .replace(LogicalDatastoreType.CONFIGURATION,
                 iid2, payload.getData(), Optional.empty());
 
-        PutDataTransactionUtil.putData(payload, schema,
-                new NetconfRestconfStrategy(netconfService), null, null);
+        PutDataTransactionUtil.putData(payload, schema, new NetconfRestconfStrategy(netconfService),
+            WriteDataParams.empty());
         verify(netconfService).getConfig(iid2);
-        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid2,
-                payload.getData(), Optional.empty());
+        verify(netconfService).replace(LogicalDatastoreType.CONFIGURATION, iid2, payload.getData(), Optional.empty());
     }
 }