package com.fitbank.bpm.common;

import java.io.Serializable;

import com.fitbank.common.Helper;
import com.fitbank.common.exception.ExceptionHandler;
import com.fitbank.common.logger.FitbankLogger;
import com.fitbank.dto.management.Detail;

public class CommitTransaction implements Serializable {

    private static final long serialVersionUID = 1L;

    public Detail execute(Detail pDetail) throws Exception {
        try {
            if (pDetail.getResponse().isCommitable()) {
                Helper.commitTransaction();
            } else {
                FitbankLogger.getLogger().error(pDetail.getResponse().getStackTrace());
                Helper.getSession().createSQLQuery("rollback").executeUpdate();
            }

        } catch (Exception e) {
            FitbankLogger.getLogger().error(e);
            try {
                Helper.getSession().createSQLQuery("rollback").executeUpdate();
            } catch (Exception e2) {
                FitbankLogger.getLogger().error(e);
            }
            ExceptionHandler eh = new ExceptionHandler(e, pDetail.getLanguage());
            pDetail.setResponse(eh.manage());
        } finally {
            Helper.closeSession();
        }
        return pDetail;
    }
}
