package com.fitbank.migrationdb.general; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.sql.Blob; import java.util.List; import com.fitbank.common.ApplicationDates; import com.fitbank.common.Helper; import com.fitbank.common.conectivity.HbSession; import com.fitbank.common.exception.FitbankException; import com.fitbank.common.hb.UtilHB; import com.fitbank.common.logger.FitbankLogger; import com.fitbank.general.helper.GeneralHelper; import com.fitbank.hb.persistence.acco.Taccount; import com.fitbank.hb.persistence.acco.view.Tsignatoryaccount; import com.fitbank.hb.persistence.acco.view.TsignatoryaccountKey; import com.fitbank.hb.persistence.gene.Timage; import com.fitbank.hb.persistence.gene.TimageKey; import com.fitbank.hb.persistence.gene.Timageid; import com.fitbank.hb.persistence.person.Tperson; import com.fitbank.hb.persistence.person.Tsignatureperson; import com.fitbank.hb.persistence.person.TsignaturepersonKey; import org.hibernate.Hibernate; /** * Hilo de Ejecución de migración de imagenes. * * @author Soft WareHouse S. A. * */ public class ImageThread extends Thread { private String path; public ImageThread(String pPath) { this.path = pPath; } @Override public void run() { try { Helper.setSession(HbSession.getInstance().openSession()); Helper.beginTransaction(); this.process(); Helper.commitTransaction(); } catch (Exception e) { FitbankLogger.getLogger().error(e.getCause()); } finally { try { Helper.rollbackTransaction(); } catch (Exception e) { FitbankLogger.getLogger().error(e); } Helper.closeSession(); } } private void process() throws Exception { FileOutputStream fo = new FileOutputStream(this.path + "/log.log"); PrintStream ps = new PrintStream(fo); try { File f = new File(path); String[] imgs = f.list(); FitbankLogger.getLogger().error( "IMAGENES A PROCESAR: " + imgs.length); for (String img : imgs) { try { try { Helper.beginTransaction(); } catch (Exception e1) { FitbankLogger.getLogger().error(e1); } String cta = img.substring(0, img.indexOf('-')); String id = img.substring(img.indexOf('-') + 1, img.indexOf('.')); id = this.formatId(id); Integer persona = this.findPerson(id); FitbankLogger.getLogger() .error(img + " CTA>>" + cta + "<<>>" + id + "<<" + persona); Long imgCode = this.findImageCode(persona, cta); FileInputStream fin = new FileInputStream(new File(path + "/" + img)); byte[] b = new byte[9999]; int cont = 0; ByteArrayOutputStream bout = new ByteArrayOutputStream(); do { cont = fin.read(b); if (cont > 0) { bout.write(b, 0, cont); } } while (cont > 0); fin.close(); Blob blob = Hibernate.getLobCreator(Helper.getSession()).createBlob(bout.toByteArray()); bout.close(); TimageKey ik = new TimageKey(imgCode, ApplicationDates.DEFAULT_EXPIRY_TIMESTAMP); Timage i = (Timage) Helper.getBean(Timage.class, ik); TsignaturepersonKey pk = new TsignaturepersonKey(persona, 1, ApplicationDates.DEFAULT_EXPIRY_TIMESTAMP); Tsignatureperson sigPer = (Tsignatureperson) Helper .getBean(Tsignatureperson.class, pk); if (i == null) { Timageid timageid = new Timageid( Helper.nextLongValue("SIMAGEN")); Helper.saveOrUpdate(timageid); TimageKey k = new TimageKey(timageid.getPk(), ApplicationDates.DEFAULT_EXPIRY_TIMESTAMP); i = new Timage(k, ApplicationDates.getDBTimestamp(), sigPer.getCtipofirma(), 0); i.setCpersona_compania(2); Taccount taccount = GeneralHelper.getInstance() .getTaccount(cta, 2); i.setCoficina(taccount.getCoficina()); i.setCsucursal(taccount.getCsucursal()); i.setNombrearchivo(img); i.setTipoarchivo("JPG"); } i.setImagen(blob); ps.println("IMG " + img + " CIMAGEN:" + i.getPk().getCimagen() + " CPERSONA:" + persona); Helper.saveOrUpdate(i); // TCUENTAFIRMANTES TsignatoryaccountKey k = new TsignatoryaccountKey(cta, ApplicationDates.DEFAULT_EXPIRY_TIMESTAMP, 2, persona); Tsignatoryaccount sigAcc = (Tsignatoryaccount) Helper .getBean(Tsignatoryaccount.class, k); sigAcc.setCimagen(i.getPk().getCimagen()); if (sigPer.getCimagen() == null) { sigPer.setCimagen(i.getPk().getCimagen()); Helper.saveOrUpdate(sigPer); } Helper.saveOrUpdate(sigAcc); Helper.commitTransaction(); } catch (FitbankException e) { ps.println("IMG ERR>>" + img + " " + e.getMessage()); } catch (Exception e) { ps.println("IMG " + img); e.printStackTrace(ps); FitbankLogger.getLogger().error(e.getCause()); } } } finally { FitbankLogger.getLogger().error( "PROCESO DE MIGRACION DE FIRMAS CONCLUIDO"); ps.close(); } } private String formatId(String id) { String data = id; if (data.indexOf(' ') > 0) { data = data.substring(0, data.indexOf(' ')); } return data; } @SuppressWarnings("unchecked") private Integer findPerson(String pId) throws Exception { UtilHB util = new UtilHB("from Tperson p where p.identificacion=:id"); util.setString("id", pId); List l = util.getList(false); if (l.isEmpty()) { throw new FitbankException("MIG001", "NO SE HA ENCONTRADO UNA PERSONA CON IDENTIFICACION {0}", pId); } return l.iterator().next().getPk().getCpersona(); } private Long findImageCode(Integer pPersona, String pAccount) throws Exception { TsignatoryaccountKey k = new TsignatoryaccountKey(pAccount, ApplicationDates.DEFAULT_EXPIRY_TIMESTAMP, 2, pPersona); Tsignatoryaccount b = (Tsignatoryaccount) Helper.getBean( Tsignatoryaccount.class, k); if (b == null) { TsignaturepersonKey pk = new TsignaturepersonKey(pPersona, 1, ApplicationDates.DEFAULT_EXPIRY_TIMESTAMP); Tsignatureperson ps = (Tsignatureperson) Helper.getBean( Tsignatureperson.class, pk); if (ps != null) { return ps.getCimagen(); } throw new FitbankException( "MIG002", "NO SE HA ENCONTRADO UNA RELACION PERSONA {0,number} CUENTA {1}", pPersona, pAccount); } return b.getCimagen(); } }