Messaggio.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.protocol.sdk.dump;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.openspcoop2.core.constants.TipoPdD;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.transazioni.DumpAllegato;
import org.openspcoop2.core.transazioni.DumpContenuto;
import org.openspcoop2.core.transazioni.DumpHeaderAllegato;
import org.openspcoop2.core.transazioni.DumpHeaderTrasporto;
import org.openspcoop2.core.transazioni.DumpMessaggio;
import org.openspcoop2.core.transazioni.DumpMultipartHeader;
import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
import org.openspcoop2.message.constants.MessageType;
import org.openspcoop2.utils.io.DumpByteArrayOutputStream;
import org.openspcoop2.utils.transport.TransportUtils;
/**
* Messaggio
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class Messaggio implements Serializable{
/**
*
*/
private static final long serialVersionUID = 4718160136521047108L;
private TipoMessaggio tipoMessaggio;
private String servizioApplicativoErogatore;
private Date dataConsegna;
private MessageType formatoMessaggio;
private String contentType;
private transient DumpByteArrayOutputStream body;
private BodyMultipartInfo bodyMultipartInfo;
private List<Attachment> attachments = new ArrayList<>();
private Map<String, List<String>> headers = new HashMap<>();
private Map<String, String> contenuti = new HashMap<>();
private String idTransazione;
private Date gdo;
private String protocollo;
// le restanti informazioni non vengono serializzate su database o filesystem.
private IDSoggetto dominio;
private TipoPdD tipoPdD;
private String idFunzione;
private String idBusta;
private IDSoggetto fruitore;
private IDServizio servizio;
// indicazione store
private boolean stored = false;
public boolean isStored() {
return this.stored;
}
public void setStored(boolean stored) {
this.stored = stored;
}
public Messaggio() {}
public Messaggio(DumpMessaggio dumpMessaggio) {
this.tipoMessaggio = dumpMessaggio.getTipoMessaggio();
this.servizioApplicativoErogatore = dumpMessaggio.getServizioApplicativoErogatore();
this.dataConsegna = dumpMessaggio.getDataConsegnaErogatore();
if(dumpMessaggio.getFormatoMessaggio()!=null) {
this.formatoMessaggio = MessageType.valueOf(dumpMessaggio.getFormatoMessaggio());
}
this.contentType = dumpMessaggio.getContentType();
this.body = DumpByteArrayOutputStream.newInstance(dumpMessaggio.getBody());
if(dumpMessaggio.getMultipartContentId()!=null ||
dumpMessaggio.getMultipartContentLocation()!=null ||
dumpMessaggio.getMultipartContentType()!=null ||
dumpMessaggio.getMultipartHeaderList()!=null ||
dumpMessaggio.getMultipartHeaderList().size()>0) {
this.bodyMultipartInfo = new BodyMultipartInfo();
this.bodyMultipartInfo.setContentId(dumpMessaggio.getMultipartContentId());
this.bodyMultipartInfo.setContentLocation(dumpMessaggio.getMultipartContentLocation());
this.bodyMultipartInfo.setContentType(dumpMessaggio.getMultipartContentType());
if(dumpMessaggio.getMultipartHeaderList()!=null ||
dumpMessaggio.getMultipartHeaderList().size()>0) {
for (DumpMultipartHeader hdr : dumpMessaggio.getMultipartHeaderList()) {
String valore = hdr.getValore();
if(valore==null) {
valore = "";
}
TransportUtils.addHeader(this.bodyMultipartInfo.getHeaders(), hdr.getNome(), valore);
}
}
}
if(dumpMessaggio.sizeAllegatoList()>0) {
for (DumpAllegato allegato : dumpMessaggio.getAllegatoList()) {
Attachment attachment = new Attachment();
attachment.setContentId(allegato.getContentId());
attachment.setContentLocation(allegato.getContentLocation());
attachment.setContentType(allegato.getContentType());
attachment.setContent(allegato.getAllegato());
if(allegato.sizeHeaderList()>0) {
for (DumpHeaderAllegato hdr : allegato.getHeaderList()) {
String valore = hdr.getValore();
if(valore==null) {
valore = "";
}
TransportUtils.addHeader(attachment.getHeaders(), hdr.getNome(), valore);
}
}
this.attachments.add(attachment);
}
}
if(dumpMessaggio.sizeHeaderTrasportoList()>0) {
for (DumpHeaderTrasporto hdr : dumpMessaggio.getHeaderTrasportoList()) {
String valore = hdr.getValore();
if(valore==null) {
valore = "";
}
TransportUtils.addHeader(this.headers, hdr.getNome(), valore);
}
}
if(dumpMessaggio.sizeContenutoList()>0) {
for (DumpContenuto contenuto : dumpMessaggio.getContenutoList()) {
String valore = contenuto.getValore();
if(valore==null) {
valore = "";
}
this.contenuti.put(contenuto.getNome(), valore);
}
}
this.idTransazione = dumpMessaggio.getIdTransazione();
this.gdo = dumpMessaggio.getDumpTimestamp();
this.protocollo = dumpMessaggio.getProtocollo();
}
public DumpMessaggio toDumpMessaggio() {
DumpMessaggio dumpMessaggio = new DumpMessaggio();
dumpMessaggio.setTipoMessaggio(this.tipoMessaggio);
dumpMessaggio.setServizioApplicativoErogatore(this.servizioApplicativoErogatore);
dumpMessaggio.setDataConsegnaErogatore(this.dataConsegna);
if(this.formatoMessaggio!=null) {
dumpMessaggio.setFormatoMessaggio(this.formatoMessaggio.name());
}
dumpMessaggio.setContentType(this.contentType);
if(this.body!=null && this.body.size()>0) {
dumpMessaggio.setBody(this.body.toByteArray());
}
if(this.bodyMultipartInfo!=null) {
dumpMessaggio.setMultipartContentId(this.bodyMultipartInfo.getContentId());
dumpMessaggio.setMultipartContentLocation(this.bodyMultipartInfo.getContentLocation());
dumpMessaggio.setMultipartContentType(this.bodyMultipartInfo.getContentType());
if(this.bodyMultipartInfo.getHeaders()!=null && this.bodyMultipartInfo.getHeaders().size()>0) {
Iterator<String> its = this.bodyMultipartInfo.getHeaders().keySet().iterator();
while (its.hasNext()) {
String key = (String) its.next();
List<String> values = this.bodyMultipartInfo.getHeaders().get(key);
if(values!=null && !values.isEmpty()) {
for (String value : values) {
DumpMultipartHeader multipartHeader = new DumpMultipartHeader();
multipartHeader.setDumpTimestamp(this.gdo);
multipartHeader.setNome(key);
multipartHeader.setValore(value);
dumpMessaggio.addMultipartHeader(multipartHeader);
}
}
}
}
}
if(this.attachments.size()>0) {
for (Attachment attachment : this.attachments) {
DumpAllegato dumpAllegato = new DumpAllegato();
dumpAllegato.setContentId(attachment.getContentId());
dumpAllegato.setContentLocation(attachment.getContentLocation());
dumpAllegato.setContentType(attachment.getContentType());
dumpAllegato.setAllegato(attachment.getContent());
dumpAllegato.setDumpTimestamp(this.gdo);
if(attachment.getHeaders()!=null && attachment.getHeaders().size()>0) {
Iterator<String> its = attachment.getHeaders().keySet().iterator();
while (its.hasNext()) {
String key = (String) its.next();
List<String> values = attachment.getHeaders().get(key);
if(values!=null && !values.isEmpty()) {
for (String value : values) {
DumpHeaderAllegato dumpHeaderAllegato = new DumpHeaderAllegato();
dumpHeaderAllegato.setDumpTimestamp(this.gdo);
dumpHeaderAllegato.setNome(key);
dumpHeaderAllegato.setValore(value);
dumpAllegato.addHeader(dumpHeaderAllegato);
}
}
}
}
dumpMessaggio.addAllegato(dumpAllegato);
}
}
if(this.headers.size()>0) {
Iterator<String> its = this.headers.keySet().iterator();
while (its.hasNext()) {
String key = (String) its.next();
List<String> values = this.headers.get(key);
if(values!=null && !values.isEmpty()) {
for (String value : values) {
DumpHeaderTrasporto dumpHeaderTrasporto = new DumpHeaderTrasporto();
dumpHeaderTrasporto.setDumpTimestamp(this.gdo);
dumpHeaderTrasporto.setNome(key);
dumpHeaderTrasporto.setValore(value);
dumpMessaggio.addHeaderTrasporto(dumpHeaderTrasporto);
}
}
}
}
if(this.contenuti.size()>0) {
Iterator<String> its = this.contenuti.keySet().iterator();
while (its.hasNext()) {
String key = (String) its.next();
String value = this.contenuti.get(key);
DumpContenuto dumpContenuto = new DumpContenuto();
dumpContenuto.setDumpTimestamp(this.gdo);
dumpContenuto.setNome(key);
dumpContenuto.setValore(value);
dumpMessaggio.addContenuto(dumpContenuto);
}
}
dumpMessaggio.setIdTransazione(this.idTransazione);
dumpMessaggio.setDumpTimestamp(this.gdo);
dumpMessaggio.setProtocollo(this.protocollo);
return dumpMessaggio;
}
public MessageType getFormatoMessaggio() {
return this.formatoMessaggio;
}
public void setFormatoMessaggio(MessageType formatoMessaggio) {
this.formatoMessaggio = formatoMessaggio;
}
public TipoMessaggio getTipoMessaggio() {
return this.tipoMessaggio;
}
public void setTipoMessaggio(TipoMessaggio tipoMessaggio) {
this.tipoMessaggio = tipoMessaggio;
}
public DumpByteArrayOutputStream getBody() {
return this.body;
}
// public byte[] getBody() {
// return this.body.toByteArray();
// }
public void setBody(DumpByteArrayOutputStream body) {
this.body = body;
}
// public void setBody(byte[] body) {
// this.body = new DumpByteArrayOutputStream(body);
// }
public BodyMultipartInfo getBodyMultipartInfo() {
return this.bodyMultipartInfo;
}
public void setBodyMultipartInfo(BodyMultipartInfo bodyMultipartInfo) {
this.bodyMultipartInfo = bodyMultipartInfo;
}
public List<Attachment> getAttachments() {
return this.attachments;
}
public void setAttachments(List<Attachment> attachments) {
this.attachments = attachments;
}
public Map<String, String> getContenuti() {
return this.contenuti;
}
public void setContenuti(Map<String, String> contenuti) {
this.contenuti = contenuti;
}
public Map<String, List<String>> getHeaders() {
return this.headers;
}
public void setHeaders(Map<String, List<String>> headers) {
this.headers = headers;
}
public Date getGdo() {
return this.gdo;
}
public void setGdo(Date gdo) {
this.gdo = gdo;
}
public IDSoggetto getDominio() {
return this.dominio;
}
public void setDominio(IDSoggetto dominio) {
this.dominio = dominio;
}
public TipoPdD getTipoPdD() {
return this.tipoPdD;
}
public void setTipoPdD(TipoPdD tipoPdD) {
this.tipoPdD = tipoPdD;
}
public String getIdFunzione() {
return this.idFunzione;
}
public void setIdFunzione(String idFunzione) {
this.idFunzione = idFunzione;
}
public String getIdTransazione() {
return this.idTransazione;
}
public void setIdTransazione(String idTransazione) {
this.idTransazione = idTransazione;
}
public String getIdBusta() {
return this.idBusta;
}
public void setIdBusta(String idBusta) {
this.idBusta = idBusta;
}
public IDSoggetto getFruitore() {
return this.fruitore;
}
public void setFruitore(IDSoggetto fruitore) {
this.fruitore = fruitore;
}
public IDServizio getServizio() {
return this.servizio;
}
public void setServizio(IDServizio servizio) {
this.servizio = servizio;
}
public String getProtocollo() {
return this.protocollo;
}
public void setProtocollo(String protocollo) {
this.protocollo = protocollo;
}
public String getContentType() {
return this.contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getServizioApplicativoErogatore() {
return this.servizioApplicativoErogatore;
}
public void setServizioApplicativoErogatore(String servizioApplicativoErogatore) {
this.servizioApplicativoErogatore = servizioApplicativoErogatore;
}
public Date getDataConsegna() {
return this.dataConsegna;
}
public void setDataConsegna(Date dataConsegna) {
this.dataConsegna = dataConsegna;
}
}