@Override
 public Iterator<ArrayList<VehicleOption>> getUnscheduledVehicleOptions(User user)
     throws NoClearanceException {
   if (user.canChangeAlgorithm())
     return this.getOrderManager().getMainScheduler().getUnscheduledVehicleOptions();
   else throw new NoClearanceException();
 }
 @Override
 public Iterator<AssemblyLine> getAssemblyLines(User user) throws NoClearanceException {
   if (user.canViewAssemblyLines()) {
     SafeIterator<AssemblyLine> safe = new SafeIterator<>();
     safe.convertIterator(this.getOrderManager().getMainScheduler().getAssemblyLines().iterator());
     return safe;
   } else throw new NoClearanceException();
 }
 @Override
 public Iterator<String> getAvailableAssemblyLineStatus(
     User user, AssemblyLine selectedAssemblyLine) throws NoClearanceException {
   if (user.canChangeOperationalStatus()) {
     return selectedAssemblyLine.getAllPossibleStates();
   } else {
     throw new NoClearanceException();
   }
 }
 @Override
 public String getCurrentAssemblyLineStatus(User user, AssemblyLine selectedAssemblyLine)
     throws NoClearanceException {
   if (user.canChangeOperationalStatus()) {
     return selectedAssemblyLine.currentState();
   } else {
     throw new NoClearanceException();
   }
 }
 @Override
 public VehicleStatistics getVehicleStatistics(User user) throws NoClearanceException {
   if (user.canViewStatistics()) return this.statisticsmanager.getVehicleStatistics();
   else throw new NoClearanceException();
 }
 /**
  * Method to get the User given a username.
  *
  * @param username
  * @return
  * @throws IllegalArgumentException
  */
 private User getUser(String username) throws IllegalArgumentException {
   for (User user : this.getUsers()) if (user.getUsername().equals(username)) return user;
   throw new IllegalArgumentException("Username doesn't exist!");
 }
 @Override
 public String getCurrentSystemWideAlgorithm(User user) throws NoClearanceException {
   if (user.canChangeAlgorithm()) return this.getOrderManager().getMainScheduler().getAlgorithm();
   else throw new NoClearanceException();
 }
 @Override
 public Iterator<AssemblyTask> getFinishedTasks(User user, WorkPost wp)
     throws NoClearanceException {
   if (user.canPerfomAssemblyTask()) return wp.getFinishedTasks();
   else throw new NoClearanceException();
 }