*/
package org.opendaylight.restconf.nb.rfc8040.rests.utils;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
-import org.opendaylight.restconf.nb.rfc8040.rests.transactions.TransactionVarsWrapper;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+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 {
/**
* 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 CheckedFuture<Void, TransactionCommitFailedException> 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 CheckedFuture}
- */
- private static CheckedFuture<Void, TransactionCommitFailedException> submitData(
- final TransactionChainHandler transactionChainHandler, final YangInstanceIdentifier path) {
- final DOMDataReadWriteTransaction readWriteTx = transactionChainHandler.get().newReadWriteTransaction();
- TransactionUtil.checkItemExists(transactionChainHandler, readWriteTx, LogicalDatastoreType.CONFIGURATION, path,
- RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE);
- readWriteTx.delete(LogicalDatastoreType.CONFIGURATION, path);
- return readWriteTx.submit();
- }
}