public Future<Promotion> approve(
      AbstractBuild<?, ?> build,
      PromotionProcess promotionProcess,
      List<ParameterValue> paramValues)
      throws IOException {
    if (canApprove(promotionProcess, build)) {
      // add approval to build
      ManualApproval approval = new ManualApproval(promotionProcess.getName(), paramValues);
      build.addAction(approval);
      build.save();

      // check for promotion
      return promotionProcess.considerPromotion2(build, approval);
    }
    return null;
  }