/** Java class "EtatBanqueNonInitialisee.java" generated from Poseidon for UML.
 *  Poseidon for UML is developed by <A HREF="http://www.gentleware.com">Gentleware</A>.
 *  Generated with <A HREF="http://jakarta.apache.org/velocity/">velocity</A> template engine.
 */ 
package com.developpez.etat;

/**
 * Cette classe represente l'etat de depart de la banque. avant initialisation c'est a dire pour
 * l'exemple simple que nous avons pris : le nom est null. Nous ne reagirons dans cet etat qu'a 
 * l'impulsion validate et sous la condition que le nom de la banque soit initialise.
 * @author smeric
 */
public class EtatBanqueNonInitialisee implements EtatBanque {

	public EtatBanqueNonInitialisee(Banque banque) {
		if (null == banque) { // he he on represente l'etat d'une banque s'il vous plait
			throw new IllegalArgumentException("L'etat d'une banque est necessairement associe a la banque qu'il represente");
		}
		this.banque = banque;
	}

	/**
	 * Reponse a l'impulsion delAgence, ne peut pas etre prise en compte dans cet etat
	 * @param agence l'agence a supprimer.
	 * @throws IllegalStateException systematiquement car l'etat ne repond pas a cet
	 * impultion.
	 * @see com.developpez.etat.EtatBanque#delAgence(com.developpez.etat.Agence)
	 */

	public void delAgence(Agence agence) {
		throw new IllegalStateException("L'agence n'est pas initialisee, impossible d'ajouter ou supprimer des agences");
	}

	/**
	 * Reponse a l'impulsion delete qui n'est pas possible depuis cet etat non initialise.
	 * @throws IllegalStateException systematiquement car l'etat ne repond pas a cet
	 * impultion.
	 * @see com.developpez.etat.EtatBanque#delete()
	 */
	public void delete() {
		throw new IllegalStateException("L'agence n'est pas initialisee, impossible d'ajouter ou supprimer des agences");
	}

	/**
	 * Toujours pas de reponse dans ce cas
	 * @throws IllegalStateException systematiquement car l'etat ne repond pas a cet
	 * impultion.
	 * @see com.developpez.etat.EtatBanque#addAgence(com.developpez.etat.Agence)
	 */
	public void addAgence(Agence agence) {
		throw new IllegalStateException("L'agence n'est pas initialisee, impossible d'ajouter ou supprimer des agences");
	}

	/**
	 * Ca y est il y a une transition au depart de cet etat qui repond a l'impulsion validate
	 * nous allons pouvoir remplir de maniere consistante cette methode.<br/>
	 * La validation permet simplement de passer a l'etat initialise si le nom de la banque
	 * n'est pas vide.
	 * @see com.developpez.etat.EtatBanque#validate()
	 */
	public void validate() {
		
		// correspond a la garde decrite sur la transition
		if (null == banque.getNom()) {
			throw new IllegalStateException("Le nom de banque doit etre non null");
		}
		
		//tout est bien, nous sommes dans l'etat non initialisee, nous avons recu l'impulsion
		//validate et la garde est respecte, il ne reste plus que changer d'etat
		
		banque.setEtat(new EtatBanqueInitialisee(banque));
	}
	
	private final Banque banque;
 } 



