Create NetconfDataTreeService with base and additional operations for netconf
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / rests / utils / DeleteDataTransactionUtil.java
index 54e3964bd9de4afa66baea0a046785da944b3ce6..9544a07f3a592c2cfa69384d002856f199d702d2 100644 (file)
@@ -12,14 +12,11 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
-import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
-import org.opendaylight.restconf.nb.rfc8040.rests.transactions.TransactionVarsWrapper;
+import org.opendaylight.restconf.nb.rfc8040.rests.transactions.RestconfStrategy;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 /**
  * Util class for delete specific data in config DS.
- *
  */
 public final class DeleteDataTransactionUtil {
 
@@ -30,35 +27,20 @@ public final class DeleteDataTransactionUtil {
     /**
      * Delete data from DS via transaction.
      *
-     * @param transactionNode
-     *             Wrapper for data of transaction
+     * @param strategy object that perform the actual DS operations
      * @return {@link Response}
      */
-    public static Response deleteData(final TransactionVarsWrapper transactionNode) {
-        final FluentFuture<? extends CommitInfo> future = submitData(transactionNode.getTransactionChainHandler(),
-                transactionNode.getInstanceIdentifier().getInstanceIdentifier());
+    public static Response deleteData(final RestconfStrategy strategy) {
+        strategy.prepareReadWriteExecution();
+        final YangInstanceIdentifier path = strategy.getInstanceIdentifier().getInstanceIdentifier();
+        TransactionUtil.checkItemExists(strategy, LogicalDatastoreType.CONFIGURATION, path,
+                RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE);
+        strategy.delete(LogicalDatastoreType.CONFIGURATION, path);
+        final FluentFuture<? extends CommitInfo> future = strategy.commit();
         final ResponseFactory response = new ResponseFactory(Status.NO_CONTENT);
-        FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE, response);
+        //This method will close transactionChain if any
+        FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE, response,
+                strategy.getTransactionChain());
         return response.build();
     }
-
-    /**
-     * Delete data via transaction. Return error if data to delete does not exist.
-     *
-     * @param transactionChainHandler
-     *             transaction chain handler
-     * @param readWriteTx
-     *             read and write transaction
-     * @param path
-     *             path of data to delete
-     * @return {@link FluentFuture}
-     */
-    private static FluentFuture<? extends CommitInfo> submitData(
-            final TransactionChainHandler transactionChainHandler, final YangInstanceIdentifier path) {
-        final DOMDataTreeReadWriteTransaction readWriteTx = transactionChainHandler.get().newReadWriteTransaction();
-        TransactionUtil.checkItemExists(transactionChainHandler, readWriteTx, LogicalDatastoreType.CONFIGURATION, path,
-                RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE);
-        readWriteTx.delete(LogicalDatastoreType.CONFIGURATION, path);
-        return readWriteTx.commit();
-    }
 }