Messaggio.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */


  20. package org.openspcoop2.protocol.sdk.dump;

  21. import java.io.Serializable;
  22. import java.util.ArrayList;
  23. import java.util.Date;
  24. import java.util.HashMap;
  25. import java.util.Iterator;
  26. import java.util.List;
  27. import java.util.Map;

  28. import org.openspcoop2.core.constants.TipoPdD;
  29. import org.openspcoop2.core.id.IDServizio;
  30. import org.openspcoop2.core.id.IDSoggetto;
  31. import org.openspcoop2.core.transazioni.DumpAllegato;
  32. import org.openspcoop2.core.transazioni.DumpContenuto;
  33. import org.openspcoop2.core.transazioni.DumpHeaderAllegato;
  34. import org.openspcoop2.core.transazioni.DumpHeaderTrasporto;
  35. import org.openspcoop2.core.transazioni.DumpMessaggio;
  36. import org.openspcoop2.core.transazioni.DumpMultipartHeader;
  37. import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
  38. import org.openspcoop2.message.constants.MessageType;
  39. import org.openspcoop2.utils.io.DumpByteArrayOutputStream;
  40. import org.openspcoop2.utils.transport.TransportUtils;

  41. /**
  42.  * Messaggio
  43.  *
  44.  * @author Poli Andrea (apoli@link.it)
  45.  * @author $Author$
  46.  * @version $Rev$, $Date$
  47.  */
  48. public class Messaggio implements Serializable{

  49.     /**
  50.      *
  51.      */
  52.     private static final long serialVersionUID = 4718160136521047108L;
  53.    
  54.     private TipoMessaggio tipoMessaggio;
  55.    
  56.     private String servizioApplicativoErogatore;
  57.    
  58.     private Date dataConsegna;
  59.    
  60.     private MessageType formatoMessaggio;
  61.    
  62.     private String contentType;
  63.    
  64.     private transient DumpByteArrayOutputStream body;
  65.     private BodyMultipartInfo bodyMultipartInfo;

  66.     private List<Attachment> attachments = new ArrayList<>();
  67.    
  68.     private Map<String, List<String>> headers = new HashMap<>();
  69.    
  70.     private Map<String, String> contenuti = new HashMap<>();
  71.    
  72.     private String idTransazione;

  73.     private Date gdo;

  74.     private String protocollo;
  75.    
  76.    
  77.     // le restanti informazioni non vengono serializzate su database o filesystem.
  78.    
  79.     private IDSoggetto dominio;
  80.     private TipoPdD tipoPdD;
  81.     private String idFunzione;
  82.    
  83.     private String idBusta;
  84.     private IDSoggetto fruitore;
  85.     private IDServizio servizio;
  86.    
  87.     // indicazione store
  88.     private boolean stored = false;
  89.     public boolean isStored() {
  90.         return this.stored;
  91.     }
  92.     public void setStored(boolean stored) {
  93.         this.stored = stored;
  94.     }

  95.    
  96.     public Messaggio() {}
  97.     public Messaggio(DumpMessaggio dumpMessaggio) {
  98.        
  99.         this.tipoMessaggio = dumpMessaggio.getTipoMessaggio();
  100.        
  101.         this.servizioApplicativoErogatore = dumpMessaggio.getServizioApplicativoErogatore();
  102.        
  103.         this.dataConsegna = dumpMessaggio.getDataConsegnaErogatore();
  104.        
  105.         if(dumpMessaggio.getFormatoMessaggio()!=null) {
  106.             this.formatoMessaggio = MessageType.valueOf(dumpMessaggio.getFormatoMessaggio());
  107.         }
  108.        
  109.         this.contentType = dumpMessaggio.getContentType();
  110.        
  111.         this.body = DumpByteArrayOutputStream.newInstance(dumpMessaggio.getBody());
  112.         if(dumpMessaggio.getMultipartContentId()!=null ||
  113.                 dumpMessaggio.getMultipartContentLocation()!=null ||
  114.                 dumpMessaggio.getMultipartContentType()!=null ||
  115.                 dumpMessaggio.getMultipartHeaderList()!=null ||
  116.                 dumpMessaggio.getMultipartHeaderList().size()>0) {
  117.             this.bodyMultipartInfo = new BodyMultipartInfo();
  118.             this.bodyMultipartInfo.setContentId(dumpMessaggio.getMultipartContentId());
  119.             this.bodyMultipartInfo.setContentLocation(dumpMessaggio.getMultipartContentLocation());
  120.             this.bodyMultipartInfo.setContentType(dumpMessaggio.getMultipartContentType());
  121.             if(dumpMessaggio.getMultipartHeaderList()!=null ||
  122.                 dumpMessaggio.getMultipartHeaderList().size()>0) {
  123.                 for (DumpMultipartHeader hdr : dumpMessaggio.getMultipartHeaderList()) {
  124.                     String valore = hdr.getValore();
  125.                     if(valore==null) {
  126.                         valore = "";
  127.                     }
  128.                     TransportUtils.addHeader(this.bodyMultipartInfo.getHeaders(), hdr.getNome(), valore);
  129.                 }
  130.             }
  131.         }
  132.        
  133.         if(dumpMessaggio.sizeAllegatoList()>0) {
  134.             for (DumpAllegato allegato : dumpMessaggio.getAllegatoList()) {
  135.                 Attachment attachment = new Attachment();
  136.                 attachment.setContentId(allegato.getContentId());
  137.                 attachment.setContentLocation(allegato.getContentLocation());
  138.                 attachment.setContentType(allegato.getContentType());
  139.                 attachment.setContent(allegato.getAllegato());
  140.                 if(allegato.sizeHeaderList()>0) {
  141.                     for (DumpHeaderAllegato hdr : allegato.getHeaderList()) {
  142.                         String valore = hdr.getValore();
  143.                         if(valore==null) {
  144.                             valore = "";
  145.                         }
  146.                         TransportUtils.addHeader(attachment.getHeaders(), hdr.getNome(), valore);
  147.                     }
  148.                 }
  149.                 this.attachments.add(attachment);
  150.             }
  151.         }
  152.        
  153.         if(dumpMessaggio.sizeHeaderTrasportoList()>0) {
  154.             for (DumpHeaderTrasporto hdr : dumpMessaggio.getHeaderTrasportoList()) {
  155.                 String valore = hdr.getValore();
  156.                 if(valore==null) {
  157.                     valore = "";
  158.                 }
  159.                 TransportUtils.addHeader(this.headers, hdr.getNome(), valore);
  160.             }
  161.         }
  162.        
  163.         if(dumpMessaggio.sizeContenutoList()>0) {
  164.             for (DumpContenuto contenuto : dumpMessaggio.getContenutoList()) {
  165.                 String valore = contenuto.getValore();
  166.                 if(valore==null) {
  167.                     valore = "";
  168.                 }
  169.                 this.contenuti.put(contenuto.getNome(), valore);
  170.             }
  171.         }
  172.        
  173.         this.idTransazione = dumpMessaggio.getIdTransazione();
  174.        
  175.         this.gdo = dumpMessaggio.getDumpTimestamp();
  176.        
  177.         this.protocollo = dumpMessaggio.getProtocollo();
  178.     }
  179.    
  180.     public DumpMessaggio toDumpMessaggio() {
  181.        
  182.         DumpMessaggio dumpMessaggio = new DumpMessaggio();
  183.        
  184.         dumpMessaggio.setTipoMessaggio(this.tipoMessaggio);
  185.        
  186.         dumpMessaggio.setServizioApplicativoErogatore(this.servizioApplicativoErogatore);
  187.        
  188.         dumpMessaggio.setDataConsegnaErogatore(this.dataConsegna);
  189.        
  190.         if(this.formatoMessaggio!=null) {
  191.             dumpMessaggio.setFormatoMessaggio(this.formatoMessaggio.name());
  192.         }
  193.        
  194.         dumpMessaggio.setContentType(this.contentType);
  195.        
  196.         if(this.body!=null && this.body.size()>0) {
  197.             dumpMessaggio.setBody(this.body.toByteArray());
  198.         }
  199.         if(this.bodyMultipartInfo!=null) {
  200.             dumpMessaggio.setMultipartContentId(this.bodyMultipartInfo.getContentId());
  201.             dumpMessaggio.setMultipartContentLocation(this.bodyMultipartInfo.getContentLocation());
  202.             dumpMessaggio.setMultipartContentType(this.bodyMultipartInfo.getContentType());
  203.             if(this.bodyMultipartInfo.getHeaders()!=null && this.bodyMultipartInfo.getHeaders().size()>0) {
  204.                 Iterator<String> its = this.bodyMultipartInfo.getHeaders().keySet().iterator();
  205.                 while (its.hasNext()) {
  206.                     String key = (String) its.next();
  207.                     List<String> values = this.bodyMultipartInfo.getHeaders().get(key);
  208.                     if(values!=null && !values.isEmpty()) {
  209.                         for (String value : values) {
  210.                             DumpMultipartHeader multipartHeader = new DumpMultipartHeader();
  211.                             multipartHeader.setDumpTimestamp(this.gdo);
  212.                             multipartHeader.setNome(key);
  213.                             multipartHeader.setValore(value);
  214.                             dumpMessaggio.addMultipartHeader(multipartHeader);      
  215.                         }
  216.                     }
  217.                 }
  218.             }
  219.         }
  220.        
  221.         if(this.attachments.size()>0) {
  222.             for (Attachment attachment : this.attachments) {
  223.                 DumpAllegato dumpAllegato = new DumpAllegato();
  224.                 dumpAllegato.setContentId(attachment.getContentId());
  225.                 dumpAllegato.setContentLocation(attachment.getContentLocation());
  226.                 dumpAllegato.setContentType(attachment.getContentType());
  227.                 dumpAllegato.setAllegato(attachment.getContent());
  228.                 dumpAllegato.setDumpTimestamp(this.gdo);
  229.                 if(attachment.getHeaders()!=null && attachment.getHeaders().size()>0) {
  230.                     Iterator<String> its = attachment.getHeaders().keySet().iterator();
  231.                     while (its.hasNext()) {
  232.                         String key = (String) its.next();
  233.                         List<String> values = attachment.getHeaders().get(key);
  234.                         if(values!=null && !values.isEmpty()) {
  235.                             for (String value : values) {
  236.                                 DumpHeaderAllegato dumpHeaderAllegato = new DumpHeaderAllegato();
  237.                                 dumpHeaderAllegato.setDumpTimestamp(this.gdo);
  238.                                 dumpHeaderAllegato.setNome(key);
  239.                                 dumpHeaderAllegato.setValore(value);
  240.                                 dumpAllegato.addHeader(dumpHeaderAllegato);    
  241.                             }
  242.                         }
  243.                     }
  244.                 }
  245.                 dumpMessaggio.addAllegato(dumpAllegato);
  246.             }
  247.         }
  248.        
  249.         if(this.headers.size()>0) {
  250.             Iterator<String> its = this.headers.keySet().iterator();
  251.             while (its.hasNext()) {
  252.                 String key = (String) its.next();
  253.                 List<String> values = this.headers.get(key);
  254.                 if(values!=null && !values.isEmpty()) {
  255.                     for (String value : values) {
  256.                         DumpHeaderTrasporto dumpHeaderTrasporto = new DumpHeaderTrasporto();
  257.                         dumpHeaderTrasporto.setDumpTimestamp(this.gdo);
  258.                         dumpHeaderTrasporto.setNome(key);
  259.                         dumpHeaderTrasporto.setValore(value);
  260.                         dumpMessaggio.addHeaderTrasporto(dumpHeaderTrasporto);      
  261.                     }
  262.                 }
  263.             }
  264.         }
  265.        
  266.         if(this.contenuti.size()>0) {
  267.             Iterator<String> its = this.contenuti.keySet().iterator();
  268.             while (its.hasNext()) {
  269.                 String key = (String) its.next();
  270.                 String value = this.contenuti.get(key);
  271.                 DumpContenuto dumpContenuto = new DumpContenuto();
  272.                 dumpContenuto.setDumpTimestamp(this.gdo);
  273.                 dumpContenuto.setNome(key);
  274.                 dumpContenuto.setValore(value);
  275.                 dumpMessaggio.addContenuto(dumpContenuto);
  276.             }
  277.         }
  278.        
  279.         dumpMessaggio.setIdTransazione(this.idTransazione);
  280.        
  281.         dumpMessaggio.setDumpTimestamp(this.gdo);
  282.        
  283.         dumpMessaggio.setProtocollo(this.protocollo);

  284.         return dumpMessaggio;
  285.     }
  286.    
  287.     public MessageType getFormatoMessaggio() {
  288.         return this.formatoMessaggio;
  289.     }
  290.     public void setFormatoMessaggio(MessageType formatoMessaggio) {
  291.         this.formatoMessaggio = formatoMessaggio;
  292.     }
  293.    
  294.     public TipoMessaggio getTipoMessaggio() {
  295.         return this.tipoMessaggio;
  296.     }

  297.     public void setTipoMessaggio(TipoMessaggio tipoMessaggio) {
  298.         this.tipoMessaggio = tipoMessaggio;
  299.     }

  300.     public DumpByteArrayOutputStream getBody() {
  301.         return this.body;
  302.     }
  303. //  public byte[] getBody() {
  304. //      return this.body.toByteArray();
  305. //  }

  306.     public void setBody(DumpByteArrayOutputStream body) {
  307.         this.body = body;
  308.     }
  309. //  public void setBody(byte[] body) {
  310. //      this.body = new DumpByteArrayOutputStream(body);
  311. //  }

  312.     public BodyMultipartInfo getBodyMultipartInfo() {
  313.         return this.bodyMultipartInfo;
  314.     }

  315.     public void setBodyMultipartInfo(BodyMultipartInfo bodyMultipartInfo) {
  316.         this.bodyMultipartInfo = bodyMultipartInfo;
  317.     }
  318.    
  319.     public List<Attachment> getAttachments() {
  320.         return this.attachments;
  321.     }

  322.     public void setAttachments(List<Attachment> attachments) {
  323.         this.attachments = attachments;
  324.     }

  325.     public Map<String, String> getContenuti() {
  326.         return this.contenuti;
  327.     }

  328.     public void setContenuti(Map<String, String> contenuti) {
  329.         this.contenuti = contenuti;
  330.     }
  331.    
  332.     public Map<String, List<String>> getHeaders() {
  333.         return this.headers;
  334.     }

  335.     public void setHeaders(Map<String, List<String>> headers) {
  336.         this.headers = headers;
  337.     }

  338.     public Date getGdo() {
  339.         return this.gdo;
  340.     }

  341.     public void setGdo(Date gdo) {
  342.         this.gdo = gdo;
  343.     }

  344.     public IDSoggetto getDominio() {
  345.         return this.dominio;
  346.     }

  347.     public void setDominio(IDSoggetto dominio) {
  348.         this.dominio = dominio;
  349.     }

  350.     public TipoPdD getTipoPdD() {
  351.         return this.tipoPdD;
  352.     }

  353.     public void setTipoPdD(TipoPdD tipoPdD) {
  354.         this.tipoPdD = tipoPdD;
  355.     }

  356.     public String getIdFunzione() {
  357.         return this.idFunzione;
  358.     }

  359.     public void setIdFunzione(String idFunzione) {
  360.         this.idFunzione = idFunzione;
  361.     }

  362.     public String getIdTransazione() {
  363.         return this.idTransazione;
  364.     }

  365.     public void setIdTransazione(String idTransazione) {
  366.         this.idTransazione = idTransazione;
  367.     }

  368.     public String getIdBusta() {
  369.         return this.idBusta;
  370.     }

  371.     public void setIdBusta(String idBusta) {
  372.         this.idBusta = idBusta;
  373.     }

  374.     public IDSoggetto getFruitore() {
  375.         return this.fruitore;
  376.     }

  377.     public void setFruitore(IDSoggetto fruitore) {
  378.         this.fruitore = fruitore;
  379.     }

  380.     public IDServizio getServizio() {
  381.         return this.servizio;
  382.     }

  383.     public void setServizio(IDServizio servizio) {
  384.         this.servizio = servizio;
  385.     }

  386.     public String getProtocollo() {
  387.         return this.protocollo;
  388.     }

  389.     public void setProtocollo(String protocollo) {
  390.         this.protocollo = protocollo;
  391.     }
  392.    
  393.     public String getContentType() {
  394.         return this.contentType;
  395.     }

  396.     public void setContentType(String contentType) {
  397.         this.contentType = contentType;
  398.     }

  399.     public String getServizioApplicativoErogatore() {
  400.         return this.servizioApplicativoErogatore;
  401.     }
  402.    
  403.     public void setServizioApplicativoErogatore(String servizioApplicativoErogatore) {
  404.         this.servizioApplicativoErogatore = servizioApplicativoErogatore;
  405.     }
  406.    
  407.     public Date getDataConsegna() {
  408.         return this.dataConsegna;
  409.     }
  410.    
  411.     public void setDataConsegna(Date dataConsegna) {
  412.         this.dataConsegna = dataConsegna;
  413.     }
  414. }