X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-rfc8040%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Frestconf%2Fnb%2Frfc8040%2Frests%2Futils%2FPlainPatchDataTransactionUtil.java;h=371b155f1b3475e10585210c7a7e2130d8f80863;hb=14bd5e7ef6421c109248f4e750be330cb0337287;hp=95e36e59522faa4b706b3f42b22f83d8a2784041;hpb=8fb1b893dd661d5347211a744ce5ce8118517df1;p=netconf.git diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java index 95e36e5952..371b155f1b 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PlainPatchDataTransactionUtil.java @@ -13,12 +13,10 @@ 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.mdsal.dom.api.DOMDataTreeWriteTransaction; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; -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; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; @@ -36,62 +34,54 @@ public final class PlainPatchDataTransactionUtil { } /** - * Prepare variables for put data to DS. Close {@link DOMTransactionChain} inside of object - * {@link TransactionVarsWrapper} provided as a parameter. + * Prepare variables for put data to DS. Close {@link DOMTransactionChain} if any inside of object + * {@link RestconfStrategy} provided as a parameter if any. * - * @param payload - * data to put - * @param schemaContext - * reference to {@link EffectiveModelContext} - * @param transactionNode - * wrapper of variables for transaction + * @param payload data to put + * @param schemaContext reference to {@link EffectiveModelContext} + * @param strategy object that perform the actual DS operations * @return {@link Response} */ public static Response patchData(final NormalizedNodeContext payload, - final TransactionVarsWrapper transactionNode, + final RestconfStrategy strategy, final EffectiveModelContext schemaContext) { - final DOMTransactionChain transactionChain = transactionNode.getTransactionChain(); - final DOMDataTreeReadWriteTransaction tx = transactionChain.newReadWriteTransaction(); - + strategy.prepareReadWriteExecution(); YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier(); NormalizedNode data = payload.getData(); try { - mergeDataWithinTransaction(LogicalDatastoreType.CONFIGURATION, path, data, tx, schemaContext); + mergeDataWithinTransaction(LogicalDatastoreType.CONFIGURATION, path, data, strategy, schemaContext); } catch (final RestconfDocumentedException e) { - tx.cancel(); - transactionChain.close(); - + strategy.cancel(); throw new IllegalArgumentException(e); } - final FluentFuture future = tx.commit(); + final FluentFuture future = strategy.commit(); final ResponseFactory response = new ResponseFactory(Status.OK); - FutureCallbackTx.addCallback(future, - RestconfDataServiceConstant.PatchData.PATCH_TX_TYPE, - response, - transactionChain); // closes transactionChain, may throw + FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.PatchData.PATCH_TX_TYPE, response, + strategy.getTransactionChain()); // closes transactionChain if any, may throw return response.build(); } /** * Merge data within one transaction. - * @param dataStore Datastore to merge data to - * @param path Path for data to be merged - * @param payload Data to be merged - * @param writeTransaction Transaction + * + * @param dataStore Datastore to merge data to + * @param path Path for data to be merged + * @param payload Data to be merged + * @param strategy Object that perform the actual DS operations * @param schemaContext global schema context */ private static void mergeDataWithinTransaction(final LogicalDatastoreType dataStore, final YangInstanceIdentifier path, final NormalizedNode payload, - final DOMDataTreeWriteTransaction writeTransaction, + final RestconfStrategy strategy, final EffectiveModelContext schemaContext) { LOG.trace("Merge {} within Restconf Patch: {} with payload {}", dataStore.name(), path, payload); - TransactionUtil.ensureParentsByMerge(path, schemaContext, writeTransaction); - writeTransaction.merge(dataStore, path, payload); + TransactionUtil.ensureParentsByMerge(path, schemaContext, strategy); + strategy.merge(dataStore, path, payload); } }