import java.util.*;

class Agence {
}

abstract class EtatBanqueAdapter {
	public void validate () {};
	public void addAgence() {};
	public void delAgence() {};
	public void delete() {};
}

class EtatNonValide extends EtatBanqueAdapter {
	private Banque b;
	
	EtatNonValide(Banque b) {
		this.b = b;
	}

	public void validate() {
		// ici il faudrait saisir un nom
		// ...
		
		b.setNom("LCL");
		b.setEtat(new EtatValide(b));
	}
}	

class EtatValide extends EtatBanqueAdapter {
	private Banque b;
	
	EtatValide(Banque b) {
		this.b = b;
	}

	public void addAgence() {
		// ici il faudrait saisir les caractéristiques d'une agence
		// ...
		
		b.addAgence(new Agence());
		b.setEtat(new EtatADesAgences(b));
	}

	public void delete() {
		b.setEtat(new EtatDelete(b));
	}
}

class EtatADesAgences extends EtatBanqueAdapter {
	private Banque b;
	
	EtatADesAgences(Banque b) {
		this.b = b;
	}

	public void addAgence() {
		// ici il faudrait saisir les caractéristiques d'une agence
		// ...
		
		b.addAgence(new Agence());
	}
	
	public void addAgence() {
		// ici il faudrait choisir l'agence à supprimer
		// ...
		
		b.delAgence(getAgence(0));
	}
}

class EtatDelete extends EtatBanqueAdapter {
	public void validate () {
		System.out.println("La banque a déposé son bilan");
	}
	public void addAgence () {
		System.out.println("La banque a déposé son bilan");
	}
	public void delAgence () {
		System.out.println("La banque a déposé son bilan");
	}
	public void delete () {
		System.out.println("La banque a déposé son bilan");
	}
}		

	
class Banque {
	private EtatBanqueAdapter et;
	private String nom;
	private Vector<Agence> mesAgences;
	
	public Banque() {
		et = new EtatNonValide(this);
		mesAgences = new Vector<Agence>();
		nom = null;
	}
	
	public void validate() {
		et.validate();
	}
		
	public void addAgence() {
		et.addAgence();
	}
	
	public void addAgence(Agence a) {
		mesAgences.add(a);
	}
	
	public void delAgence() {
		et.delAgence();
	}

	public void delete() {
		et.delete();
	}
	
	public void setNom(String nom) {
		this.nom = nom;
	}
	
	public String toString() {
		return et.getClass().getName();
	}
	
	public void setEtat(EtatBanqueAdapter et) {
		this.et = et;
	}
	
	public Agence getAgence(int i) {
		return mesAgences[i];
	}
}

class Client  {
	public static void main(String [] args) {
		Banque b = new Banque();
		
		b.delete();
		System.out.println(b.toString());
		b.validate();
		System.out.println(b.toString());		
	}
}	
	
		