/*
 * Created on May 10, 2004
 *
 */
package modelo;

import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
/**
 * @author gas y jpg
 *
 * 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 Proyecto {

	protected String nombre;
	
	protected String descripcion;
	
	protected Date fechaCreacion;
	
	protected Collection tiposRequerimiento;

	protected Collection nodosCreados;
	
	protected NodoCompuesto workflow;

	protected Collection requerimientos;

	protected Collection rolesMiembros;
	
	public Proyecto(){
	}

	public Proyecto (String nombre, String descripcion, Date fechaCreacion, Collection tiposRequerimiento, 
	Collection rolesMiembros, Collection requerimientos, NodoCompuesto workflow, Collection nodosCreados) {
			this.setNombre(nombre);
			this.setDescripcion(descripcion);
			this.setFechaCreacion(fechaCreacion);
			this.setTiposRequerimiento(tiposRequerimiento);
			this.setRolesMiembros(rolesMiembros);
			this.setRequerimientos(requerimientos);
			this.setWorkflow(workflow);
			this.setNodosCreados(nodosCreados);
	}

	public Collection getTiposRequerimiento() {
		return tiposRequerimiento;
	}

	public void setTiposRequerimiento(Collection tiposRequerimiento) {
		this.tiposRequerimiento = tiposRequerimiento;
	}

// Agrega in requerimiento a un proyecto asignandole ya su estado inicial
	public void addRequerimiento(Requerimiento req) {
		RecorridoEstado estadoInicial = this.getWorkflow();
		Usuario lider = this.getLider();
		Date hoy = new Date();
		Estado estadoActual = new Estado(estadoInicial,lider,hoy);
		req.setEstadoActual(estadoActual);
		this.getRequerimientos().add(req);
	}

	public Usuario getLider() {
		boolean found = false;
		Collection rolesMiembro =this.getRolesMiembros();
		Iterator it = rolesMiembro.iterator();
		RolMiembros rm = null;
		while ( (it.hasNext()) && !found ) {
			rm = (RolMiembros) it.next();
			if (rm.getRol().getNombre().equals(Constants.LIDER)) {
				found = true;				
			}
		}
		return ((Usuario) rm.getUsuarios().iterator().next());
	}

	public String getDescripcion() {
		return descripcion;
	}

	public String getNombre() {
		return nombre;
	}

	public void setDescripcion(String string) {
		descripcion = string;
	}

	public void setNombre(String string) {
		nombre = string;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(Date date) {
		fechaCreacion = date;
	}

	public Collection getNodosCreados() {
		return nodosCreados;
	}

	public void setNodosCreados(Collection nodosCreados) {
		this.nodosCreados = nodosCreados;
	}

	public NodoCompuesto getWorkflow() {
		return workflow;
	}

	public void setWorkflow(NodoCompuesto workflow) {
		this.workflow = workflow;
	}

	public Collection getRequerimientos() {
		return requerimientos;
	}

	public void setRequerimientos(Collection requerimientos) {
		this.requerimientos = requerimientos;
	}
	
	public void addTipoRequerimiento(TipoRequerimiento tReq){
		this.getTiposRequerimiento().add(tReq);
	}

	
	public void addNodoCreado(RecorridoEstado nodo){
		this.getNodosCreados().add(nodo);
	}
	public Collection getRolesMiembros() {
		return rolesMiembros;
	}

	public void setRolesMiembros(Collection rolesMiembros) {
		this.rolesMiembros = rolesMiembros;
	}

	public void addRolMiembros(RolMiembros rm) {
		this.getRolesMiembros().add(rm);
	}
}
