/** * 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; }