package com.fp.firmas.rules.save; import java.io.ByteArrayInputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.List; import com.fp.dto.rules.TransactionRule; import com.fp.dto.save.SaveRequest; import com.fp.firmas.rules.common.resources.FirmMessages; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.commondb.exception.CommondbException; import com.fp.persistence.pfirmas.param.TfirmCertificado; import com.fp.persistence.pgeneral.gene.TgeneParameters; import com.fp.persistence.pgeneral.gene.TgeneParametersKey; /** * Clase que completa la información acerca de los certificados dentro del repositorio de certificados * * @author dcruz * */ public class CertificadoFirma extends TransactionRule{ private static final long serialVersionUID = 1L; @Override public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception { List firmCertificados = pSaveRequest.getSaveBeanModifiedRecords("USUARIOCERTIFICADOS"); String path = (String)pSaveRequest.get("path"); for (Object object : firmCertificados) { if(object instanceof TfirmCertificado){ TfirmCertificado certificado = (TfirmCertificado)object; guardarCertficadoRepositorio(certificado, path); } } return pSaveRequest; } @Override public SaveRequest reverseProcess(SaveRequest pSaveRequest) throws Exception { return pSaveRequest; } private void guardarCertficadoRepositorio(TfirmCertificado certificado, String pathCertificado) throws CommondbException, Exception{ // String path = getPath(certificado);//obtiene la ruta a grabar el certificado // String path = FirmMessages.getString("dir.ruta.base.repositorio") + "/" + certificado.getPk().getIdcertificado();//cambiar por el parametro en la base String path = pathCertificado + "/" + certificado.getPk().getIdcertificado(); if(!Files.exists(Paths.get(path))){ Files.createFile(Paths.get(path)); Files.copy(new ByteArrayInputStream((byte[])certificado.modifiedData.get("valor_certificado_bin")), Paths.get(path)); }else{ Files.copy(new ByteArrayInputStream((byte[])certificado.modifiedData.get("valor_certificado_bin")), Paths.get(path), StandardCopyOption.REPLACE_EXISTING); } } private String getPath(TfirmCertificado certificado) throws CommondbException, Exception { TgeneParametersKey tgeneParametersKey = new TgeneParametersKey("PATH_CERTIFICADO_BCE", 1); TgeneParameters tgeneParameters = TgeneParameters.find(PersistenceHelper.getEntityManager(), tgeneParametersKey); String path = tgeneParameters.getTextvalue() + "/" + certificado.getPk().getIdcertificado(); return path; } }