import java.io.*;
import LDL.*;
public class TestLDL {

  private static void ClearScreen(){
     for (int i=0;i<25;i++) System.out.println("");
  }

  public static void menu(){
     System.out.println("Test per la classe ListaDiListe...................................");

     System.out.println("");
     System.out.println("1.  Controlla se la lista di liste e' vuota");
     System.out.println("2.  Svuota la lista di liste");
     System.out.println("3.  Ritorna il numero di chiavi nella lista delle chiavi");
     System.out.println("4.  Ritorna il numero di elementi associati ad una chiave");
     System.out.println("5.  Inserisce una coppia (chiave, elem) nella lista di liste");
     System.out.println("6.  Cancella la coppia (chiave,elem) dalla lista di liste");
     System.out.println("7.  Cancella una chiave dalla lista delle chiavi");
     System.out.println("8.  Cancella tutte le occorrenze di un elemento dalla lista di liste");
     System.out.println("9.  Cerca una coppia (chiave, elem) nella lista di liste");
     System.out.println("10. Cerca una chiave nella lista delle chiavi");
     System.out.println("11. Cerca un elemento in tutta la lista di liste");
     System.out.println("12. Stampa la lista di liste (toString)");
     System.out.println("0.  ESCI");
     System.out.println("");
     System.out.println("...................................................................");

  }



  public static void main(String[] args) {

     int risposta;
     Integer valore = new Integer(0);
     ListaDiListe L = new ListaDiListe();

     InputStream in=System.in;
     BufferedReader d = new  BufferedReader(new InputStreamReader(in));
     BufferedReader e = new BufferedReader(new InputStreamReader(in));

     try{
        do {
           ClearScreen();
           menu();
           risposta = valore.parseInt(d.readLine());
           String testo = "";
	   String chiave = "";
	   boolean b = true;

           switch (risposta){

	         case 1 : //lista di liste vuota?

		 if (L.isEmpty())
		    System.out.println("La lista di liste e' vuota.");
		 else
		    System.out.println("La lista di liste non e' vuota.");
		 break;


              case 2 :// clear
		  L.clear();
       		  System.out.println("Lista di liste vuota");
		  break;

              case 3 :// numero chiavi della lista delle chiavi
		  System.out.println("Totale chiavi: " + L.sizeKey());
		  break;

              case 4 :// numero elementi associati ad una chiave
                 try {
                    System.out.print("chiave  = ");
                    chiave = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura "+
                                         ex.toString()); 
                      b = false;
                 }
		 if (b && chiave != null)
		     System.out.println("Elementi associati: " + L.sizeElem(chiave));
                 else
                     System.out.println("Errore in lettura: metodo non chiamato");
		  break;


              case 5 ://inserisci elemento
                 try {
                    System.out.print("chiave da inserire = ");
                    chiave = d.readLine();
                    System.out.print("elemento associato = ");
                    testo = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura "+
                                         ex.toString()); 
                      b = false;
                 }
		 if (b && chiave != null && testo != null) {
                    L.insert(chiave, testo);
		    System.out.println("coppia (" + chiave + "," + testo + ") inserita nella lista di liste");
                 }
                 else		 
		    System.out.println("inserimento elemento non eseguito");
		 break;


              case 6 ://cancellazione (chiave,elem) dalla lista di liste
                 try {
                    System.out.print("chiave da cancellare = ");
                    chiave = d.readLine();
                    System.out.print("elemento associato = ");
                    testo = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura  "+
                                         ex.toString()); 
                      b = false;
                 }

		 if (b && chiave != null && testo != null)
                    if (L.delete(chiave, testo))
		       System.out.println("(" + chiave + "," + testo + ") Rimossa dalla lista di liste");
                    else
		       System.out.println("(" + chiave + "," + testo + ") non rimossa dalla lista di liste");
                 else		 
		    System.out.println("rimozione non eseguita");
		 break;


              case 7 ://cancellazione chiave dalla lista di liste
                 try {
                    System.out.print("chiave da cancellare = ");
                    chiave = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura  "+
                                         ex.toString()); 
                      b = false;
                 }

		 if (b && chiave != null)
                    if (L.deleteKey(chiave))
		       System.out.println("chiave rimossa dalla lista delle chiavi");
                    else
		       System.out.println("chiave non presente");
                 else		 
		    System.out.println("rimozione chiave non eseguita");
		 break;

               case 8 ://cancellazione di un elemento (tutte le istanze!) dalla lista di liste
                 try {
                    System.out.print("elemento da cancellare = ");
                    testo = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura  "+
                                         ex.toString()); 
                      b = false;
                 }

		 if (b && testo != null) {
                    L.deleteElem(testo);
		    System.out.println("rimosse tutte le istanze dell'elemento dalla lista di liste");
                  }
                 else		 
		    System.out.println("rimozione non eseguita");
		 break;

              case 9 ://cerca (chiave,elem) nella lista di liste
                 try {
                    System.out.print("chiave = ");
                    chiave = d.readLine();
                    System.out.print("elemento = ");
                    testo = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura  "+
                                         ex.toString()); 
                      b = false;
                 }
 
		 if (b && chiave != null && testo != null) {
                    if (L.search(chiave, testo))
		       System.out.println("(" + chiave + "," + testo + ") trovata");
                    else
		       System.out.println("(" + chiave + "," + testo + ") non trovata");
		 }
                 else		 
		    System.out.println("Ricerca non effettuata");
		 break;

              case 10 ://cerca chiave nella lista delle chiavi
                 try {
                    System.out.print("chiave = ");
                    chiave = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura  "+
                                         ex.toString()); 
                      b = false;
                 }
 
		 if (b && chiave != null) {
                    if (L.searchKey(chiave))
		       System.out.println("Chiave " + chiave + " trovata");
                    else
		       System.out.println("Chiave " + chiave + " non trovata");
		 }
                 else		 
		    System.out.println("Ricerca non effettuata");
		 break;

              case 11 :// cerca elemento nella lista di liste
                 try {
                    System.out.print("elemento = ");
                    testo = d.readLine();

                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura  "+
                                         ex.toString()); 
                      b = false;
                 }
 
		 if (b && testo != null) {
                    if (L.searchElem(testo))
		       System.out.println("Elemento " + testo + " trovato");
                    else
		       System.out.println("Elemento " + testo + " non trovato");
		 }
                 else		 
		    System.out.println("Ricerca non effettuata");
		 break;

              case 12 :// stampa elementi della lista di liste
       		  System.out.println(L.toString());
		  break;

              default:
                  break;
	}

            System.out.println("(Premere Invio)");
            d.readLine();

        }while (risposta!=0);
     }catch (Exception ex){System.out.println(ex.toString());}
  }

}

