/*
 * Created on Jun 22, 2004
 *
 */
package modelo;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;


/**
 * @author jpgiecco
 *
 */
public class AsignarPropiedad extends FuncionAbstracta{
	
	public AsignarPropiedad(){}
	
	//Recibe como parámetro una propiedad, el sistema, el tipo de requerimiento y el tipo de estado		 
	public Object execute(Map m) {
		Propiedad propiedad =  (Propiedad) m.get(Constants.PROPIEDAD);
		Sistema sistema = (Sistema) m.get(Constants.SISTEMA);
		TipoRequerimiento tipoReq = (TipoRequerimiento) m.get(Constants.TIPOREQ); 
		TipoEstado tipoEst = (TipoEstado) m.get(Constants.TIPOESTADO);
		//Chequea que la propiedad que viene como parámetro sea la primera de ese tipo de requerimiento en ese tipo de estado 
		//para determinar si debe crear el objeto TipoReqTipoEstadoPropiedad
		Iterator itEstadosProp = tipoReq.getEstados_propiedades().iterator();
		TipoReqTipoEstadoPropiedad tipoReqTipoEstProp = null;
		boolean primera = true;
		while ((itEstadosProp.hasNext()) && primera) {
			tipoReqTipoEstProp = (TipoReqTipoEstadoPropiedad) itEstadosProp.next();
			if (tipoReqTipoEstProp.equals(tipoEst)) {
				primera = false;
			}
		}
		if (primera) {
			tipoReqTipoEstProp = new TipoReqTipoEstadoPropiedad(new LinkedList(), tipoEst);	
		}
		tipoReqTipoEstProp.addPropiedad(propiedad);
		tipoReq.addTipoReqTipoEstadoPropiedad(tipoReqTipoEstProp);
		sistema.addPropiedad(propiedad);
		return null;
	}

}
