package collect;

import java.util.ArrayList;
import java.util.Collections;
import java.util.GregorianCalendar;

public class DemoArrayListPersonnes
{
	private ArrayList<Personne> mesPersonnes = new ArrayList<Personne>();
	private CompareTaille monCompareTaille = new CompareTaille();
	private ComparePoids monComparePoids = new ComparePoids();
	private CompareAlpha monCompareAlpha = new CompareAlpha();
	
	public DemoArrayListPersonnes()
	{
		// Attention: Le GregorianCalendar indice les mois de 0 (janvier) à 11 (décembre)

		mesPersonnes.add(new Personne("Lalieux", "Albert", 133, 33, new GregorianCalendar(2004, 1, 25)));
		mesPersonnes.add(new Personne("Wintein", "Marie", 170, 51, new GregorianCalendar(1976, 0, 16)));
		mesPersonnes.add(new Personne("Mets", "Victoria", 135, 31, new GregorianCalendar(2003, 0, 31)));
		mesPersonnes.add(new Personne("Mascart", "Christian", 185, 90, new GregorianCalendar(1969, 11, 3)));
		mesPersonnes.add(new Personne("Mascart", "Jean", 172, 92, new GregorianCalendar(1929, 11, 7)));
		System.out.println("La liste de personnes initiale");
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nLa liste de personnes dans l'ordre inverse");
		Collections.reverse(mesPersonnes);
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nLa liste de personnes triée (L'ordre spontané est la naissance)");
		Collections.sort(mesPersonnes);
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nAjout d'une nouvelle personne");
		mesPersonnes.add(3, new Personne("Plouviez", "Louise", 157, 65, new GregorianCalendar(1943, 10, 23)));
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nLa liste de personnes triée");
		Collections.sort(mesPersonnes);
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nLa liste de personnes triée en ordre inverse");
		Collections.sort(mesPersonnes, Collections.reverseOrder());
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nLa liste de personnes mise en désordre (shuffle)");
		Collections.shuffle(mesPersonnes);
		afficherArrayList (mesPersonnes);
		
		System.out.print("\nLe plus petit élément de la liste : ");
		System.out.println(Collections.min(mesPersonnes));
		
		System.out.print("\nLe plus grand élément de la liste : ");
		System.out.println(Collections.max(mesPersonnes));
		
		System.out.println("\n*** Utilisation d'un objet Comparator pour déroger à l'ordre compareTo de l'objet Personne ***");
		System.out.println("\nLes personnes triées par taille");
		Collections.sort(mesPersonnes, monCompareTaille);
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nLes personnes triées par poids");
		Collections.sort(mesPersonnes, monComparePoids);
		afficherArrayList (mesPersonnes);
		
		mesPersonnes.add(new Personne("Mascart", "Josiane", 157, 65, new GregorianCalendar(1948, 4, 15)));
		mesPersonnes.add(new Personne("Delafontaine", "Aurore", 170, 62, new GregorianCalendar(1979, 5, 22)));
		//mesPersonnes.add(new Personne("Bonaert", "Sacha", 51, 12, new GregorianCalendar(2012, 8, 22)));

		System.out.println("\nLes personnes triées ordre alphabétique");
		Collections.sort(mesPersonnes, monCompareAlpha);
		afficherArrayList (mesPersonnes);
		
		System.out.println("\nRecherche de la plus petite personne : " + Collections.min(mesPersonnes, monCompareTaille));
		System.out.println("Recherche de la plus légère personne : " + Collections.min(mesPersonnes, monComparePoids));
		System.out.println("Recherche de la plus grande personne : " + Collections.max(mesPersonnes, monCompareTaille));
		System.out.println("Recherche de la plus lourde personne : " + Collections.max(mesPersonnes, monComparePoids));
		
		System.out.println("\nIl y a moyen d'afficher une liste d'objets");
		System.out.println(mesPersonnes);
	}
	
	private void afficherArrayList (ArrayList<Personne> pListe)
	{
		System.out.println("{");
		for(int i = 0; i < pListe.size(); i++)
		{
			System.out.println(" " + pListe.get(i));
		}
		System.out.println("}");
	}
}
