Reorganize transactionChainHandler usage.
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / rests / utils / PostDataTransactionUtil.java
index 937a6361a0b31e583c63c98398083006f8958997..f1f395ba40e9948e1a0d6c9891655880382f1ad7 100644 (file)
@@ -22,7 +22,6 @@ import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
-import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
 import org.opendaylight.restconf.nb.rfc8040.references.SchemaContextRef;
 import org.opendaylight.restconf.nb.rfc8040.rests.transactions.TransactionVarsWrapper;
 import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
@@ -48,7 +47,8 @@ public final class PostDataTransactionUtil {
     }
 
     /**
-     * Check mount point and prepare variables for post data.
+     * Check mount point and prepare variables for post data. Close {@link DOMTransactionChain} inside of object
+     * {@link TransactionVarsWrapper} provided as a parameter.
      *
      * @param uriInfo
      *
@@ -72,7 +72,9 @@ public final class PostDataTransactionUtil {
                 transactionNode, schemaContextRef.get(), insert, point);
         final URI location = PostDataTransactionUtil.resolveLocation(uriInfo, transactionNode, schemaContextRef);
         final ResponseFactory dataFactory = new ResponseFactory(Status.CREATED).location(location);
-        FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory);
+        //This method will close transactionChain
+        FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory,
+                transactionNode.getTransactionChain());
         return dataFactory.build();
     }
 
@@ -96,10 +98,10 @@ public final class PostDataTransactionUtil {
     private static FluentFuture<? extends CommitInfo> submitData(final YangInstanceIdentifier path,
             final NormalizedNode<?, ?> data, final TransactionVarsWrapper transactionNode,
             final SchemaContext schemaContext, final String insert, final String point) {
-        final DOMTransactionChain domTransactionChain = transactionNode.getTransactionChain();
-        final DOMDataTreeReadWriteTransaction newReadWriteTransaction = domTransactionChain.newReadWriteTransaction();
+        final DOMTransactionChain transactionChain = transactionNode.getTransactionChain();
+        final DOMDataTreeReadWriteTransaction newReadWriteTransaction = transactionChain.newReadWriteTransaction();
         if (insert == null) {
-            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(), newReadWriteTransaction);
+            makePost(path, data, schemaContext, transactionChain, newReadWriteTransaction);
             return newReadWriteTransaction.commit();
         } else {
             final DataSchemaNode schemaNode = PutDataTransactionUtil.checkListAndOrderedType(schemaContext, path);
@@ -110,15 +112,15 @@ public final class PostDataTransactionUtil {
                             schemaContext, transactionNode.getTransactionChainHandler(), schemaNode);
                         final OrderedMapNode readList = (OrderedMapNode) readData;
                         if (readList == null || readList.getValue().isEmpty()) {
-                            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                            makePost(path, data, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         } else {
                             newReadWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION,
                                     path.getParent().getParent());
                             simplePost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, data,
-                                    schemaContext, transactionNode.getTransactionChainHandler());
-                            makePost(path, readData, schemaContext, transactionNode.getTransactionChainHandler(),
+                                    schemaContext, transactionChain);
+                            makePost(path, readData, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         }
@@ -128,21 +130,21 @@ public final class PostDataTransactionUtil {
 
                         final OrderedLeafSetNode<?> readLeafList = (OrderedLeafSetNode<?>) readData;
                         if (readLeafList == null || readLeafList.getValue().isEmpty()) {
-                            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                            makePost(path, data, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         } else {
                             newReadWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION,
                                     path.getParent().getParent());
                             simplePost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, data,
-                                    schemaContext, transactionNode.getTransactionChainHandler());
-                            makePost(path, readData, schemaContext, transactionNode.getTransactionChainHandler(),
+                                    schemaContext, transactionChain);
+                            makePost(path, readData, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         }
                     }
                 case "last":
-                    makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                    makePost(path, data, schemaContext, transactionChain,
                             newReadWriteTransaction);
                     return newReadWriteTransaction.commit();
                 case "before":
@@ -151,13 +153,13 @@ public final class PostDataTransactionUtil {
                             schemaContext, transactionNode.getTransactionChainHandler(), schemaNode);
                         final OrderedMapNode readList = (OrderedMapNode) readData;
                         if (readList == null || readList.getValue().isEmpty()) {
-                            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                            makePost(path, data, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path,
                                     data, schemaContext, point, readList, true,
-                                    transactionNode.getTransactionChainHandler());
+                                    transactionChain);
                             return newReadWriteTransaction.commit();
                         }
                     } else {
@@ -166,13 +168,13 @@ public final class PostDataTransactionUtil {
 
                         final OrderedLeafSetNode<?> readLeafList = (OrderedLeafSetNode<?>) readData;
                         if (readLeafList == null || readLeafList.getValue().isEmpty()) {
-                            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                            makePost(path, data, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointLeafListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION,
                                     path, data, schemaContext, point, readLeafList, true,
-                                    transactionNode.getTransactionChainHandler());
+                                    transactionChain);
                             return newReadWriteTransaction.commit();
                         }
                     }
@@ -182,13 +184,13 @@ public final class PostDataTransactionUtil {
                             schemaContext, transactionNode.getTransactionChainHandler(), schemaNode);
                         final OrderedMapNode readList = (OrderedMapNode) readData;
                         if (readList == null || readList.getValue().isEmpty()) {
-                            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                            makePost(path, data, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path,
                                     data, schemaContext, point, readList, false,
-                                    transactionNode.getTransactionChainHandler());
+                                    transactionChain);
                             return newReadWriteTransaction.commit();
                         }
                     } else {
@@ -197,13 +199,13 @@ public final class PostDataTransactionUtil {
 
                         final OrderedLeafSetNode<?> readLeafList = (OrderedLeafSetNode<?>) readData;
                         if (readLeafList == null || readLeafList.getValue().isEmpty()) {
-                            makePost(path, data, schemaContext, transactionNode.getTransactionChainHandler(),
+                            makePost(path, data, schemaContext, transactionChain,
                                     newReadWriteTransaction);
                             return newReadWriteTransaction.commit();
                         } else {
                             insertWithPointLeafListPost(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION,
                                     path, data, schemaContext, point, readLeafList, true,
-                                    transactionNode.getTransactionChainHandler());
+                                    transactionChain);
                             return newReadWriteTransaction.commit();
                         }
                     }
@@ -219,7 +221,7 @@ public final class PostDataTransactionUtil {
     private static void insertWithPointLeafListPost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode<?, ?> payload,
             final SchemaContext schemaContext, final String point, final OrderedLeafSetNode<?> readLeafList,
-            final boolean before, final TransactionChainHandler transactionChainHandler) {
+            final boolean before, final DOMTransactionChain transactionChain) {
         rwTransaction.delete(datastore, path.getParent().getParent());
         final InstanceIdentifierContext<?> instanceIdentifier =
                 ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty());
@@ -239,12 +241,12 @@ public final class PostDataTransactionUtil {
         rwTransaction.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree);
         for (final LeafSetEntryNode<?> nodeChild : readLeafList.getValue()) {
             if (lastInsertedPosition == lastItemPosition) {
-                TransactionUtil.checkItemDoesNotExists(transactionChainHandler, rwTransaction, datastore, path,
+                TransactionUtil.checkItemDoesNotExists(transactionChain, rwTransaction, datastore, path,
                         RestconfDataServiceConstant.PostData.POST_TX_TYPE);
                 rwTransaction.put(datastore, path, payload);
             }
             final YangInstanceIdentifier childPath = path.getParent().getParent().node(nodeChild.getIdentifier());
-            TransactionUtil.checkItemDoesNotExists(transactionChainHandler, rwTransaction, datastore, childPath,
+            TransactionUtil.checkItemDoesNotExists(transactionChain, rwTransaction, datastore, childPath,
                     RestconfDataServiceConstant.PostData.POST_TX_TYPE);
             rwTransaction.put(datastore, childPath, nodeChild);
             lastInsertedPosition++;
@@ -254,7 +256,7 @@ public final class PostDataTransactionUtil {
     private static void insertWithPointListPost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode<?, ?> payload,
             final SchemaContext schemaContext, final String point, final MapNode readList, final boolean before,
-            final TransactionChainHandler transactionChainHandler) {
+            final DOMTransactionChain transactionChain) {
         rwTransaction.delete(datastore, path.getParent().getParent());
         final InstanceIdentifierContext<?> instanceIdentifier =
                 ParserIdentifier.toInstanceIdentifier(point, schemaContext, Optional.empty());
@@ -274,12 +276,12 @@ public final class PostDataTransactionUtil {
         rwTransaction.merge(datastore, YangInstanceIdentifier.create(emptySubtree.getIdentifier()), emptySubtree);
         for (final MapEntryNode mapEntryNode : readList.getValue()) {
             if (lastInsertedPosition == lastItemPosition) {
-                TransactionUtil.checkItemDoesNotExists(transactionChainHandler, rwTransaction, datastore, path,
+                TransactionUtil.checkItemDoesNotExists(transactionChain, rwTransaction, datastore, path,
                         RestconfDataServiceConstant.PostData.POST_TX_TYPE);
                 rwTransaction.put(datastore, path, payload);
             }
             final YangInstanceIdentifier childPath = path.getParent().getParent().node(mapEntryNode.getIdentifier());
-            TransactionUtil.checkItemDoesNotExists(transactionChainHandler, rwTransaction, datastore, childPath,
+            TransactionUtil.checkItemDoesNotExists(transactionChain, rwTransaction, datastore, childPath,
                     RestconfDataServiceConstant.PostData.POST_TX_TYPE);
             rwTransaction.put(datastore, childPath, mapEntryNode);
             lastInsertedPosition++;
@@ -287,14 +289,14 @@ public final class PostDataTransactionUtil {
     }
 
     private static void makePost(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data,
-            final SchemaContext schemaContext, final TransactionChainHandler transactionChainHandler,
+            final SchemaContext schemaContext, final DOMTransactionChain transactionChain,
             final DOMDataTreeReadWriteTransaction transaction) {
         if (data instanceof MapNode) {
             boolean merge = false;
             for (final MapEntryNode child : ((MapNode) data).getValue()) {
                 final YangInstanceIdentifier childPath = path.node(child.getIdentifier());
                 TransactionUtil.checkItemDoesNotExists(
-                        transactionChainHandler, transaction, LogicalDatastoreType.CONFIGURATION, childPath,
+                        transactionChain, transaction, LogicalDatastoreType.CONFIGURATION, childPath,
                         RestconfDataServiceConstant.PostData.POST_TX_TYPE);
                 if (!merge) {
                     merge = true;
@@ -307,7 +309,7 @@ public final class PostDataTransactionUtil {
             }
         } else {
             TransactionUtil.checkItemDoesNotExists(
-                    transactionChainHandler, transaction, LogicalDatastoreType.CONFIGURATION, path,
+                    transactionChain, transaction, LogicalDatastoreType.CONFIGURATION, path,
                     RestconfDataServiceConstant.PostData.POST_TX_TYPE);
 
             TransactionUtil.ensureParentsByMerge(path, schemaContext, transaction);
@@ -343,8 +345,8 @@ public final class PostDataTransactionUtil {
 
     private static void simplePost(final DOMDataTreeReadWriteTransaction rwTransaction,
             final LogicalDatastoreType datastore, final YangInstanceIdentifier path, final NormalizedNode<?, ?> payload,
-            final SchemaContext schemaContext, final TransactionChainHandler transactionChainHandler) {
-        TransactionUtil.checkItemDoesNotExists(transactionChainHandler, rwTransaction, datastore, path,
+            final SchemaContext schemaContext, final DOMTransactionChain transactionChain) {
+        TransactionUtil.checkItemDoesNotExists(transactionChain, rwTransaction, datastore, path,
                 RestconfDataServiceConstant.PostData.POST_TX_TYPE);
         TransactionUtil.ensureParentsByMerge(path, schemaContext, rwTransaction);
         rwTransaction.put(datastore, path, payload);