/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package infoObjects;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

/**
 * Clase que guarda información asociada a un test
 *
 * @author Enrique M.L
 */
public class InfoTest implements Serializable{
    
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * idTest guarda el id del test
	 */
	private Long idTest;
	/**
	 * idTareaAsociada guarda el id de la tarea a la que el test esta asociada
	 */
    private Long idTareaAsociada;
    /**
     * tipo indica el tipo de test. Este puede ser:
     * <p>
     * · 0 - Sin argumentos
     * <p>
     * · 1 - Argumento String
     * <p>
     * · 2 - Fichero + Argumento String
     * <p>
     * · 3 - Fichero + Fichero + Argumento String
     * <p>
     * · 4 - Fichero + Fichero + Fichero + Argumento String
     * <p>
     * (NO OPERATIVO) · 5 - Fichero redireccionado
     */
    private int tipo;
    /**
     * argumentos guarda los argumentos
     */
    private ArrayList<String> argumentos;
    
    public InfoTest(Long pIdTest, Long pIdTareaAsociada, int pTipo, ArrayList<String> pArgumentos){
        idTest = pIdTest;
        idTareaAsociada = pIdTareaAsociada;
        tipo = pTipo;
        argumentos = new ArrayList<String>(pArgumentos);
    }
  
    /**
     * Constructor de InfoTest
     */
    public InfoTest() {
	}

    /**
     * Constructor de InfoTest
     * 
     * @param pIdTest
     * @param pIdTareaAsociada
     */
    public InfoTest(Long pIdTest, Long pIdTareaAsociada){
    	idTest = pIdTest;
    	idTareaAsociada = pIdTareaAsociada;
    	argumentos = null;
    }

    /**
     * Constructor de InfoTest
     * 
     * @param pIdTest
     * @param pIdTareaAsociada
     * @param pTipo
     */
	public InfoTest(Long pIdTest, Long pIdTareaAsociada, int pTipo) {
		idTest = pIdTest;
        idTareaAsociada = pIdTareaAsociada;
        tipo = pTipo;
        argumentos = null;
	}

	/**
	 * Contructor de InfoTest
	 * 
	 * @param testId
	 * @param taskId
	 * @param arguments
	 */
	public InfoTest(Long testId, Long taskId, String arguments) {
        idTest = testId;
        idTareaAsociada = taskId;
        argumentos = (ArrayList<String>) Arrays.asList(arguments.trim().split(" "));
	}

	/**
	 * Constructor de InfoTest
	 * 
	 * @param taskId
	 * @param pArgumentos
	 * @param tipoTest
	 */
	public InfoTest(Long taskId, ArrayList<String> pArgumentos, int tipoTest) {
		idTareaAsociada = taskId;
		argumentos =  pArgumentos;
		tipo = tipoTest;
	}


	public void setIdTareaAsociada(Long pIdTareaAsociada){
        idTareaAsociada = pIdTareaAsociada;
    }
    
    public void setArgumentos(ArrayList<String> pArgumentos){
        argumentos = new ArrayList<String>(pArgumentos);
    }
    
    public void setTipo(int pTipo){
        tipo = pTipo;
    }
    
    public Long getIdTareaAsociada(){
        return idTareaAsociada;
    }
    
    public ArrayList<String> getArgumentos(){
        return argumentos;
    }

    public int getTipo(){
        return tipo;
    }
    
    public Long getIdTest(){
        return idTest;
    }
    
    public void setArgumentoIndex(int index, String arg){
    	argumentos.set(index, arg);
    }
    
    @Override 
    public String toString()
    {
    	String listaArgumentos = "";
    	if (argumentos != null){
    		 Iterator<String> ite = argumentos.iterator();
    		 
    		 while (ite.hasNext()) {
    			 listaArgumentos = listaArgumentos + " --" + ite.next() + "\n";
    		 }
    	}
    	 
        return("InfoTest " + idTest +"\n -idTareaAsociada " + idTareaAsociada
        		+"\n -tipo " + tipo +"\n -argumentos \n" + listaArgumentos);
    }


    
}
