package interfaces;

import infoObjects.InfoError;
import infoObjects.InfoResults;
import infoObjects.InfoTarea;
import infoObjects.InfoTest;

import java.rmi.Remote;
import java.rmi.RemoteException;


/**
 * Interfaz remota de RMI que contiene los métodos que son accesibles remotamente
 *
 * @author Enrique M.L
 */
public interface InterfaceSecurity extends Remote {
    
	/**
	 * Metodo que compila el código contenido en el objeto 'infoTarea' en el caso de que éste esté escrito en C o Java
	 * @param infoTarea
	 * @return
	 * @throws RemoteException
	 */
    public InfoError securityCheckCode(InfoTarea infoTarea) throws RemoteException;
    
    /**
     * Metodo que crea una nueva tarea con los datos de 'infoTarea'
     * @param infoTarea
     * @return
     * @throws RemoteException
     */
    public InfoError securityNewTask(InfoTarea infoTarea) throws RemoteException;
    
    /**
     * Metodo que ejecuta la tarea asociada de 'infoTest' con los argumentos de 'infoTest'
     * 
     * @param infoTest
     * @return
     * @throws RemoteException
     */
    public InfoError securityRunTest(InfoTest infoTest) throws RemoteException;
    
    /**
     * Metodo que graba el test 'infoTest' en la tarea asociada
     * 
     * @param infoTest
     * @return
     * @throws RemoteException
     */
    public InfoError securitySaveTest(InfoTest infoTest) throws RemoteException;
    
    /**
     * Metodo que realiza la eliminación del test asociado a 'infoTest'
     * 
     * @param infoTest
     * @return
     * @throws RemoteException
     */
    public InfoError securityDeleteTest(InfoTest infoTest) throws RemoteException;
    
    /**
     * Metodo que realiza la eliminación de la tarea asociada a 'infoTarea'
     * 
     * @param infoTarea
     * @return
     * @throws RemoteException
     */
    public InfoError securityDeleteTask(InfoTarea infoTarea) throws RemoteException;
    
    /**
     * Metodo que ejecuta el código asociado a 'infoTarea' del alumno con todos los test 
     * que el profesor ha introducido para esta tarea
     * 
     * @param infoTarea
     * @return
     * @throws RemoteException
     */
    public InfoResults securityStudentRunTask(InfoTarea infoTarea) throws RemoteException;
    
    /**
     * Metodo que realiza la eliminación de todas las tareas y tests creados en SSCP
     * @return
     * @throws RemoteException
     */
    public InfoError securityCleanData() throws RemoteException;
    
    /**
     * Metodo que cambia el estado de mostrar la ayuda de debug
	 * <p>
	 * Muestra ayuda debug si 'show' es true. No la muestra si 'show' es false
	 * 
     * @param show
     * @throws RemoteException
     */
    public void setShowHelpDebug(boolean show) throws RemoteException;
    	
}
