/**
 * 
 */
package com.ejie.ab61.adaptadores;

import com.ejie.ab61.clientesWS.X43TareasTramitacion.AExtensionPoint;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TBoolean;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TGatTaskFilter;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TMessageFilterValueList;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TMessageList;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TMessageStatusList;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TMessageTipology;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TMessageTipologyList;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TNotificationBody;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TPersonIDName;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TStringList;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TTask;
import com.ejie.ab61.clientesWS.X43TareasTramitacion.TTaskType;
import com.ejie.ab61.exceptions.X43TareasTramitacionException;

/**
 *  
 * 
 */
public interface X43TareasTramitacionAdaptadorService {

	/**
	 * Obtiene la lista de tareas aplicacando los filtros indicados
	 * 
	 * @param groupIDList
	 *            TStringList
	 * @param messageTipologyList
	 *            TMessageTipologyList
	 * @param statusList
	 *            TMessageStatusList
	 * @param mapProperties
	 *            TMessageFilterValueList
	 * @param iFirst
	 *            Integer
	 * @param iLast
	 *            Integer
	 * @param filter
	 *            TGatTaskFilter
	 * @param ep
	 *            AExtensionPoint
	 * @return TMessageList
	 * 
	 * @throws X43TareasTramitacionException
	 *             X43TareasTramitacionException
	 */

	public TMessageList getGATTasks(TStringList groupIDList, TMessageTipologyList messageTipologyList,
			TMessageStatusList statusList, TMessageFilterValueList mapProperties, Integer iFirst, Integer iLast,
			TGatTaskFilter filter, AExtensionPoint ep) throws X43TareasTramitacionException, Exception;

	/**
	 * Envio de una nueva tarea al buzon
	 * 
	 * @param notificationBody
	 *            TNotificationBody
	 * @param eventTypology
	 *            TMessageTipology
	 * @param ep
	 *            AExtensionPoint
	 * @return TBoolean
	 * @throws X43TareasTramitacionException
	 *             X43TareasTramitacionException
	 */

	public TBoolean addTask(TNotificationBody notificationBody, TMessageTipology eventTypology, AExtensionPoint ep)
			throws X43TareasTramitacionException, Exception;

	/**
	 * Devuelve la informaci�n necesaria para poder generar el documento
	 * ejgvDocument de cada tipo de tarea indicado en el par�metro taskType.
	 * 
	 * @param taskType
	 *            TTaskType
	 * @param taskGUID
	 *            String
	 * @param ep
	 *            AExtensionPoint
	 * @return TTask
	 * @throws X43TareasTramitacionException
	 *             X43TareasTramitacionException
	 */

	public TTask prepareTask(TTaskType taskType, String taskGUID, AExtensionPoint ep)
			throws X43TareasTramitacionException, Exception;

	/**
	 * Genera una tarea nueva del tipo 'ADJUNTAR_DOCU_TRAMITADOR'.
	 * 
	 * @param procedureId
	 *            String
	 * @param folderId
	 *            String
	 * @param proceedingId
	 *            String
	 * @param taskId
	 *            String
	 * @param senderId
	 *            TPersonIDName
	 * @param ep
	 *            AExtensionPoint
	 * @return TBoolean
	 * @throws X43TareasTramitacionException
	 *             X43TareasTramitacionException
	 */

	public TBoolean prepareNewTask(String procedureId, String folderId, String proceedingId, String taskId,
			TPersonIDName senderId, AExtensionPoint ep) throws X43TareasTramitacionException, Exception;

	/**
	 * Asigna tareas a un usuario.
	 * 
	 * @param taskGUIDList
	 *            TStringList
	 * @param mailboxID
	 *            String
	 * @param ep
	 *            AExtensionPoint
	 * @return TBoolean
	 * @throws X43TareasTramitacionException
	 *             X43TareasTramitacionException
	 */

	public TBoolean assignTasks(TStringList taskGUIDList, String mailboxID, AExtensionPoint ep)
			throws X43TareasTramitacionException, Exception;

	/**
	 * Ejecuta una tarea,
	 * 
	 * @param taskType
	 *            TTaskType
	 * @param task
	 *            TTask
	 * @param ep
	 *            AExtensionPoint
	 * @return TTask
	 */

	public TTask doTask(TTaskType taskType, TTask task, AExtensionPoint ep)
			throws X43TareasTramitacionException, Exception;

}
