package model.posteCharge;

import java.util.Vector;

import controller.BaseDonnees;

/**
 * Objet technique Poste de Charge gerant des gammes operatoires
 * @author Magic Penguins
 * @see model.gammeOperatoire.GammeOperatoire
 */
public class PosteCharge implements java.io.Serializable {

	private static final long serialVersionUID = 1425389452080926843L;
	/**
	 * Nom du poste de charge
	 */
	protected String nom;
	/**
	 * Reference du poste de charge
	 */
	protected String reference;
	/**
	 * Liste des machines faisant partie du poste de charge
	 */
	protected Vector<Machine> machine;
	/**
	 * Liste des operateurs agissant sur le poste de charge
	 */
	protected Vector<Operateur> operateur;
	
	/**
	 * Constructeur d'un poste de charge
	 * @param nom
	 * Nom du poste de charge
	 */
	public PosteCharge(String nom) {
		this.nom=nom;
		
		this.machine=new Vector<Machine>();
		this.operateur=new Vector<Operateur>();
		this.reference=model.Reference.genererReference("PCH", BaseDonnees.cptPostes);
		BaseDonnees.cptPostes ++;
		
	}
	
	public Vector<Machine> getMachine() {
		return machine;
	}

	public Vector<Operateur> getOperateur() {
		return operateur;
	}

	/**
	 * Ajoute une machine au poste de charge
	 * @param m
	 * Machine a ajouter
	 */
	public void addMachine(Machine m){
		this.machine.add(m);
	}
	
	/**
	 * Ajoute une liste de machines au poste de charge
	 * @param m
	 * Liste de machines a ajouter
	 */
	public void addMachine(Vector<Machine> m){
		this.machine.addAll(m);
	}
	
	/**
	 * Supprime une machine du poste de charge
	 * @param m
	 * Machine a supprimer
	 */
	public void removeMachine(Machine m) {
		this.machine.remove(m);
	}
	
	/**
	 * Ajoute un operateur au poste de charge
	 * @param o
	 * Operateur a ajouter
	 */
	public void addOperateur(Operateur o){
		this.operateur.add(o);
	}
	
	/**
	 * Ajoute une liste au poste de charge
	 * @param o
	 * Liste d'operateurs a ajouter
	 */
	public void addOperateur(Vector<Operateur> o){
		this.operateur.addAll(o);
	}
	
	/**
	 * Supprime un operateur du poste de charge
	 * @param o
	 * Operateur a supprimer
	 */
	public void removeOperateur(Operateur o) {
		this.operateur.remove(o);
	}
	
	public String getNom() {
		return nom;
	}
	
	public String getReference() {
		return reference;
	}
	
	/**
	 * Verifie si un poste de charge est un modele valide
	 * @return True si il y a au moins un operateur ou une machine, false sinon
	 */
	public boolean isValid() {
		return (!this.operateur.isEmpty() || !this.machine.isEmpty());
	}
	
	/**
	 * toString d'un poste de charge
	 */
	@Override
	public String toString() {
		return nom+" ("+reference+")";
	}

}
