package br.com.centralit.citged.integracao; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Types; import java.util.ArrayList; import java.util.Collection; import br.com.centralit.citged.bean.AssinaturaControleGEDDTO; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.ConnectionProvider; import br.com.citframework.integracao.ConnectionReadOnlyProvider; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.util.Constantes; public class AssinaturaControleGEDDao extends CrudDaoDefaultImpl { private static final String SQL_NEXT_KEY = "SELECT MAX(IDASSINATURA) + 1 FROM ASSINATURA_CONTROLEGED"; private static final String SQL_INSERT = "INSERT INTO ASSINATURA_CONTROLEGED (IDASSINATURA, IDCONTROLEGED, CONTEUDOASSINATURA) VALUES (?, ?, ?)"; private static final String SQL_RESTORE = "SELECT IDASSINATURA, IDCONTROLEGED, CONTEUDOASSINATURA FROM ASSINATURA_CONTROLEGED WHERE IDASSINATURA = ?"; @Override public String getTableName() { return "ASSINATURA_CONTROLEGED"; } @Override public Class<AssinaturaControleGEDDTO> getBean() { return AssinaturaControleGEDDTO.class; } public AssinaturaControleGEDDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection<Field> getFields() { final Collection<Field> fields = new ArrayList<>(); fields.add(new Field("idAssinatura", "idAssinatura", true, true, false, false)); fields.add(new Field("idControleGED", "idControleGED", false, false, false, false)); fields.add(new Field("pathAssinatura", "pathAssinatura", false, false, false, false)); return fields; } private Integer nextKey(final Connection conn) throws Exception { Integer key = null; try (final PreparedStatement ps = conn.prepareStatement(SQL_NEXT_KEY); final ResultSet rs = ps.executeQuery()) { if (rs.next()) { key = new Integer(rs.getInt(1)); } } return key != null ? key : 1; } @Override public IDto create(final IDto obj) throws PersistenceException { File f = null; final AssinaturaControleGEDDTO ass = (AssinaturaControleGEDDTO) obj; try (Connection conn = ConnectionProvider.getConnection(this.getDataBaseAlias()); PreparedStatement ps = conn.prepareStatement(SQL_INSERT);) { ass.setIdAssinatura(this.nextKey(conn)); ps.setInt(2, ass.getIdControleGED()); f = new File(ass.getPathAssinatura()); final InputStream is = new FileInputStream(f); if (is.available() > 0) { ps.setBinaryStream(3, is, is.available()); } else { ps.setNull(3, Types.BLOB); } ps.setInt(1, ass.getIdAssinatura()); ps.executeUpdate(); } catch (final Exception e) { throw new PersistenceException(e); } finally { if (f != null) { f.delete(); } } return ass; } @Override public IDto restore(final IDto obj) throws PersistenceException { File f = null; AssinaturaControleGEDDTO ret = null; final AssinaturaControleGEDDTO ass = (AssinaturaControleGEDDTO) obj; try (Connection conn = ConnectionReadOnlyProvider.getConnection(this.getDataBaseAlias()); PreparedStatement ps = conn.prepareStatement(SQL_RESTORE)) { ps.setInt(1, ass.getIdControleGED()); try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { ret = new AssinaturaControleGEDDTO(); ret.setIdAssinatura(rs.getInt(1)); ret.setIdControleGED(rs.getInt(2)); final InputStream is = rs.getBinaryStream(3); int qtd = 0; byte[] b = null; f = new File(Constantes.getValue("DIRETORIO_GED") + "/" + Constantes.getValue("ID_EMPRESA_PROC_BATCH") + "/" + ret.getPastaControleGed()); f.mkdirs(); f = new File(f.getAbsolutePath() + "/" + ret.getIdControleGED() + ".ged"); f.createNewFile(); ret.setPathAssinatura(f.getAbsolutePath()); try (final OutputStream os = new FileOutputStream(f)) { do { b = new byte[1024]; qtd = is.read(b); if (qtd >= 0) { os.write(b, 0, qtd); os.flush(); } } while (qtd >= 0); } } } } catch (final Exception e) { throw new PersistenceException(e); } return ret; } @Override @Deprecated public Collection<AssinaturaControleGEDDTO> find(final IDto obj) throws PersistenceException { return null; } @Override @Deprecated public Collection<AssinaturaControleGEDDTO> list() throws PersistenceException { return null; } private String dataBaseAlias; private String getDataBaseAlias() { if (dataBaseAlias == null) { dataBaseAlias = Constantes.getValue("CONTEXTO_CONEXAO") + this.getAliasDB(); } return dataBaseAlias; } }