Skip to content

Commit

Permalink
Aggiunta conversione dell'esito operazione da Json a CSV.
Browse files Browse the repository at this point in the history
  • Loading branch information
pintorig committed Aug 5, 2019
1 parent 3889e0e commit 9b52fd2
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@ Background:

* def freemarker_request = encodeBase64InputStream(read('msg/freemarker-request.ftl'))
* def freemarker_response = encodeBase64InputStream(read('msg/freemarker-response.ftl'))
* def response_csv_header =


Given url backofficeBaseurl
And path 'configurazione',
And path 'configurazione'
And headers basicAutenticationHeader
And request
And request =
"""
[
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Background:
Scenario: Pagamento pendenza precaricata anonimo

* def idPendenza = getCurrentTimeMillis()
* def tracciato = read('classpath:test/api/backoffice/v1/tracciati/post/msg/tracciato-pendenze.json')

Given url backofficeBaseurl
And path 'pendenze', 'tracciati'
Expand Down
43 changes: 36 additions & 7 deletions jars/core/src/main/java/it/govpay/core/business/Tracciati.java
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ private void _elaboraTracciatoCSV(TracciatiBD tracciatiBD, Tracciato tracciato,

// Elaborazione completata. Processamento tracciato di esito
this.setStatoDettaglioTracciato(beanDati);
tracciato.setRawEsito(this.getEsitoElaborazioneTracciatoCSV(tracciato, operazioniBD, codDominio, codTipoVersamento).getBytes());
tracciato.setRawEsito(this.getEsitoElaborazioneTracciatoCSV(tracciato, operazioniBD, codDominio, codTipoVersamento, tracciatoCsv.getHeaderRisposta(), tracciatoCsv.getTrasformazioneRisposta()).getBytes());
tracciato.setFileNameEsito("esito_" + tracciato.getFileNameRichiesta());
this.setStatoTracciato(tracciato, beanDati);
tracciato.setDataCompletamento(new Date());
Expand Down Expand Up @@ -484,7 +484,7 @@ public DettaglioTracciatoPendenzeEsito getEsitoElaborazioneTracciato(Tracciato t
fsw.setSortOrder(SortOrder.ASC);
fsw.setField(it.govpay.orm.Operazione.model().LINEA_ELABORAZIONE);
fsl.add(fsw );
filter.setFilterSortList(fsl );
filter.setFilterSortList(fsl);

DettaglioTracciatoPendenzeEsito esitoElaborazioneTracciato = new DettaglioTracciatoPendenzeEsito();
esitoElaborazioneTracciato.setIdTracciato(tracciato.getFileNameRichiesta());
Expand Down Expand Up @@ -520,7 +520,7 @@ public DettaglioTracciatoPendenzeEsito getEsitoElaborazioneTracciato(Tracciato t
return esitoElaborazioneTracciato;
}

public String getEsitoElaborazioneTracciatoCSV(Tracciato tracciato, OperazioniBD operazioniBD, String codDominio, String codTipoVersamento) throws ServiceException, ValidationException {
public String getEsitoElaborazioneTracciatoCSV(Tracciato tracciato, OperazioniBD operazioniBD, String codDominio, String codTipoVersamento, String headerRisposta, String trasformazioneRisposta) throws ServiceException, ValidationException, java.io.IOException {
OperazioneFilter filter = operazioniBD.newFilter();
filter.setIdTracciato(tracciato.getId());
filter.setLimit(500);
Expand All @@ -534,7 +534,15 @@ public String getEsitoElaborazioneTracciatoCSV(Tracciato tracciato, OperazioniBD

ByteArrayOutputStream baos = new ByteArrayOutputStream();

baos.write(headerRisposta.getBytes());

if(trasformazioneRisposta.startsWith("\""))
trasformazioneRisposta = trasformazioneRisposta.substring(1);

if(trasformazioneRisposta.endsWith("\""))
trasformazioneRisposta = trasformazioneRisposta.substring(0, trasformazioneRisposta.length() - 1);

byte[] template = Base64.getDecoder().decode(trasformazioneRisposta.getBytes());

while(true) {
// Ciclo finche' non mi ritorna meno record del limit. Altrimenti esco perche' ho finito
Expand All @@ -543,10 +551,11 @@ public String getEsitoElaborazioneTracciatoCSV(Tracciato tracciato, OperazioniBD
switch (operazione.getTipoOperazione()) {
case ADD:
// trasformare il json in csv




try {
trasformazioneOutputCSV(log, baos, codDominio, codTipoVersamento, new String(operazione.getDatiRisposta()), template, headerRisposta);
} catch (GovPayException e) {
throw new ServiceException(e);
}
// esitiInserimenti.add(EsitoOperazionePendenza.parse(new String(operazione.getDatiRisposta())));
break;
case DEL:
Expand Down Expand Up @@ -644,4 +653,24 @@ public static String trasformazioneInputCSV(Logger log, String codDominio, Strin
throw new GovPayException(e.getMessage(), EsitoOperazione.TRASFORMAZIONE, e, e.getMessage());
}
}

public static String trasformazioneOutputCSV(Logger log, ByteArrayOutputStream baos, String codDominio, String codTipoVersamento, String jsonEsito, byte[] template, String headerRisposta) throws GovPayException {
log.debug("Trasformazione esito caricamento pendenza in formato JSON -> CSV tramite template freemarker ...");
String name = "TrasformazionePendenzaCSVtoJSON";
try {

if(baos == null)
baos = new ByteArrayOutputStream();

Map<String, Object> dynamicMap = new HashMap<String, Object>();
TrasformazioniUtils.fillDynamicMapRispostaTracciatoCSV(log, dynamicMap, ContextThreadLocal.get(), headerRisposta, jsonEsito, codDominio, codTipoVersamento);
TrasformazioniUtils.convertFreeMarkerTemplate(name, template , dynamicMap , baos );
// assegno il json trasformato
log.debug("Trasformazione esito caricamento pendenza JSON -> CSV tramite template freemarker completata con successo.");
return baos.toString();
} catch (TrasformazioneException e) {
log.error("Trasformazione esito caricamento pendenza JSON -> CSV tramite template freemarker completata con errore: " + e.getMessage(), e);
throw new GovPayException(e.getMessage(), EsitoOperazione.TRASFORMAZIONE, e, e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,6 @@ public class Costanti {
public final static String MAP_CONTENT_TYPE_MESSAGGIO_PROMEMORIA_DEFAULT_VALUE = "text/html";

public final static String MAP_LINEA_CSV_RICHIESTA = "lineaCsvRichiesta";

public final static String MAP_CSV_HEADER_RISPOSTA = "headerRisposta";
}
Original file line number Diff line number Diff line change
Expand Up @@ -247,4 +247,46 @@ public static void fillDynamicMapRichiestaTracciatoCSV(Logger log, Map<String, O
dynamicMap.put(Costanti.MAP_LINEA_CSV_RICHIESTA, linea);
}
}

public static void fillDynamicMapRispostaTracciatoCSV(Logger log, Map<String, Object> dynamicMap, IContext context, String headerRisposta, String json, String codDominio, String codTipoVersamento) {

if(dynamicMap.containsKey(Costanti.MAP_DATE_OBJECT)==false) {
dynamicMap.put(Costanti.MAP_DATE_OBJECT, DateManager.getDate());
}

if(context !=null) {
if(dynamicMap.containsKey(Costanti.MAP_CTX_OBJECT)==false) {
dynamicMap.put(Costanti.MAP_CTX_OBJECT, context);
}
if(dynamicMap.containsKey(Costanti.MAP_TRANSACTION_ID_OBJECT)==false) {
String idTransazione = context.getTransactionId();
dynamicMap.put(Costanti.MAP_TRANSACTION_ID_OBJECT, idTransazione);
}

GpContext ctx = (GpContext) ((org.openspcoop2.utils.service.context.Context)context).getApplicationContext();
if(ctx !=null && ctx.getEventoCtx()!=null && ctx.getEventoCtx().getUrl() != null) {
URLRegExpExtractor urle = new URLRegExpExtractor(ctx.getEventoCtx().getUrl(), log);
dynamicMap.put(Costanti.MAP_ELEMENT_URL_REGEXP, urle);
dynamicMap.put(Costanti.MAP_ELEMENT_URL_REGEXP.toLowerCase(), urle);
}
}

if(dynamicMap.containsKey(Costanti.MAP_CSV_HEADER_RISPOSTA)==false && headerRisposta !=null) {
dynamicMap.put(Costanti.MAP_CSV_HEADER_RISPOSTA, headerRisposta);
}

if(dynamicMap.containsKey(Costanti.MAP_ID_TIPO_VERSAMENTO)==false && codTipoVersamento !=null) {
dynamicMap.put(Costanti.MAP_ID_TIPO_VERSAMENTO, codTipoVersamento);
}

if(dynamicMap.containsKey(Costanti.MAP_ID_DOMINIO)==false && codDominio !=null) {
dynamicMap.put(Costanti.MAP_ID_DOMINIO, codDominio);
}

if(json !=null) {
PatternExtractor pe = new PatternExtractor(json, log);
dynamicMap.put(Costanti.MAP_ELEMENT_JSON_PATH, pe);
dynamicMap.put(Costanti.MAP_ELEMENT_JSON_PATH.toLowerCase(), pe);
}
}
}

0 comments on commit 9b52fd2

Please sign in to comment.