private void createAccount(
     String transactionId, String accountId, double initialBalance, boolean independentTest)
     throws Throwable {
   if (independentTest) {
     this.host.testStart(1);
   }
   BankAccountServiceState initialState = new BankAccountServiceState();
   initialState.documentSelfLink = accountId;
   initialState.balance = initialBalance;
   Operation post =
       Operation.createPost(getAccountFactoryUri())
           .setBody(initialState)
           .setCompletion(
               (o, e) -> {
                 if (operationFailed(o, e)) {
                   this.host.failIteration(e);
                   return;
                 }
                 this.host.completeIteration();
               });
   if (transactionId != null) {
     post.setTransactionId(transactionId);
   }
   this.host.send(post);
   if (independentTest) {
     this.host.testWait();
   }
 }
    void handlePatchForDeposit(Operation patch) {
      BankAccountServiceState currentState = getState(patch);
      BankAccountServiceRequest body = patch.getBody(BankAccountServiceRequest.class);

      currentState.balance += body.amount;

      setState(patch, currentState);
      patch.setBody(currentState);
      patch.complete();
    }
    void handlePatchForWithdraw(Operation patch) {
      BankAccountServiceState currentState = getState(patch);
      BankAccountServiceRequest body = patch.getBody(BankAccountServiceRequest.class);

      if (body.amount > currentState.balance) {
        patch.fail(new IllegalArgumentException("Not enough funds to withdraw"));
        return;
      }
      currentState.balance -= body.amount;

      setState(patch, currentState);
      patch.setBody(currentState);
      patch.complete();
    }