@PUT @Consumes(APPLICATION_JSON) @Produces(APPLICATION_JSON) @Path("/payments/{paymentId:" + UUID_PATTERN + "}/transactions/{paymentTransactionId:" + UUID_PATTERN + "}") @ApiOperation(value = "Update existing paymentTransaction and associated payment state") @ApiResponses(value = {@ApiResponse(code = 204, message = "Successful operation"), @ApiResponse(code = 400, message = "Invalid account data supplied")}) public Response updatePaymentTransactionState(@PathParam("paymentId") final UUID paymentId, @PathParam("paymentTransactionId") final UUID paymentTransactionId, final AdminPaymentJson json, @HeaderParam(HDR_CREATED_BY) final String createdBy, @HeaderParam(HDR_REASON) final String reason, @HeaderParam(HDR_COMMENT) final String comment, @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException { final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request); final Payment payment = paymentApi.getPayment(paymentId, false, false, ImmutableList.<PluginProperty>of(), callContext); final PaymentTransaction paymentTransaction = Iterables.tryFind(payment.getTransactions(), new Predicate<PaymentTransaction>() { @Override public boolean apply(final PaymentTransaction input) { return input.getId().equals(paymentTransactionId); } }).orNull(); adminPaymentApi.fixPaymentTransactionState(payment, paymentTransaction, TransactionStatus.valueOf(json.getTransactionStatus()), json.getLastSuccessPaymentState(), json.getCurrentPaymentStateName(), ImmutableList.<PluginProperty>of(), callContext); return Response.status(Status.NO_CONTENT).build(); }