/** {@inheritDoc} */ @Override public void processRequestMsg(Request msg) { int vin = msg.getVin(); // If the vehicle has got a reservation already, reject it. if (basePolicy.hasReservation(vin)) { basePolicy.sendRejectMsg(vin, msg.getRequestId(), Reject.Reason.CONFIRMED_ANOTHER_REQUEST); return; } // filter the proposals ProposalFilterResult filterResult = BasePolicy.standardProposalsFilter(msg.getProposals(), basePolicy.getCurrentTime()); if (filterResult.isNoProposalLeft()) { basePolicy.sendRejectMsg(vin, msg.getRequestId(), filterResult.getReason()); } List<Request.Proposal> proposals = filterResult.getProposals(); // If cannot enter from lane according to canEnterFromLane(), reject it. if (!canEnterFromLane(proposals.get(0).getArrivalLaneID())) { basePolicy.sendRejectMsg(vin, msg.getRequestId(), Reject.Reason.NO_CLEAR_PATH); return; } // try to see if reservation is possible for the remaining proposals. ReserveParam reserveParam = basePolicy.findReserveParam(msg, proposals); if (reserveParam != null) { basePolicy.sendComfirmMsg(msg.getRequestId(), reserveParam); } else { basePolicy.sendRejectMsg(vin, msg.getRequestId(), Reject.Reason.NO_CLEAR_PATH); } }