/*
 * Created on 12/05/2004
 *
 * To change the template for this generated file go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
package modelo;

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import excepciones.ExcepcionUsuarioActivo;

/**
 * @author german
 *
 * To change the template for this generated type comment go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
public class BajaUsuario extends FuncionAbstracta {

	public BajaUsuario(){
	}
	
	public Object execute(Map m) throws ExcepcionUsuarioActivo {
    //recibe como parámetro el sistema y el usuario a eliminar
    Sistema sist = (Sistema) m.get(Constants.SISTEMA);
    Usuario usr = (Usuario) m.get(Constants.USUARIO);
	Collection proyectos = sist.getProyectos();
	Iterator itProyectos = proyectos.iterator();
	//busca en todos los proyectos del sitema, para ver si el usuario a eliminar esta activo, es decir, si esta como responsable de
	//un estado actual de un requerimiento
	boolean activo =false; 
	while ((itProyectos.hasNext()) && (!activo)) {
		Iterator itReq = ((Proyecto) itProyectos.next()).getRequerimientos().iterator();
		while ((itReq.hasNext()) && (!activo)) {
			Requerimiento req = (Requerimiento) itReq.next();
			Usuario usrRespActivo = req.getEstadoActual().getResponsable();
			if (usrRespActivo.equals(usr)) {
				activo = true;
			}//endif
		}//endwhile interno
	}//endwhile externo
	if (activo){
		throw new ExcepcionUsuarioActivo("El usuario esta activo y no puede ser eliminado, cambie el responsable del requerimiento en el que esté activo y vuelva a intentarlo");		
	}//endif
	sist.removeUsuario(usr);
	sist.addHistoryUser(usr);	
	return null;
	}//endmethod

}//endclass