use of it.cnr.si.spring.storage.bulk.StorageFile in project sigla-main by consiglionazionaledellericerche.
the class DistintaCassiereComponent method generaFlussoSiopeplus.
public StorageObject generaFlussoSiopeplus(UserContext userContext, Distinta_cassiereBulk distinta) throws ComponentException, RemoteException {
try {
final DocumentiContabiliService documentiContabiliService = SpringUtil.getBean("documentiContabiliService", DocumentiContabiliService.class);
DateTimeFormatter formatterTime = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
JAXBContext jc = JAXBContext.newInstance("it.siopeplus");
// creo i file del flusso
// Testata
final ObjectFactory objectFactory = new ObjectFactory();
it.siopeplus.FlussoOrdinativi currentFlusso = objectFactory.createFlussoOrdinativi();
Configurazione_cnrComponentSession sess = (Configurazione_cnrComponentSession) it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession");
String codiceAbi = Optional.ofNullable(sess.getVal01(userContext, CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FLUSSO_ORDINATIVI, Configurazione_cnrBulk.SK_CODICE_ABI_BT)).orElseThrow(() -> new ApplicationException("Configurazione mancante per flusso Ordinativo [CODICE_ABI_BT]"));
String codiceA2A = Optional.ofNullable(sess.getVal01(userContext, CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FLUSSO_ORDINATIVI, Configurazione_cnrBulk.SK_CODICE_A2A)).orElseThrow(() -> new ApplicationException("Configurazione mancante per flusso Ordinativo [CODICE_A2A]"));
String codiceEnte = Optional.ofNullable(sess.getVal01(userContext, CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FLUSSO_ORDINATIVI, Configurazione_cnrBulk.SK_CODICE_ENTE)).orElseThrow(() -> new ApplicationException("Configurazione mancante per flusso Ordinativo [CODICE_ENTE]"));
String codiceEnteBT = Optional.ofNullable(sess.getVal01(userContext, CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FLUSSO_ORDINATIVI, Configurazione_cnrBulk.SK_CODICE_ENTE_BT)).orElseThrow(() -> new ApplicationException("Configurazione mancante per flusso Ordinativo [CODICE_ENTE_BT]"));
String codiceTramiteBT = Optional.ofNullable(sess.getVal01(userContext, CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FLUSSO_ORDINATIVI, Configurazione_cnrBulk.SK_CODICE_TRAMITE_BT)).orElseThrow(() -> new ApplicationException("Configurazione mancante per flusso Ordinativo [CODICE_TRAMITE_BT]"));
String codiceIstatEnte = Optional.ofNullable(sess.getVal01(userContext, CNRUserContext.getEsercizio(userContext), null, Configurazione_cnrBulk.PK_FLUSSO_ORDINATIVI, Configurazione_cnrBulk.SK_CODICE_ISTAT_ENTE)).orElseThrow(() -> new ApplicationException("Configurazione mancante per flusso Ordinativo [CODICE_ISTAT_ENTE]"));
final CtTestataFlusso testataFlusso = objectFactory.createCtTestataFlusso();
testataFlusso.setCodiceABIBT(codiceAbi);
testataFlusso.setRiferimentoEnte(codiceA2A);
testataFlusso.setIdentificativoFlusso(distinta.getIdentificativoFlusso());
testataFlusso.setDataOraCreazioneFlusso(DatatypeFactory.newInstance().newXMLGregorianCalendar(formatterTime.format(it.cnr.jada.util.ejb.EJBCommonServices.getServerTimestamp().toLocalDateTime())));
testataFlusso.setCodiceEnte(codiceEnte);
testataFlusso.setCodiceEnteBT(codiceEnteBT);
testataFlusso.setCodiceTramiteEnte(codiceA2A);
testataFlusso.setCodiceTramiteBT(codiceTramiteBT);
AnagraficoComponentSession component = (AnagraficoComponentSession) it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRANAGRAF00_EJB_AnagraficoComponentSession");
AnagraficoBulk uoEnte = component.getAnagraficoEnte(userContext);
testataFlusso.setDescrizioneEnte(uoEnte.getRagione_sociale());
testataFlusso.setCodiceIstatEnte(codiceIstatEnte);
testataFlusso.setCodiceFiscaleEnte(uoEnte.getCodice_fiscale());
currentFlusso.getContent().add(objectFactory.createTestataFlusso(testataFlusso));
currentFlusso.getContent().add(objectFactory.createEsercizio(CNRUserContext.getEsercizio(userContext)));
List dettagliRev = dettagliDistinta(userContext, distinta, it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk.TIPO_REV);
// Elaboriamo prima le reversali
Reversale currentReversale = null;
for (Iterator i = dettagliRev.iterator(); i.hasNext(); ) {
V_mandato_reversaleBulk bulk = (V_mandato_reversaleBulk) i.next();
currentFlusso.getContent().add(objectFactory.createReversale(creaReversaleFlussoSiopeplus(userContext, bulk)));
}
List dettagliMan = dettagliDistinta(userContext, distinta, it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk.TIPO_MAN);
// Mandati
Mandato currentMandato = null;
for (Iterator i = dettagliMan.iterator(); i.hasNext(); ) {
V_mandato_reversaleBulk bulk = (V_mandato_reversaleBulk) i.next();
currentFlusso.getContent().add(objectFactory.createMandato(creaMandatoFlussoSiopeplus(userContext, bulk)));
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Marshaller jaxbMarshaller = jc.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
jaxbMarshaller.marshal(currentFlusso, byteArrayOutputStream);
// FIX per firma xml
String out = new String(byteArrayOutputStream.toByteArray(), StandardCharsets.UTF_8);
out = out.replace("</flusso_ordinativi>", "\n</flusso_ordinativi>");
StorageFile storageFile = new StorageFile(out.getBytes(StandardCharsets.UTF_8), MimeTypes.XML.mimetype(), distinta.getFileNameXML());
final StorageObject storageObject = documentiContabiliService.getStorageObjectBykey(documentiContabiliService.restoreSimpleDocument(storageFile, new ByteArrayInputStream(storageFile.getBytes()), storageFile.getContentType(), storageFile.getFileName(), distinta.getStorePath(), true).getKey());
final BigInteger dimension = storageObject.<BigInteger>getPropertyValue(StoragePropertyNames.CONTENT_STREAM_LENGTH.value()).divide(BigInteger.valueOf(1024));
if (dimension.add(BigInteger.valueOf(7)).compareTo(DistintaCassiereComponentSession.MAX_OPI_DIMENSION) > 0) {
throw new ApplicationMessageFormatException("La dimensione del flusso {0}kbytes supera la dimensione massima consentita {1}kbytes!", dimension.add(BigInteger.valueOf(7)), DistintaCassiereComponentSession.MAX_OPI_DIMENSION);
}
return storageObject;
} catch (Exception e) {
throw handleException(e);
}
}
use of it.cnr.si.spring.storage.bulk.StorageFile in project sigla-main by consiglionazionaledellericerche.
the class TrasmissioneFatture method salvaFileSuDocumentale.
private void salvaFileSuDocumentale(DataHandler data, String nomeFile, Fattura_attivaBulk fattura, StorageDocAmmAspect aspect) throws IOException, ApplicationException {
logger.info("Inizio Salvataggio sul Documentale");
DocumentiCollegatiDocAmmService documentiCollegatiDocAmmService = SpringUtil.getBean("documentiCollegatiDocAmmService", DocumentiCollegatiDocAmmService.class);
StorageFile storageFile = new StorageFileFatturaAttiva(data.getInputStream(), data.getContentType(), nomeFile, fattura);
if (storageFile != null) {
String path = storageFile.getStorageParentPath();
try {
StorageObject storageObject = documentiCollegatiDocAmmService.restoreSimpleDocument(storageFile, storageFile.getInputStream(), storageFile.getContentType(), storageFile.getFileName(), path, true);
documentiCollegatiDocAmmService.addAspect(storageObject, aspect.value());
storageFile.setStorageObject(storageObject);
logger.info("Salvato file sul Documentale");
} catch (StorageException e) {
if (e.getType().equals(StorageException.Type.CONSTRAINT_VIOLATED))
throw new ApplicationException("CMIS - File Ricevuta Consegna [" + storageFile.getFileName() + "] già presente o non completo di tutte le proprietà obbligatorie. Inserimento non possibile!");
throw new ApplicationException("CMIS - Errore nella registrazione del file Ricevuta Consegna sul Documentale (" + e.getMessage() + ")");
}
}
}
use of it.cnr.si.spring.storage.bulk.StorageFile in project sigla-main by consiglionazionaledellericerche.
the class CRUDDistintaCassiereBP method invia.
public void invia(ActionContext context, FirmaOTPBulk firmaOTPBulk) throws Exception {
Map<String, String> subjectDN = Optional.ofNullable(SpringUtil.getBean("documentiContabiliService", DocumentiContabiliService.class).getCertSubjectDN(firmaOTPBulk.getUserName(), firmaOTPBulk.getPassword())).orElseThrow(() -> new ApplicationException("Errore nella lettura dei certificati!\nVerificare Nome Utente e Password!"));
if (Optional.ofNullable(controlloCodiceFiscale).filter(s -> s.equalsIgnoreCase("Y")).isPresent()) {
SpringUtil.getBean("documentiContabiliService", DocumentiContabiliService.class).controllaCodiceFiscale(subjectDN, ((CNRUserInfo) context.getUserInfo()).getUtente());
}
if (!this.isFlusso() && !this.isAnnulli() && isAttivoSiopeplus()) {
Distinta_cassiereBulk distintaProvvisoria = (Distinta_cassiereBulk) getModel();
// spostato nel salva definitivo anche in questo caso
StorageObject distintaStorageObject = Optional.ofNullable(distintaProvvisoria.getPg_distinta_def()).map(paDistintaDef -> documentiContabiliService.getStorageObjectByPath(distintaProvvisoria.getStorePath().concat(StorageDriver.SUFFIX).concat(distintaProvvisoria.getCMISName()))).orElse(inviaDistinta(context, distintaProvvisoria));
Distinta_cassiereBulk distinta = (Distinta_cassiereBulk) getModel();
List<String> nodes = new ArrayList<String>();
nodes.add(distintaStorageObject.getPropertyValue(StoragePropertyNames.ALFCMIS_NODEREF.value()));
List<V_mandato_reversaleBulk> dettagliRev = ((DistintaCassiereComponentSession) createComponentSession()).dettagliDistinta(context.getUserContext(), distinta, it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk.TIPO_REV);
dettagliRev.stream().map(v_mandato_reversaleBulk -> documentiContabiliService.getDocumentKey(v_mandato_reversaleBulk, true)).filter(s -> s != null).forEach(s -> nodes.add(s));
List<V_mandato_reversaleBulk> dettagliMan = ((DistintaCassiereComponentSession) createComponentSession()).dettagliDistinta(context.getUserContext(), distinta, it.cnr.contab.doccont00.core.bulk.Numerazione_doc_contBulk.TIPO_MAN);
dettagliMan.stream().map(v_mandato_reversaleBulk -> documentiContabiliService.getDocumentKey(v_mandato_reversaleBulk, true)).filter(s -> s != null).forEach(s -> nodes.add(s));
PdfSignApparence pdfSignApparence = new PdfSignApparence();
pdfSignApparence.setNodes(nodes);
pdfSignApparence.setUsername(firmaOTPBulk.getUserName());
pdfSignApparence.setPassword(firmaOTPBulk.getPassword());
pdfSignApparence.setOtp(firmaOTPBulk.getOtp());
Apparence apparence = new Apparence(null, "Rome", "Firma ", "per invio all'Istituto cassiere\nFirmato dal " + getTitolo() + "\n" + subjectDN.get("GIVENNAME") + " " + subjectDN.get("SURNAME"), 400, 120, 1, 550, 80);
// 300, 40, 1, 550, 80);
pdfSignApparence.setApparence(apparence);
try {
documentiContabiliService.signDocuments(pdfSignApparence, "service/sigla/firma/doccont");
} catch (StorageException _ex) {
throw new ApplicationException(FirmaOTPBulk.errorMessage(_ex.getMessage()));
}
try {
if (!this.isAnnulli()) {
if (distinta.getEsercizio() != null && distinta.getPg_distinta_def() != null)
documentiContabiliService.inviaDistintaPEC(nodes, this.isSepa(), distinta.getEsercizio() + "/" + distinta.getPg_distinta_def());
else
documentiContabiliService.inviaDistintaPEC(nodes, this.isSepa(), null);
}
distinta.setDt_invio_pec(DateServices.getDt_valida(context.getUserContext()));
distinta.setUser(context.getUserContext().getUser());
distinta.setToBeUpdated();
setModel(context, createComponentSession().modificaConBulk(context.getUserContext(), distinta));
commitUserTransaction();
setMessage("Invio effettuato correttamente.");
} catch (IOException e) {
throw new BusinessProcessException(e);
} catch (Exception e) {
throw new BusinessProcessException(e);
}
} else {
Distinta_cassiereBulk distinta = (Distinta_cassiereBulk) getModel();
generaXML(context);
File file = new File(System.getProperty("tmp.dir.SIGLAWeb") + getFile());
StorageFile storageFile = new StorageFile(file, file.getName());
if (storageFile != null) {
// E' previsto solo l'inserimento ma non l'aggiornamento
try {
StorageObject storageObject = documentiContabiliService.restoreSimpleDocument(storageFile, storageFile.getInputStream(), storageFile.getContentType(), storageFile.getFileName(), distinta.getStorePath(), false);
storageFile.setStorageObject(storageObject);
} catch (StorageException e) {
if (e.getType().equals(StorageException.Type.CONSTRAINT_VIOLATED))
throw new ApplicationException("File [" + storageFile.getFileName() + "] già presente o non completo di tutte le proprietà obbligatorie. Inserimento non possibile!");
throw new ApplicationException("Errore nella registrazione del file XML sul Documentale (" + e.getMessage() + ")");
}
if (storageFile.getStorageObject().<BigInteger>getPropertyValue(StoragePropertyNames.CONTENT_STREAM_LENGTH.value()).intValue() > 0) {
Optional.ofNullable(documentiContabiliService.getStorageObjectByPath(distinta.getStorePath().concat(StorageDriver.SUFFIX).concat(String.valueOf(distinta.getEsercizio())).concat("-").concat(distinta.getCd_unita_organizzativa()).concat("-").concat(String.valueOf(distinta.getPg_distinta_def())).concat("-I.").concat(formatoflusso).concat(".p7m"))).ifPresent(storageObject -> documentiContabiliService.delete(storageObject));
String nomeFile = file.getName();
String nomeFileP7m = nomeFile + ".p7m";
SignP7M signP7M = new SignP7M(storageFile.getStorageObject().getPropertyValue(StoragePropertyNames.ALFCMIS_NODEREF.value()), firmaOTPBulk.getUserName(), firmaOTPBulk.getPassword(), firmaOTPBulk.getOtp(), nomeFileP7m);
try {
final String signDocument = documentiContabiliService.signDocuments(signP7M, "service/sigla/firma/p7m", distinta.getStorePath());
documentiContabiliService.inviaDistintaPEC(Arrays.asList(signDocument), this.isSepa(), "<acquisizione_flusso_ordinativi_sepa>");
distinta.setDt_invio_pec(DateServices.getDt_valida(context.getUserContext()));
distinta.setUser(context.getUserContext().getUser());
distinta.setToBeUpdated();
final OggettoBulk oggettoBulk = createComponentSession().modificaConBulk(context.getUserContext(), distinta);
commitUserTransaction();
initializeModelForEdit(context, oggettoBulk);
setMessage("Invio effettuato correttamente.");
} catch (StorageException _ex) {
throw new ApplicationException(FirmaOTPBulk.errorMessage(_ex.getMessage()));
}
} else {
throw new ApplicationException("Errore durante il processo di firma elettronica. Ripetere l'operazione di firma!");
}
}
}
}
use of it.cnr.si.spring.storage.bulk.StorageFile in project sigla-main by consiglionazionaledellericerche.
the class DocumentiContabiliService method messaggioACK.
private void messaggioACK(Risultato risultato) throws RemoteException, ComponentException {
final MessaggioXML<MessaggioAckSiope> messaggioXML = ordinativiSiopePlusService.getLocation(risultato.getLocation(), MessaggioAckSiope.class);
final MessaggioAckSiope messaggioAckSiope = messaggioXML.getObject();
logger.info("Identificativo flusso: {}", messaggioAckSiope.getIdentificativoFlusso());
Distinta_cassiereBulk distinta = fetchDistinta_cassiereBulk(messaggioAckSiope.getIdentificativoFlusso());
/**
* Carico il file del messaggio
*/
StorageFile storageFile = new StorageFile(messaggioXML.getContent(), MimeTypes.XML.mimetype(), messaggioXML.getName());
storageFile.setTitle("Acquisito il " + formatter.format(risultato.getDataProduzione().toInstant().atZone(ZoneId.systemDefault())));
final Integer progFlusso = risultato.getProgFlusso();
StringBuffer description = new StringBuffer();
switch(messaggioAckSiope.getStatoFlusso()) {
case WARNING:
{
description.append("WARNING:\n");
messaggioAckSiope.getWarning().stream().map(ctErroreACK -> ctErroreACK.getDescrizione().concat(" - ").concat(ctErroreACK.getElemento())).peek(logger::warn).forEach(s -> {
description.append(s.concat("\n"));
});
Optional.ofNullable(distinta.getStato()).filter(s -> s.equals(Distinta_cassiereBulk.Stato.TRASMESSA.value())).ifPresent(s -> distinta.setStato(Distinta_cassiereBulk.Stato.ACCETTATO_SIOPEPLUS));
break;
}
case OK:
{
Optional.ofNullable(distinta.getStato()).filter(s -> s.equals(Distinta_cassiereBulk.Stato.TRASMESSA.value())).ifPresent(s -> distinta.setStato(Distinta_cassiereBulk.Stato.ACCETTATO_SIOPEPLUS));
break;
}
case KO:
{
description.append("ERROR:\n");
messaggioAckSiope.getErrore().stream().map(ctErroreACK -> ctErroreACK.getDescrizione().concat(" - ").concat(ctErroreACK.getElemento())).peek(logger::error).forEach(s -> {
description.append(s.concat("\n"));
});
distinta.setStato(Distinta_cassiereBulk.Stato.RIFIUTATO_SIOPEPLUS);
break;
}
}
storageFile.setDescription(description.toString());
final StorageObject storageObject = restoreSimpleDocument(storageFile, new ByteArrayInputStream(storageFile.getBytes()), storageFile.getContentType(), storageFile.getFileName(), distinta.getStorePath(), true);
distinta.setToBeUpdated();
crudComponentSession.modificaConBulk(userContext, distinta);
}
use of it.cnr.si.spring.storage.bulk.StorageFile in project sigla-main by consiglionazionaledellericerche.
the class DocumentiCollegatiDocAmmService method archiviaFileCMIS.
private void archiviaFileCMIS(UserContext userContext, DocumentiCollegatiDocAmmService documentiCollegatiDocAmmService, Fattura_attivaBulk fattura, File file) throws ComponentException {
List<StorageFile> storageFileCreate = new ArrayList<StorageFile>();
List<StorageFile> storageFileAnnullati = new ArrayList<StorageFile>();
try {
StorageFileFatturaAttiva storageFile = new StorageFileFatturaAttiva(file, fattura, "application/pdf", "FAPP" + fattura.constructCMISNomeFile() + ".pdf");
String path = storageFile.getStorageParentPath();
StorageObject folder = documentiCollegatiDocAmmService.getStorageObjectByPath(path);
try {
Optional.ofNullable(documentiCollegatiDocAmmService.restoreSimpleDocument(storageFile, storageFile.getInputStream(), storageFile.getContentType(), storageFile.getFileName(), path, true)).ifPresent(storageObject -> {
List<String> aspects = storageObject.<List<String>>getPropertyValue(StoragePropertyNames.SECONDARY_OBJECT_TYPE_IDS.value());
aspects.add(StorageDocAmmAspect.SIGLA_FATTURE_ATTACHMENT_STAMPA_FATTURA_PRIMA_PROTOCOLLO.value());
documentiCollegatiDocAmmService.updateProperties(storageFile.getCMISFolder(fattura), folder);
documentiCollegatiDocAmmService.updateProperties(Collections.singletonMap(StoragePropertyNames.SECONDARY_OBJECT_TYPE_IDS.value(), aspects), storageObject);
storageFile.setStorageObject(storageObject);
storageFileCreate.add(storageFile);
});
} catch (StorageException _ex) {
if (_ex.getType().equals(StorageException.Type.CONSTRAINT_VIOLATED))
throw new ApplicationException("CMIS - File [" + storageFile.getFileName() + "] già presente o non completo di tutte le proprietà obbligatorie. Inserimento non possibile!");
throw new ApplicationException("CMIS - Errore nella registrazione del file XML sul Documentale (" + _ex.getMessage() + ")");
}
} catch (Exception e) {
// Codice per riallineare il documentale allo stato precedente rispetto alle modifiche
for (StorageFile storageFile : storageFileCreate) documentiCollegatiDocAmmService.delete(storageFile.getStorageObject());
for (StorageFile storageFile : storageFileAnnullati) {
String cmisFileName = storageFile.getFileName();
String cmisFileEstensione = cmisFileName.substring(cmisFileName.lastIndexOf(".") + 1);
String stringToDelete = cmisFileName.substring(cmisFileName.indexOf("-ANNULLATO"));
storageFile.setFileName(cmisFileName.replace(stringToDelete, "." + cmisFileEstensione));
documentiCollegatiDocAmmService.updateProperties(storageFile, storageFile.getStorageObject());
}
throw new ApplicationException(e.getMessage());
}
}
Aggregations