import java.lang.*;
import java.util.*;



public abstract class Gestionnaire extends Thread
{

    protected Vector v;
    protected int temps;

    public Gestionnaire()
    {
	v=new Vector();	
	
    }
    
    public abstract void Init();
    
    public abstract void Gestion();

    public void Activate(int num)
    {
	((Processus)v.elementAt(num)).set_state(true);
	((Processus)v.elementAt(num)).notify();
    }

    public void Desactivate(int num)
    {
	((Processus)v.elementAt(num)).set_state(false);
	synchronized((Processus)v.elementAt(num))
	{
	    try
	    {
	        ((Processus)v.elementAt(num)).wait();
	    }
	    catch(Exception e){System.out.println("planté ds wait");}
	}
    }

    public void Lancer(int num)
    {
	((Processus)v.elementAt(num)).set_Ok(true);
	//((Processus)v.elementAt(num)).set_state(false); 
	((Processus)v.elementAt(num)).start();
	Desactivate(num);

	
    }

    public void AfficheVector()
    {
	for(int i=0;i<(v.size());i++)
	    {
		System.out.println(((Processus)v.elementAt(i)).getName()+" : "+((Processus)v.elementAt(i)).get_name());
		
	    }

    }

    public void ArretProcessus(int num)
    {
	((Processus)v.elementAt(num)).end();
	v.removeElementAt(num);
    }

    public void AjoutProcessus(Processus p)
    {
	v.add(p);
    }


     public void ToutLancer()
    {
	for(int i=0;i<(v.size());i++)
	{
	    Lancer(i);
	}
	
	System.out.println("Le gestionnaire a lancé tous les processus");
    }

    public void shutdown()
    {
	for(int i=0;i<(v.size());i++)
	{
	    ((Processus)v.elementAt(i)).end();
	}
	v.removeAllElements();
	System.out.println("Le gestionnaire se termine");
    }

}
	
