Traccia.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.tracciamento;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.openspcoop2.core.constants.Costanti;
import org.openspcoop2.core.constants.TipoPdD;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.tracciamento.Allegati;
import org.openspcoop2.core.tracciamento.Dominio;
import org.openspcoop2.core.tracciamento.DominioSoggetto;
import org.openspcoop2.core.tracciamento.Proprieta;
import org.openspcoop2.core.tracciamento.Protocollo;
import org.openspcoop2.core.tracciamento.TracciaEsitoElaborazione;
import org.openspcoop2.core.tracciamento.constants.TipoEsitoElaborazione;
import org.openspcoop2.protocol.sdk.Allegato;
import org.openspcoop2.protocol.sdk.Busta;
import org.openspcoop2.protocol.sdk.BustaRawContent;
import org.openspcoop2.protocol.sdk.constants.EsitoElaborazioneMessaggioTracciatura;
import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
/**
* Bean Contenente le informazioni relative alle tracce
*
* @author Stefano Corallo (corallo@link.it)
* @author Nardi Lorenzo
* @author $Author$
* @version $Rev$, $Date$
*/
public class Traccia implements java.io.Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
// indicazione store
private boolean stored = false;
// Busta
protected Busta busta;
private byte[] bustaInByte;
private BustaRawContent<?> bustaRawContent;
// properties
protected Map<String, String> properties = new HashMap<>();
// protocollo
private String protocollo;
// traccia
private org.openspcoop2.core.tracciamento.Traccia traccia;
// lista allegati
private List<Allegato> allegati = new ArrayList<>();
public Traccia() {
this.traccia = new org.openspcoop2.core.tracciamento.Traccia();
}
public Traccia(org.openspcoop2.core.tracciamento.Traccia traccia) {
this.traccia = traccia;
// protocollo
if(traccia.getBusta()!=null && traccia.getBusta().getProtocollo()!=null){
this.protocollo = traccia.getBusta().getProtocollo().getIdentificativo();
}
// busta
if(traccia.getBusta()!=null){
this.busta = new Busta(traccia.getBusta());
}
// allegati
if(traccia.getAllegati()!=null && traccia.getAllegati().sizeAllegatoList()>0)
for (org.openspcoop2.core.tracciamento.Allegato allegato : traccia.getAllegati().getAllegatoList()) {
this.addAllegato(new Allegato(allegato),false);
}
}
// stored
public boolean isStored() {
return this.stored;
}
public void setStored(boolean stored) {
this.stored = stored;
}
// base
public org.openspcoop2.core.tracciamento.Traccia getTraccia() {
return this.traccia;
}
public void setTraccia(org.openspcoop2.core.tracciamento.Traccia traccia) {
this.traccia = traccia;
// protocollo
if(traccia.getBusta()!=null && traccia.getBusta().getProtocollo()!=null){
this.protocollo = traccia.getBusta().getProtocollo().getIdentificativo();
}
// allegati
if(traccia.getAllegati()!=null && traccia.getAllegati().sizeAllegatoList()>0)
for (org.openspcoop2.core.tracciamento.Allegato allegato : traccia.getAllegati().getAllegatoList()) {
this.addAllegato(new Allegato(allegato),false);
}
}
// id [Wrapper]
public Long getId() {
return this.traccia.getId();
}
public void setId(Long id) {
this.traccia.setId(id);
}
// idTransazione [Wrapper]
public String getIdTransazione() {
return this.traccia.getIdTransazione();
}
public void setIdTransazione(String idTransazione) {
this.traccia.setIdTransazione(idTransazione);
}
// data [Wrapper]
public Date getGdo() {
return this.traccia.getOraRegistrazione();
}
public void setGdo(Date value) {
this.traccia.setOraRegistrazione(value);
}
// dominio [wrapper]
public IDSoggetto getIdSoggetto() {
IDSoggetto idSoggetto = null;
if(this.traccia.getDominio()!=null){
if(this.traccia.getDominio().getSoggetto()!=null){
if(idSoggetto==null){
idSoggetto = new IDSoggetto();
}
idSoggetto.setTipo(this.traccia.getDominio().getSoggetto().getTipo());
idSoggetto.setNome(this.traccia.getDominio().getSoggetto().getBase());
}
if(this.traccia.getDominio().getIdentificativoPorta()!=null){
if(idSoggetto==null){
idSoggetto = new IDSoggetto();
}
idSoggetto.setCodicePorta(this.traccia.getDominio().getIdentificativoPorta());
}
}
return idSoggetto;
}
public void setIdSoggetto(IDSoggetto value) {
if(value!=null && (value.getTipo()!=null || value.getNome()!=null || value.getCodicePorta()!=null)){
if(value.getTipo()!=null || value.getNome()!=null){
if(this.traccia.getDominio()==null){
this.traccia.setDominio(new Dominio());
}
if(this.traccia.getDominio().getSoggetto()==null){
this.traccia.getDominio().setSoggetto(new DominioSoggetto());
}
this.traccia.getDominio().getSoggetto().setTipo(value.getTipo());
this.traccia.getDominio().getSoggetto().setBase(value.getNome());
}
else{
if(this.traccia.getDominio()!=null){
this.traccia.getDominio().setSoggetto(null);
}
}
if(value.getCodicePorta()!=null){
if(this.traccia.getDominio()==null){
this.traccia.setDominio(new Dominio());
}
this.traccia.getDominio().setIdentificativoPorta(value.getCodicePorta());
}
else{
if(this.traccia.getDominio()!=null){
this.traccia.getDominio().setIdentificativoPorta(null);
}
}
}
else{
if(this.traccia.getDominio()!=null){
if(this.traccia.getDominio().getFunzione()==null){
this.traccia.setDominio(null);
}
else{
this.traccia.getDominio().setIdentificativoPorta(null);
this.traccia.getDominio().setSoggetto(null);
}
}
}
}
public TipoPdD getTipoPdD() {
if(this.traccia.getDominio()!=null && this.traccia.getDominio().getFunzione()!=null){
switch (this.traccia.getDominio().getFunzione()) {
case PORTA_DELEGATA:
return TipoPdD.DELEGATA;
case PORTA_APPLICATIVA:
return TipoPdD.APPLICATIVA;
case INTEGRATION_MANAGER:
return TipoPdD.INTEGRATION_MANAGER;
case ROUTER:
return TipoPdD.ROUTER;
}
}
return null;
}
public void setTipoPdD(TipoPdD tipoPdD) {
if(tipoPdD!=null){
if(this.traccia.getDominio()==null){
this.traccia.setDominio(new Dominio());
}
switch (tipoPdD) {
case DELEGATA:
this.traccia.getDominio().setFunzione(org.openspcoop2.core.tracciamento.constants.TipoPdD.PORTA_DELEGATA);
break;
case APPLICATIVA:
this.traccia.getDominio().setFunzione(org.openspcoop2.core.tracciamento.constants.TipoPdD.PORTA_APPLICATIVA);
break;
case INTEGRATION_MANAGER:
this.traccia.getDominio().setFunzione(org.openspcoop2.core.tracciamento.constants.TipoPdD.INTEGRATION_MANAGER);
break;
case ROUTER:
this.traccia.getDominio().setFunzione(org.openspcoop2.core.tracciamento.constants.TipoPdD.ROUTER);
break;
}
}
else{
if(this.traccia.getDominio()!=null){
if(this.traccia.getDominio().getIdentificativoPorta()==null && this.traccia.getDominio().getSoggetto()==null){
this.traccia.setDominio(null);
}
else{
this.traccia.getDominio().setFunzione(null);
}
}
}
}
// tipoTraccia [wrapper]
public RuoloMessaggio getTipoMessaggio() {
if(this.traccia.getTipo()!=null){
switch (this.traccia.getTipo()) {
case RICHIESTA:
return RuoloMessaggio.RICHIESTA;
case RISPOSTA:
return RuoloMessaggio.RISPOSTA;
}
}
return null;
}
public void setTipoMessaggio(RuoloMessaggio value) {
if(value!=null){
switch (value) {
case RICHIESTA:
this.traccia.setTipo(org.openspcoop2.core.tracciamento.constants.TipoTraccia.RICHIESTA);
break;
case RISPOSTA:
this.traccia.setTipo(org.openspcoop2.core.tracciamento.constants.TipoTraccia.RISPOSTA);
break;
}
}
}
// Busta
public Busta getBusta() {
return this.busta;
}
public void setBusta(Busta value) {
this.busta = value!=null ? value.newInstance() : null;
if(value!=null)
this.traccia.setBusta(value.getBusta());
else
this.traccia.setBusta(null);
}
public byte[] getBustaAsByteArray() {
return this.bustaInByte;
}
public void setBustaAsByteArray(byte[] bustaInByte) {
this.bustaInByte = bustaInByte;
}
public BustaRawContent<?> getBustaAsRawContent() {
return this.bustaRawContent;
}
public void setBustaAsRawContent(BustaRawContent<?> bustaElement) {
this.bustaRawContent = bustaElement;
}
// [wrapper]
public String getBustaAsString() {
return this.traccia.getBustaRaw();
}
public void setBustaAsString(String bustaAsString) {
this.traccia.setBustaRaw(bustaAsString);
}
// correlazione [wrapper]
public String getCorrelazioneApplicativa() {
return this.traccia.getIdentificativoCorrelazioneRichiesta();
}
public void setCorrelazioneApplicativa(String value) {
this.traccia.setIdentificativoCorrelazioneRichiesta(value);
}
public String getCorrelazioneApplicativaRisposta() {
return this.traccia.getIdentificativoCorrelazioneRisposta();
}
public void setCorrelazioneApplicativaRisposta(String value) {
this.traccia.setIdentificativoCorrelazioneRisposta(value);
}
// location [wrapper]
public String getLocation() {
return this.traccia.getLocation();
}
public void setLocation(String value) {
this.traccia.setLocation(value);
}
// properties
public void addPropertyInBusta(String key,String value){
if(this.traccia.getBusta()==null){
this.traccia.setBusta(new org.openspcoop2.core.tracciamento.Busta());
}
if(this.traccia.getBusta().getProtocollo()==null){
this.traccia.getBusta().setProtocollo(new Protocollo());
}
if(this.traccia.getBusta().getProtocollo().getProprietaList()==null){
this.traccia.getBusta().getProtocollo().setProprietaList(new ArrayList<Proprieta>());
}
boolean exists = false;
for (int i = 0; i < this.traccia.getBusta().getProtocollo().sizeProprietaList(); i++) {
Proprieta p = this.traccia.getBusta().getProtocollo().getProprieta(i);
if(key.equals(p.getNome())){
exists = true;
break;
}
}
if(!exists){
Proprieta proprieta = new Proprieta();
proprieta.setNome(key);
proprieta.setValore(value);
this.traccia.getBusta().getProtocollo().addProprieta(proprieta);
}
}
public void addProperty(String key,String value){
this.properties.put(key,value);
}
public int sizeProperties(){
return this.properties.size();
}
public String getProperty(String key){
String value = this.properties.get(key);
if(value==null || "".equals(value)){
if(Costanti.ID_TRANSAZIONE.getValue().equals(key)){
if(this.traccia.getBusta()!=null && this.traccia.getBusta().getProtocollo()!=null &&
this.traccia.getBusta().getProtocollo().getProprietaList()!=null){
for (int i = 0; i < this.traccia.getBusta().getProtocollo().sizeProprietaList(); i++) {
Proprieta p = this.traccia.getBusta().getProtocollo().getProprieta(i);
if(Costanti.ID_TRANSAZIONE.getValue().equals(p.getNome())){
return p.getValore();
}
}
}
}
}
return value;
}
public String removeProperty(String key){
return this.properties.remove(key);
}
public String[] getPropertiesValues() {
return this.properties.values().toArray(new String[this.properties.size()]);
}
public String[] getPropertiesNames() {
return this.properties.keySet().toArray(new String[this.properties.size()]);
}
public void setProperties(Map<String, String> params) {
this.properties = params;
}
public Map<String, String> getProperties() {
return this.properties;
}
// protocollo
public String getProtocollo() {
return this.protocollo;
}
public void setProtocollo(String protocollo) {
this.protocollo = protocollo;
}
// esito [Wrapper]
public EsitoElaborazioneMessaggioTracciato getEsitoElaborazioneMessaggioTracciato() {
if(this.traccia.getEsitoElaborazione()!=null){
EsitoElaborazioneMessaggioTracciato esito = new EsitoElaborazioneMessaggioTracciato();
esito.setDettaglio(this.traccia.getEsitoElaborazione().getDettaglio());
if(this.traccia.getEsitoElaborazione().getTipo()!=null){
switch (this.traccia.getEsitoElaborazione().getTipo()) {
case INVIATO:
esito.setEsito(EsitoElaborazioneMessaggioTracciatura.INVIATO);
break;
case RICEVUTO:
esito.setEsito(EsitoElaborazioneMessaggioTracciatura.RICEVUTO);
break;
case ERRORE:
esito.setEsito(EsitoElaborazioneMessaggioTracciatura.ERRORE);
break;
}
}
return esito;
}
return null;
}
public void setEsitoElaborazioneMessaggioTracciato(
EsitoElaborazioneMessaggioTracciato esitoElaborazioneMessaggioTracciato) {
if(esitoElaborazioneMessaggioTracciato==null){
return;
}
if(this.traccia.getEsitoElaborazione()==null){
this.traccia.setEsitoElaborazione(new TracciaEsitoElaborazione());
}
this.traccia.getEsitoElaborazione().setDettaglio(esitoElaborazioneMessaggioTracciato.getDettaglio());
if(esitoElaborazioneMessaggioTracciato.getEsito()!=null){
switch (esitoElaborazioneMessaggioTracciato.getEsito()) {
case INVIATO:
this.traccia.getEsitoElaborazione().setTipo(TipoEsitoElaborazione.INVIATO);
break;
case RICEVUTO:
this.traccia.getEsitoElaborazione().setTipo(TipoEsitoElaborazione.RICEVUTO);
break;
case ERRORE:
this.traccia.getEsitoElaborazione().setTipo(TipoEsitoElaborazione.ERRORE);
break;
}
}
}
// allegati [wrapped]
public List<Allegato> getListaAllegati() {
return this.allegati;
}
public int sizeListaAllegati() {
return this.allegati.size();
}
public void addAllegato(Allegato a) {
this.addAllegato(a, true);
}
private void addAllegato(Allegato a, boolean addCore) {
this.allegati.add(a);
if(addCore){
if(this.traccia.getAllegati()==null){
this.traccia.setAllegati(new Allegati());
}
this.traccia.getAllegati().addAllegato(a.getAllegato());
}
}
public Allegato getAllegato(int index) {
return this.allegati.get(index);
}
public Allegato removeAllegato(int index) {
this.traccia.getAllegati().removeAllegato(index);
return this.allegati.remove(index);
}
protected void setListaAllegati(List<Allegato> listaAllegati) {
this.allegati = listaAllegati;
}
public Traccia newInstance(){
// Non uso il base clone per far si che venga usato il costruttore new String()
Traccia clone = new Traccia();
// id
clone.setId(this.getId()!=null ? Long.valueOf(this.getId()+"") : null);
// data
clone.setGdo(this.getGdo()!=null ? new Date(this.getGdo().getTime()) : null);
// dominio
clone.setIdSoggetto(this.getIdSoggetto()!=null ? this.getIdSoggetto().clone() : null);
clone.setTipoPdD(this.getTipoPdD());
// tipoTraccia
clone.setTipoMessaggio(this.getTipoMessaggio());
// busta
clone.setBusta(this.getBusta()!=null ? this.getBusta().newInstance() : null);
ByteArrayOutputStream bout = null;
if(this.getBustaAsByteArray()!=null){
bout = new ByteArrayOutputStream();
try{
bout.write(this.getBustaAsByteArray());
bout.flush();
bout.close();
}catch(Exception e){
throw new RuntimeException(e.getMessage(),e);
}
clone.setBustaAsByteArray(bout.toByteArray());
}
clone.setBustaAsRawContent(this.getBustaAsRawContent()); // non clonato, vedere se si trova un modo efficiente se serve
clone.setBustaAsString(this.getBustaAsString()!=null ? new String(this.getBustaAsString()) : null);
// correlazione
clone.setCorrelazioneApplicativa(this.getCorrelazioneApplicativa()!=null ? new String(this.getCorrelazioneApplicativa()) : null);
clone.setCorrelazioneApplicativaRisposta(this.getCorrelazioneApplicativaRisposta()!=null ? new String(this.getCorrelazioneApplicativaRisposta()) : null);
// location
clone.setLocation(this.getLocation()!=null ? new String(this.getLocation()) : null);
// esito
clone.setEsitoElaborazioneMessaggioTracciato(this.getEsitoElaborazioneMessaggioTracciato()!=null ? this.getEsitoElaborazioneMessaggioTracciato().clone() : null);
// properties
if(this.properties!=null && this.properties.size()>0){
for (String key : this.properties.keySet()) {
String value = this.properties.get(key);
if(key!=null && value!=null){
clone.addProperty(new String(key), new String(value));
}
}
}
// protocollo
clone.setProtocollo(this.protocollo!=null ? new String(this.protocollo) : null);
// allegati
for(int i=0; i<this.sizeListaAllegati(); i++){
clone.addAllegato(this.getAllegato(i).clone());
}
return clone;
}
}