import java.io.*;

public class TestMultiInsieme {


  private static void ClearScreen(){
     for (int i=0;i<25;i++) System.out.println("");
  }

  private static void menu(){
     System.out.println("Test classe MultiInsieme............................................");
     System.out.println("");
     System.out.println("1.  Numero elementi nel multi insieme");
     System.out.println("2.  elimina tutti gli elementi dal multi insieme");
     System.out.println("3.  controlla se il multi insieme e' vuoto");
     System.out.println("4.  inserisci un elemento nel multi insieme");
     System.out.println("5.  controlla se un elemento appartiene al multi insieme"); 
     System.out.println("6.  ritorna il numero di occorrenze di un elemento nel multi insieme"); 
     System.out.println("7.  ritorna il numero di elementi distinti del multi insieme"); 
     System.out.println("8.  cancella un elemento dal multi insieme");
     System.out.println("9.  stampa gli elementi del multi insieme");
     
     System.out.println("0.  ESCI");
     System.out.println("");
     System.out.println("....................................................................");
  }

  public static void main(String[] args) {

     int risposta;
     Integer valore = new Integer(0);
     MultiInsieme M = new MultiInsieme();
     String testo;
     boolean b;

     InputStream in=System.in;
     BufferedReader d = new  BufferedReader(new InputStreamReader(in));
     try{
        do {
            ClearScreen();
            menu();
            risposta = valore.parseInt(d.readLine());
            testo = "";
            b = true;
            switch (risposta){
              case 1 :// numero elementi
		  System.out.println("Totale elementi: " + M.size());
		  break;
              case 2 :// clear
		  M.clear();
       		  System.out.println("Eliminati tutti gli elementi dal multi insieme ");
		  break;
              case 3 :// collezione vuota?
                  if (M.isEmpty())
       		     System.out.println("Il multi insieme e' vuoto");
                  else
		      System.out.println("Il multi insieme non e' vuoto");
		  break;
              case 4 ://inserisci elemento
                 try {
                    System.out.print("elemento da inserire = ");
                    testo = d.readLine();
                 } catch(Exception ex) { 
                      System.out.println("eccezione in lettura "+
                                         ex.toString()); 
                      b = false;
                 }
		 if (b && testo != null)
                    if (M.insert(testo))
		       System.out.println("elemento inserito nel multi insieme");
                    else
		       System.out.println("elemento non inserito nel multi insieme");
                 else		 
		    System.out.println("inserimento elemento non eseguito");
		 break;

              case 5 ://controlla se un elemento appartiene alla collezione
                 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 (M.contains(testo))
		       System.out.println("elemento presente nel multi insieme");
                    else
		       System.out.println("elemento non presente nel multi insieme");
                 else		 
		    System.out.println("Appartenenza elemento non verificata");
		 break;
              case 6 ://ritorna il numero di occorrenze di un elemento nel multi insieme
                 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)
		     System.out.println("elemento presente nel multi insieme " + M.occurrences(testo) + " volte");
                 else		 
		    System.out.println("Appartenenza elemento non verificata");
		 break;
              case 7 ://ritorna il numero di elementi distinti del multi insieme
		 System.out.println("elementi distinti del multi insieme: " + M.distinct());
		 break;
              case 8 ://cancellazione di un elemento dalla collezione
                 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)
                    if (M.remove(testo))
		       System.out.println("elemento rimosso dal multi insieme");
                    else
		       System.out.println("elemento non rimosso dal multi insieme");
                 else		 
		    System.out.println("rimozione elemento non eseguita");
		 break;
              case 9 :// stampa elementi della collezione
       		  System.out.println("Elementi della collezione: " + M.toString());
		  break;
              default:
                  break;
            }

            System.out.println("(Premere Invio)");
            d.readLine();

        }while (risposta!=0);
     }catch (Exception ex){System.out.println(ex.toString());}
  }

}

