package com.fitbank.uci.calendar;

import com.fitbank.uci.client.ToDo;
import com.fitbank.uci.common.UciThread;
import com.fitbank.uci.server.manager.DeviceEventTypes;

/**
 * Clase encargada de la ejecución de Tareas calendarizadas en Hilos independientes.
 * @author Fit-Bank
 *
 */
public class Runner extends UciThread {

    /**
     * Tarea Calendarizada por Ejecutar.
     */
    private UCITask task;

    /**
     *
     * Crea una nueva instancia de Runner 
     * @param pTask Referencia a la tarea a ejecutar.
     */
    public Runner(UCITask pTask) {
        this.task = pTask;
        this.start();
    }

    @Override
    public void run() {
        try {

            ToDo td = (ToDo) task.getTodoClass().newInstance();
            String result = td.execute(task.getTaskParameters());

            if (result != null) {
                task.setLastExecution(result);
                task.addMessage("Finaliza la Ejecucion de  " + this.task.getTaskDescription() + " " + result,
                                DeviceEventTypes.DISCONNECT);
            }
        } catch (Exception e) {
            try {
                task.addMessage("La tarea  " + this.task.getTaskDescription() + ":" + e.getMessage(),
                                DeviceEventTypes.ERROR);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
}
