package com.fitbank.contentsmanager;

import com.fitbank.common.Helper;
import java.math.BigDecimal;
import java.sql.Clob;
import java.sql.Timestamp;
import java.util.Date;
import org.hibernate.SQLQuery;
import org.hibernate.ScrollableResults;

/**
 * Clase que permite copiar reglas bpm entre 2 base de datos diferentes.
 *
 * @author SoftwareHouse S.A.
 */
public class BpmRulesCloner {

    public void copyClobs() {
        Timestamp expire = Timestamp.valueOf("2999-12-31 00:00:00");
        Timestamp now = new Timestamp(new Date().getTime());
        try {
            SQLQuery query = Helper.createSQLQuery(Helper.getAuxiliarSession(),
                    "SELECT CREGLABPM, PSEUDOCODIGO FROM TREGLASBPMDEFINICION WHERE FHASTA=:fhasta");
            query.setTimestamp("fhasta", expire);

            ScrollableResults rs = query.scroll();
            while (rs.next()) {
                try {
                    String creglabpm = ((BigDecimal) rs.get(0)).toPlainString();
                    Clob pseudocodigo = (Clob) rs.get(1);
                    Integer codeLength = Integer.valueOf(String.valueOf(pseudocodigo.length()));

                    SQLQuery insert = Helper.createSQLQuery(Helper.getSession(),
                            "INSERT INTO TREGLASBPMDEFINICION"
                            + " (CREGLABPM, FHASTA, FDESDE, PSEUDOCODIGO)"
                            + " VALUES(?, ?, ?, ?)");
                    insert.setString(0, creglabpm);
                    insert.setTimestamp(1, expire);
                    insert.setTimestamp(2, now);
                    insert.setString(3, pseudocodigo.getSubString(1, codeLength));

                    insert.executeUpdate();
                } catch (Exception m) {
                    System.out.println("Error al ejecutar insert de CLOBS" + m.
                            getStackTrace());
                }
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("Error al ejecutar consulta original de CLOBS"
                    + e.getStackTrace());
        }
    }

    public static void main(String[] args) {
        BpmRulesCloner fu = new BpmRulesCloner();

        try {
            ManagerUtils.openSession();
            ManagerUtils.openAuxiliarSession();
            fu.copyClobs();
        } catch (Exception e) {
            System.out.println("Error al copiar CLOBS " + e.getStackTrace());
        }
    }
}
