InformazioniRecordTraccia.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.pdd.logger.traccia;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.commons.CoreException;
import org.openspcoop2.pdd.logger.record.AbstractDatoRicostruzione;
import org.openspcoop2.pdd.logger.record.CharDatoRicostruzione;
import org.openspcoop2.pdd.logger.record.StringDatoRicostruzione;
import org.openspcoop2.pdd.logger.record.TimestampDatoRicostruzione;
/**
* InformazioniSalvataggioTraccia
*
* @author Poli Andrea (poli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class InformazioniRecordTraccia {
protected boolean presente = false;
protected boolean ricostruibile = false;
protected List<AbstractDatoRicostruzione<?>> dati = new ArrayList<>();
protected String motivoRicostruzioneNonFattibile = null;
protected String rawDBValue = null;
public String getRawDBValue() {
return this.rawDBValue;
}
public void setRawDBValue(String rawDBValue) {
this.rawDBValue = rawDBValue;
}
public String getMotivoRicostruzioneNonFattibile() {
return this.motivoRicostruzioneNonFattibile;
}
public boolean isRicostruibile() {
return this.ricostruibile;
}
public boolean isPresente() {
return this.presente;
}
public AbstractDatoRicostruzione<?> getDato(MappingRicostruzioneTraccia mapping){
if(mapping.getValue()==null) {
return null;
}
int index = mapping.getValue();
if(index < this.dati.size()) {
return this.dati.get(index);
}
return null;
}
public void setPresente(boolean presente) {
this.presente = presente;
}
public void setRicostruibile(boolean ricostruibile) {
this.ricostruibile = ricostruibile;
}
public void setMotivoRicostruzioneNonFattibile(
String motivoRicostruzioneNonFattibile) {
this.motivoRicostruzioneNonFattibile = motivoRicostruzioneNonFattibile;
}
public void setDati(List<AbstractDatoRicostruzione<?>> dati) {
this.dati = dati;
}
@Override
public String toString(){
StringBuilder bf = new StringBuilder();
bf.append("---- Traccia -----\n");
bf.append("\tpresente("+this.presente+")\n");
bf.append("\tricostruibile("+this.ricostruibile+")\n");
bf.append("\tdati size:"+this.dati.size()).append("\n");
for (int i = 0; i < this.dati.size(); i++) {
bf.append("\t\tdato["+MappingRicostruzioneTraccia.toEnumConstant(i).name()+"("+i+")]").append("\n");
bf.append("\t\t\tdescrizione:"+this.dati.get(i).getInfo().getDescription()).append("\n");
try{
bf.append("\t\t\tvalore:"+this.dati.get(i).convertToString()).append("\n");
}catch(Exception e){
bf.append("\t\t\tvalore: ERRORE NEL CALCOLO: "+e.getMessage()).append("\n");
}
}
if(!this.ricostruibile){
bf.append(" motivoRicostruzioneNonFattibile("+this.motivoRicostruzioneNonFattibile+")\n");
}
return bf.toString();
}
public static InformazioniRecordTraccia convertoFromDBColumnValue(String value) throws CoreException{
InformazioniRecordTraccia info = new InformazioniRecordTraccia();
if(value == null || "".equals(value.trim())){
throw new CoreException("Valore non fornito");
}
info.setRawDBValue(value);
if(value.length()==1 && (CostantiMappingTracciamento.NON_PRESENTE == value.charAt(0)) ){
info.setPresente(false);
return info;
}
info.setPresente(true);
String dbValue = value.trim();
if(!dbValue.contains(CostantiMappingTracciamento.SEPARATOR)){
info.setRicostruibile(false);
info.setMotivoRicostruzioneNonFattibile("Non sono presenti caratteri separatori ["+CostantiMappingTracciamento.SEPARATOR+"] nel valore");
return info;
}
String [] split = dbValue.split(CostantiMappingTracciamento.SEPARATOR);
if( CostantiMappingTracciamento.TRACCIA_EMESSA_RICOSTRUIBILE != split[0].charAt(0) ){
info.setRicostruibile(false);
info.setMotivoRicostruzioneNonFattibile(dbValue);
}
else{
info.setRicostruibile(true);
List<AbstractDatoRicostruzione<?>> listaDati = new ArrayList<>();
info.setDati(listaDati);
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_EMESSA.getPosition()],
CostantiMappingTracciamento.TRACCIA_EMESSA));
listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_DATA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_DATA_REGISTRAZIONE));
listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_ORA_REGISTRAZIONE));
listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_TIPO_ORA_REGISTRAZIONE_BY_PROTOCOLLO.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_TIPO_ORA_REGISTRAZIONE_BY_PROTOCOLLO));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_TIPO_ORA_REGISTRAZIONE_BY_OPENSPCOOP.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_TIPO_ORA_REGISTRAZIONE_BY_OPENSPCOOP));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_RIFERIMENTO_MESSAGGIO.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_RIFERIMENTO_MESSAGGIO));
listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SCADENZA.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SCADENZA));
listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_FILTRO_DUPLICATI.getPosition()],
CostantiMappingTracciamento.TRACCIA_FILTRO_DUPLICATI));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_FILTRO_DUPLICATI_CODE.getPosition()],
CostantiMappingTracciamento.TRACCIA_FILTRO_DUPLICATI_CODE));
listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SEQUENZA.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SEQUENZA));
listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_RISCONTRO_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_RISCONTRO_ORA_REGISTRAZIONE));
listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_RISCONTRO_TIPO_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_RISCONTRO_TIPO_ORA_REGISTRAZIONE));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_RISCONTRO_TIPO_ORA_REGISTRAZIONE_CODE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_RISCONTRO_TIPO_ORA_REGISTRAZIONE_CODE));
listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_PRIMA_TRASMISSIONE_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_PRIMA_TRASMISSIONE_ORA_REGISTRAZIONE));
listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_PRIMA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_PRIMA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_PRIMA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_CODE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_PRIMA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_CODE));
listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SECONDA_TRASMISSIONE_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SECONDA_TRASMISSIONE_ORA_REGISTRAZIONE));
listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SECONDA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SECONDA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SECONDA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_CODE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SECONDA_TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_CODE));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_CONFERMA_RICHIESTA.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_CONFERMA_RICHIESTA));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SERVIZIO_CORRELATO_PRESENTE.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SERVIZIO_CORRELATO_PRESENTE));
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_ESITO_TRACCIA.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_ESITO_TRACCIA));
if(split.length>(CostantiMappingTracciamento.LENGHT_DATI_SIMULATI_VERSIONE_ATTUALE_PRECEDENTE_INTRODOTTO_22)){
listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneTraccia.TRACCIA_BUSTA_SOGGETTO_APPLICATIVO_TOKEN.getPosition()],
CostantiMappingTracciamento.TRACCIA_BUSTA_SOGGETTO_APPLICATIVO_TOKEN));
}
if(split.length>CostantiMappingTracciamento.LENGHT_DATI_SIMULATI_VERSIONE_ATTUALE){
// NOTA: successivi dati aggiunti
// GESTIRE QUANDO SI INTRODUCONO NUOVE INFO
}
}
return info;
}
}