package com.fp.dto.rules;

import com.fp.dto.Request;
import com.fp.dto.save.SaveRequest;

/**
 * Clase a extender por los comandos que se ejecutan a nivel de transaccion.
 * 
 * @author Jorge Vaca
 * @version 2.1
 */
public abstract class TransactionRule extends AbstractRule {

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;

    /**
     * Implementa logica de negocio a invocar cuando una transaccion se ejecuta en modo normal.
     * 
     * @param pSaveRequest Objeto con beans utilizados en el proceso de una transaccion.
     * @return SaveRequest Objeto con beans utilizados en el proceso de una transaccion.
     * @throws Exception
     */
    public abstract SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception;

    /**
     * Implementa logica de negocio a invocar cuando una transaccion se ejecuta en modo reverso.
     * 
     * @param pSaveRequest Objeto con beans utilizados en el proceso de una transaccion.
     * @return SaveRequest Objeto con beans utilizados en el proceso de una transaccion.
     * @throws Exception
     */
    public abstract SaveRequest reverseProcess(SaveRequest pSaveRequest) throws Exception;

    @Override
    public Request execute(Request pRequest) throws Exception {
        return this.normalProcess((SaveRequest) pRequest);
    }
}
