/*
 * 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.ExcepcionUsuarioExistente;

/**
 * @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 AgregarUsuario extends FuncionAbstracta {
	
	public AgregarUsuario(){}
	
	//Recibe como parametro el Sistema los datos personales del usuario, el conj. de roles y el sistema
	public Object execute(Map m) throws ExcepcionUsuarioExistente {
		String nombre = (String) m.get(Constants.NOMBRE);
		String apellido = (String) m.get(Constants.APELLIDO);
		String password= (String) m.get(Constants.PASSWORD);
		//El string user especifica el nombre de usuario único en el sistema o "nombre unix"
		String user = (String) m.get(Constants.USER);
		Collection roles = (Collection) m.get(Constants.ROLES);
		Sistema sist = (Sistema) m.get(Constants.SISTEMA);
		Iterator itUsuarios = sist.getUsuarios().iterator();
		while (itUsuarios.hasNext()) {
			String usr = ((Usuario) itUsuarios.next()).getUser();
			if (usr.equals(user)) {
				throw new ExcepcionUsuarioExistente("el nombre de usuario elegido ya existe en el sistema"); 
			}
		}
		//Crea un nuevo usuario con los datos recibidos
		Usuario usuario = new Usuario(nombre,apellido,user,password,roles);
		//Agrega el usuario creado al sistema
		sist.addUsuario(usuario);
		return usuario;
	}
}