package modele.voiture;
import static modele.alerte.AlerteVoiture.TypeAlerte.KILOMETRAGE_FIN_CIRCULATION_ATTEINT;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import modele.alerte.AlerteVoiture;
import modele.alerte.AlerteVoiture.TypeAlerte;
import modele.commun.Etat;
/**
* Voiture : c'est une classe qui d�crit les caract�ristiques de la voiture. *
* <ul>
* <li> nombre de kilom�trage entre deux entretiens initialis� � 15000; </li>
* <li>...
* <li> la liste des alertes de la voiture </li>
* </ul>
*
* @author Kasandra
*
*/
public class Voiture {
/**
* le nombre kilom�trage entre deux entretien est static et ne peut -�tre modifi�
*/
private static final int NOMBRE_DE_KILOMETRE_ENTRE_DEUX_ENTRETIENS = 15000;
private final Integer id;
private String numeroImmatriculation;
private String numeroChassis;
private Date dateAchat;
private Date datePremiereImmatriculation;
private int numAgglo;
private int numCentralTel;
private Long kilometrage = null;
private Long kilometrageFinCirculation;
/**
* marque voiture
* @see MarqueVoiture
*/
private MarqueVoiture marque;
/**
* mod�le voiture
* @see ModeleVoiture
*/
private ModeleVoiture modele;
/**
* �tat de la voiture
* @see Etat
*/
private Etat etat;
/**
* liste des alertes
* @see AlerteVoiture
*/
private List<AlerteVoiture> alertes = new ArrayList<AlerteVoiture>();
/**
* Constructeur Voiture l'id voiture n'est pas d�finit
*/
public Voiture() {
this.id = null;
}
/**
* Constructeur de la voiture, re�oit en param�tre
* @param id: l'identifiant de la voiture
*/
public Voiture(int id) {
this.id = id;
}
/**
* retourne la liste des alertes
* @return alertes
* @see AlerteVoiture
*/
public List<AlerteVoiture> getAlertes() {
return alertes;
}
/**
* Modifie la liste des alertes
* @param alertes
*/
public void setAlertes(List<AlerteVoiture> alertes) {
this.alertes = alertes;
}
/**
* Retourne l'id de la voiture
* @return id : l'identifiant de la voiture
*/
public Integer getId() {
return id;
}
/**
* retourne num�ro immatriculation voiture
* @return numeroImmatriculation
*/
public String getNumeroImmatriculation() {
return numeroImmatriculation;
}
/**
*Modifie num�ro immatriculation
* @param numeroImmatriculation
*/
public void setNumeroImmatriculation(String numeroImmatriculation) {
this.numeroImmatriculation = numeroImmatriculation;
}
/**
* retourne num�ro du chassis
* @return num�ro chassis
*/
public String getNumeroChassis() {
return numeroChassis;
}
/**
* Modifie num�ro chassis
* @param numeroChassis
*/
public void setNumeroChassis(String numeroChassis) {
this.numeroChassis = numeroChassis;
}
/**
* retourne date achat voiture
* @return dateAchat
*/
public Date getDateAchat() {
return dateAchat;
}
/**
* Modifie date achat voiture
* @param dateAchat
*/
public void setDateAchat(Date dateAchat) {
this.dateAchat = dateAchat;
}
/**
*Retourne date premi�re immatriculation
* @return datePremiereImmatriculation
*/
public Date getDatePremiereImmatriculation() {
return datePremiereImmatriculation;
}
/**
* Modifie date pr�mi�re immatriculation
* @param datePremiereImmatriculation
*/
public void setDatePremiereImmatriculation(Date datePremiereImmatriculation) {
this.datePremiereImmatriculation = datePremiereImmatriculation;
}
/**
* retourne le num�ro d'agglom�ration attribu� par la direction des taxis
* @return numAgglo
*/
public int getNumuroAgglomeration() {
return numAgglo;
}
/**
* modifie le num�ro d'agglom�ration
* @param numAgglo
*/
public void setNumeroAgglomeration(int numAgglo) {
this.numAgglo = numAgglo;
}
/**
* retourne le num�ro attribu� par le central t�l�phonique
* @return numCentralTel
*/
public int getNumCentralTel() {
return numCentralTel;
}
/**
* setter
* new num�ro cantrat t�l�phonique
* @param numCentralTel
*/
public void setNumCentralTel(int numCentralTel) {
this.numCentralTel = numCentralTel;
}
/**
* Retourne le kilom�trage de la voiture
* @return kilometrage
*/
public long getKilometrage() {
return kilometrage;
}
/**
* Modifie le kilom�trage de la voiture
* <BR>des alertes sont g�n�r�es au moment de modification de kilom�trage voiture
* <BR> lorsque le palier pour nouveau entretient est atteint
* <BR> ou lorsqu'on d�passe le kilom�trage fin circulation initialis� � 500.000
* <BR>Dans ce cas on rajoute les alertes g�n�r�es dans la liste des alertesVoiture
* @see Voiture#palierPourNouveauEntretienAtteint(long, long)
*
* @param nouveauKilometrage
*/
public void setKilometrage(long nouveauKilometrage) {
if (this.kilometrage != null) {
if (palierPourNouveauEntretienAtteint(this.kilometrage, nouveauKilometrage)) {
AlerteVoiture alerteVoiture = new AlerteVoiture(this, TypeAlerte.KILOMETRAGE_ENTRETIEN_ATTEINT, new Date());
alertes.add(alerteVoiture);
}
if (nouveauKilometrage > kilometrageFinCirculation) {
AlerteVoiture alerteVoiture = new AlerteVoiture(this, KILOMETRAGE_FIN_CIRCULATION_ATTEINT, new Date());
alertes.add(alerteVoiture);
}
}
this.kilometrage = nouveauKilometrage;
}
/**
* cette m�thode permet de v�rifier si on a atteint le palier pour le nouveau entretien
* <BR> la formule suivante permet de le v�rifier
* <BR> <b>nombre1 =( ancien kilom�trage / 15000) </b>
* <BR> <b>nombre2 =(nouveau kilom�trage/ 15000) </b>
* @param ancientKilometrage
* @param nouveauKilometrage
* @return true si nombre1 < nombre2 : false si nombre1 > = nombre2
*/
boolean palierPourNouveauEntretienAtteint(long ancientKilometrage, long nouveauKilometrage) {
return (ancientKilometrage / NOMBRE_DE_KILOMETRE_ENTRE_DEUX_ENTRETIENS) < nouveauKilometrage / NOMBRE_DE_KILOMETRE_ENTRE_DEUX_ENTRETIENS;
}
/**
* Retourne kilom�trage fin circulation
* @return kilometrageFinCirculation
*/
public long getKilometrageFinCirculation() {
return kilometrageFinCirculation;
}
/**
*Modifie kilom�trage fin circulation
* @param kilometrageFinCirculation
*/
public void setKilometrageFinCirculation(long kilometrageFinCirculation) {
this.kilometrageFinCirculation = kilometrageFinCirculation;
}
/**
* Retourne marque voiture
* @return marque
* @see MarqueVoiture#getLibelle()
*/
public MarqueVoiture getMarque() {
return marque;
}
/**
* Modifie marque voiture
* @param marque
*/
public void setMarque(MarqueVoiture marque) {
this.marque = marque;
}
/**
* Retourne mod�le voiture
* @return mod�le voiture
* @see ModeleVoiture
*/
public ModeleVoiture getModele() {
return modele;
}
/**
* Modifie mod�le voiture
* @param modele
*/
public void setModele(ModeleVoiture modele) {
this.modele = modele;
}
/**
* Retourne �tat de la voiture
* @return �tat voiture
*/
public Etat getEtat() {
return etat;
}
/**
* Modifie �tat de la voiture
* @param etat
*/
public void setEtat(Etat etat) {
this.etat = etat;
}
/**
* Incr�mente le kilom�trage
* @param distanceEnKilometre
*/
public void incrementeKilometrage(long distanceEnKilometre) {
setKilometrage(kilometrage + distanceEnKilometre);
}
}