diff --git a/CHANGELOG.md b/CHANGELOG.md index 24830f24..5acb4227 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,24 @@ +## 10.3.0 (11-11-2024) + +### Bugfix: 2 +- [#34366](https://parermine.regione.emilia-romagna.it/issues/34366) Correzione controllo esistenza password nulla nel servizi di recupero +- [#34301](https://parermine.regione.emilia-romagna.it/issues/34301) Correzione della chiamata al parametro TIMEOUT_CALCOLO_SERVIZI_EROGATI + +### Novità: 12 +- [#34489](https://parermine.regione.emilia-romagna.it/issues/34489) Sostituzione partizionamenti by_list e subpartizionamenti by_list con partizionamenti automatici - tabelle ARO_CNTENUTO_COMP +- [#34433](https://parermine.regione.emilia-romagna.it/issues/34433) Sostituzione partizionamenti by_range in sacer_LOG con partizionamenti automatici con interval +- [#34321](https://parermine.regione.emilia-romagna.it/issues/34321) Sostituzione partizionamenti by_list/by_range in partizionamenti automatici - tabelle SERIE +- [#33897](https://parermine.regione.emilia-romagna.it/issues/33897) Eliminazione controllo LOGINNAME/PASSWORD nella chiamata ai servizi di recupero con certificato +- [#32722](https://parermine.regione.emilia-romagna.it/issues/32722) Modifiche al monitoraggio Riepilogo versamenti fascicoli +- [#32535](https://parermine.regione.emilia-romagna.it/issues/32535) Aggiornamento delle logiche di creazione della richiesta di restituzione archivio. +- [#32490](https://parermine.regione.emilia-romagna.it/issues/32490) Riduzione tempi di apertura della pagina di dettaglio della richiesta di estrazione +- [#31668](https://parermine.regione.emilia-romagna.it/issues/31668) Visualizzazione dei dati relativi alle sessioni errate e fallite cancellate +- [#30400](https://parermine.regione.emilia-romagna.it/issues/30400) Salvataggio diretto su object storage dell'indice AIP delle serie +- [#27019](https://parermine.regione.emilia-romagna.it/issues/27019) Ridimensionamento di tutte le colonne che contengono esiti di errore. +- [#23686](https://parermine.regione.emilia-romagna.it/issues/23686) Visualizzazione chiave normalizzata fascicolo +- [#15967](https://parermine.regione.emilia-romagna.it/issues/15967) Attivazione della firma Xades e XadesT + ## 10.2.1 (18-09-2024) ### Bugfix: 4 diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index f158078f..0599b1d4 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,7 +1,19 @@ -## 10.2.1 (18-09-2024) +## 10.3.0 (11-11-2024) -### Bugfix: 4 -- [#34039](https://parermine.regione.emilia-romagna.it/issues/34039) Correzione job evasione richieste restituzione archivio -- [#34023](https://parermine.regione.emilia-romagna.it/issues/34023) Correzione dell'errore nel salvataggio del periodo di validità di un tipo fascicolo quando si modifica un parametro -- [#33957](https://parermine.regione.emilia-romagna.it/issues/33957) Correzione in fase di eliminazione file e/o directory temporenee nei casi di servizi recupero e monitoraggio -- [#33851](https://parermine.regione.emilia-romagna.it/issues/33851) Importazione parametri struttura: Import tipo fascicolo errore su ambiente diverso dall'export +### Bugfix: 2 +- [#34366](https://parermine.regione.emilia-romagna.it/issues/34366) Correzione controllo esistenza password nulla nel servizi di recupero +- [#34301](https://parermine.regione.emilia-romagna.it/issues/34301) Correzione della chiamata al parametro TIMEOUT_CALCOLO_SERVIZI_EROGATI + +### Novità: 12 +- [#34489](https://parermine.regione.emilia-romagna.it/issues/34489) Sostituzione partizionamenti by_list e subpartizionamenti by_list con partizionamenti automatici - tabelle ARO_CNTENUTO_COMP +- [#34433](https://parermine.regione.emilia-romagna.it/issues/34433) Sostituzione partizionamenti by_range in sacer_LOG con partizionamenti automatici con interval +- [#34321](https://parermine.regione.emilia-romagna.it/issues/34321) Sostituzione partizionamenti by_list/by_range in partizionamenti automatici - tabelle SERIE +- [#33897](https://parermine.regione.emilia-romagna.it/issues/33897) Eliminazione controllo LOGINNAME/PASSWORD nella chiamata ai servizi di recupero con certificato +- [#32722](https://parermine.regione.emilia-romagna.it/issues/32722) Modifiche al monitoraggio Riepilogo versamenti fascicoli +- [#32535](https://parermine.regione.emilia-romagna.it/issues/32535) Aggiornamento delle logiche di creazione della richiesta di restituzione archivio. +- [#32490](https://parermine.regione.emilia-romagna.it/issues/32490) Riduzione tempi di apertura della pagina di dettaglio della richiesta di estrazione +- [#31668](https://parermine.regione.emilia-romagna.it/issues/31668) Visualizzazione dei dati relativi alle sessioni errate e fallite cancellate +- [#30400](https://parermine.regione.emilia-romagna.it/issues/30400) Salvataggio diretto su object storage dell'indice AIP delle serie +- [#27019](https://parermine.regione.emilia-romagna.it/issues/27019) Ridimensionamento di tutte le colonne che contengono esiti di errore. +- [#23686](https://parermine.regione.emilia-romagna.it/issues/23686) Visualizzazione chiave normalizzata fascicolo +- [#15967](https://parermine.regione.emilia-romagna.it/issues/15967) Attivazione della firma Xades e XadesT diff --git a/nbactions-dev.xml b/nbactions-dev.xml new file mode 100644 index 00000000..b4dde17a --- /dev/null +++ b/nbactions-dev.xml @@ -0,0 +1,58 @@ + + + + test.single + + * + + + test-compile + test + + + ${packageClassName} + false + + + + debug.test.single + + * + + + test-compile + test + + + ${packageClassName} + once + -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} + true + false + + + + CUSTOM-build skipTests + build skipTests + + clean + package + + + true + + + + rebuild + + * + + + clean + install + + + dev + + + diff --git a/pom.xml b/pom.xml index 449cb8a4..774e40d7 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 sacer-jboss - 10.2.2-SNAPSHOT + 10.3.0 pom sacer Progetto SACER @@ -10,7 +10,7 @@ it.eng.parer parer-pom - 6.4.0 + 6.4.1 UTF-8 @@ -19,13 +19,13 @@ 2.11.0 - 6.15.1 + 6.15.2 1.10.0 1.5.0 2.2.0 0.0.9 - 1.0.2 + 1.1.0 2.2.4 1.0.0 diff --git a/sacer-ear/pom.xml b/sacer-ear/pom.xml index 9a1b3bac..4dd9b95e 100644 --- a/sacer-ear/pom.xml +++ b/sacer-ear/pom.xml @@ -4,7 +4,7 @@ sacer-jboss it.eng.parer - 10.2.2-SNAPSHOT + 10.3.0 sacer-jboss-ear diff --git a/sacer-ejb/pom.xml b/sacer-ejb/pom.xml index 44e01a35..4fc3f91d 100644 --- a/sacer-ejb/pom.xml +++ b/sacer-ejb/pom.xml @@ -3,7 +3,7 @@ sacer-jboss it.eng.parer - 10.2.2-SNAPSHOT + 10.3.0 sacer-jboss-ejb diff --git a/sacer-ejb/src/main/java/it/eng/parer/elencoVersFascicoli/helper/ElencoVersFascicoliHelper.java b/sacer-ejb/src/main/java/it/eng/parer/elencoVersFascicoli/helper/ElencoVersFascicoliHelper.java index cf27e8af..733dc0cc 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/elencoVersFascicoli/helper/ElencoVersFascicoliHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/elencoVersFascicoli/helper/ElencoVersFascicoliHelper.java @@ -48,6 +48,7 @@ import org.slf4j.LoggerFactory; import it.eng.parer.elencoVersFascicoli.utils.FasFascicoloObj; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; import it.eng.parer.entity.AroCompDoc; import it.eng.parer.entity.AroDoc; import it.eng.parer.entity.AroUnitaDoc; @@ -946,7 +947,7 @@ public void deleteElencoVersFascDaElab(Long idElencoVersFascDaElab) { public void storeFileIntoElenco(ElvElencoVersFasc elenco, byte[] file, String fileType, Date dtCreazioneFile, String dsHashFile, String dsAlgoHashFile, String cdEncodingHashFile, String dsUrnFile, - String dsUrnNormalizFile, String cdVerXsdFile) { + String dsUrnNormalizFile, String cdVerXsdFile, ElencoEnums.TipoFirma tipoFirma) { ElvFileElencoVersFasc fileIndexElencoVersFasc = new ElvFileElencoVersFasc(); fileIndexElencoVersFasc.setBlFileElencoVers(file); fileIndexElencoVersFasc.setTiFileElencoVers(fileType); @@ -958,6 +959,7 @@ public void storeFileIntoElenco(ElvElencoVersFasc elenco, byte[] file, String fi fileIndexElencoVersFasc.setCdEncodingHashFile(cdEncodingHashFile); fileIndexElencoVersFasc.setDsUrnFile(dsUrnFile); fileIndexElencoVersFasc.setDsUrnNormalizFile(dsUrnNormalizFile); + fileIndexElencoVersFasc.setTiFirma(tipoFirma == null ? null : tipoFirma.name()); fileIndexElencoVersFasc.setCdVerXsdFile(cdVerXsdFile); List fileIndexElencoConservList = elenco.getElvFileElencoVersFasc(); fileIndexElencoConservList.add(fileIndexElencoVersFasc); @@ -1107,16 +1109,7 @@ public ElvFileElencoVersFasc getFileIndiceElenco(long idElencoVersFasc, String t } public List retrieveFileIndiceElenco(long idElencoVersFasc, String... tiFileElencoVers) { - String queryStr = "SELECT new it.eng.parer.entity.ElvFileElencoVersFasc(u.blFileElencoVers, u.cdVerXsdFile, u.tiFileElencoVers) FROM ElvFileElencoVersFasc u " - + "WHERE u.elvElencoVersFasc.idElencoVersFasc = :idElencoVersFasc AND u.tiFileElencoVers IN (:tiFileElencoVers)"; - Query query = em.createQuery(queryStr); - query.setParameter("idElencoVersFasc", idElencoVersFasc); - query.setParameter("tiFileElencoVers", Arrays.asList(tiFileElencoVers)); - return query.getResultList(); - } - - public List retrieveFileIndiceElenco2(long idElencoVersFasc, String... tiFileElencoVers) { - String queryStr = "SELECT new it.eng.parer.entity.ElvFileElencoVersFasc(u.idFileElencoVersFasc, u.blFileElencoVers, u.cdVerXsdFile, u.tiFileElencoVers) FROM ElvFileElencoVersFasc u " + String queryStr = "SELECT new it.eng.parer.entity.ElvFileElencoVersFasc(u.idFileElencoVersFasc, u.blFileElencoVers, u.cdVerXsdFile, u.tiFileElencoVers, u.tiFirma) FROM ElvFileElencoVersFasc u " + "WHERE u.elvElencoVersFasc.idElencoVersFasc = :idElencoVersFasc AND u.tiFileElencoVers IN (:tiFileElencoVers)"; Query query = em.createQuery(queryStr); query.setParameter("idElencoVersFasc", idElencoVersFasc); @@ -1124,6 +1117,14 @@ public List retrieveFileIndiceElenco2(long idElencoVersFa return query.getResultList(); } + /* + * public List retrieveFileIndiceElenco2(long idElencoVersFasc, String... tiFileElencoVers) { + * String queryStr = + * "SELECT new it.eng.parer.entity.ElvFileElencoVersFasc(u.idFileElencoVersFasc, u.blFileElencoVers, u.cdVerXsdFile, u.tiFileElencoVers) FROM ElvFileElencoVersFasc u " + * + "WHERE u.elvElencoVersFasc.idElencoVersFasc = :idElencoVersFasc AND u.tiFileElencoVers IN (:tiFileElencoVers)"; + * Query query = em.createQuery(queryStr); query.setParameter("idElencoVersFasc", idElencoVersFasc); + * query.setParameter("tiFileElencoVers", Arrays.asList(tiFileElencoVers)); return query.getResultList(); } + */ /** * Restituisce il numero dei fascicoli versati in elenco * diff --git a/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/helper/ElencoVersamentoHelper.java b/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/helper/ElencoVersamentoHelper.java index 47ec1128..14f34813 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/helper/ElencoVersamentoHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/helper/ElencoVersamentoHelper.java @@ -124,6 +124,7 @@ import it.eng.parer.viewEntity.ElvVLisElencoDaMarcare; import it.eng.parer.viewEntity.ElvVLisModifByUd; import it.eng.parer.viewEntity.ElvVLisUdByStato; +import it.eng.parer.viewEntity.ElvVRicElencoVers; import it.eng.parer.viewEntity.ElvVSelUdDocUpdByCrit; import it.eng.parer.viewEntity.OrgVLisStrutPerEle; import it.eng.parer.volume.utils.DatiSpecQueryParams; @@ -138,6 +139,7 @@ import it.eng.parer.ws.utils.CostantiDB.TipiHash; import it.eng.parer.ws.utils.HashCalculator; import it.eng.parer.ws.utils.MessaggiWSFormat; +import it.eng.spagoCore.error.EMFError; /** * @@ -157,6 +159,14 @@ public class ElencoVersamentoHelper extends GenericHelper { @EJB private ObjectStorageService objectStorageService; + public ElvVRicElencoVers retrieveElvVRicElencoVersListByIdAndUser(long idElencoVers, long idUserIam) { + TypedQuery query = getEntityManager().createQuery("SELECT u FROM ElvVRicElencoVers u " + + "WHERE u.idElencoVers=:idElencoVers AND u.idUserIam = :idUserIam ", ElvVRicElencoVers.class); + query.setParameter("idElencoVers", new BigDecimal(idElencoVers)); + query.setParameter("idUserIam", new BigDecimal(idUserIam)); + return query.getResultList().get(0); + } + public List retrieveElenchiScadutiDaProcessare(long idStrut) { Date systemDate = new Date(); Query q = em.createQuery("SELECT elencoVers.idElencoVers " @@ -3213,7 +3223,7 @@ public byte[] retrieveFileIndiceElenco(long idElencoVers, String tiFileElencoVer } public List retrieveFileIndiceElenco(long idElencoVers, String... tiFileElencoVers) { - String queryStr = "SELECT new it.eng.parer.entity.ElvFileElencoVer(u.blFileElencoVers, u.cdVerXsdFile, u.tiFileElencoVers) FROM ElvFileElencoVer u " + String queryStr = "SELECT new it.eng.parer.entity.ElvFileElencoVer(u.blFileElencoVers, u.cdVerXsdFile, u.tiFileElencoVers, u.tiFirma) FROM ElvFileElencoVer u " + "WHERE u.elvElencoVer.idElencoVers = :idElencoVers AND u.tiFileElencoVers IN (:tiFileElencoVers)"; Query query = em.createQuery(queryStr); query.setParameter("idElencoVers", idElencoVers); diff --git a/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/utils/ElencoEnums.java b/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/utils/ElencoEnums.java index 76c55dc2..f40c09f8 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/utils/ElencoEnums.java +++ b/sacer-ejb/src/main/java/it/eng/parer/elencoVersamento/utils/ElencoEnums.java @@ -181,6 +181,10 @@ public String getFileExtension() { } } + public enum TipoFirma { + CADES, XADES + } + public enum ModeEnum { BATCH, ONLINE, ADD, SUB diff --git a/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/ElenchiVersFascicoliEjb.java b/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/ElenchiVersFascicoliEjb.java index 4edeffb1..6de3f9fc 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/ElenchiVersFascicoliEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/ElenchiVersFascicoliEjb.java @@ -144,6 +144,16 @@ public ElvElencoVersFascRowBean getElvElencoVersFascRowBean(BigDecimal idElencoV try { elencoRowBean = (ElvElencoVersFascRowBean) Transform.entity2RowBean(elenco); final OrgAmbiente orgAmbiente = elenco.getOrgStrut().getOrgEnte().getOrgAmbiente(); + + // MEV#15967 - Attivazione della firma Xades e XadesT + List elencoIndiceAipFirmato = evfHelper.retrieveFileIndiceElenco( + idElencoVersFasc.longValue(), + new String[] { ElencoEnums.FileTypeEnum.FIRMA_ELENCO_INDICI_AIP.name() }); + if (elencoIndiceAipFirmato != null && !elencoIndiceAipFirmato.isEmpty()) { + elencoRowBean.setString("ti_firma", elencoIndiceAipFirmato.get(0).getTiFirma()); + } + // + elencoRowBean.setString("nm_criterio_raggr", elenco.getDecCriterioRaggrFasc().getNmCriterioRaggr()); elencoRowBean.setString("ds_criterio_raggr", elenco.getDecCriterioRaggrFasc().getDsCriterioRaggr()); elencoRowBean.setString("ti_stato", statoElenco.getTiStato().name()); @@ -478,7 +488,7 @@ public void manualClosingElenco(long idUserIam, BigDecimal idElencoVersFasc, Lis // elenco>:Indice” evfHelper.storeFileIntoElenco(elenco, indexFile, ElencoEnums.FileTypeEnum.INDICE_ELENCO.name(), new Date(), hashXmlIndice, TipiHash.SHA_256.descrivi(), TipiEncBinari.HEX_BINARY.descrivi(), urnXmlIndice, - urnXmlIndiceNormaliz, ElencoEnums.ElencoInfo.VERSIONE_ELENCO.message()); + urnXmlIndiceNormaliz, ElencoEnums.ElencoInfo.VERSIONE_ELENCO.message(), null); // Registro un nuovo stato = CHIUSO e lo lascio nella coda degli elenchi da elaborare assegnando stato = CHIUSO ElvStatoElencoVersFasc statoElencoVersFasc = new ElvStatoElencoVersFasc(); @@ -685,13 +695,23 @@ public void streamOutFileIndiceElencoNoFirma(ZipOutputStream out, String fileNam public void streamOutFileIndiceElenco(ZipOutputStream out, String fileNamePrefix, String fileNameSuffix, long idElencoVersFasc, FileTypeEnum... fileTypes) throws IOException { - List retrieveFileIndiceElenco = evfHelper.retrieveFileIndiceElenco2(idElencoVersFasc, + List retrieveFileIndiceElenco = evfHelper.retrieveFileIndiceElenco(idElencoVersFasc, FileTypeEnum.getStringEnumsList(fileTypes)); for (ElvFileElencoVersFasc elvFileElencoVersFasc : retrieveFileIndiceElenco) { FileTypeEnum fileType = ElencoEnums.FileTypeEnum.valueOf(elvFileElencoVersFasc.getTiFileElencoVers()); fileNamePrefix = StringUtils.defaultString(fileNamePrefix); fileNameSuffix = StringUtils.defaultString(fileNameSuffix); - String fileExtension = fileType.getFileExtension(); + + // MEV#15967 - Attivazione della firma Xades e XadesT + String fileExtension = null; + String tiFirma = elvFileElencoVersFasc.getTiFirma(); + if (tiFirma != null + && tiFirma.equals(it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.XADES.name())) { + fileExtension = ".xml"; + } else { + fileExtension = fileType.getFileExtension(); + } + // switch (fileType) { case INDICE_ELENCO: case FIRMA_INDICE_ELENCO: @@ -736,7 +756,8 @@ private void addEntryToZip(ZipOutputStream out, byte[] file, String filename) th } } - public void storeFirma(Long idElencoVersFasc, byte[] fileFirmato, Date signatureDate, long idUtente) + public void storeFirma(Long idElencoVersFasc, byte[] fileFirmato, Date signatureDate, long idUtente, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma) throws NoSuchAlgorithmException, IOException { ElvElencoVersFasc elenco = evfHelper.retrieveElencoById(idElencoVersFasc); // calcolo l'hash SHA-256 del file .p7m @@ -760,7 +781,7 @@ public void storeFirma(Long idElencoVersFasc, byte[] fileFirmato, Date signature // elenco>:IndiceFirmato” evfHelper.storeFileIntoElenco(elenco, fileFirmato, ElencoEnums.FileTypeEnum.FIRMA_INDICE_ELENCO.name(), signatureDate, hashXmlIndice, TipiHash.SHA_256.descrivi(), TipiEncBinari.HEX_BINARY.descrivi(), - urnXmlIndice, urnXmlIndiceNormaliz, ElencoEnums.ElencoInfo.VERSIONE_ELENCO.message()); + urnXmlIndice, urnXmlIndiceNormaliz, ElencoEnums.ElencoInfo.VERSIONE_ELENCO.message(), tipoFirma); /* Registro un nuovo stato = FIRMATO */ ElvStatoElencoVersFasc statoElencoVersFasc = new ElvStatoElencoVersFasc(); @@ -869,11 +890,14 @@ public void validElenco(long idUserIam, BigDecimal idElencoVersFasc) { * id utente * @param backendMetadata * tipo backend + * @param tipoFirma + * tipo firma (XADES o CADES) * * @return ElvFileElencoVersFasc */ public ElvFileElencoVersFasc storeFirmaElencoIndiceAipFasc(Long idElencoVersFasc, byte[] fileFirmato, - Date signatureDate, long idUtente, BackendStorage backendMetadata) { + Date signatureDate, long idUtente, BackendStorage backendMetadata, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma) { ElvElencoVersFasc elenco = evfHelper.retrieveElencoById(idElencoVersFasc); evfHelper.lockElenco(elenco); @@ -917,6 +941,7 @@ public ElvFileElencoVersFasc storeFirmaElencoIndiceAipFasc(Long idElencoVersFasc fileElencoVersFasc.setDsUrnFile(urnElencoIndiceAIPFirmato); fileElencoVersFasc.setDsUrnNormalizFile(urnNormalizElencoIndiceAIPFirmato); fileElencoVersFasc.setDsAlgoHashFile(TipiHash.SHA_256.descrivi()); + fileElencoVersFasc.setTiFirma(tipoFirma == null ? null : tipoFirma.name()); fileElencoVersFasc.setCdEncodingHashFile(TipiEncBinari.HEX_BINARY.descrivi()); if (elenco.getElvFileElencoVersFasc() == null) { elenco.setElvFileElencoVersFasc(new ArrayList<>()); diff --git a/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/FascicoliEjb.java b/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/FascicoliEjb.java index 052c025f..d9b8352b 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/FascicoliEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/fascicoli/ejb/FascicoliEjb.java @@ -964,7 +964,7 @@ public MonVChkCntFascRowBean calcolaRiepilogo(BigDecimal idUser, BigDecimal idAm } else { throw new RuntimeException("Errore parametri nella chiamata al metodo calcolaRiepilogo() dell'ejb!"); } - rowBean.resetCounters(); + // rowBean.resetCounters(); if (l != null && !l.isEmpty()) { rowBean.entityToRowBean(l.iterator().next()); } diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoFascSignatureSessionEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoFascSignatureSessionEjb.java index 7a53ff09..4b5c2813 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoFascSignatureSessionEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoFascSignatureSessionEjb.java @@ -161,21 +161,22 @@ public boolean isFileEquals(long idFile, byte[] fileSbustato) { @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate) throws Exception { + public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma) throws Exception { HsmSessioneFirma session = signHlp.findById(HsmSessioneFirma.class, sessionId); // Doesn't open a new transaction - this.storeSignature(session, idFile, signedFile, signingDate); + this.storeSignature(session, idFile, signedFile, signingDate, tipoFirma); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate) - throws Exception { + public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma) throws Exception { // Sets the "log" of the HSMSessionFirma HsmElencoFascSesFirma elencoSession = signHlp.findElencoSessione(session, idFile); elencoSession.setTiEsito(TiEsitoFirmaElencoFasc.OK); elencoSession.setTsEsito(new Date()); - elencoEjb.storeFirma(idFile, signedFile, signingDate, session.getIamUser().getIdUserIam()); + elencoEjb.storeFirma(idFile, signedFile, signingDate, session.getIamUser().getIdUserIam(), tipoFirma); logger.info("Firmato elenco (id: {}) nella sessione con id {}", idFile, session.getIdSessioneFirma()); } diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipFascSignatureSessionEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipFascSignatureSessionEjb.java index f9528758..38f2a4c0 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipFascSignatureSessionEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipFascSignatureSessionEjb.java @@ -38,6 +38,7 @@ import it.eng.parer.elencoVersFascicoli.helper.ElencoVersFascicoliHelper; import it.eng.parer.elencoVersFascicoli.utils.ElencoEnums; import it.eng.parer.elencoVersFascicoli.utils.ElencoEnums.ElencoStatusEnum; +import it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma; import it.eng.parer.entity.ElvElencoVersFasc; import it.eng.parer.entity.ElvElencoVersFascDaElab; import it.eng.parer.entity.ElvFileElencoVersFasc; @@ -178,24 +179,28 @@ public boolean isFileEquals(long idFile, byte[] fileSbustato) { @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate) { + public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma) { HsmSessioneFirma session = signHlp.findById(HsmSessioneFirma.class, sessionId); // Doesn't open a new transaction - this.storeSignature(session, idFile, signedFile, signingDate); + this.storeSignature(session, idFile, signedFile, signingDate, tipoFirma); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate) { + public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma) { // Sets the "log" of the HSMSessionFirma HsmElencoFascSesFirma elencoSession = signHlp.findElencoFascSes(session, idFile); elencoSession.setTiEsito(TiEsitoFirmaElencoFasc.OK); elencoSession.setTsEsito(new Date()); + // elencoEjb.storeFirmaElencoIndiceAipFasc(idFile, signedFile, signingDate, session.getIamUser().getIdUserIam(), + // tipoFirma); // MEV#30399 BackendStorage backendIndiciAip = objectStorageService .lookupBackendElenchiIndiciAipFasc(elencoSession.getElvElencoVersFasc().getOrgStrut().getIdStrut()); ElvFileElencoVersFasc fileElencoVers = elencoEjb.storeFirmaElencoIndiceAipFasc(idFile, signedFile, signingDate, - session.getIamUser().getIdUserIam(), backendIndiciAip); + session.getIamUser().getIdUserIam(), backendIndiciAip, tipoFirma); /* * Se backendMetadata di tipo O.S. si effettua il salvataggio (con link su apposita entity) */ diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipSignatureSessionEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipSignatureSessionEjb.java index 2eb8e113..9ff34747 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipSignatureSessionEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoIndiciAipSignatureSessionEjb.java @@ -18,7 +18,6 @@ package it.eng.parer.firma.crypto.ejb; import java.math.BigDecimal; -import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -34,11 +33,6 @@ import it.eng.parer.objectstorage.dto.BackendStorage; import it.eng.parer.objectstorage.dto.ObjectStorageResource; import it.eng.parer.objectstorage.ejb.ObjectStorageService; -import it.eng.parer.ws.dto.CSVersatore; -import it.eng.parer.ws.utils.Costanti; -import it.eng.parer.ws.utils.CostantiDB; -import it.eng.parer.ws.utils.HashCalculator; -import it.eng.parer.ws.utils.MessaggiWSFormat; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; @@ -171,25 +165,28 @@ public boolean isFileEquals(long idFile, byte[] fileSbustato) { @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate) throws Exception { + public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception { HsmSessioneFirma session = signHlp.findById(HsmSessioneFirma.class, sessionId); // Doesn't open a new transaction - this.storeSignature(session, idFile, signedFile, signingDate); + this.storeSignature(session, idFile, signedFile, signingDate, tipoFirma); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate) - throws Exception { + public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception { // Sets the "log" of the HSMSessionFirma HsmElencoSessioneFirma elencoSession = signHlp.findElencoSessione(session, idFile); elencoSession.setTiEsito(TiEsitoFirmaElenco.OK); elencoSession.setTsEsito(new Date()); + // elencoEjb.storeFirmaElencoIndiceAip(idFile, signedFile, signingDate, session.getIamUser().getIdUserIam(), + // tipoFirma); // MEV#30397 BackendStorage backendIndiciAip = objectStorageService .lookupBackendElenchiIndiciAip(elencoSession.getElvElencoVer().getOrgStrut().getIdStrut()); ElvFileElencoVer fileElencoVers = elencoEjb.storeFirmaElencoIndiceAip(idFile, signedFile, signingDate, - session.getIamUser().getIdUserIam(), backendIndiciAip); + session.getIamUser().getIdUserIam(), backendIndiciAip, tipoFirma); /* * Se backendMetadata di tipo O.S. si effettua il salvataggio (con link su apposita entity) */ @@ -382,4 +379,11 @@ public void unlockBlockedSessions(long userId) { this.errorSessioneFirma(session, SignatureSession.CdErr.BLOCKED_SESSION); } } + + /* + * Torna il tipo gestione elenco di un elenco di versamento (FIRMA, MARCA_FIRMA ecc.) + */ + public String getTipoGestioneElenco(Long idElencoVersamento, Long idUserIam) { + return this.elencoHlp.retrieveElvVRicElencoVersListByIdAndUser(idElencoVersamento, idUserIam).getTiGestElenco(); + } } diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoSignatureSessionEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoSignatureSessionEjb.java index 77fc55ef..4df2cf29 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoSignatureSessionEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/ElencoSignatureSessionEjb.java @@ -145,16 +145,17 @@ public boolean isFileEquals(long idFile, byte[] fileSbustato) { @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate) throws Exception { + public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception { HsmSessioneFirma session = signHlp.findById(HsmSessioneFirma.class, sessionId); // Doesn't open a new transaction - this.storeSignature(session, idFile, signedFile, signingDate); + this.storeSignature(session, idFile, signedFile, signingDate, tipoFirma); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate) - throws Exception { + public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception { // Sets the "log" of the HSMSessionFirma HsmElencoSessioneFirma elencoSession = signHlp.findElencoSessione(session, idFile); elencoSession.setTiEsito(TiEsitoFirmaElenco.OK); diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SerieSignatureSessionEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SerieSignatureSessionEjb.java index 79b8fa72..68ebacf6 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SerieSignatureSessionEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SerieSignatureSessionEjb.java @@ -34,6 +34,8 @@ import it.eng.parer.common.signature.Digest; import it.eng.parer.common.signature.SignatureSession; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; +import it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma; import it.eng.parer.entity.HsmSessioneFirma; import it.eng.parer.entity.HsmVerSerieSessioneFirma; import it.eng.parer.entity.IamUser; @@ -135,23 +137,24 @@ public boolean isFileEquals(long idFile, byte[] fileSbustato) { @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate) throws Exception { + public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception { HsmSessioneFirma session = signHlp.findById(HsmSessioneFirma.class, sessionId); // Doesn't open a new transaction - this.storeSignature(session, idFile, signedFile, signingDate); + this.storeSignature(session, idFile, signedFile, signingDate, tipoFirma); } @Override @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate) - throws Exception { + public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception { // Sets the "log" of the HSMSessionFirma HsmVerSerieSessioneFirma serieSession = signHlp.findSerieSessione(session, idFile); serieSession.setTiEsito(TiEsitoFirmaVerSerie.OK); serieSession.setTsEsito(new Date()); // The signingDate in this method isn't used because the time is detech inside the method storeFirma - serieEjb.storeFirmaMandatoryTransaction(idFile, signedFile, session.getIamUser().getIdUserIam()); + serieEjb.storeFirmaMandatoryTransaction(idFile, signedFile, session.getIamUser().getIdUserIam(), tipoFirma); logger.info("Firmata serie (id: {}) nella sessione con id {}", idFile, session.getIdSessioneFirma()); } diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SignatureSessionEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SignatureSessionEjb.java index 98379794..34105bdb 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SignatureSessionEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/ejb/SignatureSessionEjb.java @@ -21,6 +21,8 @@ import java.util.List; import it.eng.parer.common.signature.SignatureSession; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; +import it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma; import it.eng.parer.entity.HsmSessioneFirma; import it.eng.parer.entity.IamUser; import it.eng.parer.firma.crypto.sign.SigningRequest; @@ -75,11 +77,14 @@ public interface SignatureSessionEjb { * file firmato in byte * @param signingDate * data firma + * @param tipoFirma + * tipo firma (XADES o CADES) * * @throws Exception * errore generico */ - public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate) throws Exception; + public void storeSignature(long sessionId, long idFile, byte[] signedFile, Date signingDate, TipoFirma tipoFirma) + throws Exception; /** * Stores the signature file @@ -92,12 +97,14 @@ public interface SignatureSessionEjb { * firmato in byte * @param signingDate * data firma + * @param tipoFirma + * tipo firma (XADES o CADES) * * @throws Exception * errore generico */ - public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate) - throws Exception; + public void storeSignature(HsmSessioneFirma session, long idFile, byte[] signedFile, Date signingDate, + ElencoEnums.TipoFirma tipoFirma) throws Exception; /** * Stores the file signing failed and the file status is set the previous one. diff --git a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/sign/SignerHsmEjb.java b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/sign/SignerHsmEjb.java index ec875eda..1c78058a 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/sign/SignerHsmEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/firma/crypto/sign/SignerHsmEjb.java @@ -42,6 +42,7 @@ import it.eng.hsm.beans.HSMUser; import it.eng.parer.common.signature.Signature; import it.eng.parer.common.signature.SignatureSession.CdErr; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; import it.eng.parer.entity.HsmSessioneFirma; import it.eng.parer.entity.constraint.HsmSessioneFirma.TiSessioneFirma; import it.eng.parer.firma.crypto.ejb.ElencoFascSignatureSessionEjb; @@ -65,7 +66,6 @@ public class SignerHsmEjb { @EJB(mappedName = "java:app/Parer-ejb/ConfigurationHelper") private ConfigurationHelper configurationHelper; - @EJB private ElencoSignatureSessionEjb elencoSignEjb; @EJB @@ -199,7 +199,8 @@ public Future signP7m(HsmSessioneFirma sessione, HSMUser user) hashOk = true; if (hashOk) { - ejb.storeSignature(sessione, idFile, signedFile, signingDate); + ejb.storeSignature(sessione, idFile, signedFile, signingDate, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.CADES); } else { // TODO da sistemare ejb.errorFile(sessione, idFile, CdErr.ERROR_SIGNING.name(), @@ -288,4 +289,208 @@ public Future signP7m(HsmSessioneFirma sessione, HSMUser user) return new AsyncResult<>(result); } + + // -------------------------------------------------------------------------------- + // MEV#15967 - Attivazione della firma Xades e XadesT + // -------------------------------------------------------------------------------- + + public Future signXades(SigningRequest request) { + Future result; + + if (request != null) { + SignatureSessionEjb ejb = getSignatureEjb(request.getType()); + + if (!ejb.hasUserActiveSessions(request.getIdUtente())) { + HsmSessioneFirma sessione = ejb.startSessioneFirma(request); + result = context.getBusinessObject(SignerHsmEjb.class).signXades(sessione, request.getUserHSM()); + } else { + result = new AsyncResult<>(SigningResponse.ACTIVE_SESSION_YET); + } + } else { + result = new AsyncResult<>(SigningResponse.UNKNOWN_ERROR); + } + return result; + } + + @Asynchronous + public Future signXades(HsmSessioneFirma sessione, HSMUser user) { + SigningResponse result = SigningResponse.UNKNOWN_ERROR; + int fileNum; + CdErr codErr = null; + SignatureSessionEjb ejb = getSignatureEjb(sessione.getTiSessioneFirma()); + ClientHSM clientHsm; + + try { + HSMSignatureSession hsmSession; + + try { + clientHsm = initClient(); + } catch (Exception ex) { + codErr = CdErr.HSM_NOT_RESPOND; + throw ex; + } + + // Open sign session + try { + hsmSession = clientHsm.openSignatureSession(user); + } catch (HSMException ex) { + logger.error("Error during the opening of HSM session", ex); + codErr = CdErr.ERROR_SESSION_CREATION; + throw ex; + } + + // Signs all the files + fileNum = sessione.getNumFile(); + + for (int index = 0; index < fileNum; index++) { + Long idFile = sessione.getIdFile(index); + + byte[] file2sign = ejb.getFile2Sign(idFile); + try { + byte[] signedFile = null; + // MEV#15967 - Attivazione della firma Xades e XadesT + /* + * Nel caso in cui si tratti di gestione elenchi indici AIP la cui gestione può essere MARCA o + * SIGILLO con anche MARCA allora il parametro generico di entrata "marcaTemporale" viene ignorato e + * si richiede per XADES la sola firma oppure anche la marca in base al tipo getione dell'elenco di + * versamento. + */ + if (sessione.getTiSessioneFirma().equals(sessione.getTiSessioneFirma().ELENCO_INDICI_AIP)) { + String tipoGestione = elencoIndiciAipSignEjb.getTipoGestioneElenco(idFile, + sessione.getIamUser().getIdUserIam()); + if (tipoGestione != null + && (tipoGestione.equals(ElencoEnums.GestioneElencoEnum.MARCA_FIRMA.name()) + || tipoGestione.equals(ElencoEnums.GestioneElencoEnum.MARCA_SIGILLO.name()))) { + signedFile = clientHsm.signXAdES(hsmSession, file2sign, true); + } else { + signedFile = clientHsm.signXAdES(hsmSession, file2sign, false); + } + } else if (sessione.getTiSessioneFirma().equals(sessione.getTiSessioneFirma().SERIE)) { + /* + * Per le serie si è deciso che la firma è sempre Xades senza marca in quanto il tipo di + * conservazione fiscale probabilmente diventerà deprecato, quindi quella parte di codice che + * gestisce lo stato della serie rimane che lo stato lo mette a FIRMATA_NO_MARCA + */ + signedFile = clientHsm.signXAdES(hsmSession, file2sign, false); + } else if (sessione.getTiSessioneFirma() + .equals(sessione.getTiSessioneFirma().ELENCHI_INDICI_AIP_FASC)) { + signedFile = clientHsm.signXAdES(hsmSession, file2sign, false); // Richiede sempre firma senza + // marca + } else { + signedFile = clientHsm.signXAdES(hsmSession, file2sign, false); // Richiede sempre firma senza + // marca in tutti gli altri casi + } + + if (signedFile != null) { + Date signingDate = new Date(); + + // TODO eseguire la verifica della firma realizzata + boolean verificaOk = true; + + if (verificaOk) { + // TODO Ottenere il file sbustato + byte[] fileSbustato = null; + + // Questo controllo serve a garantire che il documento firmato fosse realmente quello + // inviato + boolean hashOk = ejb.isFileEquals(idFile, fileSbustato); + // TODO Da rimuovere dopo aver realizzato i due TODO sopra + hashOk = true; + + if (hashOk) { + ejb.storeSignature(sessione, idFile, signedFile, signingDate, + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.XADES); + } else { + // TODO da sistemare + ejb.errorFile(sessione, idFile, CdErr.ERROR_SIGNING.name(), + "File firmato differente da quello originale"); + } + } else { + // TODO da sistemare + ejb.errorFile(sessione, idFile, CdErr.ERROR_SIGNING.name(), + "File firmato non correttamente"); + } + } + } catch (AuthenticationException ex) { + logger.warn("The HSM credentials are wrong"); + codErr = CdErr.AUTH_WRONG; + throw ex; + } catch (OTPException ex) { + if (index == 0) { + logger.warn("The OTP is wrong"); + codErr = CdErr.OTP_WRONG; + } else { + logger.warn("The OTP is expired"); + codErr = CdErr.OTP_EXPIRED; + } + throw ex; + } catch (UserBlockedException ex) { + logger.warn("The user {} is blocked", user.getUsername()); + codErr = CdErr.USER_BLOCKED; + throw ex; + } catch (HSMException ex) { + /* + * LM 23/08/2017 Se il metodo di firma lancia questa eccezione invece che una di quelle soprastanti, + * bisogna controllare se "wrappa" correttamente le eccezioni provenienti dal HSM (vd documentazione + * su Wiki) + */ + throw ex; + } + } + + // Close sign session + try { + clientHsm.closeSignatureSession(hsmSession); + } catch (HSMException e) { + logger.error("Error during the closing of HSM session", e); + } + + boolean isOk = ejb.closeSessioneFirma(sessione); + + if (isOk) { + result = SigningResponse.OK; + } else { + result = SigningResponse.WARNING; + } + } catch (HSMException e_hsm) { + if (codErr != null) { + switch (codErr) { + case AUTH_WRONG: + result = SigningResponse.AUTH_WRONG; + break; + case OTP_WRONG: + result = SigningResponse.OTP_WRONG; + break; + case OTP_EXPIRED: + result = SigningResponse.OTP_EXPIRED; + break; + case USER_BLOCKED: + result = SigningResponse.USER_BLOCKED; + break; + case HSM_NOT_RESPOND: + case ERROR_SESSION_CREATION: + result = SigningResponse.HSM_ERROR; + break; + default: + break; + } + } else { + codErr = CdErr.UNKNOWN_ERROR; + } + ejb.errorSessioneFirma(sessione, codErr, e_hsm.getErrorDescription()); + } catch (Exception e) { + ejb.errorSessioneFirma(sessione, CdErr.UNKNOWN_ERROR); + logger.error("Errore imprevisto durante sessione di firma: ", e); + } finally { + // Cleans the user information: deletes password and otp values + user.cleanUser(); + } + + return new AsyncResult<>(result); + } + + // -------------------------------------------------------------------------------- + // MEV#15967 - Attivazione della firma Xades e XadesT + // -------------------------------------------------------------------------------- + } diff --git a/sacer-ejb/src/main/java/it/eng/parer/job/indiceAipSerieUd/ejb/ElaborazioneRigaIndiceAipVersioneSerieUd.java b/sacer-ejb/src/main/java/it/eng/parer/job/indiceAipSerieUd/ejb/ElaborazioneRigaIndiceAipVersioneSerieUd.java index 6361b17b..c6a687b9 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/job/indiceAipSerieUd/ejb/ElaborazioneRigaIndiceAipVersioneSerieUd.java +++ b/sacer-ejb/src/main/java/it/eng/parer/job/indiceAipSerieUd/ejb/ElaborazioneRigaIndiceAipVersioneSerieUd.java @@ -60,6 +60,9 @@ import it.eng.parer.job.indiceAipSerieUd.helper.CreazioneIndiceAipSerieUdHelper; import it.eng.parer.job.indiceAipSerieUd.utils.CreazioneIndiceAipSerieUdUtil; import it.eng.parer.job.indiceAipSerieUd.utils.CreazioneIndiceAipSerieUdUtilV2; +import it.eng.parer.objectstorage.dto.BackendStorage; +import it.eng.parer.objectstorage.dto.ObjectStorageResource; +import it.eng.parer.objectstorage.ejb.ObjectStorageService; import it.eng.parer.serie.ejb.SerieEjb; import it.eng.parer.serie.helper.SerieHelper; import it.eng.parer.web.helper.ConfigurationHelper; @@ -70,6 +73,8 @@ import it.eng.parer.ws.utils.CostantiDB; import it.eng.parer.ws.xml.usmainResp.IdCType; import it.eng.parer.ws.xml.usmainRespV2.PIndex; +import java.nio.charset.StandardCharsets; +import java.util.Base64; /** * @@ -98,6 +103,12 @@ public class ElaborazioneRigaIndiceAipVersioneSerieUd { private ParamIamHelper paramIamHelper; @EJB CreazioneIndiceAipSerieUdUtilV2 creazioneIndiceAipSerieUdUtilV2; + // MEV#30400 + @EJB + private ObjectStorageService objectStorageService; + + private static final String LOG_SALVATAGGIO_OS = "Salvato l'indice aip della seri su Object storage nel bucket {} con chiave {}! "; + // end MEV#30400 /* Ricavo i valori degli Agent dalla tabella APL_PARAM_APPLIC */ private static final List agentParam = Arrays.asList(AGENT_PRESERVER_FORMALNAME, AGENT_PRESERVER_TAXCODE, @@ -180,16 +191,50 @@ public void creaIndiceAipSerieUd(long idVerSerieDaElab, String creatingApplicati tmpWriter = marshallPIndex(pindex); } + + // MEV#30400 + + BackendStorage backendIndiciAip = objectStorageService.lookupBackendIndiciAipSerieUD(orgStrut.getIdStrut()); + + boolean putOnOs = true; + if (objectStorageService.isSerFileVerSerieUDOnOs(verSerieDaElab.getSerVerSerie().getIdVerSerie(), + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO.name())) { + String md5LocalContent = calculateMd5AsBase64(tmpWriter.toString()); + String eTagFromObjectMetadata = objectStorageService + .getObjectMetadataIndiceAipSerieUD(verSerieDaElab.getSerVerSerie().getIdVerSerie(), + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO.name()) + .eTag(); + + if (md5LocalContent.equals(eTagFromObjectMetadata)) { + putOnOs = false; + } + } + /* Persisto il file dell'indice AIP versione serie UD */ + // DATO CHE L'URN DEL FILE è SU UNA TABELLA SEPARATA SONO OBBLIGATO A CREARE SEMPRE IL RECORD SULLA + // SerFileVerSerie SerFileVerSerie serFileVerSerie = serieHelper.storeFileIntoSerFileVerSerie( verSerieDaElab.getSerVerSerie().getIdVerSerie(), CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO.name(), - tmpWriter.toString().getBytes("UTF-8"), sincroVersion, verSerieDaElab.getIdStrut(), dataRegistrazione); + tmpWriter.toString().getBytes("UTF-8"), sincroVersion, verSerieDaElab.getIdStrut(), dataRegistrazione, + putOnOs, null); // EVO#16492 /* Calcolo e persisto urn dell'indice AIP della serie */ serieHelper.storeSerUrnFileVerSerie(serFileVerSerie, csv, codiceSerie, versioneSerie); // end EVO#16492 + ObjectStorageResource indiceAipSuOS; + + if (putOnOs) { + indiceAipSuOS = objectStorageService.createResourcesInIndiciAipSerieUD(serFileVerSerie, + backendIndiciAip.getBackendName(), tmpWriter.toString().getBytes("UTF-8"), + verSerieDaElab.getSerVerSerie().getIdVerSerie(), verSerieDaElab.getIdStrut(), csv, codiceSerie, + versioneSerie); + log.debug(LOG_SALVATAGGIO_OS, indiceAipSuOS.getBucket(), indiceAipSuOS.getKey()); + } + + // end MEV#30400 + log.info(ElaborazioneRigaIndiceAipVersioneSerieUd.class.getSimpleName() + " --- Creazione Indice Aip Versione Serie Ud --- " + "Fine creazione XML indice AIP per la versione serie " @@ -236,6 +281,12 @@ public void creaIndiceAipSerieUd(long idVerSerieDaElab, String creatingApplicati verSerieDaElab.setTiStatoVerSerie(CostantiDB.StatoVersioneSerie.DA_FIRMARE.name()); } + // MEV#30400 + private String calculateMd5AsBase64(String str) { + return Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8)); + } + // end MEV#30400 + private StringWriter marshallIdC(IdCType idc) throws ValidationException, JAXBException, MarshalException { it.eng.parer.ws.xml.usmainResp.ObjectFactory objFct_IdCType = new it.eng.parer.ws.xml.usmainResp.ObjectFactory(); JAXBElement element_IdCType = objFct_IdCType.createIdC(idc); diff --git a/sacer-ejb/src/main/java/it/eng/parer/job/sigillo/ejb/SigilloEjb.java b/sacer-ejb/src/main/java/it/eng/parer/job/sigillo/ejb/SigilloEjb.java index ff20403d..0a87f201 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/job/sigillo/ejb/SigilloEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/job/sigillo/ejb/SigilloEjb.java @@ -51,6 +51,7 @@ import it.eng.parer.job.helper.JobHelper; import it.eng.parer.job.utils.JobConstants; import it.eng.parer.viewEntity.ElvVLisElencoVersStato; +import it.eng.parer.web.ejb.AmministrazioneEjb; import it.eng.parer.web.ejb.ElenchiVersamentoEjb; import it.eng.parer.web.helper.ConfigurationHelper; import it.eng.parer.web.helper.ElenchiVersamentoHelper; @@ -88,6 +89,9 @@ public class SigilloEjb { private SignerHsmEjb firmaHsmEjb; @EJB private UserHelper userHelper; + @EJB + private AmministrazioneEjb amministrazioneEjb; + @Resource private SessionContext context; @@ -173,7 +177,7 @@ private boolean processaElenchiPerAmbiente(BigDecimal idAmbiente, long idUserPer idAmbiente, idUserPerJob); // Passa al prossimo elenco da firmare } else { - sessioneDiFirma(l, user, passwd, otp, idUserPerJob, usernamePerJob); + sessioneDiFirma(l, user, passwd, otp, idUserPerJob, usernamePerJob, idAmbiente); } } } else { @@ -193,7 +197,7 @@ private void processaMarcaturaPerAmbiente(BigDecimal idAmbiente, long idUserPerJ } private void sessioneDiFirma(List l, String user, String passwd, String otp, - long idUserPerJob, String usernamePerJob) throws SigilloException { + long idUserPerJob, String usernamePerJob, BigDecimal idAmbiente) throws SigilloException { SigningRequest request = new SigningRequest(idUserPerJob); HSMUser userHSM = new HSMUser(user, passwd.toCharArray()); userHSM.setOTP(otp.toCharArray()); @@ -205,8 +209,26 @@ private void sessioneDiFirma(List l, String user, String */ context.getBusinessObject(SigilloEjb.class).registraStato(request, l, usernamePerJob); Future future = null; + try { - future = firmaHsmEjb.signP7M(request); + + // MEV#15967 - Attivazione della firma Xades e XadesT + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma = amministrazioneEjb + .getTipoFirmaPerAmbiente(idAmbiente); + switch (tipoFirma) { + case XADES: + future = firmaHsmEjb.signXades(request); + break; + case CADES: + future = firmaHsmEjb.signP7M(request); + break; + default: + future = firmaHsmEjb.signP7M(request); + break; + } + // + + // future = firmaHsmEjb.signP7M(request); SigningResponse response = null; try { // la get() blocca il Thread finché non ha finito di firmare... diff --git a/sacer-ejb/src/main/java/it/eng/parer/objectstorage/dto/RecuperoDocBean.java b/sacer-ejb/src/main/java/it/eng/parer/objectstorage/dto/RecuperoDocBean.java index b0c2ca9c..f94b631d 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/objectstorage/dto/RecuperoDocBean.java +++ b/sacer-ejb/src/main/java/it/eng/parer/objectstorage/dto/RecuperoDocBean.java @@ -46,6 +46,9 @@ public class RecuperoDocBean implements java.io.Serializable { // MEV#30395 MEV #30398 private TabellaClob tabellaClobDaLeggere; // end MEV#30395 MEV #30398 + // MEV#30400 + private String tiFile; // per distinguere i diversi tipi di file per una stessa versione + // end MEV#30400 public RecuperoDocBean(TiEntitaSacerObjectStorage tipo, long id, OutputStream os, TabellaBlob tabellaBlobDaLeggere) { @@ -65,6 +68,16 @@ public RecuperoDocBean(TiEntitaSacerObjectStorage tipo, long id, OutputStream os this.tabellaClobDaLeggere = tabellaClobDaLeggere; } + public RecuperoDocBean(TiEntitaSacerObjectStorage tipo, long id, OutputStream os, TabellaBlob tabellaBlobDaLeggere, + String tiFile) { + super(); + this.tipo = tipo; + this.id = id; + this.os = os; + this.tabellaBlobDaLeggere = tabellaBlobDaLeggere; + this.tiFile = tiFile; + } + /** * @return the id */ @@ -150,4 +163,19 @@ public String toString() { return "id=" + id + ", tipo=" + tipo + ", tabellaBlobDaLeggere=" + tabellaBlobDaLeggere; } + /** + * @return tiFile + */ + public String getTiFile() { + return tiFile; + } + + /** + * @param tiFile + * tipo file + */ + public void setTiFile(String tiFile) { + this.tiFile = tiFile; + } + } diff --git a/sacer-ejb/src/main/java/it/eng/parer/objectstorage/ejb/ObjectStorageService.java b/sacer-ejb/src/main/java/it/eng/parer/objectstorage/ejb/ObjectStorageService.java index 197e863d..b8af3aba 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/objectstorage/ejb/ObjectStorageService.java +++ b/sacer-ejb/src/main/java/it/eng/parer/objectstorage/ejb/ObjectStorageService.java @@ -51,7 +51,10 @@ import it.eng.parer.objectstorage.helper.SalvataggioBackendHelper; import it.eng.parer.entity.constraint.AroUpdDatiSpecUnitaDoc.TiEntitaAroUpdDatiSpecUnitaDoc; import it.eng.parer.entity.constraint.AroVersIniDatiSpec.TiEntitaSacerAroVersIniDatiSpec; +import it.eng.parer.ws.dto.CSVersatore; +import it.eng.parer.ws.utils.Costanti; import it.eng.parer.ws.utils.CostantiDB; +import it.eng.parer.ws.utils.MessaggiWSFormat; import java.io.InputStream; import java.math.BigDecimal; import java.nio.file.Files; @@ -115,6 +118,11 @@ public class ObjectStorageService { // end MEV#30399 private static final int BUFFER_SIZE = 10 * 1024 * 1024; + // MEV#30400 + private static final String WRITE_INDICI_AIP_SERIE_UD = "WRITE_INDICI_AIP_SERIE_UD"; + private static final String READ_INDICI_AIP_SERIE_UD = "READ_INDICI_AIP_SERIE_UD"; + // end MEV#30400 + @EJB private SalvataggioBackendHelper salvataggioBackendHelper; @@ -165,6 +173,29 @@ public BackendStorage lookupBackendElenchiIndiciAip(long idStrut) { } // end MEV#30397 + // MEV#30400 + /** + * Effettua la lookup per stabilire come sia configurato il backend per gli indici aip delle serie di ud + * + * @param idStrut + * id struttura + * + * @return tipologia di backend. + */ + public BackendStorage lookupBackendIndiciAipSerieUD(long idStrut) { + try { + String tipoBackend = salvataggioBackendHelper.getBackendIndiciAipSerieUD(idStrut); + + // tipo backend + return salvataggioBackendHelper.getBackend(tipoBackend); + + } catch (Exception e) { + // EJB spec (14.2.2 in the EJB 3) + throw new EJBException(e); + } + } + // end MEV#30400 + /** * Ottieni, in una mappa, la lista degli xml di versamento classificati nelle tipologie definite qui * {@link it.eng.parer.ws.utils.CostantiDB.TipiXmlDati} @@ -1448,4 +1479,99 @@ private byte[] getObjectFileElencoIxAipFasc(ElvFileElencoVersFascObjectStorage f // end MEV#30399 + // MEV#30400 + + public ObjectStorageResource createResourcesInIndiciAipSerieUD(SerFileVerSerie serFileVerSerie, String nomeBackend, + byte[] blob, long idVerSerie, BigDecimal idStrut, CSVersatore versatore, String codiceSerie, + String versioneSerie) { + try { + ObjectStorageBackend configuration = salvataggioBackendHelper.getObjectStorageConfiguration(nomeBackend, + WRITE_INDICI_AIP_SERIE_UD); + + // generate std tag + Set tags = new HashSet<>(); + + final String destKey = salvataggioBackendHelper.generateKeyIndiceAipSerieUD(serFileVerSerie, versatore, + codiceSerie, versioneSerie); + + // put on O.S. + ObjectStorageResource savedFile = salvataggioBackendHelper.putObject( + new String(blob, StandardCharsets.UTF_8), destKey, configuration, Optional.empty(), + Optional.of(tags), Optional.of(calculateMd5AsBase64(new String(blob, StandardCharsets.UTF_8)))); + + log.debug("Salvato file {}/{}", savedFile.getBucket(), savedFile.getKey()); + // link + if (!salvataggioBackendHelper.existIndiceAipSerieUDObjectStorage(idVerSerie, + serFileVerSerie.getTiFileVerSerie())) { + salvataggioBackendHelper.saveObjectStorageLinkIndiceAipSerieUd(savedFile, nomeBackend, idVerSerie, + idStrut, serFileVerSerie.getTiFileVerSerie()); + } + return savedFile; + } catch (ObjectStorageException ex) { + + throw new EJBException(ex); + } + } + + /** + * Controlla se l'indice aip sia o meno stato registrato sull'object storage indipendemente dal valore del parametro + * (il pregresso potrebbe ancora essere su DB). + * + * @param idVerSerie + * id versione indice aip + * + * @param tiFileVerSerie + * tipo file della versione dell'indice aip + * + * @return true se su O.s false altrimenti + */ + public boolean isSerFileVerSerieUDOnOs(long idVerSerie, String tiFileVerSerie) { + try { + return salvataggioBackendHelper.existIndiceAipSerieUDObjectStorage(idVerSerie, tiFileVerSerie); + } catch (ObjectStorageException e) { + // EJB spec (14.2.2 in the EJB 3) + throw new EJBException(e); + } + } + + /** + * Ottieni i metadati dell'oggetto dell'indice aip della serie ud contenuto nell'object storage + * + * @param idVerSerieUd + * id della versione dell'indice aip + * @param tiFileVerSerie + * tipo file versione serie + * + * @return attributi dell'oggetto su O.s. + */ + public HeadObjectResponse getObjectMetadataIndiceAipSerieUD(long idVerSerieUd, String tiFileVerSerie) { + try { + SerVerSerieObjectStorage link = salvataggioBackendHelper.getLinkSerVerSerieOs(idVerSerieUd, tiFileVerSerie); + ObjectStorageBackend config = salvataggioBackendHelper + .getObjectStorageConfiguration(link.getDecBackend().getNmBackend(), READ_INDICI_AIP_SERIE_UD); + return salvataggioBackendHelper.getObjectMetadata(config, link.getNmBucket(), link.getCdKeyFile()); + } catch (ObjectStorageException e) { + + // EJB spec (14.2.2 in the EJB 3) + throw new EJBException(e); + } + } + + public void getSerVerSerieObjectStorage(long idVerSerieUd, String tiFileVerSerie, OutputStream outputStream) + throws ObjectStorageException { + try { + SerVerSerieObjectStorage link = salvataggioBackendHelper.getLinkSerVerSerieOs(idVerSerieUd, tiFileVerSerie); + ObjectStorageBackend config = salvataggioBackendHelper + .getObjectStorageConfiguration(link.getDecBackend().getNmBackend(), READ_INDICI_AIP_SERIE_UD); + ResponseInputStream object = salvataggioBackendHelper.getObject(config, + link.getNmBucket(), link.getCdKeyFile()); + IOUtils.copy(object, outputStream); + } catch (IOException | ObjectStorageException e) { + // EJB spec (14.2.2 in the EJB 3) + throw new EJBException(e); + } + } + + // end MEV#30400 + } diff --git a/sacer-ejb/src/main/java/it/eng/parer/objectstorage/helper/SalvataggioBackendHelper.java b/sacer-ejb/src/main/java/it/eng/parer/objectstorage/helper/SalvataggioBackendHelper.java index 87d265a5..5b1a7766 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/objectstorage/helper/SalvataggioBackendHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/objectstorage/helper/SalvataggioBackendHelper.java @@ -68,6 +68,9 @@ import it.eng.parer.entity.FasXmlVersFascObjectStorage; import it.eng.parer.entity.FirReport; import it.eng.parer.entity.OrgStrut; +import it.eng.parer.entity.SerFileVerSerie; +import it.eng.parer.entity.SerVerSerie; +import it.eng.parer.entity.SerVerSerieObjectStorage; import it.eng.parer.entity.VrsFileSesObjectStorageKo; import it.eng.parer.entity.VrsXmlDatiSesObjectStorageKo; import it.eng.parer.entity.VrsXmlSesFascErrObjectStorage; @@ -85,8 +88,13 @@ import it.eng.parer.objectstorage.ejb.AwsPresigner; import it.eng.parer.objectstorage.exceptions.ObjectStorageException; import it.eng.parer.web.helper.ConfigurationHelper; +import it.eng.parer.ws.dto.CSVersatore; +import it.eng.parer.ws.utils.Costanti; import it.eng.parer.ws.utils.Costanti.AwsConstants; +import it.eng.parer.ws.utils.CostantiDB; import it.eng.parer.ws.utils.CostantiDB.ParametroAppl; +import it.eng.parer.ws.utils.MessaggiWSFormat; +import java.text.MessageFormat; import java.io.InputStream; import software.amazon.awssdk.awscore.exception.AwsServiceException; import software.amazon.awssdk.core.ResponseInputStream; @@ -113,9 +121,17 @@ public class SalvataggioBackendHelper { private static final String NO_PARAMETER = "Impossibile ottenere il parametro {0}"; private static final String LOG_MESSAGE_NO_SAVED = "Impossibile salvare il link dell'oggetto su DB"; private static final String ID_COMP_DOC = "idCompDoc"; + private static final String ID_VER_SERIE = "idVerSerie"; + private static final String TI_FILE_VER_SERIE = "tiFileVerSerie"; + + public static final String URN_INDICE_AIP_SERIE_UD_NON_FIRMATI_FMT_STRING = "{0}/IndiceAIP-SE-{1}-NonFirmato"; + public static final String URN_INDICE_AIP_SERIE_UD_MARCA_FMT_STRING = "{0}:IndiceAIP-SE-{1}:Indice-Marca"; + public static final String URN_INDICE_AIP_SERIE_UD_FIR_FMT_STRING = "{0}:IndiceAIP-SE-{1}"; private static final String NOME_BACKEND_PARAMETER = "nomeBackend"; + private static final String TIPO_USO_OS_PARAMETER = "tipoUsoOs"; + @EJB protected SalvataggioBackendHelper me; @@ -199,6 +215,34 @@ public String getBackendElenchiIndiciAip(long idStrut) throws ObjectStorageExcep } // end MEV#30397 + // MEV#30400 + /** + * Ottieni la configurazione applicativa relativa alla tipologia di Backend per il salvataggio degli indici aip di + * serie di ud + * + * @param idStrut + * id struttura + * + * @return configurazione del backend. Può essere, per esempio OBJECT_STORAGE_STAGING oppure DATABASE_PRIMARIO + * + * @throws ObjectStorageException + * in caso di errore di recupero del parametro + */ + public String getBackendIndiciAipSerieUD(long idStrut) throws ObjectStorageException { + try { + OrgStrut strut = entityManager.find(OrgStrut.class, idStrut); + + long idAmbiente = strut.getOrgEnte().getOrgAmbiente().getIdAmbiente(); + return configurationHelper.getValoreParamApplicByStrut(ParametroAppl.BACKEND_INDICI_AIP_SERIE_UD, + BigDecimal.valueOf(idAmbiente), BigDecimal.valueOf(idStrut)); + + } catch (ParamApplicNotFoundException | IllegalArgumentException e) { + throw ObjectStorageException.builder().message(NO_PARAMETER, ParametroAppl.BACKEND_INDICI_AIP_SERIE_UD) + .cause(e).build(); + } + } + // end MEV#30400 + public DecBackend getBackendEntity(String nomeBackend) { TypedQuery query = entityManager .createQuery("Select d from DecBackend d where d.nmBackend = :nomeBackend", DecBackend.class); @@ -831,7 +875,8 @@ public ObjectStorageBackend getObjectStorageConfiguration(final String nomeBacke TypedQuery query = entityManager.createQuery( "Select c from DecConfigObjectStorage c where c.tiUsoConfigObjectStorage = :tipoUsoOs and c.decBackend.nmBackend = :nomeBackend order by c.nmConfigObjectStorage", DecConfigObjectStorage.class); - query.setParameter("tipoUsoOs", tipoUsoOs).setParameter(NOME_BACKEND_PARAMETER, nomeBackend); + query.setParameter(TIPO_USO_OS_PARAMETER, tipoUsoOs); + query.setParameter(NOME_BACKEND_PARAMETER, nomeBackend); List resultList = query.getResultList(); String bucket = null; String nomeSystemPropertyAccessKeyId = null; @@ -1770,4 +1815,148 @@ public ElvFileElencoVersFascObjectStorage getLinkElvFileElencoVersFascOs(long id // end MEV #30399 + // MEV#30400 + + /** + * Effettua il salvataggio del collegamento tra la versione dell'indice aip della seire dell'ud e la chiave + * sull'object storage + * + * @param object + * informazioni dell'oggetto salvato + * @param nmBackend + * nome del backend (di tipo OS) su cui è stato salvato + * @param idVerSerie + * id versione indice aip serie ud + * @param idStrut + * id struttura + * @param tiFileVerSerie + * tipo file versione serie + * + * @throws ObjectStorageException + * in caso di errore + */ + public void saveObjectStorageLinkIndiceAipSerieUd(ObjectStorageResource object, String nmBackend, long idVerSerie, + BigDecimal idStrut, String tiFileVerSerie) throws ObjectStorageException { + try { + DecBackend decBackend = me.getBackendEntity(nmBackend); + SerVerSerie serVerSerie = entityManager.find(SerVerSerie.class, idVerSerie); + + SerVerSerieObjectStorage osLink = new SerVerSerieObjectStorage(); + osLink.setSerVerSerie(serVerSerie); + + osLink.setIdStrut(idStrut); + + osLink.setCdKeyFile(object.getKey()); + osLink.setNmBucket(object.getBucket()); + osLink.setNmTenant(object.getTenant()); + osLink.setTiFileVerSerie(tiFileVerSerie); + + osLink.setDecBackend(decBackend); + entityManager.persist(osLink); + + } catch (Exception e) { + throw ObjectStorageException.builder().message(LOG_MESSAGE_NO_SAVED).cause(e).build(); + } + } + + public String generateKeyIndiceAipSerieUD(SerFileVerSerie serFileVerSerie, CSVersatore versatore, + String codiceSerie, String versioneSerie) throws ObjectStorageException { + try { + + String tmpUrnNorm = MessaggiWSFormat.formattaBaseUrnSerie( + MessaggiWSFormat.formattaUrnPartVersatore(versatore, true, Costanti.UrnFormatter.VERS_FMT_STRING), + codiceSerie); + + String fmt = null; + + switch (serFileVerSerie.getTiFileVerSerie()) { + case "MARCA_IX_AIP_UNISINCRO": + fmt = URN_INDICE_AIP_SERIE_UD_MARCA_FMT_STRING; + break; + case "IX_AIP_UNISINCRO": + fmt = URN_INDICE_AIP_SERIE_UD_NON_FIRMATI_FMT_STRING; + break; + case "IX_AIP_UNISINCRO_FIRMATO": + fmt = URN_INDICE_AIP_SERIE_UD_FIR_FMT_STRING; + break; + + } + return createKeyIndiciAipSerieUd(fmt, tmpUrnNorm, versioneSerie); + + } catch (Exception e) { + throw ObjectStorageException.builder().message("Impossibile generare la chiave del componente").cause(e) + .build(); + } + } + + private String createKeyIndiciAipSerieUd(String fmt, String urnBase, String versioneSerie) { + return MessageFormat.format(fmt, urnBase, versioneSerie); + } + + /** + * Restitusce un boolean per la verifica del "link" verso object storage + * + * @param idVerSerie + * id versione indice aip di serie ud + * + * @param tiFileVerSerie + * tipo file della versione dell'indice aip + * + * @return boolean true se effettivamente presente su object storage / false altrimenti + * + * @throws ObjectStorageException + * eccezione generica + */ + public boolean existIndiceAipSerieUDObjectStorage(long idVerSerie, String tiFileVerSerie) + throws ObjectStorageException { + try { + TypedQuery query = entityManager.createQuery( + "Select count(ix_aip_os) from SerVerSerieObjectStorage ix_aip_os where ix_aip_os.serVerSerie.idVerSerie = :idVerSerie and ix_aip_os.tiFileVerSerie = :tiFileVerSerie", + Long.class); + query.setParameter("idVerSerie", idVerSerie); + query.setParameter("tiFileVerSerie", tiFileVerSerie); + Long result = query.getSingleResult(); + return result > 0; + } catch (NonUniqueResultException e) { + throw ObjectStorageException.builder() + .message("Errore verifica presenza SerVerSerieObjectStorage per id versione indice aip {0} ", + idVerSerie) + .cause(e).build(); + } + } + + /** + * Ottieni il collegamento tra l'indice aip della serie e il suo bucket/chiave su OS. + * + * @param idVerSerie + * id dellindice aip della serie * + * @param tiFileVerSerie + * tipo file della versione + * + * @return record contenete il link + * + * @throws ObjectStorageException + * in caso di errore + */ + public SerVerSerieObjectStorage getLinkSerVerSerieOs(long idVerSerie, String tiFileVerSerie) + throws ObjectStorageException { + try { + TypedQuery query = entityManager.createQuery( + "select t from SerVerSerieObjectStorage t where t.serVerSerie.idVerSerie = :idVerSerie " + + "AND t.tiFileVerSerie = :tiFileVerSerie", + SerVerSerieObjectStorage.class); + query.setParameter(ID_VER_SERIE, idVerSerie); + query.setParameter(TI_FILE_VER_SERIE, tiFileVerSerie); + return query.getSingleResult(); + + } catch (NonUniqueResultException e) { + throw ObjectStorageException.builder().message( + "Errore durante il recupero da SerVerSerieObjectStorage per id_ver_serie {0} e ti_file_ver_serie {1}", + idVerSerie, tiFileVerSerie).cause(e).build(); + } + + } + + // end mev#30400 + } diff --git a/sacer-ejb/src/main/java/it/eng/parer/restArch/ejb/RestituzioneArchivioEjb.java b/sacer-ejb/src/main/java/it/eng/parer/restArch/ejb/RestituzioneArchivioEjb.java index bbaa05d3..327a1fa8 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/restArch/ejb/RestituzioneArchivioEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/restArch/ejb/RestituzioneArchivioEjb.java @@ -17,6 +17,8 @@ package it.eng.parer.restArch.ejb; +import it.eng.parer.amministrazioneStrutture.gestioneStrutture.ejb.StruttureEjb; +import it.eng.parer.amministrazioneStrutture.gestioneStrutture.helper.AmbientiHelper; import static it.eng.parer.util.Utils.createEmptyDir; import java.io.IOException; @@ -52,9 +54,13 @@ import it.eng.parer.entity.constraint.AroRichiestaRa.AroRichiestaTiStato; import it.eng.parer.exception.ParerUserError; import it.eng.parer.grantedEntity.SIOrgEnteSiam; +import it.eng.parer.grantedEntity.SIUsrOrganizIam; import it.eng.parer.restArch.dto.RicercaRichRestArchBean; import it.eng.parer.restArch.helper.RestituzioneArchivioHelper; import it.eng.parer.slite.gen.tablebean.AroRichiestaRaRowBean; +import it.eng.parer.slite.gen.tablebean.OrgAmbienteRowBean; +import it.eng.parer.slite.gen.tablebean.OrgEnteRowBean; +import it.eng.parer.slite.gen.tablebean.OrgStrutRowBean; import it.eng.parer.slite.gen.viewbean.AroVLisItemRaRowBean; import it.eng.parer.slite.gen.viewbean.AroVLisItemRaTableBean; import it.eng.parer.slite.gen.viewbean.AroVRicRichRaRowBean; @@ -62,6 +68,7 @@ import it.eng.parer.viewEntity.AroVChkRaUd; import it.eng.parer.viewEntity.AroVLisItemRa; import it.eng.parer.viewEntity.AroVRicRichRa; +import it.eng.parer.viewEntity.OrgVRicOrganizRestArch; import it.eng.parer.web.helper.ConfigurationHelper; import it.eng.parer.web.util.Transform; import it.eng.parer.ws.utils.CostantiDB; @@ -83,6 +90,10 @@ public class RestituzioneArchivioEjb { private RestituzioneArchivioHelper helper; @EJB private ConfigurationHelper configurationHelper; + @EJB + private StruttureEjb struttureEjb; + @EJB + private AmbientiHelper ambientiHelper; @PersistenceContext(unitName = "ParerJPA") private EntityManager entityManager; @@ -107,10 +118,30 @@ public AroVChkRaUd retrieveChkRaUnitaDoc(BigDecimal idStrut) throws IOException public List retrieveChkRaUnitaDocList(BigDecimal idStrut) { // ricavo la struttura - OrgStrut struttura = helper.findById(OrgStrut.class, idStrut); - return helper.retrieveAroVChkRaUdList(struttura.getIdEnteConvenz()); + SIUsrOrganizIam organiz = ambientiHelper.getSIUsrOrganizIam(idStrut); + BigDecimal idEnteConvenz = helper.getIdEnteConvenzDaConsiderare(BigDecimal.valueOf(organiz.getIdOrganizIam())); + return helper.retrieveAroVChkRaUdList(idEnteConvenz); } + // MEV #32535 + public List retrieveOrgVRcOrganizRestArchList(BigDecimal idStrut) { + // ricavo la struttura + SIUsrOrganizIam organiz = ambientiHelper.getSIUsrOrganizIam(idStrut); + BigDecimal idEnteConvenz = helper.getIdEnteConvenzDaConsiderare(BigDecimal.valueOf(organiz.getIdOrganizIam())); + return helper.retrieveOrgVRicOrganizRestArchList(idEnteConvenz); + } + + public String getStrutturaDaOrganizIam(BigDecimal idOrganizIam) { + // ricavo l'organizzazione iam + SIUsrOrganizIam organizIam = helper.findById(SIUsrOrganizIam.class, idOrganizIam); + OrgStrutRowBean strutRB = struttureEjb.getOrgStrutRowBean(BigDecimal.valueOf(organizIam.getIdOrganizApplic())); + OrgEnteRowBean enteRB = struttureEjb.getOrgEnteRowBean(strutRB.getIdEnte()); + OrgAmbienteRowBean ambienteRB = struttureEjb.getOrgAmbienteRowBean(enteRB.getIdAmbiente()); + return ambienteRB.getNmAmbiente() + " / " + enteRB.getNmEnte() + " / " + strutRB.getNmStrut(); + } + + // end MEV #32535 + /** * Verifica l'esistenza e i permessi in lettura/scrittura delle cartelle per l’estrazione degli AIP * @@ -493,6 +524,37 @@ public AroVLisItemRaTableBean getAroVLisItemRaTableBean(BigDecimal idRichRestArc return table; } + /** + * Recupera la lista di item all'interno di una richiesta di restituzione archivio di una determinata struttura + * + * @param idRichRestArch + * l'id richiesta restituzione archivio + * @param idStrut + * la struttura specifica della richiesta + * + * @return il tablebean di item + */ + public AroVLisItemRaTableBean getAroVLisItemRaFmTableBean(BigDecimal idRichRestArch, BigDecimal idStrut) { + AroVLisItemRaTableBean table = new AroVLisItemRaTableBean(); + List list = helper.getAroVLisItemRaFmList(idRichRestArch, idStrut); + if (list != null && !list.isEmpty()) { + try { + for (AroVLisItemRa richiesta : list) { + AroVLisItemRaRowBean row = (AroVLisItemRaRowBean) Transform.entity2RowBean(richiesta); + table.add(row); + } + } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException ex) { + logger.error( + "Errore durante il recupero della lista di item della richiesta di restituzione archivio {}", + ExceptionUtils.getRootCauseMessage(ex), ex); + throw new IllegalStateException( + "Errore durante il recupero della lista di item della richiesta di restituzione archivio"); + } + } + return table; + } + /** * Esegue il controllo degli item della richiesta data come parametro * diff --git a/sacer-ejb/src/main/java/it/eng/parer/restArch/helper/RestituzioneArchivioHelper.java b/sacer-ejb/src/main/java/it/eng/parer/restArch/helper/RestituzioneArchivioHelper.java index 2a5b02e1..3660db32 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/restArch/helper/RestituzioneArchivioHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/restArch/helper/RestituzioneArchivioHelper.java @@ -41,6 +41,7 @@ import it.eng.parer.viewEntity.AroVChkRaUd; import it.eng.parer.viewEntity.AroVLisItemRa; import it.eng.parer.viewEntity.AroVRicRichRa; +import it.eng.parer.viewEntity.OrgVRicOrganizRestArch; import it.eng.parer.web.util.Constants; /** @@ -261,6 +262,54 @@ public List getAroVLisItemRa(BigDecimal idRichRestArch, BigDecima return query.getResultList(); } + /** + * Recupera l'elenco di item all'interno della struttura idStrut di una determinata richiesta + * idRichiestaRa + * + * @param idRichRestArch + * l'identificativo della richiesta + * @param idStrut + * l'id della struttura + * + * @return lista oggetti di tipo {@link Object[]} + */ + public List getAroVLisItemRaFm(BigDecimal idRichRestArch, BigDecimal idStrut) { + Query query = getEntityManager().createNativeQuery( + "SELECT DISTINCT a.id_Richiesta, a.id_Strut, a.anno, a.tot_Ud, a.num_Aip, a.dimensione, a.num_Docs, a.num_Errori, " + + "a.num_Estratti, a.avanzamento" + + " FROM Aro_V_Lis_Item_Ra_Fm(:idRichRestArch, :idStrut) a ORDER BY a.anno"); + query.setParameter("idRichRestArch", idRichRestArch); + query.setParameter("idStrut", idStrut); + return query.getResultList(); + } + + public List getAroVLisItemRaFmList(BigDecimal idRichRestArch, BigDecimal idStrut) { + List obList = getAroVLisItemRaFm(idRichRestArch, idStrut); + return getAroVLisItemRaList(obList); + } + + public List getAroVLisItemRaList(List objList) { + List itemList = new ArrayList<>(); + for (Object[] obj : objList) { + BigDecimal idRichiestaRa = (BigDecimal) obj[0]; + BigDecimal idStrut = (BigDecimal) obj[1]; + BigDecimal anno = (BigDecimal) obj[2]; + BigDecimal totUd = (BigDecimal) obj[3]; + BigDecimal numAip = (BigDecimal) obj[4]; + BigDecimal dimensione = (BigDecimal) obj[5]; + BigDecimal numDocs = (BigDecimal) obj[6]; + BigDecimal numErrori = (BigDecimal) obj[7]; + BigDecimal numEstratti = (BigDecimal) obj[8]; + BigDecimal avanzamento = (BigDecimal) obj[9]; + + AroVLisItemRa item = new AroVLisItemRa(idRichiestaRa, idStrut, anno, totUd, numAip, dimensione, numDocs, + numErrori, numEstratti, avanzamento); + itemList.add(item); + } + + return itemList; + } + public Long countAroItemRichRestArch(BigDecimal idRichRestArch, TiStatoAroAipRa... tiStato) { List statiList = Arrays.asList(tiStato); StringBuilder queryStr = new StringBuilder( @@ -329,4 +378,23 @@ public List retrieveAroVChkRaUdList(BigDecimal idEnteConvenz) { List list = q.getResultList(); return list; } + + // MEV #32535 + public List retrieveOrgVRicOrganizRestArchList(BigDecimal idEnteConvenz) { + Query q = getEntityManager().createQuery( + "SELECT vista FROM OrgVRicOrganizRestArch vista " + "WHERE vista.idEnteConvenz = :idEnteConvenz "); + q.setParameter("idEnteConvenz", idEnteConvenz); + List list = q.getResultList(); + return list; + } + + public BigDecimal getIdEnteConvenzDaConsiderare(BigDecimal idOrganizIam) { + Query q = getEntityManager().createQuery("SELECT vista.idEnteConvenz FROM OrgVRicOrganizRestArch vista " + + "WHERE vista.idOrganizIam = :idOrganizIam ORDER BY vista.dtIniVal DESC"); + q.setParameter("idOrganizIam", idOrganizIam); + List list = q.getResultList(); + return (BigDecimal) list.get(0); + } + + // end MEV #32535 } diff --git a/sacer-ejb/src/main/java/it/eng/parer/serie/ejb/SerieEjb.java b/sacer-ejb/src/main/java/it/eng/parer/serie/ejb/SerieEjb.java index d84990fc..c56bc8b1 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/serie/ejb/SerieEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/serie/ejb/SerieEjb.java @@ -68,6 +68,7 @@ import it.eng.parer.common.signature.Digest; import it.eng.parer.crypto.model.ParerTST; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; import it.eng.parer.entity.AroUdAppartVerSerie; import it.eng.parer.entity.AroUnitaDoc; import it.eng.parer.entity.DecCampoInpUd; @@ -112,6 +113,11 @@ import it.eng.parer.job.indiceAip.ejb.ElaborazioneRigaIndiceAipDaElab; import it.eng.parer.job.indiceAipSerieUd.helper.CreazioneIndiceAipSerieUdHelper; import it.eng.parer.job.utils.JobConstants; +import it.eng.parer.objectstorage.dto.BackendStorage; +import it.eng.parer.objectstorage.dto.ObjectStorageResource; +import it.eng.parer.objectstorage.dto.RecuperoDocBean; +import it.eng.parer.objectstorage.ejb.ObjectStorageService; +import it.eng.parer.objectstorage.exceptions.ObjectStorageException; import it.eng.parer.serie.dto.CampiInputBean; import it.eng.parer.serie.dto.CreazioneSerieBean; import it.eng.parer.serie.dto.IntervalliSerieAutomBean; @@ -181,19 +187,24 @@ import it.eng.parer.viewEntity.SerVVisErrFileSerieUd; import it.eng.parer.viewEntity.SerVVisSerieUd; import it.eng.parer.viewEntity.SerVVisVolVerSerieUd; +import it.eng.parer.web.ejb.AmministrazioneEjb; import it.eng.parer.web.helper.ConfigurationHelper; import it.eng.parer.web.helper.UserHelper; import it.eng.parer.web.util.Constants; import it.eng.parer.web.util.Transform; import it.eng.parer.web.util.XmlPrettyPrintFormatter; import it.eng.parer.ws.dto.CSVersatore; +import it.eng.parer.ws.ejb.RecuperoDocumento; +import it.eng.parer.ws.recupero.ejb.oracleBlb.RecBlbOracle; import it.eng.parer.ws.utils.CostantiDB; import it.eng.parer.ws.utils.CostantiDB.TipoCreazioneSerie; import it.eng.parer.ws.utils.CostantiDB.TipoFileVerSerie; import it.eng.spagoLite.db.base.row.BaseRow; import it.eng.spagoLite.db.base.table.BaseTable; import it.eng.spagoLite.message.MessageBox; +import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; +import java.util.logging.Level; /** * @@ -225,6 +236,20 @@ public class SerieEjb { private ConfigurationHelper configurationHelper; @EJB private UserHelper userHelper; + @EJB + private AmministrazioneEjb amministrazioneEjb; + + // MEV#30400 + @EJB + private ObjectStorageService objectStorageService; + + private static final String LOG_SALVATAGGIO_OS = "Salvato l'indice aip della serie su Object storage nel bucket {} con chiave {}! "; + + @EJB(mappedName = "java:app/Parer-ejb/RecuperoDocumento") + private RecuperoDocumento recuperoDocumento; + + private static final String ECCEZIONE_RECUPERO_INDICE_AIP = "Errore non gestito nel recupero del file"; + // end MEV#30400 public static final String CD_SERIE_REGEX = "[A-Za-z0-9\\.\\-\\_\\:]+"; public static final Pattern CD_SERIE_PATTERN = Pattern.compile(CD_SERIE_REGEX); @@ -1755,11 +1780,45 @@ public SerVVisSerieUdRowBean getSerVVisSerieUdRowBean(BigDecimal idVerSerie) { if (serie != null) { try { row = (SerVVisSerieUdRowBean) Transform.entity2RowBean(serie); + + // MEV#15967 - Attivazione della firma Xades e XadesT + SerFileVerSerie fi = helper.getFileVerSerieByTipoFile(idVerSerie, + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO); + if (fi != null) { + row.setString("ti_firma", fi.getTiFirma()); + } + // + + XmlPrettyPrintFormatter formatter = new XmlPrettyPrintFormatter(); + if (StringUtils.isNotBlank(row.getBlFileIxAip())) { - XmlPrettyPrintFormatter formatter = new XmlPrettyPrintFormatter(); + String xmlFormatted = formatter .prettyPrintWithDOM3LS(new String(serie.getBlFileIxAip(), Charset.forName("UTF-8"))); row.setBlFileIxAip(xmlFormatted); + } else { + // MEV#30400 + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + // recupero documento blob vs obj storage + // build dto per recupero + RecuperoDocBean csRecuperoDoc = new RecuperoDocBean( + Constants.TiEntitaSacerObjectStorage.INDICE_AIP_SERIE, row.getIdVerSerie().longValue(), + baos, RecBlbOracle.TabellaBlob.SER_FILE_VER_SERIE, + TipoFileVerSerie.IX_AIP_UNISINCRO.name()); + // recupero + boolean esitoRecupero = recuperoDocumento.callRecuperoDocSuStream(csRecuperoDoc); + if (!esitoRecupero) { + throw new IOException(ECCEZIONE_RECUPERO_INDICE_AIP); + } + String xmlIndice = formatter + .prettyPrintWithDOM3LS(baos.toString(StandardCharsets.UTF_8.displayName())); + row.setBlFileIxAip(xmlIndice); + } catch (IOException ex) { + logger.error("Errore durante il recupero dell'indice aip della serie con id = " + + row.getIdSerie() + " " + ExceptionUtils.getRootCauseMessage(ex), ex); + } + // end MEV#30400 } // EVO#16486 // Per ogni urn, popolo i campi urn originale e urn normalizzato, ricavandoli da @@ -5303,9 +5362,25 @@ public boolean existsFirmataNoMarca(BigDecimal idStrut) { */ public byte[] getSerFileVerSerieBlob(long idVerSerie, TipoFileVerSerie tiFileVerSerie) { byte[] result = null; - SerFileVerSerie fileVerSerie = helper.getSerFileVerSerie(idVerSerie, tiFileVerSerie.name()); - if (fileVerSerie != null) { - result = fileVerSerie.getBlFile(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + + // recupero documento blob vs obj storage + // build dto per recupero + RecuperoDocBean csRecuperoDoc = new RecuperoDocBean(Constants.TiEntitaSacerObjectStorage.INDICE_AIP_SERIE, + idVerSerie, os, RecBlbOracle.TabellaBlob.SER_FILE_VER_SERIE, tiFileVerSerie.name()); + // recupero + boolean esitoRecupero = recuperoDocumento.callRecuperoDocSuStream(csRecuperoDoc); + + if (esitoRecupero) { + result = os.toByteArray(); + } + try { + os.flush(); + os.close(); + } catch (IOException ex) { + String messaggio = "Eccezione imprevista nell'ottenimento del file da scaricare"; + messaggio += ExceptionUtils.getRootCauseMessage(ex); + logger.error(messaggio, ex); } return result; } @@ -5361,9 +5436,10 @@ public byte[] getSerFileVerSerieHash(long idVerSerie, TipoFileVerSerie tiFileVer } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public void storeFirma(Long idVerSerie, byte[] fileFirmato, long idUtente) throws ParerUserError { + public void storeFirma(Long idVerSerie, byte[] fileFirmato, long idUtente, ElencoEnums.TipoFirma tipoFirma) + throws ParerUserError { try { - this.storeFirmaNoTransaction(idVerSerie, fileFirmato, idUtente); + this.storeFirmaNoTransaction(idVerSerie, fileFirmato, idUtente, tipoFirma); } catch (Exception e) { /* * Perché richiamato da interfaccia -> si gestisce l'errore utente su front-end @@ -5373,11 +5449,13 @@ public void storeFirma(Long idVerSerie, byte[] fileFirmato, long idUtente) throw } @TransactionAttribute(TransactionAttributeType.MANDATORY) - public void storeFirmaMandatoryTransaction(Long idVerSerie, byte[] fileFirmato, long idUtente) throws Exception { - this.storeFirmaNoTransaction(idVerSerie, fileFirmato, idUtente); + public void storeFirmaMandatoryTransaction(Long idVerSerie, byte[] fileFirmato, long idUtente, + ElencoEnums.TipoFirma tipoFirma) throws Exception { + this.storeFirmaNoTransaction(idVerSerie, fileFirmato, idUtente, tipoFirma); } - private void storeFirmaNoTransaction(Long idVerSerie, byte[] fileFirmato, long idUtente) throws Exception { + private void storeFirmaNoTransaction(Long idVerSerie, byte[] fileFirmato, long idUtente, + ElencoEnums.TipoFirma tipoFirma) throws Exception { SerVerSerieDaElab verSerieDaElab = helper.getSerVerSerieDaElabByIdVerSerie(idVerSerie); /* LOCCO SER_SERIE E SER_VER_SERIE */ SerVerSerie verSerie = helper.findByIdWithLock(SerVerSerie.class, idVerSerie); @@ -5399,16 +5477,47 @@ private void storeFirmaNoTransaction(Long idVerSerie, byte[] fileFirmato, long i String codiceSerie = verSerieDaElab.getSerVerSerie().getSerSerie().getCdCompositoSerie(); // Ricavo lo stesso cdVerXsdFile del file unisincro String cdVerXsdFile = verSerieDaElab.getSerVerSerie().getSerFileVerSeries().get(0).getCdVerXsdFile(); + + // MEV#30400 + + BackendStorage backendIndiciAip = objectStorageService.lookupBackendIndiciAipSerieUD( + verSerieDaElab.getSerVerSerie().getSerSerie().getOrgStrut().getIdStrut()); + + boolean putOnOs = true; + if (objectStorageService.isSerFileVerSerieUDOnOs(verSerieDaElab.getSerVerSerie().getIdVerSerie(), + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO.name())) { + String md5LocalContent = calculateMd5AsBase64(new String(fileFirmato, StandardCharsets.UTF_8)); + String eTagFromObjectMetadata = objectStorageService + .getObjectMetadataIndiceAipSerieUD(verSerieDaElab.getSerVerSerie().getIdVerSerie(), + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO.name()) + .eTag(); + + if (md5LocalContent.equals(eTagFromObjectMetadata)) { + putOnOs = false; + } + } + /* Registra nella tabella SER_FILE_VER_SERIE */ SerFileVerSerie serFileVerSerie = helper.storeFileIntoSerFileVerSerie(idVerSerie, CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO.name(), fileFirmato, cdVerXsdFile, - verSerieDaElab.getIdStrut(), new Date()); + verSerieDaElab.getIdStrut(), new Date(), putOnOs, tipoFirma); // EVO#16492 /* Calcolo e persisto urn dell'indice AIP firmato della serie */ helper.storeSerUrnFileVerSerieFir(serFileVerSerie, csVersatore, codiceSerie, versioneSerie); // end EVO#16492 + ObjectStorageResource indiceAipSuOS; + + if (putOnOs) { + indiceAipSuOS = objectStorageService.createResourcesInIndiciAipSerieUD(serFileVerSerie, + backendIndiciAip.getBackendName(), fileFirmato, verSerieDaElab.getSerVerSerie().getIdVerSerie(), + verSerieDaElab.getIdStrut(), csVersatore, codiceSerie, versioneSerie); + logger.debug(LOG_SALVATAGGIO_OS, indiceAipSuOS.getBucket(), indiceAipSuOS.getKey()); + } + + // end MEV#30400 + /* Se il tipo di serie prevede tipo conservazione = IN_ARCHIVIO */ if (verSerie.getSerSerie().getDecTipoSerie().getTiConservazioneSerie() .equals(CostantiDB.TipoConservazioneSerie.IN_ARCHIVIO.name())) { @@ -5486,8 +5595,11 @@ public int marcaturaIndici(long idUtente) throws ParerUserError { * nuovo riferimento a SerieEjb */ SerieEjb serieEjb1 = context.getBusinessObject(SerieEjb.class); + BigDecimal idStrut = verSerieDaMarcare.getIdStrut(); + it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma tipoFirma = amministrazioneEjb + .getTipoFirmaPerStruttura(idStrut); marcaTemporale = serieEjb1.marcaFirma(verSerieDaMarcare.getSerVerSerie().getIdVerSerie(), - fileVerSerieOriginale, verSerieDaMarcareList.size(), idUtente); + fileVerSerieOriginale, verSerieDaMarcareList.size(), idUtente, tipoFirma); } catch (Exception ex) { throw new ParerUserError("Errore nella marcatura di una versione serie: marcate " + signed + " su " + verSerieDaMarcareList.size()); @@ -5504,7 +5616,8 @@ public int marcaturaIndici(long idUtente) throws ParerUserError { } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) - public byte[] marcaFirma(long idVerSerie, byte[] fileVerSerie, int serieSize, long idUtente) throws Exception { + public byte[] marcaFirma(long idVerSerie, byte[] fileVerSerie, int serieSize, long idUtente, + ElencoEnums.TipoFirma tipoFirma) throws Exception { // TimeStampToken tsToken = null; ParerTST tsToken = null; byte[] marcaTemporale = null; @@ -5537,16 +5650,47 @@ public byte[] marcaFirma(long idVerSerie, byte[] fileVerSerie, int serieSize, lo String codiceSerie = verSerieDaElab.getSerVerSerie().getSerSerie().getCdCompositoSerie(); String cdVerXsdFile = verSerieDaElab.getSerVerSerie().getSerFileVerSeries().get(0).getCdVerXsdFile(); + // MEV#30400 + + BackendStorage backendIndiciAip = objectStorageService.lookupBackendIndiciAipSerieUD( + verSerieDaElab.getSerVerSerie().getSerSerie().getOrgStrut().getIdStrut()); + + boolean putOnOs = true; + if (objectStorageService.isSerFileVerSerieUDOnOs(verSerieDaElab.getSerVerSerie().getIdVerSerie(), + CostantiDB.TipoFileVerSerie.MARCA_IX_AIP_UNISINCRO.name())) { + String md5LocalContent = calculateMd5AsBase64(new String(marcaTemporale, StandardCharsets.UTF_8)); + String eTagFromObjectMetadata = objectStorageService + .getObjectMetadataIndiceAipSerieUD(verSerieDaElab.getSerVerSerie().getIdVerSerie(), + CostantiDB.TipoFileVerSerie.MARCA_IX_AIP_UNISINCRO.name()) + .eTag(); + + if (md5LocalContent.equals(eTagFromObjectMetadata)) { + putOnOs = false; + } + } + /* Registra nella tabella SER_FILE_VER_SERIE la marca */ SerFileVerSerie serFileVerSerie = helper.storeFileIntoSerFileVerSerie(idVerSerie, CostantiDB.TipoFileVerSerie.MARCA_IX_AIP_UNISINCRO.name(), marcaTemporale, cdVerXsdFile, - verSerieDaElab.getIdStrut(), new Date()); + verSerieDaElab.getIdStrut(), new Date(), putOnOs, tipoFirma); // EVO#16492 /* Calcolo e persisto urn dell'indice AIP marcato della serie */ helper.storeSerUrnFileVerSerieMarca(serFileVerSerie, csVersatore, codiceSerie, versioneSerie); // end EVO#16492 + ObjectStorageResource indiceAipSuOS; + + if (putOnOs) { + indiceAipSuOS = objectStorageService.createResourcesInIndiciAipSerieUD(serFileVerSerie, + backendIndiciAip.getBackendName(), marcaTemporale, + verSerieDaElab.getSerVerSerie().getIdVerSerie(), verSerieDaElab.getIdStrut(), csVersatore, + codiceSerie, versioneSerie); + logger.debug(LOG_SALVATAGGIO_OS, indiceAipSuOS.getBucket(), indiceAipSuOS.getKey()); + } + + // end MEV#30400 + /* Registra il nuovo stato di versione della serie */ SerStatoVerSerie statoVerSerie = context.getBusinessObject(SerieEjb.class).createSerStatoVerSerie( ciasudHelper.getUltimoProgressivoSerStatoVerSerie(idVerSerie).add(BigDecimal.ONE), @@ -5585,6 +5729,12 @@ public byte[] marcaFirma(long idVerSerie, byte[] fileVerSerie, int serieSize, lo return marcaTemporale; } + // MEV#30400 + private String calculateMd5AsBase64(String str) { + return java.util.Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8)); + } + // end MEV#30400 + @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void riavvioValidazioneSerie(BigDecimal idSerie, BigDecimal idVerSerie) throws ParerUserError { SerSerie serie = helper.findByIdWithLock(SerSerie.class, idSerie); @@ -5605,20 +5755,28 @@ public void riavvioValidazioneSerie(BigDecimal idSerie, BigDecimal idVerSerie) t } } - public byte[] getFile(BigDecimal idVerSerie, String tiFileVerSerie) throws ParerUserError { - byte[] file = null; + public SerUrnFileVerSerie getUrnFileVerSerieNormalizzatoByIdVerSerieAndTiFile(BigDecimal idVerSerie, + String tiFile) { + List list = new ArrayList<>(); + list.add(TiUrnFileVerSerie.NORMALIZZATO); + return helper.getUrnFileVerSerie(idVerSerie, list, tiFile); + } + + // MEV#15967 - Attivazione della firma Xades e XadesT + public String getTipoFirmaFileVerSerie(BigDecimal idVerSerie, String tiFileVerSerie) throws ParerUserError { + String tipo = null; try { SerFileVerSerie fileVerSerie = helper.getSerFileVerSerie(idVerSerie.longValue(), tiFileVerSerie); if (fileVerSerie != null) { - file = fileVerSerie.getBlFile(); + tipo = fileVerSerie.getTiFirma(); } } catch (Exception e) { - String messaggio = "Eccezione imprevista nell'ottenimento del file da scaricare"; + String messaggio = "Eccezione imprevista nell'ottenimento del tipo firma del file ver serie"; messaggio += ExceptionUtils.getRootCauseMessage(e); logger.error(messaggio, e); throw new ParerUserError(messaggio); } - return file; + return tipo; } public String[] ambienteEnteStrutturaSerie(BigDecimal idSerie) { @@ -5653,16 +5811,36 @@ public void createZipPacchettoArk(BigDecimal idVerSerie, ZipOutputStream out, St final String marcaIxAipExt = ".tsr"; final String ixVolExt = ".xml"; - byte[] indiceAip = context.getBusinessObject(SerieEjb.class).getFile(idVerSerie, - CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO.name()); - byte[] marcaAip = context.getBusinessObject(SerieEjb.class).getFile(idVerSerie, - CostantiDB.TipoFileVerSerie.MARCA_IX_AIP_UNISINCRO.name()); + byte[] indiceAip = context.getBusinessObject(SerieEjb.class).getSerFileVerSerieBlob(idVerSerie.longValue(), + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO); + byte[] marcaAip = context.getBusinessObject(SerieEjb.class).getSerFileVerSerieBlob(idVerSerie.longValue(), + CostantiDB.TipoFileVerSerie.MARCA_IX_AIP_UNISINCRO); if (indiceAip == null) { throw new ParerUserError( "Errore inaspettato nell'esecuzione del download: indice AIP firmato non presente"); } - addEntryToZip(out, indiceAip, ixAIPFileName + ixAipExt); + // MEV#15967 - Attivazione della firma Xades e XadesT + SerFileVerSerie serFile = helper.getSerFileVerSerie(idVerSerie.longValueExact(), + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO.name()); + + SerUrnFileVerSerie verIndice = context.getBusinessObject(SerieEjb.class) + .getUrnFileVerSerieNormalizzatoByIdVerSerieAndTiFile(idVerSerie, + CostantiDB.TipoFileVerSerie.IX_AIP_UNISINCRO_FIRMATO.name()); + String filename = null; + + if (verIndice != null) { + filename = verIndice.getDsUrn(); + } + + if (serFile.getTiFirma() != null && serFile.getTiFirma() + .equals(it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.XADES.name())) { + addEntryToZip(out, indiceAip, filename + ixVolExt); + } else { + addEntryToZip(out, indiceAip, ixAIPFileName + ixAipExt); + } + // + if (marcaAip != null) { addEntryToZip(out, marcaAip, ixAIPFileName + marcaIxAipExt); } diff --git a/sacer-ejb/src/main/java/it/eng/parer/serie/helper/SerieHelper.java b/sacer-ejb/src/main/java/it/eng/parer/serie/helper/SerieHelper.java index ca675486..4fbcc30f 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/serie/helper/SerieHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/serie/helper/SerieHelper.java @@ -48,6 +48,7 @@ import org.slf4j.LoggerFactory; import it.eng.paginator.helper.LazyListHelper; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; import it.eng.parer.entity.AroUdAppartVerSerie; import it.eng.parer.entity.AroUnitaDoc; import it.eng.parer.entity.DecCampoInpUd; @@ -477,6 +478,27 @@ public List getUrnFileVerSerieByTipiUrn(BigDecimal idVerSeri return query.getResultList(); } + public SerUrnFileVerSerie getUrnFileVerSerie(BigDecimal idVerSerie, List tiUrn, String tiFile) { + Query query = getEntityManager() + .createQuery("SELECT s FROM SerUrnFileVerSerie s " + "JOIN s.serFileVerSerie fileVerSerie " + + "JOIN fileVerSerie.serVerSerie verSerie " + "WHERE verSerie.idVerSerie = :idVerSerie " + + "AND s.tiUrn IN :tiUrn AND fileVerSerie.tiFileVerSerie = :tiFile"); + query.setParameter("idVerSerie", longFromBigDecimal(idVerSerie)); + query.setParameter("tiUrn", tiUrn); + query.setParameter("tiFile", tiFile); + return (SerUrnFileVerSerie) query.getSingleResult(); + } + + public SerFileVerSerie getFileVerSerieByTipoFile(BigDecimal idVerSerie, + CostantiDB.TipoFileVerSerie tipoFileVerSerie) { + Query query = getEntityManager().createQuery("SELECT s FROM SerFileVerSerie s " + + "WHERE s.serVerSerie.idVerSerie = :idVerSerie AND s.tiFileVerSerie IN :tiFileVerSerie"); + query.setParameter("idVerSerie", longFromBigDecimal(idVerSerie)); + query.setParameter("tiFileVerSerie", tipoFileVerSerie.name()); + List l = query.getResultList(); + return (l != null && !l.isEmpty()) ? l.get(0) : null; + } + public List getUrnIxVolVerSerieByTipiUrn(BigDecimal idVolVerSerie, List tiUrn) { Query query = getEntityManager().createQuery("SELECT s FROM SerUrnIxVolVerSerie s " @@ -1473,6 +1495,11 @@ public BigDecimal getIdVerIndiceAipLast(Long idUnitaDoc, String tiFormatoIndiceA * id struttura * @param dtCreazione * data creazione + * @param tipoFirma + * tipo firma (XADES o CADES) + * + * @param putOnOs + * parametro per decidere se salvare anche il blob * * @return entity SerFileVerSerie * @@ -1483,12 +1510,17 @@ public BigDecimal getIdVerIndiceAipLast(Long idUnitaDoc, String tiFormatoIndiceA */ @TransactionAttribute(TransactionAttributeType.REQUIRED) public SerFileVerSerie storeFileIntoSerFileVerSerie(long idVerSerie, String tiFileVerSerie, byte[] blFile, - String cdVerXsdFile, BigDecimal idStrut, Date dtCreazione) throws NoSuchAlgorithmException, IOException { + String cdVerXsdFile, BigDecimal idStrut, Date dtCreazione, boolean putOnOs, ElencoEnums.TipoFirma tipoFirma) + throws NoSuchAlgorithmException, IOException { SerFileVerSerie fileVerSerie = new SerFileVerSerie(); SerVerSerie verSerie = getEntityManager().find(SerVerSerie.class, idVerSerie); fileVerSerie.setSerVerSerie(verSerie); fileVerSerie.setTiFileVerSerie(tiFileVerSerie); - fileVerSerie.setBlFile(blFile); + + if (!putOnOs) { + fileVerSerie.setBlFile(blFile); + } + String hash = new HashCalculator().calculateHashSHAX(blFile, TipiHash.SHA_256).toHexBinary(); fileVerSerie.setDsHashFile(hash); fileVerSerie.setDsAlgoHashFile(TipiHash.SHA_256.descrivi()); @@ -1496,6 +1528,7 @@ public SerFileVerSerie storeFileIntoSerFileVerSerie(long idVerSerie, String tiFi fileVerSerie.setCdVerXsdFile(cdVerXsdFile); fileVerSerie.setIdStrut(idStrut); fileVerSerie.setDtCreazione(dtCreazione); + fileVerSerie.setTiFirma(tipoFirma == null ? null : tipoFirma.name()); OrgStrut strut = findById(OrgStrut.class, idStrut); fileVerSerie.setIdEnteConserv(strut.getOrgEnte().getOrgAmbiente().getIdEnteConserv()); getEntityManager().persist(fileVerSerie); diff --git a/sacer-ejb/src/main/java/it/eng/parer/web/ejb/AmministrazioneEjb.java b/sacer-ejb/src/main/java/it/eng/parer/web/ejb/AmministrazioneEjb.java index 2b9195e3..e36878d6 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/web/ejb/AmministrazioneEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/web/ejb/AmministrazioneEjb.java @@ -17,6 +17,7 @@ package it.eng.parer.web.ejb; +import it.eng.parer.elencoVersamento.utils.ElencoEnums; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.util.Arrays; @@ -45,6 +46,7 @@ import it.eng.parer.entity.OrgStrut; import it.eng.parer.entity.constraint.AplValoreParamApplic.TiAppart; import it.eng.parer.exception.ParerUserError; +import it.eng.parer.firma.crypto.ejb.SignatureSessionEjb; import it.eng.parer.grantedEntity.UsrUser; import it.eng.parer.sacer.util.SacerLogConstants; import it.eng.parer.sacerlog.ejb.SacerLogEjb; @@ -1615,4 +1617,29 @@ public String getHsmUsername(long idUserIamCor, BigDecimal idAmbiente) { } return hsmUser; } + + public ElencoEnums.TipoFirma getTipoFirmaPerStruttura(BigDecimal idStrut) { + BigDecimal idAmbiente = new BigDecimal( + amministrazioneHelper.findById(OrgStrut.class, idStrut).getOrgEnte().getOrgAmbiente().getIdAmbiente()); + AplParamApplic paramApplic = configurationHelper.getParamApplic(CostantiDB.ParametroAppl.TIPO_FIRMA); + AplValoreParamApplic valore = amministrazioneHelper.getAplValoreParamApplic( + new BigDecimal(paramApplic.getIdParamApplic()), TiAppart.AMBIENTE.name(), idAmbiente, null, null, null); + if (valore == null) { + valore = amministrazioneHelper.getAplValoreParamApplic(new BigDecimal(paramApplic.getIdParamApplic()), + TiAppart.APPLIC.name(), idAmbiente, null, null, null); + } + return valore == null ? null : ElencoEnums.TipoFirma.valueOf(valore.getDsValoreParamApplic()); + } + + public it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma getTipoFirmaPerAmbiente(BigDecimal idAmbiente) { + AplParamApplic paramApplic = configurationHelper.getParamApplic(CostantiDB.ParametroAppl.TIPO_FIRMA); + AplValoreParamApplic valore = amministrazioneHelper.getAplValoreParamApplic( + new BigDecimal(paramApplic.getIdParamApplic()), TiAppart.AMBIENTE.name(), idAmbiente, null, null, null); + if (valore == null) { + valore = amministrazioneHelper.getAplValoreParamApplic(new BigDecimal(paramApplic.getIdParamApplic()), + TiAppart.APPLIC.name(), null, null, null, null); + } + return valore == null ? null + : it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.valueOf(valore.getDsValoreParamApplic()); + } } diff --git a/sacer-ejb/src/main/java/it/eng/parer/web/ejb/ElenchiVersamentoEjb.java b/sacer-ejb/src/main/java/it/eng/parer/web/ejb/ElenchiVersamentoEjb.java index f0d695b5..1cebac62 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/web/ejb/ElenchiVersamentoEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/web/ejb/ElenchiVersamentoEjb.java @@ -54,7 +54,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import it.eng.parer.amministrazioneStrutture.gestioneStrutture.ejb.StruttureEjb; import it.eng.parer.crypto.model.ParerTST; import it.eng.parer.crypto.model.exceptions.CryptoParerException; import it.eng.parer.elencoVersamento.ejb.IndiceElencoVersXsdEjb; @@ -93,6 +92,7 @@ import it.eng.parer.exception.ParerInternalError; import it.eng.parer.exception.ParerNoResultException; import it.eng.parer.exception.ParerUserError; +import it.eng.parer.firma.crypto.ejb.SignatureSessionEjb; import it.eng.parer.firma.crypto.verifica.CryptoInvoker; import it.eng.parer.helper.GenericHelper; import it.eng.parer.job.indiceAip.elenchi.ElaborazioneElencoIndiceAip; @@ -158,9 +158,9 @@ public class ElenchiVersamentoEjb { @EJB private ElaborazioneElencoIndiceAip elabElencoIndiceAipEjb; @EJB - private ConfigurationHelper configurationHelper; + private AmministrazioneEjb amministrazioneEjb; @EJB - private StruttureEjb struttureEjb; + private ConfigurationHelper configurationHelper; @EJB private CryptoInvoker cryptoInvoker; @EJB @@ -186,6 +186,14 @@ public ElvElencoVerRowBean getElvElencoVersRowBean(BigDecimal idElencoVers) { ElvElencoVerRowBean elencoRowBean = new ElvElencoVerRowBean(); try { elencoRowBean = (ElvElencoVerRowBean) Transform.entity2RowBean(elenco); + // MEV#15967 - Attivazione della firma Xades e XadesT + List elencoIndiceAipFirmati = evHelper.retrieveFileIndiceElenco(idElencoVers.longValue(), + new String[] { ElencoEnums.FileTypeEnum.FIRMA_ELENCO_INDICI_AIP.name() }); + if (elencoIndiceAipFirmati != null && !elencoIndiceAipFirmati.isEmpty()) { + elencoRowBean.setTiFirma(elencoIndiceAipFirmati.get(0).getTiFirma()); + } + // + final OrgAmbiente orgAmbiente = elenco.getOrgStrut().getOrgEnte().getOrgAmbiente(); elencoRowBean.setString("nm_criterio_raggr", elenco.getDecCriterioRaggr().getNmCriterioRaggr()); elencoRowBean.setString("ds_criterio_raggr", elenco.getDecCriterioRaggr().getDsCriterioRaggr()); @@ -1150,7 +1158,17 @@ public void streamOutFileIndiceElenco(ZipOutputStream out, String fileNamePrefix FileTypeEnum fileType = ElencoEnums.FileTypeEnum.valueOf(elvFileElencoVer.getTiFileElencoVers()); fileNamePrefix = StringUtils.defaultString(fileNamePrefix).replace(" ", "_"); fileNameSuffix = StringUtils.defaultString(fileNameSuffix).replace(" ", "_"); - String fileExtension = fileType.getFileExtension(); + + // MEV#15967 - Attivazione della firma Xades e XadesT + String fileExtension = null; + String tiFirma = elvFileElencoVer.getTiFirma(); + if (tiFirma != null + && tiFirma.equals(it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.XADES.name())) { + fileExtension = ".xml"; + } else { + fileExtension = fileType.getFileExtension(); + } + // switch (fileType) { case INDICE: case INDICE_FIRMATO: @@ -1276,6 +1294,8 @@ public void storeFirma(Long idElencoVers, byte[] fileFirmato, Date signatureDate * id utente * @param backendMetadata * tipo backend + * @param tipoFirma + * tipo firma (XADES o CADES) * * @return ElvFileElencoVer * @@ -1285,7 +1305,8 @@ public void storeFirma(Long idElencoVers, byte[] fileFirmato, Date signatureDate * errore generico */ public ElvFileElencoVer storeFirmaElencoIndiceAip(Long idElencoVers, byte[] fileFirmato, Date signatureDate, - long idUtente, BackendStorage backendMetadata) throws NoSuchAlgorithmException, IOException { + long idUtente, BackendStorage backendMetadata, ElencoEnums.TipoFirma tipoFirma) + throws NoSuchAlgorithmException, IOException { ElvElencoVer elenco = evHelper.retrieveElencoById(idElencoVers); evHelper.lockElenco(elenco); @@ -1306,6 +1327,7 @@ public ElvFileElencoVer storeFirmaElencoIndiceAip(Long idElencoVers, byte[] file fileElencoVers.setBlFileElencoVers(fileFirmato); } // end MEV#30397 + fileElencoVers.setTiFirma(tipoFirma.name()); fileElencoVers.setIdStrut(BigDecimal.valueOf(orgStrut.getIdStrut())); fileElencoVers.setDtCreazioneFile(new Date()); fileElencoVers.setDsHashFile(hash); @@ -1422,8 +1444,8 @@ public void marcaturaFirmaElenchiIndiciAip(BigDecimal idAmbiente, BigDecimal idE * MODIFICATO PER IL SIGILLO: MEV#27824 - Introduzione del JOB per l'apposizione del sigillo elettronico * * La logica prevede che se viene chiamato dal job sigillo vuol dire che si vogliono processare solanto gli - * elenchi con getsione SIGILLO o SIGILLO_MARC, altrimenti se richiamati da interfaccia utente per la firma - * manuale li processa tutti i tipi di gestione, sia di SIGILLO che di FIRMA §/ + * elenchi con getsione SIGILLO o SIGILLO_MARCA, altrimenti se richiamati da interfaccia utente per la firma + * manuale li processa tutti i tipi di gestione, sia di SIGILLO che di FIRMA */ ArrayList tipiGestione = new ArrayList<>(); tipiGestione.add(ElencoEnums.GestioneElencoEnum.SIGILLO.name()); @@ -1544,47 +1566,63 @@ public void gestioneMarcaturaElenchiIndiciAip(long idElencoVers, String tiGestEl } // end MEV#30397 - try { - /* Richiedo la marca per il file firmato */ - ParerTST tsToken = cryptoInvoker.requestTST(firmaElencoIndiciAip); - byte[] marcaTemporale = tsToken.getEncoded(); - /* Verifico l'avvenuta acquisizione della marcatura temporale */ - if (marcaTemporale != null) { - log.info("Marca temporale valida"); - ElvFileElencoVer marcaElencoIxAip = saveMarcaElencoIndiceAip(elenco, marcaTemporale, idUtente, - backendIndiciAip); - // MEV#30397 - /* - * Se backendMetadata di tipo O.S. si effettua il salvataggio (con link su apposita entity) - */ - if (backendIndiciAip.isObjectStorage()) { - // retrieve normalized URN - final String urn = marcaElencoIxAip.getElvUrnFileElencoVerss().stream() - .filter(tmpUrnNorm -> ElvUrnFileElencoVers.TiUrnFileElenco.NORMALIZZATO - .equals(tmpUrnNorm.getTiUrn())) - .findAny().get().getDsUrn().substring(4); - - ObjectStorageResource res = objectStorageService.createResourcesInElenchiIndiciAip(urn, - backendIndiciAip.getBackendName(), marcaTemporale, - marcaElencoIxAip.getIdFileElencoVers(), marcaElencoIxAip.getIdStrut()); - log.debug( - "Salvato il file dell'elenco indici aip firmato su cui è stata apposta la marca temporale nel bucket {} con chiave {} ", - res.getBucket(), res.getKey()); + // MEV#15967 - Attivazione della firma Xades e XadesT + /* + * Nel caso la firma sia di tipo XADES non è richiesta la marca temporale in quanto già inclusa nell'XML + * firmato. + */ + if (amministrazioneEjb.getTipoFirmaPerStruttura(new BigDecimal(elenco.getOrgStrut().getIdStrut())) + .equals(it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.XADES)) { + log.debug("Marca non necessaria per Xades"); + // MEV#15967 - Attivazione della firma Xades e XadesT + impostaStatoCompletatoElencoIndiceAip(elenco, idUtente); + // + } else { + + try { + /* Richiedo la marca per il file firmato */ + ParerTST tsToken = cryptoInvoker.requestTST(firmaElencoIndiciAip); + byte[] marcaTemporale = tsToken.getEncoded(); + /* Verifico l'avvenuta acquisizione della marcatura temporale */ + if (marcaTemporale != null) { + log.info("Marca temporale valida"); + ElvFileElencoVer marcaElencoIxAip = saveMarcaElencoIndiceAip(elenco, marcaTemporale, + idUtente, backendIndiciAip); + // MEV#30397 + /* + * Se backendMetadata di tipo O.S. si effettua il salvataggio (con link su apposita entity) + */ + if (backendIndiciAip.isObjectStorage()) { + // retrieve normalized URN + final String urn = marcaElencoIxAip.getElvUrnFileElencoVerss().stream() + .filter(tmpUrnNorm -> ElvUrnFileElencoVers.TiUrnFileElenco.NORMALIZZATO + .equals(tmpUrnNorm.getTiUrn())) + .findAny().get().getDsUrn().substring(4); + + ObjectStorageResource res = objectStorageService.createResourcesInElenchiIndiciAip(urn, + backendIndiciAip.getBackendName(), marcaTemporale, + marcaElencoIxAip.getIdFileElencoVers(), marcaElencoIxAip.getIdStrut()); + log.debug( + "Salvato il file dell'elenco indici aip firmato su cui è stata apposta la marca temporale nel bucket {} con chiave {} ", + res.getBucket(), res.getKey()); + } + // end MEV#30397 + } else { + throw new ParerInternalError("Acquisizione marca temporale fallita"); } - // end MEV#30397 - } else { - throw new ParerInternalError("Acquisizione marca temporale fallita"); + } catch (ParerInternalError ex) { + throw ex; + } catch (CryptoParerException ex) { + throw new ParerInternalError(ParerErrorSeverity.ERROR, ExceptionUtils.getRootCauseMessage(ex), + ex); } - } catch (ParerInternalError ex) { - throw ex; - } catch (CryptoParerException ex) { - throw new ParerInternalError(ParerErrorSeverity.ERROR, ExceptionUtils.getRootCauseMessage(ex), ex); } } else { log.warn("Impossibile completare l'elenco indice AIP con id {}, NON è nello stato di quelli marcabili", elenco.getIdElencoVers()); } break; + case NO_FIRMA: break; default: @@ -1595,7 +1633,6 @@ public void gestioneMarcaturaElenchiIndiciAip(long idElencoVers, String tiGestEl private boolean isElencoToMark(ElvElencoVer elenco) { String elencoFirmato = ElencoEnums.ElencoStatusEnum.ELENCO_INDICI_AIP_FIRMATO.name(); String elencoErroreMarca = ElencoEnums.ElencoStatusEnum.ELENCO_INDICI_AIP_ERR_MARCA.name(); - return elenco.getTiStatoElenco().equals(elencoFirmato) || elenco.getTiStatoElenco().equals(elencoErroreMarca); } @@ -1681,6 +1718,14 @@ private ElvFileElencoVer saveMarcaElencoIndiceAip(ElvElencoVer elenco, byte[] ma ElvUrnFileElencoVers.TiUrnFileElenco.NORMALIZZATO); elenco.setDtMarcaElencoIxAip(fileElencoVers.getDtCreazioneFile()); + // MEV#15967 - Attivazione della firma Xades e XadesT + impostaStatoCompletatoElencoIndiceAip(elenco, idUtente); + return fileElencoVers; + } + + // MEV#15967 - Attivazione della firma Xades e XadesT + private void impostaStatoCompletatoElencoIndiceAip(ElvElencoVer elenco, long idUtente) { + final OrgStrut orgStrut = elenco.getOrgStrut(); List statiUdDocDaCompletare = new ArrayList<>( Arrays.asList(ElencoEnums.UdDocStatusEnum.IN_ELENCO_CON_ELENCO_INDICI_AIP_FIRMATO.name(), ElencoEnums.UdDocStatusEnum.IN_ELENCO_CON_ELENCO_INDICI_AIP_ERR_MARCA.name())); @@ -1692,8 +1737,7 @@ private ElvFileElencoVer saveMarcaElencoIndiceAip(ElvElencoVer elenco, byte[] ma registraStatoElencoVersamento(BigDecimal.valueOf(elenco.getIdElencoVers()), "MARCA_ELENCO_INDICI_AIP", "Marca assunta con successo; gestione elenco = MARCA_FIRMA", it.eng.parer.entity.constraint.ElvStatoElencoVer.TiStatoElenco.COMPLETATO, user.getNmUserid()); - - return fileElencoVers; + log.debug("Impostazione stato elenco a COMPLETATO."); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) diff --git a/sacer-ejb/src/main/java/it/eng/parer/web/ejb/MonitoraggioEjb.java b/sacer-ejb/src/main/java/it/eng/parer/web/ejb/MonitoraggioEjb.java index bb910b2d..4d2530ba 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/web/ejb/MonitoraggioEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/web/ejb/MonitoraggioEjb.java @@ -221,7 +221,8 @@ public boolean salvaStreamComponenteDaErroreVersamento(long idFileSessioneKo, Ou // return objectStorageService.getObjectComponenteInStaging(idFileSessioneKo, out); } else { // file è su DB - return recBlbOracle.recuperaBlobCompSuStream(idFileSessioneKo, out, RecBlbOracle.TabellaBlob.ERRORI_VERS); + return recBlbOracle.recuperaBlobCompSuStream(idFileSessioneKo, out, RecBlbOracle.TabellaBlob.ERRORI_VERS, + null); } } diff --git a/sacer-ejb/src/main/java/it/eng/parer/web/helper/MonitoraggioHelper.java b/sacer-ejb/src/main/java/it/eng/parer/web/helper/MonitoraggioHelper.java index 1747e016..aa3a43a7 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/web/helper/MonitoraggioHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/web/helper/MonitoraggioHelper.java @@ -64,6 +64,7 @@ import it.eng.parer.entity.VrsDatiSessioneVersKo; import it.eng.parer.entity.VrsFileSessioneKo; import it.eng.parer.entity.VrsSessioneVersKo; +import it.eng.parer.entity.VrsSessioneVersKoEliminate; import it.eng.parer.job.utils.JobConstants; import it.eng.parer.objectstorage.ejb.ObjectStorageService; import it.eng.parer.slite.gen.form.MonitoraggioForm; @@ -74,6 +75,8 @@ import it.eng.parer.slite.gen.form.MonitoraggioForm.FiltriReplicaOrg; import it.eng.parer.slite.gen.tablebean.VrsFileSessioneKoRowBean; import it.eng.parer.slite.gen.tablebean.VrsFileSessioneKoTableBean; +import it.eng.parer.slite.gen.tablebean.VrsSessioneVersKoEliminateRowBean; +import it.eng.parer.slite.gen.tablebean.VrsSessioneVersKoEliminateTableBean; import it.eng.parer.slite.gen.tablebean.VrsSessioneVersKoRowBean; import it.eng.parer.slite.gen.tablebean.VrsSessioneVersKoTableBean; import it.eng.parer.slite.gen.viewbean.AroVDocRangeDtRowBean; @@ -5513,6 +5516,136 @@ public MonVLisDocNonVersIamTableBean getMonVLisDocNonVersIamViewBeanScaricaConte return monTableBean; } + public VrsSessioneVersKoEliminateTableBean getVrsSessioneVersKoEliminateTableBean( + MonitoraggioForm.FiltriSessioniErrateFalliteEliminate filtri, Integer maxResults) throws EMFError { + String whereWord = "WHERE "; + StringBuilder queryStr = new StringBuilder("SELECT DISTINCT u FROM VrsSessioneVersKoEliminate u "); + + String sessErrateFallite = filtri.getSess_errate_fallite().parse(); + if (sessErrateFallite != null) { + if (StringUtils.equals("ERRATE", sessErrateFallite)) { + queryStr.append(whereWord).append("u.orgStrut IS NULL "); + } else { // ERRATE + queryStr.append(whereWord).append("u.orgStrut IS NOT NULL "); + } + + whereWord = "AND "; + } + + // Inserimento nella query del filtro id ambiente + BigDecimal idAmbiente = filtri.getId_ambiente().parse(); + if (idAmbiente != null) { + queryStr.append(whereWord).append("u.orgStrut.orgEnte.orgAmbiente.idAmbiente = :idAmbiente "); + whereWord = "AND "; + } + // Inserimento nella query del filtro id ente + BigDecimal idEnte = filtri.getId_ente().parse(); + if (idEnte != null) { + queryStr.append(whereWord).append("u.orgStrut.orgEnte.idEnte = :idEnte "); + whereWord = "AND "; + } + + // Inserimento nella query del filtro id strut + BigDecimal idStrut = filtri.getId_strut().parse(); + if (idStrut != null) { + queryStr.append(whereWord).append("u.orgStrut.idStrut = :idStrut "); + whereWord = "AND "; + } + + Date dtElabDa = filtri.getData_elab_da().parse(); + if (dtElabDa != null) { + queryStr.append(whereWord).append("u.dtElab >= :dtElabDa "); + whereWord = "AND "; + } + + Date dtElabA = filtri.getData_elab_a().parse(); + if (dtElabA != null) { + queryStr.append(whereWord).append("u.dtElab <= :dtElabA "); + whereWord = "AND "; + } + + Date dtRifDa = filtri.getData_rif_da().parse(); + if (dtRifDa != null) { + queryStr.append(whereWord).append("u.dtRif >= :dtRifDa "); + whereWord = "AND "; + } + + Date dtRifA = filtri.getData_rif_a().parse(); + if (dtRifA != null) { + queryStr.append(whereWord).append("u.dtRif <= :dtRifA "); + whereWord = "AND "; + } + + queryStr.append("order by u.dtElab desc"); + + // CREO LA QUERY ATTRAVERSO L'ENTITY MANAGER + Query query = entityManager.createQuery(queryStr.toString()); + + if (idAmbiente != null) { + query.setParameter("idAmbiente", idAmbiente.longValue()); + } + + if (idEnte != null) { + query.setParameter("idEnte", idEnte.longValue()); + } + + if (idStrut != null) { + query.setParameter("idStrut", idStrut.longValue()); + } + + if (dtElabDa != null) { + query.setParameter("dtElabDa", dtElabDa); + } + + if (dtElabA != null) { + query.setParameter("dtElabA", dtElabA); + } + + if (dtRifDa != null) { + query.setParameter("dtRifDa", dtRifDa); + } + + if (dtRifA != null) { + query.setParameter("dtRifA", dtRifA); + } + + if (maxResults != null) { + query.setMaxResults(maxResults); + } + + // ESEGUO LA QUERY E PIAZZO I RISULTATI IN UNA LISTA + List listaRes = query.getResultList(); + + VrsSessioneVersKoEliminateTableBean sessTableBean = new VrsSessioneVersKoEliminateTableBean(); + + try { + if (listaRes != null && !listaRes.isEmpty()) { + sessTableBean = (VrsSessioneVersKoEliminateTableBean) Transform.entities2TableBean(listaRes); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + try { + if (listaRes != null && !listaRes.isEmpty()) { + sessTableBean = (VrsSessioneVersKoEliminateTableBean) Transform.entities2TableBean(listaRes); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + for (VrsSessioneVersKoEliminateRowBean row : sessTableBean) { + if (row.getNmAmbiente() != null && row.getNmEnte() != null && row.getNmStrut() != null) { + row.setString("dl_composito_organiz", + row.getNmAmbiente() + ", " + row.getNmEnte() + ", " + row.getNmStrut()); + } else { + row.setString("dl_composito_organiz", ""); + } + } + + return sessTableBean; + } + static class FiltriOperazioniVolumiPlain { private BigDecimal idAmbiente; diff --git a/sacer-ejb/src/main/java/it/eng/parer/web/util/Constants.java b/sacer-ejb/src/main/java/it/eng/parer/web/util/Constants.java index 3145573e..a19b3175 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/web/util/Constants.java +++ b/sacer-ejb/src/main/java/it/eng/parer/web/util/Constants.java @@ -111,7 +111,8 @@ public enum TiDoc { // Enum per tipo entità sacer su object storage public enum TiEntitaSacerObjectStorage { - COMP_DOC, REPORTVF, XML_VERS, INDICE_AIP, INDICE_AIP_FASC, ELENCO_INDICI_AIP, ELENCO_INDICI_AIP_FASC + COMP_DOC, REPORTVF, XML_VERS, INDICE_AIP, INDICE_AIP_FASC, ELENCO_INDICI_AIP, ELENCO_INDICI_AIP_FASC, + INDICE_AIP_SERIE } // MEV26587 diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/ControlliWS.java b/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/ControlliWS.java index b0bdcf00..eaf7e007 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/ControlliWS.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/ControlliWS.java @@ -137,11 +137,21 @@ public RispostaControlli checkVersione(String versione, String versioniWsKey, Ma public RispostaControlli checkCredenziali(String loginName, String password, String indirizzoIP, TipiWSPerControlli tipows) { - return checkCredenziali(loginName, password, indirizzoIP, tipows, null); + return checkCredenziali(loginName, password, indirizzoIP, tipows, null, false); + } + + public RispostaControlli checkCredenziali(String loginName, String password, String indirizzoIP, + TipiWSPerControlli tipows, boolean isOAuth2) { + return checkCredenziali(loginName, password, indirizzoIP, tipows, null, isOAuth2); } public RispostaControlli checkCredenziali(String loginName, String password, String indirizzoIP, TipiWSPerControlli tipows, String certCommonName) { + return checkCredenziali(loginName, password, indirizzoIP, tipows, certCommonName, false); + } + + public RispostaControlli checkCredenziali(String loginName, String password, String indirizzoIP, + TipiWSPerControlli tipows, String certCommonName, boolean isOAuth2) { User utente = null; RispostaControlli rispostaControlli; rispostaControlli = new RispostaControlli(); @@ -183,7 +193,7 @@ public RispostaControlli checkCredenziali(String loginName, String password, Str if (certCommonName != null && !certCommonName.isEmpty()) { WSLoginHandler.login(certCommonName, entityManager); } else { - WSLoginHandler.login(loginName, password, indirizzoIP, entityManager); + WSLoginHandler.login(loginName, password, indirizzoIP, entityManager, isOAuth2); } // se l'autenticazione riesce, non va in eccezione. // passo quindi a leggere i dati dell'utente dal db @@ -244,7 +254,8 @@ public RispostaControlli checkCredenziali(String loginName, String password, Str } else if (e.getCodiceErrore().equals(AuthWSException.CodiceErrore.UTENTE_NON_ATTIVO)) { tmpLogDto.setTipoEvento(LogDto.TipiEvento.LOCKED); tmpLogDto.setDsEvento("WS, " + e.getDescrizioneErrore()); - } else if (e.getCodiceErrore().equals(AuthWSException.CodiceErrore.LOGIN_FALLITO)) { + } else if (e.getCodiceErrore().equals(AuthWSException.CodiceErrore.LOGIN_FALLITO) + && StringUtils.isNotBlank(password)) { // se l'autenticazione fallisce, devo capire se è stato sbagliata la password oppure // non esiste l'utente. Provo a caricarlo e verifico la cosa. String queryStr = "select count(iu) from IamUser iu where iu.nmUserid = :nmUseridIn"; @@ -258,6 +269,10 @@ public RispostaControlli checkCredenziali(String loginName, String password, Str tmpLogDto.setTipoEvento(LogDto.TipiEvento.BAD_USER); tmpLogDto.setDsEvento("WS, utente sconosciuto"); } + } else if (e.getCodiceErrore().equals(AuthWSException.CodiceErrore.LOGIN_FALLITO) + && StringUtils.isBlank(password)) { + tmpLogDto.setTipoEvento(LogDto.TipiEvento.BAD_PASS); + tmpLogDto.setDsEvento("WS, null password"); } } catch (Exception e) { rispostaControlli.setCodErr(MessaggiWSBundle.ERR_666); @@ -267,7 +282,7 @@ public RispostaControlli checkCredenziali(String loginName, String password, Str } // scrittura log - idpLogger.scriviLog(tmpLogDto); + idpLogger.scriviLog(tmpLogDto, password); // return rispostaControlli; } diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/RecuperoDocumento.java b/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/RecuperoDocumento.java index e05d1931..3e8918ca 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/RecuperoDocumento.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/RecuperoDocumento.java @@ -86,7 +86,7 @@ public boolean callRecuperoDocSuStream(RecuperoDocBean dto) { // default (ASIS : pre object storage) if (dto.getTabellaBlobDaLeggere() != null) { log.debug("RecuperoDocumento.callRecuperoDocSuStream : recupero from BlbOracle, doc = {}", dto); - return recBlbOracle.recuperaBlobCompSuStream(dto.getId(), dto.getOs(), dto.getTabellaBlobDaLeggere()); + return recBlbOracle.recuperaBlobCompSuStream(dto.getId(), dto.getOs(), dto.getTabellaBlobDaLeggere(), dto); } else { log.debug("RecuperoDocumento.callRecuperoDocSuStream : recupero from ClbOracle, doc = {}", dto); return recClbOracle.recuperaClobDataSuStream(dto.getId(), dto.getOs(), dto.getTabellaClobDaLeggere()); @@ -123,6 +123,11 @@ private boolean existInObjectStorage(RecuperoDocBean doc) { result = objectStorageService.isElencoIndiciAipFascOnOs(doc.getId()); break; // end MEV #30399 + // MEV#30400 + case INDICE_AIP_SERIE: + result = objectStorageService.isSerFileVerSerieUDOnOs(doc.getId(), doc.getTiFile()); + break; + // end MEV#30400 default: break; } diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/WsIdpLogger.java b/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/WsIdpLogger.java index 54cb87c1..235b1a27 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/WsIdpLogger.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/ejb/WsIdpLogger.java @@ -45,6 +45,7 @@ import it.eng.parer.ws.dto.RispostaControlli; import it.eng.parer.ws.utils.CostantiDB; import it.eng.spagoCore.util.JpaUtils; +import org.apache.commons.lang3.StringUtils; /** * @@ -68,7 +69,7 @@ public class WsIdpLogger { @SuppressWarnings("unchecked") @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW) - public void scriviLog(LogDto logDto) { + public void scriviLog(LogDto logDto, String password) { HashMap iamDefaults = null; RispostaControlli rispostaControlli = controlliSemantici @@ -94,8 +95,11 @@ public void scriviLog(LogDto logDto) { IdpConfigLog icl = new IdpConfigLog(); icl.setQryRegistraEventoUtente( iamDefaults.get(CostantiDB.ParametroAppl.IDP_QRY_REGISTRA_EVENTO_UTENTE)); - icl.setQryVerificaDisattivazioneUtente( - iamDefaults.get(CostantiDB.ParametroAppl.IDP_QRY_VERIFICA_DISATTIVAZIONE_UTENTE)); + + if (!StringUtils.isBlank(password)) { + icl.setQryVerificaDisattivazioneUtente( + iamDefaults.get(CostantiDB.ParametroAppl.IDP_QRY_VERIFICA_DISATTIVAZIONE_UTENTE)); + } icl.setQryDisabilitaUtente(iamDefaults.get(CostantiDB.ParametroAppl.IDP_QRY_DISABLE_USER)); icl.setMaxTentativi( Integer.parseInt(iamDefaults.get(CostantiDB.ParametroAppl.IDP_MAX_TENTATIVI_FALLITI))); @@ -104,7 +108,7 @@ public void scriviLog(LogDto logDto) { logDto.setServername(asi.getName()); IdpLogger.EsitiLog risposta = (new IdpLogger(icl).scriviLog(logDto, connection)); - if (risposta == IdpLogger.EsitiLog.UTENTE_DISATTIVATO) { + if (risposta == IdpLogger.EsitiLog.UTENTE_DISATTIVATO && !StringUtils.isBlank(password)) { String queryStr = "update IamUser iu " + "set iu.flAttivo = :flAttivoIn " + "where iu.nmUserid = :nmUseridIn "; diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/objectStorage/RecObjectStorage.java b/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/objectStorage/RecObjectStorage.java index b693c0b1..65c87624 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/objectStorage/RecObjectStorage.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/objectStorage/RecObjectStorage.java @@ -145,6 +145,9 @@ public boolean recuperaObjectStorageSuStream(RecuperoDocBean dto) { rc = this.recuperaObjectStorageElencoIndiciAipFascSuStream(dto.getId(), dto.getOs()); break; // end MEV #30399 + case INDICE_AIP_SERIE: + rc = this.recuperaObjectStorageIndiceAipSerieUDSuStream(dto.getId(), dto.getOs(), dto.getTiFile()); + break; default: log.warn("Tipo oggetto {} non supportato", dto.getTipo()); break; @@ -185,4 +188,21 @@ private boolean recuperaObjectStorageElencoIndiciAipFascSuStream(long idFileElen return rc; } // end MEV #30399 + + // MEV #30400 + private boolean recuperaObjectStorageIndiceAipSerieUDSuStream(long serVerSerie, OutputStream outputStream, + String tiFile) { + boolean rc = false; + + try { + objectStorageService.getSerVerSerieObjectStorage(serVerSerie, tiFile, outputStream); + rc = true; + } catch (Exception e) { + + log.error(LOG_EXCEPTION_OS, e); + } + + return rc; + } + // end MEV #30400 } diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/oracleBlb/RecBlbOracle.java b/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/oracleBlb/RecBlbOracle.java index ca3a6c01..1230051c 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/oracleBlb/RecBlbOracle.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/ejb/oracleBlb/RecBlbOracle.java @@ -42,6 +42,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import it.eng.parer.exception.ConnectionException; +import it.eng.parer.objectstorage.dto.RecuperoDocBean; import it.eng.spagoCore.util.JpaUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,13 +80,15 @@ public class RecBlbOracle { + "where t.id_file_elenco_vers = ?"; private static final String QRY_ELV_FILE_ELENCO_VERS_FASC = "SELECT BL_FILE_ELENCO_VERS FROM ELV_FILE_ELENCO_VERS_FASC t " + "where t.id_file_elenco_vers_fasc = ?"; + private static final String QRY_SER_FILE_VER_SERIE_INDICE_AIP = "SELECT BL_FILE FROM SER_FILE_VER_SERIE t " + + "where t.id_ver_serie = ? AND t.ti_file_ver_serie = ?"; // private static final String QRY_FIR_REPORT_COMP = "SELECT BL_CONTENUTO_REPORT FROM FIR_REPORT t " + "where t.id_comp_doc = ?"; private static final int BUFFERSIZE = 10 * 1024 * 1024; // 10 megabyte public enum TabellaBlob { - BLOB, ERRORI_VERS, FIR_REPORT, ERRORI_VERS_TMP, ELV_FILE_ELENCO, ELV_FILE_ELENCO_FASC + BLOB, ERRORI_VERS, FIR_REPORT, ERRORI_VERS_TMP, ELV_FILE_ELENCO, ELV_FILE_ELENCO_FASC, SER_FILE_VER_SERIE } /** @@ -128,10 +131,13 @@ public long contaBlobErroriVers(long idPadre) { * stream su cui scrivere (può essere uno ZipOutputStream o un semplice FileOutputStream * @param tabellaBlobDaLeggere * una delle due tabelle di Sacer da cui leggere il blob + * @param dto + * dto recupero * * @return true se è andato tutto bene, false altrimenti */ - public boolean recuperaBlobCompSuStream(long idPadre, OutputStream outputStream, TabellaBlob tabellaBlobDaLeggere) { + public boolean recuperaBlobCompSuStream(long idPadre, OutputStream outputStream, TabellaBlob tabellaBlobDaLeggere, + RecuperoDocBean dto) { boolean rispostaControlli = false; Blob blob = null; ResultSet rs = null; @@ -157,12 +163,18 @@ public boolean recuperaBlobCompSuStream(long idPadre, OutputStream outputStream, case ELV_FILE_ELENCO_FASC: queryStr = QRY_ELV_FILE_ELENCO_VERS_FASC; break; + case SER_FILE_VER_SERIE: + queryStr = QRY_SER_FILE_VER_SERIE_INDICE_AIP; + break; } try { java.sql.Connection conn = JpaUtils.provideConnectionFrom(entityManager); try (PreparedStatement pstmt = conn.prepareStatement(queryStr)) { log.info(queryStr); pstmt.setLong(1, idPadre); + if (dto != null && dto.getTiFile() != null) { + pstmt.setString(2, dto.getTiFile()); + } rs = pstmt.executeQuery(); while (rs.next()) { blob = rs.getBlob(1); @@ -189,7 +201,7 @@ public boolean recuperaBlobCompSuStream(long idPadre, OutputStream outputStream, * lo cerco su VRS_CONTENUTO_FILE perché evidentemente non è ancora stato spostato il CLOB */ if (TabellaBlob.ERRORI_VERS.equals(tabellaBlobDaLeggere)) { - recuperaBlobCompSuStream(idPadre, outputStream, TabellaBlob.ERRORI_VERS_TMP); + recuperaBlobCompSuStream(idPadre, outputStream, TabellaBlob.ERRORI_VERS_TMP, null); } log.error("Eccezione nella lettura della tabella dei dati componente: il blob è nullo"); } diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/utils/RecuperoZipGen.java b/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/utils/RecuperoZipGen.java index 46288641..b189138d 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/utils/RecuperoZipGen.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/recupero/utils/RecuperoZipGen.java @@ -1459,8 +1459,16 @@ private void aggiungiElencoIndiciAipUd(ZipArchiveOutputStream zipOutputStream, l ? (ElvFileElencoVer) rispostaControlli.getrObject() : null; prefisso = tiFileElencoVers1.equals(ElencoEnums.OpTypeEnum.FIRMA_ELENCO_INDICI_AIP.name()) ? "ElencoIndiceAIP" : "MarcaElencoIndiceAIP"; - estensione = tiFileElencoVers1.equals(ElencoEnums.OpTypeEnum.FIRMA_ELENCO_INDICI_AIP.name()) - ? ".xml.p7m" : ".tsr"; + + // MEV#15967 - Attivazione della firma Xades e XadesT + if (fileElencoVers != null && fileElencoVers.getTiFirma() != null + && fileElencoVers.getTiFirma().equals(ElencoEnums.TipoFirma.XADES.name())) { + estensione = ".xml"; + } else { + estensione = tiFileElencoVers1.equals(ElencoEnums.OpTypeEnum.FIRMA_ELENCO_INDICI_AIP.name()) + ? ".xml.p7m" : ".tsr"; + } + } } @@ -1664,7 +1672,7 @@ private void aggiungiIndiceFascicoli(ZipArchiveOutputStream zipOutputStream, Rec // Controllo se il fascicolo è inserito in un elenco di versamento fascicoli if (unitaDocFascicolo.getFasFascicolo().getElvElencoVersFasc() != null) { - List fileFirma = elencoVersFascHelper.retrieveFileIndiceElenco2( + List fileFirma = elencoVersFascHelper.retrieveFileIndiceElenco( unitaDocFascicolo.getFasFascicolo().getElvElencoVersFasc().getIdElencoVersFasc(), new String[] { it.eng.parer.elencoVersFascicoli.utils.ElencoEnums.FileTypeEnum.FIRMA_ELENCO_INDICI_AIP diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/recuperoFasc/utils/RecuperoZipFascGen.java b/sacer-ejb/src/main/java/it/eng/parer/ws/recuperoFasc/utils/RecuperoZipFascGen.java index 15e72781..76ec331e 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/recuperoFasc/utils/RecuperoZipFascGen.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/recuperoFasc/utils/RecuperoZipFascGen.java @@ -16,9 +16,9 @@ */ /* -* To change this template, choose Tools | Templates -* and open the template in the editor. -*/ + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ package it.eng.parer.ws.recuperoFasc.utils; import java.io.File; @@ -54,6 +54,8 @@ import it.eng.parer.entity.FasXmlFascicolo; import it.eng.parer.entity.FasXmlVersFascicolo; import it.eng.parer.fascicoli.helper.FascicoliHelper; + +import it.eng.parer.firma.crypto.ejb.SignatureSessionEjb; import it.eng.parer.objectstorage.ejb.ObjectStorageService; import it.eng.parer.objectstorage.dto.RecuperoDocBean; import it.eng.parer.objectstorage.ejb.ObjectStorageService; @@ -401,8 +403,18 @@ private void aggiungiElencoIndiciAipFasc(ZipArchiveOutputStream zipOutputStream, ? (ElvFileElencoVersFasc) rispostaControlli.getrObject() : null; prefisso = tiFileElencoVersFasc1.equals(ElencoEnums.OpTypeEnum.FIRMA_ELENCO_INDICI_AIP.name()) ? "ElencoIndiceAIP" : "MarcaElencoIndiceAIP"; - estensione = tiFileElencoVersFasc1.equals(ElencoEnums.OpTypeEnum.FIRMA_ELENCO_INDICI_AIP.name()) - ? ".xml.p7m" : ".tsr"; + // MEV#15967 - Attivazione della firma Xades e XadesT + if (fileElencoVersFasc != null) { + String tiFirma = fileElencoVersFasc.getTiFirma(); + if (tiFirma != null + && tiFirma.equals(it.eng.parer.elencoVersamento.utils.ElencoEnums.TipoFirma.XADES.name())) { + estensione = "xml"; + } else { + estensione = tiFileElencoVersFasc1.equals(ElencoEnums.OpTypeEnum.FIRMA_ELENCO_INDICI_AIP.name()) + ? ".xml.p7m" : ".tsr"; + } + } + // } } diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/replicaUtente/ejb/CancellaUtenteHelper.java b/sacer-ejb/src/main/java/it/eng/parer/ws/replicaUtente/ejb/CancellaUtenteHelper.java index 231be45e..05560be0 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/replicaUtente/ejb/CancellaUtenteHelper.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/replicaUtente/ejb/CancellaUtenteHelper.java @@ -85,10 +85,10 @@ public void deleteIamUser(Long idUserIam) { @SuppressWarnings("unchecked") public boolean isReferenced(Integer idUserIam) { String queryStr = "SELECT u FROM IamUser u " + "WHERE u.idUserIam = :idUserIam " - + "AND( EXISTS (SELECT s FROM VrsSessioneVers s " + + "AND ( EXISTS (SELECT s FROM VrsSessioneVers s " + " WHERE s.iamUser.idUserIam = :idUserIam ) " - + "OR EXISTS (SELECT s FROM VrsSessioneVersKo sk " - + " WHERE s.iamUser.idUserIam = :idUserIam ) \" " + + "OR EXISTS (SELECT sk FROM VrsSessioneVersKo sk " + + " WHERE sk.iamUser.idUserIam = :idUserIam ) " + "OR EXISTS (SELECT s2 FROM RecSessioneRecup s2 " + " WHERE s2.iamUser.idUserIam = :idUserIam ) " + "OR EXISTS (SELECT ud FROM AroUnitaDoc ud " + " WHERE ud.iamUser.idUserIam = :idUserIam ) " diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/richiestaAnnullamentoVersamenti/ejb/InvioRichiestaAnnullamentoVersamentiEjb.java b/sacer-ejb/src/main/java/it/eng/parer/ws/richiestaAnnullamentoVersamenti/ejb/InvioRichiestaAnnullamentoVersamentiEjb.java index 93b8aa6a..78c47bdd 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/richiestaAnnullamentoVersamenti/ejb/InvioRichiestaAnnullamentoVersamentiEjb.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/richiestaAnnullamentoVersamenti/ejb/InvioRichiestaAnnullamentoVersamentiEjb.java @@ -517,11 +517,14 @@ public void initRispostaWs(RispostaWSInvioRichiestaAnnullamentoVersamenti rispos * bean RispostaWSInvioRichiestaAnnullamentoVersamenti * @param ravExt * bean InvioRichiestaAnnullamentoVersamentiExt + * @param isOAuth2 + * flag isOAuth2 */ public void verificaCredenziali(String loginName, String password, String indirizzoIp, - RispostaWSInvioRichiestaAnnullamentoVersamenti rispostaWs, InvioRichiestaAnnullamentoVersamentiExt ravExt) { + RispostaWSInvioRichiestaAnnullamentoVersamenti rispostaWs, InvioRichiestaAnnullamentoVersamentiExt ravExt, + boolean isOAuth2) { RispostaControlli tmpRispostaControlli = controlliWS.checkCredenziali(loginName, password, indirizzoIp, - TipiWSPerControlli.ANNULLAMENTO); + TipiWSPerControlli.ANNULLAMENTO, isOAuth2); if (!tmpRispostaControlli.isrBoolean()) { rispostaWs.setSeverity(SeverityEnum.ERROR); rispostaWs.setEsitoWsError(tmpRispostaControlli.getCodErr(), tmpRispostaControlli.getDsErr()); diff --git a/sacer-ejb/src/main/java/it/eng/parer/ws/utils/CostantiDB.java b/sacer-ejb/src/main/java/it/eng/parer/ws/utils/CostantiDB.java index a0eaaadd..4f12284d 100644 --- a/sacer-ejb/src/main/java/it/eng/parer/ws/utils/CostantiDB.java +++ b/sacer-ejb/src/main/java/it/eng/parer/ws/utils/CostantiDB.java @@ -167,7 +167,7 @@ private ParametroAppl() { public static final String URL_CALCOLO_SERVIZI_EROGATI = "URL_CALCOLO_SERVIZI_EROGATI"; public static final String USERID_REPLICA_ORG = "USERID_REPLICA_ORG"; public static final String PSW_REPLICA_ORG = "PSW_REPLICA_ORG"; - public static final String TIMEOUT_CALCOLO_SERVIZI_EROGATI = "PSW_REPLICA_ORG"; + public static final String TIMEOUT_CALCOLO_SERVIZI_EROGATI = "TIMEOUT_CALCOLO_SERVIZI_EROGATI"; // public static final String NUM_MAX_COMP_CRITERIO_RAGGR_WARN = "NUM_MAX_COMP_CRITERIO_RAGGR_WARN"; // @@ -234,6 +234,8 @@ private ParametroAppl() { public static final String BACKEND_INDICI_AIP_FASCICOLI = "BACKEND_INDICI_AIP_FASCICOLI"; public static final String BACKEND_ELENCHI_INDICI_AIP_FASCICOLI = "BACKEND_ELENCHI_INDICI_AIP_FASCICOLI"; + public static final String BACKEND_INDICI_AIP_SERIE_UD = "BACKEND_INDICI_AIP_SERIE_UD"; + // Configurazioni S3 public static final String S3_PRESIGNED_URL_DURATION = "S3_PRESIGNED_URL_DURATION"; public static final String S3_CLIENT_MAX_CONNECTIONS = "S3_CLIENT_MAX_CONNECTIONS"; @@ -281,6 +283,10 @@ private ParametroAppl() { public static final String URL_RECUP_OGGETTO_PING = "URL_RECUP_OGGETTO_PING"; public static final String USERID_RECUP_OGGETTO_PING = "USERID_RECUP_OGGETTO_PING"; public static final String PSW_RECUP_OGGETTO_PING = "PSW_RECUP_OGGETTO_PING"; + + // Coostanti per la firma + public static final String TIPO_FIRMA = "TIPO_FIRMA"; + // Costanti per Keycloak public static final String URL_KEYCLOAK = "URL_KEYCLOAK"; public static final String KEYCLOAK_CLIENT_SECRET = "KEYCLOAK_CLIENT_SECRET"; diff --git a/sacer-jpa/pom.xml b/sacer-jpa/pom.xml index d831378f..76c481c8 100644 --- a/sacer-jpa/pom.xml +++ b/sacer-jpa/pom.xml @@ -3,7 +3,7 @@ sacer-jboss it.eng.parer - 10.2.2-SNAPSHOT + 10.3.0 sacer-jboss-jpa diff --git a/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVer.java b/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVer.java index fb5e70bf..25137177 100644 --- a/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVer.java +++ b/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVer.java @@ -71,6 +71,8 @@ public class ElvFileElencoVer implements Serializable { private String tiFileElencoVers; + private String tiFirma; + private ElvElencoVer elvElencoVer; private List elvUrnFileElencoVerss = new ArrayList<>(); @@ -84,6 +86,13 @@ public ElvFileElencoVer(byte[] blFileElencoVers, String cdVerXsdFile, String tiF this.tiFileElencoVers = tiFileElencoVers; } + public ElvFileElencoVer(byte[] blFileElencoVers, String cdVerXsdFile, String tiFileElencoVers, String tiFirma) { + this.blFileElencoVers = blFileElencoVers; + this.cdVerXsdFile = cdVerXsdFile; + this.tiFileElencoVers = tiFileElencoVers; + this.tiFirma = tiFirma; + } + public ElvFileElencoVer(long idFileElencoVers, byte[] blFileElencoVers, String cdVerXsdFile, String tiFileElencoVers) { this.idFileElencoVers = idFileElencoVers; @@ -92,6 +101,15 @@ public ElvFileElencoVer(long idFileElencoVers, byte[] blFileElencoVers, String c this.tiFileElencoVers = tiFileElencoVers; } + public ElvFileElencoVer(long idFileElencoVers, byte[] blFileElencoVers, String cdVerXsdFile, + String tiFileElencoVers, String tiFirma) { + this.idFileElencoVers = idFileElencoVers; + this.blFileElencoVers = blFileElencoVers; + this.cdVerXsdFile = cdVerXsdFile; + this.tiFileElencoVers = tiFileElencoVers; + this.tiFirma = tiFirma; + } + @Id @Column(name = "ID_FILE_ELENCO_VERS") @@ -181,6 +199,15 @@ public void setTiFileElencoVers(String tiFileElencoVers) { this.tiFileElencoVers = tiFileElencoVers; } + @Column(name = "TI_FIRMA") + public String getTiFirma() { + return tiFirma; + } + + public void setTiFirma(String tiFirma) { + this.tiFirma = tiFirma; + } + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ID_ELENCO_VERS") public ElvElencoVer getElvElencoVer() { diff --git a/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVersFasc.java b/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVersFasc.java index eca3bfde..0e693696 100644 --- a/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVersFasc.java +++ b/sacer-jpa/src/main/java/it/eng/parer/entity/ElvFileElencoVersFasc.java @@ -60,27 +60,28 @@ public class ElvFileElencoVersFasc implements Serializable { private String tiFileElencoVers; + private String tiFirma; + private ElvElencoVersFasc elvElencoVersFasc; public ElvFileElencoVersFasc() {/* Hibernate */ } - public ElvFileElencoVersFasc(byte[] blFileElencoVers, String cdVerXsdFile, String tiFileElencoVers) { - this.blFileElencoVers = blFileElencoVers; - this.cdVerXsdFile = cdVerXsdFile; - this.tiFileElencoVers = tiFileElencoVers; - } - + /* + * public ElvFileElencoVersFasc(byte[] blFileElencoVers, String cdVerXsdFile, String tiFileElencoVers) { + * this.blFileElencoVers = blFileElencoVers; this.cdVerXsdFile = cdVerXsdFile; this.tiFileElencoVers = + * tiFileElencoVers; } + */ public ElvFileElencoVersFasc(long idFileElencoVersFasc, byte[] blFileElencoVers, String cdVerXsdFile, - String tiFileElencoVers) { + String tiFileElencoVers, String tiFirma) { this.idFileElencoVersFasc = idFileElencoVersFasc; this.blFileElencoVers = blFileElencoVers; this.cdVerXsdFile = cdVerXsdFile; this.tiFileElencoVers = tiFileElencoVers; + this.tiFirma = tiFirma; } @Id - @Column(name = "ID_FILE_ELENCO_VERS_FASC") @GenericGenerator(name = "SELV_FILE_ELENCO_VERS_FASC_ID_FILE_ELENCO_VERS_FASC_GENERATOR", strategy = "it.eng.sequences.hibernate.NonMonotonicSequenceGenerator", parameters = { @Parameter(name = SequenceStyleGenerator.SEQUENCE_PARAM, value = "SELV_FILE_ELENCO_VERS_FASC"), @@ -186,6 +187,15 @@ public void setTiFileElencoVers(String tiFileElencoVers) { this.tiFileElencoVers = tiFileElencoVers; } + @Column(name = "TI_FIRMA") + public String getTiFirma() { + return tiFirma; + } + + public void setTiFirma(String tiFirma) { + this.tiFirma = tiFirma; + } + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ID_ELENCO_VERS_FASC") public ElvElencoVersFasc getElvElencoVersFasc() { diff --git a/sacer-jpa/src/main/java/it/eng/parer/entity/SerFileVerSerie.java b/sacer-jpa/src/main/java/it/eng/parer/entity/SerFileVerSerie.java index 2b86661d..d902e80f 100644 --- a/sacer-jpa/src/main/java/it/eng/parer/entity/SerFileVerSerie.java +++ b/sacer-jpa/src/main/java/it/eng/parer/entity/SerFileVerSerie.java @@ -71,6 +71,8 @@ public class SerFileVerSerie implements Serializable { private String tiFileVerSerie; + private String tiFirma; + private SerVerSerie serVerSerie; private BigDecimal idEnteConserv; @@ -188,6 +190,15 @@ public void setIdEnteConserv(BigDecimal idEnteConserv) { this.idEnteConserv = idEnteConserv; } + @Column(name = "TI_FIRMA") + public String getTiFirma() { + return tiFirma; + } + + public void setTiFirma(String tiFirma) { + this.tiFirma = tiFirma; + } + @OneToMany(mappedBy = "serFileVerSerie", cascade = CascadeType.PERSIST) public List getSerUrnFileVerSeries() { return this.serUrnFileVerSeries; diff --git a/sacer-jpa/src/main/java/it/eng/parer/entity/SerVerSerieObjectStorage.java b/sacer-jpa/src/main/java/it/eng/parer/entity/SerVerSerieObjectStorage.java new file mode 100644 index 00000000..8bb2b80f --- /dev/null +++ b/sacer-jpa/src/main/java/it/eng/parer/entity/SerVerSerieObjectStorage.java @@ -0,0 +1,70 @@ +package it.eng.parer.entity; + +import it.eng.parer.entity.inheritance.oop.AroXmlObjectStorage; +import java.math.BigDecimal; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * + * @author gpiccioli + */ +@Entity +@Table(name = "SER_VER_SERIE_OBJECT_STORAGE") +public class SerVerSerieObjectStorage extends AroXmlObjectStorage { + + public SerVerSerieObjectStorage() { + super(); + } + + private Long idVerSerieObjectStorage; + private SerVerSerie serVerSerie; + private BigDecimal idStrut; + private String tiFileVerSerie; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID_VER_SERIE_OBJECT_STORAGE") + public Long getIdVerSerieObjectStorage() { + return idVerSerieObjectStorage; + } + + public void setIdVerSerieObjectStorage(Long idVerSerieObjectStorage) { + this.idVerSerieObjectStorage = idVerSerieObjectStorage; + } + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "ID_VER_SERIE") + public SerVerSerie getSerVerSerie() { + return serVerSerie; + } + + public void setSerVerSerie(SerVerSerie serVerSerie) { + this.serVerSerie = serVerSerie; + } + + @Column(name = "ID_STRUT") + public BigDecimal getIdStrut() { + return this.idStrut; + } + + public void setIdStrut(BigDecimal idStrut) { + this.idStrut = idStrut; + } + + @Column(name = "TI_FILE_VER_SERIE") + public String getTiFileVerSerie() { + return this.tiFileVerSerie; + } + + public void setTiFileVerSerie(String tiFileVerSerie) { + this.tiFileVerSerie = tiFileVerSerie; + } +} diff --git a/sacer-jpa/src/main/java/it/eng/parer/entity/VrsSessioneVersKoEliminate.java b/sacer-jpa/src/main/java/it/eng/parer/entity/VrsSessioneVersKoEliminate.java new file mode 100644 index 00000000..bdbfd178 --- /dev/null +++ b/sacer-jpa/src/main/java/it/eng/parer/entity/VrsSessioneVersKoEliminate.java @@ -0,0 +1,111 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package it.eng.parer.entity; + +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * + * @author gpiccioli + */ + +@Entity +@Table(name = "VRS_SESSIONE_VERS_KO_ELIMINATE") +public class VrsSessioneVersKoEliminate { + private static final long serialVersionUID = 1L; + + private Long idSessioneVersKoEliminata; + + private OrgStrut orgStrut; + + private String nmStrut; + + private String dsStrut; + + private BigDecimal niSesEliminate; + + private Date dtElab; + + private Date dtRif; + + public VrsSessioneVersKoEliminate() {/* Hibernate */ + } + + @Id + @Column(name = "ID_SESSIONE_VERS_KO_ELIMINATE") + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Long getIdSessioneVersKoEliminata() { + return this.idSessioneVersKoEliminata; + } + + public void setIdSessioneVersKoEliminata(Long idSessioneVersKoEliminata) { + this.idSessioneVersKoEliminata = idSessioneVersKoEliminata; + } + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "ID_STRUT") + public OrgStrut getOrgStrut() { + return this.orgStrut; + } + + public void setOrgStrut(OrgStrut orgStrut) { + this.orgStrut = orgStrut; + } + + @Column(name = "NM_STRUT") + public String getNmStrut() { + return this.nmStrut; + } + + public void setNmStrut(String nmStrut) { + this.nmStrut = nmStrut; + } + + @Column(name = "DS_STRUT") + public String getDsStrut() { + return this.dsStrut; + } + + public void setDsStrut(String dsStrut) { + this.dsStrut = dsStrut; + } + + @Column(name = "NI_SES_ELIMINATE") + public BigDecimal getNiSesEliminate() { + return this.niSesEliminate; + } + + public void setNiSesEliminate(BigDecimal niSesEliminate) { + this.niSesEliminate = niSesEliminate; + } + + @Column(name = "DT_ELAB") + public Date getDtElab() { + return this.dtElab; + } + + public void setDtElab(Date dtElab) { + this.dtElab = dtElab; + } + + @Column(name = "DT_RIF") + public Date getDtRif() { + return this.dtRif; + } + + public void setDtRif(Date dtRif) { + this.dtRif = dtRif; + } +} diff --git a/sacer-jpa/src/main/java/it/eng/parer/viewEntity/FasVVisFascicolo.java b/sacer-jpa/src/main/java/it/eng/parer/viewEntity/FasVVisFascicolo.java index 1c63ba26..a6d4b446 100644 --- a/sacer-jpa/src/main/java/it/eng/parer/viewEntity/FasVVisFascicolo.java +++ b/sacer-jpa/src/main/java/it/eng/parer/viewEntity/FasVVisFascicolo.java @@ -55,6 +55,7 @@ public class FasVVisFascicolo implements Serializable { private String cdIndServer; private String cdIpaAmminTitol; private String cdKeyFascicolo; + private String cdKeyNormalizFascicolo; private String cdKeyFascicoloPadre; private String cdKeyUnitaDocFirst; private String cdKeyUnitaDocLast; @@ -354,6 +355,15 @@ public void setCdKeyFascicolo(String cdKeyFascicolo) { this.cdKeyFascicolo = cdKeyFascicolo; } + @Column(name = "CD_KEY_NORMALIZ_FASCICOLO") + public String getCdKeyNormalizFascicolo() { + return this.cdKeyNormalizFascicolo; + } + + public void setCdKeyNormalizFascicolo(String cdKeyNormalizFascicolo) { + this.cdKeyNormalizFascicolo = cdKeyNormalizFascicolo; + } + @Column(name = "CD_KEY_FASCICOLO_PADRE") public String getCdKeyFascicoloPadre() { return this.cdKeyFascicoloPadre; diff --git a/sacer-jpa/src/main/java/it/eng/parer/viewEntity/OrgVRicOrganizRestArch.java b/sacer-jpa/src/main/java/it/eng/parer/viewEntity/OrgVRicOrganizRestArch.java new file mode 100644 index 00000000..6337d779 --- /dev/null +++ b/sacer-jpa/src/main/java/it/eng/parer/viewEntity/OrgVRicOrganizRestArch.java @@ -0,0 +1,94 @@ +package it.eng.parer.viewEntity; + +import java.io.Serializable; +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.Date; + +/** + * The persistent class for the ORG_V_RIC_ORGANIZ_REST_ARCH database table. + * + */ +@Entity +@Table(name = "ORG_V_RIC_ORGANIZ_REST_ARCH") +@NamedQuery(name = "OrgVRicOrganizRestArch.findAll", query = "SELECT o FROM OrgVRicOrganizRestArch o") +public class OrgVRicOrganizRestArch implements Serializable { + private static final long serialVersionUID = 1L; + private Date dtFineVal; + private Date dtIniVal; + private String flAssociazioneScaduta; + private String flAssociazioniFuture; + private BigDecimal idEnteConvenz; + private BigDecimal idEnteConvenzOrg; + private BigDecimal idOrganizIam; + + public OrgVRicOrganizRestArch() { + } + + @Temporal(TemporalType.DATE) + @Column(name = "DT_FINE_VAL") + public Date getDtFineVal() { + return this.dtFineVal; + } + + public void setDtFineVal(Date dtFineVal) { + this.dtFineVal = dtFineVal; + } + + @Temporal(TemporalType.DATE) + @Column(name = "DT_INI_VAL") + public Date getDtIniVal() { + return this.dtIniVal; + } + + public void setDtIniVal(Date dtIniVal) { + this.dtIniVal = dtIniVal; + } + + @Column(name = "FL_ASSOCIAZIONE_SCADUTA") + public String getFlAssociazioneScaduta() { + return this.flAssociazioneScaduta; + } + + public void setFlAssociazioneScaduta(String flAssociazioneScaduta) { + this.flAssociazioneScaduta = flAssociazioneScaduta; + } + + @Column(name = "FL_ASSOCIAZIONI_FUTURE") + public String getFlAssociazioniFuture() { + return this.flAssociazioniFuture; + } + + public void setFlAssociazioniFuture(String flAssociazioniFuture) { + this.flAssociazioniFuture = flAssociazioniFuture; + } + + @Column(name = "ID_ENTE_CONVENZ") + public BigDecimal getIdEnteConvenz() { + return this.idEnteConvenz; + } + + public void setIdEnteConvenz(BigDecimal idEnteConvenz) { + this.idEnteConvenz = idEnteConvenz; + } + + @Column(name = "ID_ENTE_CONVENZ_ORG") + public BigDecimal getIdEnteConvenzOrg() { + return this.idEnteConvenzOrg; + } + + public void setIdEnteConvenzOrg(BigDecimal idEnteConvenzOrg) { + this.idEnteConvenzOrg = idEnteConvenzOrg; + } + + @Id + @Column(name = "ID_ORGANIZ_IAM") + public BigDecimal getIdOrganizIam() { + return this.idOrganizIam; + } + + public void setIdOrganizIam(BigDecimal idOrganizIam) { + this.idOrganizIam = idOrganizIam; + } + +} \ No newline at end of file diff --git a/sacer-messaggi/genJava.py b/sacer-messaggi/genJava.py deleted file mode 100644 index 9411221f..00000000 --- a/sacer-messaggi/genJava.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -"""Genera la classe Java contenenete i messaggi dal file di properties.""" - -import re -import sys -import datetime -from xml.sax.saxutils import escape -from string import Template - - -def caricaTemplate(): - template = ''' -/* - * This class was automatically generated by - * genJava.py (written by Francesco Fioravanti) - * - * File encoding: UTF-8 - * - * THOU SHALT NOT EDIT THIS FILE! - * - */ - - // Last update: ${lastupdate} - -package it.eng.parer.ws.utils; - -import java.text.MessageFormat; -import java.util.ResourceBundle; - -public class MessaggiWSBundle { - - // Definisce le costanti utilizzate per il bundle dei messaggi di errore - private static final String BUNDLE_NAME = "messaggi_ws"; - private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); - public static final String DEFAULT_LOCALE = "it"; - - public static String getString(String key) { - return RESOURCE_BUNDLE.getString(key); - } - - public static String getString(String key, Object... params) { - return MessageFormat.format(RESOURCE_BUNDLE.getString(key), params); - } - - // Le righe che seguono verranno mostrate raggruppate in Netbeans - - // - ${messaggi} - // -} - ''' - return template - - -pattRiga = re.compile(r'^([A-Z0-9\-]*)\s+=\s*(.+)$') -pattRigaErrNum = re.compile(r'^\d.+') -pattCommento = re.compile(r'^#\s*(.+)') - -pattClasseJava = Template(caricaTemplate()) -strList = [] - -for line in open(sys.argv[1]): - outLinea = "" - rigaprefix = "" - jdoclinea = "" - - res = pattRiga.match(line) - if res: - riga = res.group(1) - resErr = pattRigaErrNum.match(riga) - if resErr: - rigaprefix = "ERR_" - jdoclinea = "\n\n /**\n * " \ - + escape(res.group(2).decode('unicode_escape')) + "\n */" - rigacnst = rigaprefix + riga.replace("-", "_") - outLinea = jdoclinea + "\n public static final String "\ - + rigacnst + " = \"" + riga + "\";" - else: - res2 = pattCommento.match(line) - if res2: - riga = res2.group(1) - outLinea = "\n // " + riga.rstrip().decode('unicode_escape') - # strList.append(outLinea.encode('windows-1252')) - strList.append(outLinea.encode('UTF-8')) - -print (pattClasseJava.substitute( - lastupdate=datetime.datetime.now(), - messaggi=''.join(strList))) diff --git a/sacer-messaggi/generaMessaggi.sh b/sacer-messaggi/generaMessaggi.sh deleted file mode 100755 index b2dceb24..00000000 --- a/sacer-messaggi/generaMessaggi.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -python genJava.py ../sacer-ejb/src/main/resources/messaggi_ws.properties > ../sacer-ejb/src/main/java/it/eng/parer/ws/utils/MessaggiWSBundle.java - diff --git a/sacer-slg/pom.xml b/sacer-slg/pom.xml index 72af6eda..9e6aca07 100644 --- a/sacer-slg/pom.xml +++ b/sacer-slg/pom.xml @@ -3,7 +3,7 @@ sacer-jboss it.eng.parer - 10.2.2-SNAPSHOT + 10.3.0 sacer-jboss-slg diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerRowBean.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerRowBean.java index 124f1486..006473df 100644 --- a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerRowBean.java +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerRowBean.java @@ -89,6 +89,14 @@ public String getTiStatoElenco() { return getString("ti_stato_elenco"); } + public String getTiFirma() { + return getString("ti_firma"); + } + + public void setTiFirma(String tiFirma) { + setObject("ti_firma", tiFirma); + } + public void setTiStatoElenco(String tiStatoElenco) { setObject("ti_stato_elenco", tiStatoElenco); } diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerTableDescriptor.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerTableDescriptor.java index 288ef005..f2038a6a 100644 --- a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerTableDescriptor.java +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/ElvElencoVerTableDescriptor.java @@ -78,6 +78,7 @@ public class ElvElencoVerTableDescriptor extends TableDescriptor { public static final String COL_DT_FIRMA_ELENCO_IX_AIP = "dt_firma_elenco_ix_aip"; public static final String COL_DT_MARCA_ELENCO_IX_AIP = "dt_marca_elenco_ix_aip"; public static final String COL_ID_STATO_ELENCO_VERS_COR = "id_stato_elenco_vers_cor"; + public static final String COL_TI_FIRMA = "ti_firma"; private static Map map = new LinkedHashMap(); @@ -118,6 +119,7 @@ public class ElvElencoVerTableDescriptor extends TableDescriptor { map.put(COL_TI_GEST_ELENCO, new ColumnDescriptor(COL_TI_GEST_ELENCO, Types.VARCHAR, 30, false)); map.put(COL_TI_VALID_ELENCO, new ColumnDescriptor(COL_TI_VALID_ELENCO, Types.VARCHAR, 30, false)); map.put(COL_TI_MOD_VALID_ELENCO, new ColumnDescriptor(COL_TI_MOD_VALID_ELENCO, Types.VARCHAR, 30, false)); + map.put(COL_TI_FIRMA, new ColumnDescriptor(COL_TI_FIRMA, Types.VARCHAR, 30, false)); map.put(COL_DT_CREAZIONE_ELENCO_IX_AIP, new ColumnDescriptor(COL_DT_CREAZIONE_ELENCO_IX_AIP, Types.TIMESTAMP, 7, false)); map.put(COL_NI_INDICI_AIP, new ColumnDescriptor(COL_NI_INDICI_AIP, Types.DECIMAL, 22, false)); diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateRowBean.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateRowBean.java new file mode 100644 index 00000000..16f9b1ea --- /dev/null +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateRowBean.java @@ -0,0 +1,181 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package it.eng.parer.slite.gen.tablebean; + +import it.eng.parer.entity.OrgAmbiente; +import it.eng.parer.entity.OrgEnte; +import it.eng.parer.entity.OrgStrut; +import it.eng.parer.entity.VrsSessioneVersKoEliminate; +import static it.eng.parer.slite.gen.tablebean.VrsSessioneVersKoEliminateRowBean.TABLE_DESCRIPTOR; +import it.eng.spagoLite.db.base.JEEBaseRowInterface; +import it.eng.spagoLite.db.base.row.BaseRow; +import it.eng.spagoLite.db.oracle.bean.column.TableDescriptor; +import java.math.BigDecimal; +import java.sql.Timestamp; + +/** + * + * @author gpiccioli + */ +public class VrsSessioneVersKoEliminateRowBean extends BaseRow implements JEEBaseRowInterface { + + public static VrsSessioneVersKoEliminateTableDescriptor TABLE_DESCRIPTOR = new VrsSessioneVersKoEliminateTableDescriptor(); + + public VrsSessioneVersKoEliminateRowBean() { + super(); + } + + public TableDescriptor getTableDescriptor() { + return TABLE_DESCRIPTOR; + } + + public BigDecimal getIdSessioneVersKoEliminate() { + return getBigDecimal("id_sessione_vers_ko_eliminate"); + } + + public void setIdSessioneVersKoEliminate(BigDecimal idSessioneVersKoEliminate) { + setObject("id_sessione_vers_ko_eliminate", idSessioneVersKoEliminate); + } + + public BigDecimal getIdStrut() { + return getBigDecimal("id_strut"); + } + + public void setIdStrut(BigDecimal idStrut) { + setObject("id_strut", idStrut); + } + + public String getDsStrut() { + return getString("ds_strut"); + } + + public void setDsStrut(String dsStrut) { + setObject("ds_strut", dsStrut); + } + + public String getNmStrut() { + return getString("nm_strut"); + } + + public void setNmStrut(String nmStrut) { + setObject("nm_strut", nmStrut); + } + + public String getNmEnte() { + return getString("nm_ente"); + } + + public void setNmEnte(String nmEnte) { + setObject("nm_ente", nmEnte); + } + + public String getNmAmbiente() { + return getString("nm_ambiente"); + } + + public void setNmAmbiente(String nmAmbiente) { + setObject("nm_ambiente", nmAmbiente); + } + + public BigDecimal getNiSesEliminate() { + return getBigDecimal("ni_ses_eliminate"); + } + + public void setNiSesEliminate(BigDecimal niSesEliminate) { + setObject("ni_ses_eliminate", niSesEliminate); + } + + public Timestamp getDtElab() { + return getTimestamp("dt_elab"); + } + + public void setDtElab(Timestamp dtElab) { + setObject("dt_elab", dtElab); + } + + public Timestamp getDtRif() { + return getTimestamp("dt_rif"); + } + + public void setDtRif(Timestamp dtRif) { + setObject("dt_rif", dtRif); + } + + @Override + public void entityToRowBean(Object obj) { + VrsSessioneVersKoEliminate entity = (VrsSessioneVersKoEliminate) obj; + + this.setIdSessioneVersKoEliminate(entity.getIdSessioneVersKoEliminata() == null ? null + : BigDecimal.valueOf(entity.getIdSessioneVersKoEliminata())); + + if (entity.getOrgStrut() != null) { + OrgStrut strut = entity.getOrgStrut(); + OrgEnte ente = strut.getOrgEnte(); + OrgAmbiente ambiente = ente.getOrgAmbiente(); + this.setIdStrut(new BigDecimal(strut.getIdStrut())); + this.setNmEnte(ente.getNmEnte()); + this.setNmAmbiente(ambiente.getNmAmbiente()); + } + + if (entity.getDsStrut() != null) { + this.setDsStrut(entity.getDsStrut()); + } + + if (entity.getNmStrut() != null) { + this.setNmStrut(entity.getNmStrut()); + } + + if (entity.getNiSesEliminate() != null) { + this.setNiSesEliminate(entity.getNiSesEliminate()); + } + + if (entity.getDtElab() != null) { + this.setDtElab(new Timestamp(entity.getDtElab().getTime())); + } + + if (entity.getDtRif() != null) { + this.setDtRif(new Timestamp(entity.getDtRif().getTime())); + } + } + + @Override + public VrsSessioneVersKoEliminate rowBeanToEntity() { + VrsSessioneVersKoEliminate entity = new VrsSessioneVersKoEliminate(); + + if (this.getIdSessioneVersKoEliminate() != null) { + entity.setIdSessioneVersKoEliminata(this.getIdSessioneVersKoEliminate().longValue()); + } + + if (this.getIdStrut() != null) { + if (entity.getOrgStrut() == null) { + entity.setOrgStrut(new OrgStrut()); + } + + entity.getOrgStrut().setIdStrut(this.getIdStrut().longValue()); + } + + if (this.getNmStrut() != null) { + entity.setNmStrut(this.getDsStrut()); + } + + if (this.getDsStrut() != null) { + entity.setDsStrut(this.getDsStrut()); + } + + if (this.getNiSesEliminate() != null) { + entity.setNiSesEliminate(this.getNiSesEliminate()); + } + + if (this.getDtElab() != null) { + entity.setDtElab(this.getDtElab()); + } + + if (this.getDtRif() != null) { + entity.setDtRif(this.getDtRif()); + } + + return entity; + } +} diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateTableBean.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateTableBean.java new file mode 100644 index 00000000..17b6d337 --- /dev/null +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateTableBean.java @@ -0,0 +1,34 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package it.eng.parer.slite.gen.tablebean; + +import static it.eng.parer.slite.gen.tablebean.VrsSessioneVersKoTableBean.TABLE_DESCRIPTOR; +import it.eng.spagoLite.db.base.table.AbstractBaseTable; +import it.eng.spagoLite.db.oracle.bean.column.TableDescriptor; + +/** + * + * @author gpiccioli + */ +public class VrsSessioneVersKoEliminateTableBean extends AbstractBaseTable { + + private static final long serialVersionUID = 1L; + + public static VrsSessioneVersKoEliminateTableDescriptor TABLE_DESCRIPTOR = new VrsSessioneVersKoEliminateTableDescriptor(); + + public VrsSessioneVersKoEliminateTableBean() { + super(); + } + + public TableDescriptor getTableDescriptor() { + return TABLE_DESCRIPTOR; + } + + @Override + protected VrsSessioneVersKoEliminateRowBean createRow() { + return new VrsSessioneVersKoEliminateRowBean(); + } + +} diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateTableDescriptor.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateTableDescriptor.java new file mode 100644 index 00000000..baf16488 --- /dev/null +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/tablebean/VrsSessioneVersKoEliminateTableDescriptor.java @@ -0,0 +1,55 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package it.eng.parer.slite.gen.tablebean; + +import it.eng.spagoLite.db.oracle.bean.column.ColumnDescriptor; +import it.eng.spagoLite.db.oracle.bean.column.TableDescriptor; +import java.sql.Types; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * + * @author gpiccioli + */ +public class VrsSessioneVersKoEliminateTableDescriptor extends TableDescriptor { + + public static final String SELECT = "Select * from Vrs_Sessione_Vers_Ko_Eliminate /**/"; + public static final String TABLE_NAME = "Vrs_Sessione_Vers_Ko_Eliminate"; + public static final String COL_ID_SESSIONE_VERS_KO_ELIMINATE = "id_sessione_vers_eliminate"; + public static final String COL_ID_STRUT = "id_strut"; + public static final String COL_NM_STRUT = "nm_strut"; + public static final String COL_DS_STRUT = "ds_strut"; + public static final String COL_NI_SES_ELIMINATE = "ni_ses_eliminate"; + public static final String COL_DT_ELAB = "dt_elab"; + public static final String COL_DT_RIF = "dt_rif"; + + private static Map map = new LinkedHashMap(); + + static { + map.put(COL_ID_SESSIONE_VERS_KO_ELIMINATE, + new ColumnDescriptor(COL_ID_SESSIONE_VERS_KO_ELIMINATE, Types.DECIMAL, 22, true)); + map.put(COL_ID_STRUT, new ColumnDescriptor(COL_ID_STRUT, Types.DECIMAL, 22, false)); + map.put(COL_NM_STRUT, new ColumnDescriptor(COL_NM_STRUT, Types.VARCHAR, 100, false)); + map.put(COL_DS_STRUT, new ColumnDescriptor(COL_DS_STRUT, Types.VARCHAR, 254, false)); + map.put(COL_NI_SES_ELIMINATE, new ColumnDescriptor(COL_NI_SES_ELIMINATE, Types.DECIMAL, 22, false)); + map.put(COL_DT_ELAB, new ColumnDescriptor(COL_DT_ELAB, Types.TIMESTAMP, 7, false)); + map.put(COL_DT_RIF, new ColumnDescriptor(COL_DT_RIF, Types.TIMESTAMP, 7, false)); + } + + public Map getColumnMap() { + return map; + } + + @Override + public String getTableName() { + return TABLE_NAME; + } + + @Override + public String getStatement() { + return SELECT; + } +} diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloRowBean.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloRowBean.java index c1d2b36e..1d357108 100644 --- a/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloRowBean.java +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloRowBean.java @@ -118,10 +118,18 @@ public String getCdKeyFascicolo() { return getString("cd_key_fascicolo"); } + public String getCdKeyNormalizFascicolo() { + return getString("cd_key_normaliz_fascicolo"); + } + public void setCdKeyFascicolo(String cd_key_fascicolo) { setObject("cd_key_fascicolo", cd_key_fascicolo); } + public void setCdKeyNormalizFascicolo(String cd_key_normaliz_fascicolo) { + setObject("cd_key_normaliz_fascicolo", cd_key_normaliz_fascicolo); + } + public BigDecimal getIdTipoFascicolo() { return getBigDecimal("id_tipo_fascicolo"); } @@ -798,6 +806,7 @@ public void entityToRowBean(Object obj) { this.setIdFascicolo(entity.getIdFascicolo()); this.setAaFascicolo(entity.getAaFascicolo()); this.setCdKeyFascicolo(entity.getCdKeyFascicolo()); + this.setCdKeyNormalizFascicolo(entity.getCdKeyNormalizFascicolo()); this.setIdTipoFascicolo(entity.getIdTipoFascicolo()); this.setNmTipoFascicolo(entity.getNmTipoFascicolo()); this.setDsOggettoFascicolo(entity.getDsOggettoFascicolo()); @@ -901,6 +910,7 @@ public FasVVisFascicolo rowBeanToEntity() { entity.setIdFascicolo(this.getIdFascicolo()); entity.setAaFascicolo(this.getAaFascicolo()); entity.setCdKeyFascicolo(this.getCdKeyFascicolo()); + entity.setCdKeyNormalizFascicolo(this.getCdKeyNormalizFascicolo()); entity.setIdTipoFascicolo(this.getIdTipoFascicolo()); entity.setNmTipoFascicolo(this.getNmTipoFascicolo()); entity.setDsOggettoFascicolo(this.getDsOggettoFascicolo()); diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloTableDescriptor.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloTableDescriptor.java index 8c92e545..fbb4101b 100644 --- a/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloTableDescriptor.java +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/FasVVisFascicoloTableDescriptor.java @@ -50,6 +50,7 @@ public class FasVVisFascicoloTableDescriptor extends TableDescriptor { public static final String COL_ID_FASCICOLO = "id_fascicolo"; public static final String COL_AA_FASCICOLO = "aa_fascicolo"; public static final String COL_CD_KEY_FASCICOLO = "cd_key_fascicolo"; + public static final String COL_CD_KEY_NORMALIZ_FASCICOLO = "cd_key_normaliz_fascicolo"; public static final String COL_ID_TIPO_FASCICOLO = "id_tipo_fascicolo"; public static final String COL_NM_TIPO_FASCICOLO = "nm_tipo_fascicolo"; public static final String COL_DS_OGGETTO_FASCICOLO = "ds_oggetto_fascicolo"; @@ -147,6 +148,8 @@ public class FasVVisFascicoloTableDescriptor extends TableDescriptor { map.put(COL_ID_FASCICOLO, new ColumnDescriptor(COL_ID_FASCICOLO, Types.DECIMAL, 22, true)); map.put(COL_AA_FASCICOLO, new ColumnDescriptor(COL_AA_FASCICOLO, Types.DECIMAL, 22, true)); map.put(COL_CD_KEY_FASCICOLO, new ColumnDescriptor(COL_CD_KEY_FASCICOLO, Types.VARCHAR, 100, true)); + map.put(COL_CD_KEY_NORMALIZ_FASCICOLO, + new ColumnDescriptor(COL_CD_KEY_NORMALIZ_FASCICOLO, Types.VARCHAR, 100, true)); map.put(COL_ID_TIPO_FASCICOLO, new ColumnDescriptor(COL_ID_TIPO_FASCICOLO, Types.DECIMAL, 22, true)); map.put(COL_NM_TIPO_FASCICOLO, new ColumnDescriptor(COL_NM_TIPO_FASCICOLO, Types.VARCHAR, 100, true)); map.put(COL_DS_OGGETTO_FASCICOLO, new ColumnDescriptor(COL_DS_OGGETTO_FASCICOLO, Types.VARCHAR, 4000, true)); diff --git a/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/MonVChkCntFascRowBean.java b/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/MonVChkCntFascRowBean.java index 4df6ba1a..36df39ed 100644 --- a/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/MonVChkCntFascRowBean.java +++ b/sacer-slg/src/main/java/it/eng/parer/slite/gen/viewbean/MonVChkCntFascRowBean.java @@ -43,7 +43,6 @@ public class MonVChkCntFascRowBean extends BaseRow implements JEEBaseRowInterfac public MonVChkCntFascRowBean() { super(); - resetCounters(); } public TableDescriptor getTableDescriptor() { diff --git a/sacer-slg/src/main/resources/forms/ElenchiVersFascicoli.xml b/sacer-slg/src/main/resources/forms/ElenchiVersFascicoli.xml index 180904d2..aaef45e1 100644 --- a/sacer-slg/src/main/resources/forms/ElenchiVersFascicoli.xml +++ b/sacer-slg/src/main/resources/forms/ElenchiVersFascicoli.xml @@ -134,6 +134,7 @@ + diff --git a/sacer-slg/src/main/resources/forms/ElenchiVersamento.xml b/sacer-slg/src/main/resources/forms/ElenchiVersamento.xml index bc1b50d4..20d3864f 100644 --- a/sacer-slg/src/main/resources/forms/ElenchiVersamento.xml +++ b/sacer-slg/src/main/resources/forms/ElenchiVersamento.xml @@ -1,4 +1,3 @@ -
@@ -205,6 +204,7 @@ + diff --git a/sacer-slg/src/main/resources/forms/Fascicoli.xml b/sacer-slg/src/main/resources/forms/Fascicoli.xml index 3fae551a..e9e44e35 100644 --- a/sacer-slg/src/main/resources/forms/Fascicoli.xml +++ b/sacer-slg/src/main/resources/forms/Fascicoli.xml @@ -179,6 +179,7 @@ + diff --git a/sacer-slg/src/main/resources/forms/Monitoraggio.xml b/sacer-slg/src/main/resources/forms/Monitoraggio.xml index c1675d3b..68cc127f 100644 --- a/sacer-slg/src/main/resources/forms/Monitoraggio.xml +++ b/sacer-slg/src/main/resources/forms/Monitoraggio.xml @@ -911,4 +911,24 @@