/*
* Created on 10.02.2005
*
* $Id: Taxi.java,v 1.1 2005/06/24 13:56:05 boehm Exp $
*/
package space;
import java.util.*;
import space.annotation.*;
/**
* @author oliver
* @since 10.02.2005
* @version $revision$
*/
@Copyright("(c) 2005 HAL-Oli B.")
@Licence("GPL")
public class Taxi {
/** Preis pro Meile */
@Constant
@Tariff
private double mileageFare = 0.2;
/** Preis pro Minute */
@Constant
private double minuteFare = 0.5;
/** Grundgebuehr */
@Constant
private Integer basicFee = 2;
/** Taxifahrer */
@Human
private TaxiDriver driver = new TaxiDriver("Theo");
/** max. 4 Passagiere gehen rein */
@Persistent
private List list = new Vector(4);
/**
* Neuer Fahrgast steigt ein und setzt sich auf den naechsten
* freien Platz.
* @throws PassengerException
*/
@Critical
@Modification
public void enter(Passenger passenger) throws PassengerException {
if (this.isFull()) {
throw new PassengerException("Taxi already full!");
}
list.add(passenger);
}
/**
* Fahrgast Nummer n wird rausgeschmissen.
* @param n Fahrgastnummer (1 - 4)
*/
@Modification
public void leave(int n) {
list.remove(n-1);
}
@Modification
public void leave(Passenger passenger) {
list.remove(passenger);
}
@Modification
public void leaveAll() {
list.removeAll(list);
}
/**
* Zum Schluss sicherheitshalber alle Passagiere rausschmeissen.
*/
protected void finalize() {
leaveAll();
}
/**
* Get Number of Passengers
* @return Anzahl der Passagiere
*/
@Query
public int getNoPassengers() {
return list.size();
}
/**
* Liefert den Passagier auf Sitzplatz n zurueck. Falls da keiner sitzt,
* wird null zurueckgegeben.
*
* @param n Sitzplatz-Nummer (1 - 4)
* @return Passagier auf Platz n
*/
@Query
public Passenger getPassenger(int n) {
try {
return list.get(n-1);
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
/**
* Ist das Taxi leer?
* @return true, wenn das Taxi leer ist
*/
@Query
public boolean isEmpty() {
return list.size() == 0;
}
/**
* Ist das Taxi voll?
* @return true, wenn das Taxi voll ist
*/
@Query
public boolean isFull() {
return getNoPassengers() >= 4;
}
/**
* Alles ok mit dem Taxi?
* @return
*/
@Dummy
@Query
public boolean isOK() {
return true;
}
}