public void setNextDestination() {
   Floor location = car.getLocation();
   Assignment newAssignment = assignments.getCurrentAssignment();
   if (location != null && !location.getCallPanel().isDown() && !location.getCallPanel().isUp()) {
     while (newAssignment != null && newAssignment.getDestination() == location) {
       assignments.removeAssignment(newAssignment);
       newAssignment = assignments.getCurrentAssignment();
     }
   }
   if (newAssignment != null) car.setDestination(newAssignment.getDestination());
 }
 public boolean arrive(HashSet<Assignment> RequestAssignments) {
   // TODO Auto-generated method stub
   Floor location = car.getLocation();
   List serviceFloors = car.getFloorRequestPanel().getServicedFloors();
   Floor topFloor = (Floor) serviceFloors.get(serviceFloors.size() - 1);
   Floor bottomFloor = (Floor) serviceFloors.get(0);
   // remove from up/down list
   Assignment currentAssignment = assignments.getCurrentAssignment();
   if (RequestAssignments.contains(currentAssignment))
     RequestAssignments.remove(currentAssignment);
   assignments.removeAssignment(currentAssignment);
   // If the next assignment is on the same floor but going the other way
   // the doors would close and re-open.
   // To prevent this, we can remove that assignment and indicate that
   // we're at the "extreme" position, ready to go the other direction.
   Assignment newAssignment = assignments.getCurrentAssignment();
   while (newAssignment != null && newAssignment.getDestination() == location) {
     assignments.removeAssignment(newAssignment);
     if (RequestAssignments.contains(newAssignment)) RequestAssignments.remove(newAssignment);
     if (currentAssignment.getDirection() == Direction.UP) topFloor = location;
     else bottomFloor = location;
     newAssignment = assignments.getCurrentAssignment();
   }
   /*if (newAssignment!=null){
   	Floor floor=newAssignment.getDestination();
   	if (!serviceFloors.contains(floor)){
   		if (newAssignment.getDirection().isUp()){
   			if (!floor.getCallPanel().isUp())
   				assignments.removeAssignment(newAssignment);
   		}else{
   			if (!floor.getCallPanel().isDown())
   				assignments.removeAssignment(newAssignment);
   		}
   	}
   }*/
   boolean wasUp = currentAssignment.getDirection().isUp();
   boolean atExtreme = (wasUp && location == topFloor) || (!wasUp && location == bottomFloor);
   boolean isUp = atExtreme ? !wasUp : wasUp;
   return isUp;
 }