/*
B E S C H R E I B U N G
Ein kleines Demo-Programm zur Benutzung von ArrayList

Zusätzlich zur letzten Version wird hier noch ein Listiterator benutzt.

*/


import java.util.ArrayList;
import java.util.ListIterator;

public class MainArrayList2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Club myc1;
		myc1=new Club("MatheClub");
		myc1.getGaesteListe().add(new Gast("Alfred", myc1));
		myc1.getGaesteListe().add(new Gast("Bernd", myc1));	
		myc1.getFilmeListe().add(new Film("Mutter Theresa", "Vata Morgana"));
		myc1.getFilmeListe().add(new Film("Vater Theresa", "Vata Morgana"));
		myc1.getGruppenListe().add(new Gruppe("Zillertaler", "Vollksmusik"));		
		
		// Setze einen Wunschfilm
		Film myf;
		Gast myg;
		myf=(Film)myc1.getFilmeListe().get(0);
		myg=(Gast)(myc1.getGaesteListe().get(0));
		myg.getWunschFilmListe().add(myf);
		
		
		
		//myc1.gibFilm("Der Schrecken der Medusa");
		//myc1.gibFilm("Mutter Theresa");		
		myc1.gibFilm("Der Schrecken der Medusa");		
		printAllFilme(myc1);
		printAllWunschFilme(myc1, 0);		
	}	    
	
	static private void printAllFilme(Club pc){
		ArrayList fListe;
		fListe=pc.getFilmeListe();
				
	    ListIterator<Film> it = fListe.listIterator( fListe.size() );
	    while( it.hasPrevious()){
	    	System.out.println(it.previous().getName());
		}
	}

	static private void printAllWunschFilme(Club pc, int gastNr){
		ArrayList fListe;
		fListe=((Gast)(pc.getGaesteListe().get(gastNr))).getWunschFilmListe();
	    ListIterator<Film> it = fListe.listIterator( fListe.size() );
	    while( it.hasPrevious()){
	    	System.out.println(it.previous().getName());
		}
	}
}



class Club{
	private String derName;
	private ArrayList <Gast> dieGaeste;
	private ArrayList <Film> dieFilme;	
	private ArrayList <Gruppe> dieGruppe;	
	
	public Club(String pDerName){
		derName = pDerName;
		dieGaeste = new ArrayList <Gast>();		
		dieFilme = new ArrayList <Film>();
		dieGruppe = new ArrayList <Gruppe>();		
	}
	
	public String getName(){
		return(derName);
	}
	
	public ArrayList getGaesteListe(){
		return(dieGaeste);
	}
	
	public ArrayList getFilmeListe(){
		return(dieFilme);
	}

	public ArrayList getGruppenListe(){
		return(dieGruppe);
	}

	Film gibFilm(String name){
	    ListIterator<Film> it = dieFilme.listIterator( dieFilme.size() );
	    while( it.hasPrevious()){
	    	if(it.previous().getName().equals(name)){
	    		return it.next();
	    	}
		}
	    Film f=new Film(name,"");
	    dieFilme.add(f);
	    return f;
	}
	
}

class Gast{
	private String derName;
	private Club derClub;
	private ArrayList <Film> wunschFilme;	
	private ArrayList <Gruppe> wunschGruppe;	

	public Gast(String pDerName, Club pDerClub){
		derName = pDerName;
		derClub = pDerClub;
		wunschFilme = new ArrayList <Film>();
		wunschGruppe = new ArrayList <Gruppe>();		
	}
	
	public String getName(){
		return(derName);
	}
	
	public ArrayList getWunschFilmListe(){
		return(wunschFilme);
	}
}


class Film{
	private String derName;
	private String dieRegie;	
	
	//private Gast[] dieGaeste;
	
	public Film(String pDerName, String pDieRegie){
		derName = pDerName;
		dieRegie = pDieRegie;		
		
	}
	
	public String getName(){
		return(derName);
	}

	public String getRegie(){
		return(dieRegie);
	}
}


class Gruppe{
	private String derName;
	private String dasGenre;	
	
	public Gruppe(String pDerName, String pDasGenre){
		derName = pDerName;
		dasGenre = pDasGenre;		
	}
	
	public String getName(){
		return(derName);
	}

	public String getGenre(){
		return(dasGenre);
	}
	
}


