コード例 #1
0
  /**
   * Commit seats held for a specific customer
   *
   * @param seatHoldId the seat hold identifier
   * @param customerEmail the email address of the customer to which the seat hold is assigned
   * @return a reservation confirmation code
   */
  @Override
  public String reserveSeats(int seatHoldId, String customerEmail) {
    // Before proceeding with reservation, make sure holds are not expired.
    resetHolds();

    // NOW proceed with reservation logic.
    Map<String, List<SeatHoldVO>> seatsOnHold = TemporaryDatabase.getSeatsOnHold();
    int failureCnt = 0;
    if (seatsOnHold != null && !seatsOnHold.isEmpty()) {
      List<SeatHoldVO> seatHoldList = seatsOnHold.get(customerEmail);
      if (seatHoldList != null && !seatHoldList.isEmpty()) {
        Iterator<SeatHoldVO> seatHoldIter = seatHoldList.iterator();
        while (seatHoldIter.hasNext()) {
          SeatHoldVO seatHold = seatHoldIter.next();
          if (seatHold != null && seatHold.getSeatHoldId() == seatHoldId) {
            List<SeatInfoVO> seatsList = seatHold.getSeatsList();
            if (seatsList != null && !seatsList.isEmpty()) {
              Iterator<SeatInfoVO> seatInfoIter = seatsList.iterator();
              while (seatInfoIter.hasNext()) {
                SeatInfoVO seatInfo = seatInfoIter.next();
                boolean reserveStatus =
                    processSeatReserve(
                        seatInfo.getLevelNum(), seatInfo.getRowNum(), seatInfo.getSeatNum());
                if (!reserveStatus) {
                  failureCnt++;
                }
                seatInfoIter.remove();
              }
              seatHoldIter.remove();
            } else {
              // WE are about to reserve seats, but seats are EMPTY, which means failure.
              failureCnt++;
            }
          }
        }
      } else {
        // WE are about to reserve seats, but seats are EMPTY, which means failure.
        failureCnt++;
      }
    }
    if (failureCnt > 0) {
      return Constants.FAILURE_MSG;
    }
    return Constants.SUCCES_MSG;
  }