/** * Return the list of registered drivers for the JSF page. * * @return A list of JSF SelectItem objects to fill a page component with the list of drivers. */ public List<SelectItem> getDriverList() { List<SelectItem> driverList = new ArrayList<SelectItem>(); driverList.add( new SelectItem(null, getI18nMessage("msgs", "manageAmbulances.text.currentDriver.none"))); List<Employee> drivers = employeeDAO.retrieveDrivers(); for (Employee driver : drivers) driverList.add(new SelectItem(driver.getId(), driver.getName())); return driverList; }
/** * Called from the assignment page's form, sends the data on the end of the current assignment * and/or the beginning of a new one and changes the driver assigned to the ambulance. * * <p>This method executes a scenario in the service class. */ public void changeAssignment() { // Only change an assignment if the driver actually changed. if ((driverId != null) && (currentAssignment.getDriver() != null) && (driverId.equals(currentAssignment.getDriver().getId()))) { logger.log( Level.WARNING, "Assigning ambulance # {0} (id {1}) with the same driver. Current assignment's driver's ID: {3}, supplied ID: {4}.", new Object[] { selectedEntity.getNumber(), selectedEntity.getId(), currentAssignment.getDriver().getId(), driverId }); addGlobalI18nMessage( "msgs", FacesMessage.SEVERITY_WARN, "manageAmbulances.warn.sameDriverAssignment", currentAssignment.getDriver().getName()); } else { Employee driver = (driverId == null) ? null : employeeDAO.retrieveById(driverId); try { // If the driver was specified, create a new assignment, possibly ending a current // assignment. if (driver != null) { logger.log( Level.INFO, "Assigning ambulance # {0} (id {1}). Driver: {2}.", new Object[] {selectedEntity.getNumber(), selectedEntity.getId(), driver.getName()}); currentAssignment = getCrudService().assignAmbulance(selectedEntity, driver); free = false; addGlobalI18nMessage( "msgs", FacesMessage.SEVERITY_INFO, "manageAmbulances.info.assignmentStarted"); } // If not, end the current assignment. else { logger.log( Level.INFO, "Ending current assignment for ambulance # {0} (id {1}).", new Object[] {selectedEntity.getNumber(), selectedEntity.getId()}); getCrudService().endCurrentAssignment(selectedEntity); currentAssignment = null; free = true; addGlobalI18nMessage( "msgs", FacesMessage.SEVERITY_INFO, "manageAmbulances.info.assignmentEnded"); } } catch (AmbulanceHasMultipleCurrentDriverAssignmentsException e) { logger.log( Level.SEVERE, "There has been an error while assigning a driver to ambulance # " + selectedEntity.getNumber() + " (id " + selectedEntity.getId() + ")", e); addGlobalI18nMessage( "msgs", FacesMessage.SEVERITY_ERROR, "manageAmbulances.error.assignmentError", selectedEntity.getNumber()); driverId = null; } catch (AmbulanceHasNoCurrentDriverAssignmentsException e) { logger.log( Level.SEVERE, "There has been an error while assigning a driver to ambulance # " + selectedEntity.getNumber() + " (id " + selectedEntity.getId() + ")", e); addGlobalI18nMessage( "msgs", FacesMessage.SEVERITY_ERROR, "manageAmbulances.error.assignmentError", selectedEntity.getNumber()); driverId = null; } catch (EmployeeIsNotDriverException e) { logger.log( Level.SEVERE, "There has been an error while assigning a driver to ambulance # " + selectedEntity.getNumber() + " (id " + selectedEntity.getId() + "): the specified employee (" + driver.getLogin() + ") is not a driver!", e); addGlobalI18nMessage( "msgs", FacesMessage.SEVERITY_ERROR, "manageAmbulances.error.assignmentErrorNotDriver", driver.getName(), selectedEntity.getNumber()); driverId = null; } } }