TracciaDriverUtilities.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.basic.tracciamento;

  21. import java.sql.Connection;
  22. import java.sql.PreparedStatement;
  23. import java.sql.ResultSet;
  24. import java.sql.SQLException;
  25. import java.sql.Timestamp;
  26. import java.text.SimpleDateFormat;
  27. import java.util.Date;
  28. import java.util.List;

  29. import org.openspcoop2.core.constants.CostantiDB;
  30. import org.openspcoop2.core.constants.TipoPdD;
  31. import org.openspcoop2.core.id.IDSoggetto;
  32. import org.openspcoop2.protocol.basic.ProtocolliRegistrati;
  33. import org.openspcoop2.protocol.sdk.Allegato;
  34. import org.openspcoop2.protocol.sdk.Busta;
  35. import org.openspcoop2.protocol.sdk.Eccezione;
  36. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  37. import org.openspcoop2.protocol.sdk.Riscontro;
  38. import org.openspcoop2.protocol.sdk.Trasmissione;
  39. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  40. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  41. import org.openspcoop2.protocol.sdk.constants.ContestoCodificaEccezione;
  42. import org.openspcoop2.protocol.sdk.constants.EsitoElaborazioneMessaggioTracciatura;
  43. import org.openspcoop2.protocol.sdk.constants.Inoltro;
  44. import org.openspcoop2.protocol.sdk.constants.LivelloRilevanza;
  45. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  46. import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
  47. import org.openspcoop2.protocol.sdk.constants.SubCodiceErrore;
  48. import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
  49. import org.openspcoop2.protocol.sdk.diagnostica.DriverMsgDiagnosticiException;
  50. import org.openspcoop2.protocol.sdk.tracciamento.DriverTracciamentoException;
  51. import org.openspcoop2.protocol.sdk.tracciamento.DriverTracciamentoNotFoundException;
  52. import org.openspcoop2.protocol.sdk.tracciamento.EsitoElaborazioneMessaggioTracciato;
  53. import org.openspcoop2.protocol.sdk.tracciamento.FiltroRicercaTracce;
  54. import org.openspcoop2.protocol.sdk.tracciamento.FiltroRicercaTracceConPaginazione;
  55. import org.openspcoop2.protocol.sdk.tracciamento.InformazioniProtocollo;
  56. import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
  57. import org.openspcoop2.utils.StringWrapper;
  58. import org.openspcoop2.utils.date.DateUtils;
  59. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  60. import org.openspcoop2.utils.sql.ISQLQueryObject;
  61. import org.openspcoop2.utils.sql.SQLObjectFactory;
  62. import org.openspcoop2.utils.sql.SQLQueryObjectException;
  63. import org.slf4j.Logger;

  64. /**
  65.  * TracciaDriverUtilities
  66.  *
  67.  * @author Andrea Poli (apoli@link.it)
  68.  * @author $Author$
  69.  * @version $Rev$, $Date$
  70.  */
  71. public class TracciaDriverUtilities {
  72.    
  73.     private TracciaDriverUtilities() {}

  74.     public static ISQLQueryObject getSQLQueryObject(String tipoDatabase)throws SQLQueryObjectException{
  75.         ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  76.         return sqlQueryObject;
  77.     }
  78.    
  79.    
  80.     public static ISQLQueryObject createSQLQueryObj_searchTracce(FiltroRicercaTracceConPaginazione filter,String tipoDatabase) throws SQLQueryObjectException{
  81.         return TracciaDriverUtilities.createSQLQueryObj(filter, tipoDatabase, TracciaSearchType.TRACCE);
  82.     }
  83.     public static ISQLQueryObject createSQLQueryObj_countTracce(FiltroRicercaTracce filter,String tipoDatabase) throws SQLQueryObjectException{
  84.         return TracciaDriverUtilities.createSQLQueryObj(filter, tipoDatabase, TracciaSearchType.COUNT_TRACCE);
  85.     }
  86.     public static ISQLQueryObject createSQLQueryObj_deleteTracce(FiltroRicercaTracce filter,String tipoDatabase) throws SQLQueryObjectException{
  87.         ISQLQueryObject from = TracciaDriverUtilities.createSQLQueryObj(filter, tipoDatabase, TracciaSearchType.DELETE_TRACCE);
  88.         ISQLQueryObject sqlQueryObjectDelete = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
  89.         sqlQueryObjectDelete.addDeleteTable(CostantiDB.TRACCE);
  90.         sqlQueryObjectDelete.addWhereINSelectSQLCondition(false, CostantiDB.TRACCE_COLUMN_ID, from);
  91.         return sqlQueryObjectDelete;
  92.     }
  93.    
  94.     private static ISQLQueryObject createSQLQueryObj(FiltroRicercaTracce filtro,String tipoDatabase,TracciaSearchType tipoRicerca) throws SQLQueryObjectException{
  95.        
  96.         ISQLQueryObject sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  97.         sqlQueryObject.addFromTable(CostantiDB.TRACCE);
  98.        
  99.         //select field
  100.         boolean distinct = true;
  101.         switch (tipoRicerca) {
  102.         case TRACCE:
  103.             sqlQueryObject.setSelectDistinct(distinct);
  104.             sqlQueryObject.addSelectAliasField(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_ID, "idTraccia");
  105.             sqlQueryObject.addSelectField(CostantiDB.TRACCE+".gdo");
  106.             break;
  107.         case COUNT_TRACCE:
  108.             sqlQueryObject.addSelectCountField(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_ID, "countTracce",distinct);
  109.             break;
  110.         case DELETE_TRACCE:
  111.             sqlQueryObject.setSelectDistinct(distinct);
  112.             sqlQueryObject.addSelectAliasField(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_ID, "idTraccia");
  113.             break;
  114.         }

  115.        
  116.        
  117.         // WHERE
  118.        
  119.         sqlQueryObject.setANDLogicOperator(true);
  120.                
  121.         if(TracciaDriverUtilities.isDefined(filtro.getMinDate())){
  122.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_GDO+">=?");
  123.         }
  124.         if(TracciaDriverUtilities.isDefined(filtro.getMaxDate())){
  125.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_GDO+"<=?");
  126.         }
  127.        
  128.         if(TracciaDriverUtilities.isDefined(filtro.getIdTransazione())){
  129.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_ID_TRANSAZIONE+"=?");
  130.         }
  131.         if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  132.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_TIPO_MESSAGGIO+"=?");
  133.         }      
  134.         if(TracciaDriverUtilities.isDefined(filtro.getTipoPdD())){
  135.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_PDD_RUOLO+"=?");
  136.         }
  137.         if(TracciaDriverUtilities.isDefined(filtro.getDominio())){
  138.             if(TracciaDriverUtilities.isDefined(filtro.getDominio().getCodicePorta())){
  139.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_PDD_CODICE+"=?");
  140.             }
  141.             if(TracciaDriverUtilities.isDefined(filtro.getDominio().getTipo())){
  142.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_PDD_TIPO_SOGGETTO+"=?");
  143.             }
  144.             if(TracciaDriverUtilities.isDefined(filtro.getDominio().getNome())){
  145.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_PDD_NOME_SOGGETTO+"=?");
  146.             }
  147.         }
  148.        
  149.        
  150.         if(TracciaDriverUtilities.isDefined(filtro.getIdBusta()) &&
  151.                 (TracciaDriverUtilities.isDefined(filtro.getIdBustaRichiesta()) ||
  152.                 TracciaDriverUtilities.isDefined(filtro.getIdBustaRisposta()))){
  153.             throw new SQLQueryObjectException("Non è possibile definire sia il filtro idBusta che uno dei filtri su richiesta e/o risposta)");
  154.         }
  155.        
  156.         if(TracciaDriverUtilities.isDefined(filtro.getIdBusta())){
  157.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?");   // utilizzabile con tipo traccia
  158.         }
  159.         else if(TracciaDriverUtilities.isDefined(filtro.getIdBustaRichiesta()) &&
  160.                 TracciaDriverUtilities.isDefined(filtro.getIdBustaRisposta())){
  161.             if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  162.                 throw new SQLQueryObjectException("Non è possibile definire il filtro sul tipo di traccia se si impostano entrambi gli identificativi di richiesta e risposta");
  163.             }
  164.             sqlQueryObject.addWhereCondition(false,CostantiDB.TRACCE_COLUMN_TIPO_MESSAGGIO+"=? AND "+CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?",
  165.                     CostantiDB.TRACCE_COLUMN_TIPO_MESSAGGIO+"=? AND "+CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?");  
  166.         }
  167.         else if(TracciaDriverUtilities.isDefined(filtro.getIdBustaRichiesta())){
  168.             if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  169.                 if(RuoloMessaggio.RISPOSTA.equals(filtro.getTipoTraccia())){
  170.                     throw new SQLQueryObjectException("Non è possibile definire il filtro sul tipo di traccia a '"+RuoloMessaggio.RISPOSTA.getTipo()+
  171.                             "' ed il filtro sull'identificativo di richiesta");
  172.                 }
  173.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?");
  174.             }
  175.             else{
  176.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_TIPO_MESSAGGIO+"=? AND "+CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?");
  177.             }
  178.         }
  179.         else if(TracciaDriverUtilities.isDefined(filtro.getIdBustaRisposta())){
  180.             if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  181.                 if(RuoloMessaggio.RICHIESTA.equals(filtro.getTipoTraccia())){
  182.                     throw new SQLQueryObjectException("Non è possibile definire il filtro sul tipo di traccia a '"+RuoloMessaggio.RICHIESTA.getTipo()+
  183.                             "' ed il filtro sull'identificativo di risposta");
  184.                 }
  185.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?");
  186.             }
  187.             else{
  188.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_TIPO_MESSAGGIO+"=? AND "+CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO+"=?");
  189.             }
  190.         }
  191.         if(TracciaDriverUtilities.isDefined(filtro.getRiferimentoMessaggio())){
  192.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_RIFERIMENTO_MESSAGGIO+"=?");
  193.         }
  194.         if(filtro.isRicercaSoloBusteErrore()){
  195.             ISQLQueryObject sqlQueryObjectBusteErrore = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  196.             sqlQueryObjectBusteErrore.addFromTable(CostantiDB.TRACCE_ECCEZIONI);
  197.             sqlQueryObjectBusteErrore.addSelectField(CostantiDB.TRACCE_ECCEZIONI_COLUMN_ID_TRACCIA);
  198.             sqlQueryObjectBusteErrore.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_ID+"="+CostantiDB.TRACCE_ECCEZIONI+"."+CostantiDB.TRACCE_ECCEZIONI_COLUMN_ID_TRACCIA);
  199.             sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectBusteErrore);
  200.         }
  201.         if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo())){
  202.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente())){
  203.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente().getTipo())){
  204.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_MITTENTE_TIPO+"=?");
  205.                 }
  206.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente().getNome())){
  207.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_MITTENTE_NOME+"=?");
  208.                 }
  209.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente().getCodicePorta())){
  210.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_MITTENTE_IDPORTA+"=?");
  211.                 }
  212.             }
  213.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario())){
  214.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario().getTipo())){
  215.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_DESTINATARIO_TIPO+"=?");
  216.                 }
  217.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario().getNome())){
  218.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_DESTINATARIO_NOME+"=?");
  219.                 }
  220.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario().getCodicePorta())){
  221.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_DESTINATARIO_IDPORTA+"=?");
  222.                 }
  223.             }
  224.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getTipoServizio())){
  225.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_SERVIZIO_TIPO+"=?");
  226.             }
  227.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getServizio())){
  228.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_SERVIZIO_NOME+"=?");
  229.             }
  230.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getVersioneServizio())){
  231.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_SERVIZIO_VERSIONE+"=?");
  232.             }
  233.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getAzione())){
  234.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_AZIONE+"=?");
  235.             }
  236.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getProfiloCollaborazioneProtocollo())){
  237.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE+"=?");
  238.             }
  239.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getProfiloCollaborazioneEngine())){
  240.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE_SDK_CONSTANT+"=?");
  241.             }
  242.             if(filtro.getInformazioniProtocollo().sizeProprietaProtocollo()>0){
  243.                 String [] nomi = filtro.getInformazioniProtocollo().getProprietaProtocolloNames();
  244.                 for (int i = 0; i < nomi.length; i++) {
  245.                     String aliasExtInfo = "tr_ext_"+i;
  246.                     sqlQueryObject.addFromTable(CostantiDB.TRACCE_EXT_INFO,aliasExtInfo);
  247.                     sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_ID+"="+aliasExtInfo+"."+CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_ID_TRACCIA);
  248.                     sqlQueryObject.addWhereCondition(aliasExtInfo+"."+CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_NAME+"=?");    
  249.                     // BUG: la colonna è un clob: su Oracle si ottiene: ORA-00932: inconsistent datatypes: expected - got CLOB
  250.                     /**sqlQueryObject.addWhereCondition(aliasExtInfo+"."+CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_VALUE+"=?");*/
  251.                     sqlQueryObject.addWhereLikeCondition(aliasExtInfo+"."+CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_VALUE,
  252.                             filtro.getInformazioniProtocollo().getProprietaProtocollo(nomi[i]), false, false);
  253.                 }
  254.             }
  255.         }      
  256.        
  257.         if(TracciaDriverUtilities.isDefined(filtro.getServizioApplicativoFruitore())){
  258.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_SA_FRUITORE+"=?");
  259.         }
  260.         if(TracciaDriverUtilities.isDefined(filtro.getServizioApplicativoErogatore())){
  261.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_SA_EROGATORE+"=?");
  262.         }
  263.    
  264.         if(TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativa()) && TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativaRisposta())){
  265.             sqlQueryObject.addWhereCondition((!filtro.isIdCorrelazioneApplicativaOrMatch()),
  266.                         CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_CORRELAZIONE_APPLICATIVA_RICHIESTA+"=?",
  267.                         CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_CORRELAZIONE_APPLICATIVA_RISPOSTA+"=?");
  268.         }
  269.         else if(TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativa())){
  270.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_CORRELAZIONE_APPLICATIVA_RICHIESTA+"=?");
  271.         }
  272.         else if(TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativaRisposta())){
  273.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE+"."+CostantiDB.TRACCE_COLUMN_CORRELAZIONE_APPLICATIVA_RISPOSTA+"=?");
  274.         }
  275.        
  276.        
  277.         if(TracciaDriverUtilities.isDefined(filtro.getProtocollo())){
  278.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_PROTOCOLLO+"=?");
  279.         }
  280.        
  281.         if(filtro.getPropertiesNames()!=null && filtro.getPropertiesNames().length>0){
  282.             String [] names = filtro.getPropertiesNames();
  283.             for (int i = 0; i < names.length; i++) {
  284.                 sqlQueryObject.addWhereCondition(names[i]+"=?");    
  285.             }
  286.         }
  287.        
  288.         switch (tipoRicerca) {
  289.         case TRACCE:
  290.            
  291.             FiltroRicercaTracceConPaginazione f = (FiltroRicercaTracceConPaginazione) filtro;
  292.             //limit
  293.             if(f.getLimit()>0)
  294.                 sqlQueryObject.setLimit(f.getLimit());
  295.             /**else
  296.                 sqlQueryObject.setLimit(1000);*/
  297.             // Offset
  298.             if(f.getOffset()>0)
  299.                 sqlQueryObject.setOffset(f.getOffset());
  300.            
  301.             sqlQueryObject.addOrderBy("gdo");
  302.             sqlQueryObject.setSortType(f.isAsc());  
  303.             break;
  304.         case COUNT_TRACCE:
  305.             // Niente da effettuare
  306.             break;
  307.         case DELETE_TRACCE:
  308.             // Niente da effettuare
  309.             break;
  310.         }
  311.                
  312.         return sqlQueryObject;
  313.        
  314.     }
  315.    
  316.     public static int setValuesSearch(Object object,FiltroRicercaTracce filtro,int startIndex) throws SQLException{
  317.        
  318.         SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  319.        
  320.         PreparedStatement pstmt = null;
  321.         StringWrapper query = null;
  322.         if(object instanceof PreparedStatement){
  323.             pstmt = (PreparedStatement) object;
  324.         }
  325.         else if(object instanceof StringWrapper){
  326.             query = (StringWrapper) object;
  327.         }
  328.         else{
  329.             throw new SQLException("Tipo di parametro ["+object.getClass().getName()+"] non gestito");
  330.         }
  331.        
  332.         if(TracciaDriverUtilities.isDefined(filtro.getMinDate())){
  333.             if(pstmt!=null)
  334.                 pstmt.setTimestamp(startIndex++, new Timestamp(filtro.getMinDate().getTime()));
  335.             if(query!=null)
  336.                 query.replaceFirst("\\?","'"+dateformat.format(filtro.getMinDate())+"'");
  337.         }
  338.         if(TracciaDriverUtilities.isDefined(filtro.getMaxDate())){
  339.             if(pstmt!=null)
  340.                 pstmt.setTimestamp(startIndex++, new Timestamp(filtro.getMaxDate().getTime()));
  341.             if(query!=null)
  342.                 query.replaceFirst("\\?", "'"+dateformat.format(filtro.getMaxDate())+"'");
  343.         }
  344.    
  345.        
  346.         if(TracciaDriverUtilities.isDefined(filtro.getIdTransazione())){
  347.             if(pstmt!=null)
  348.                 pstmt.setString(startIndex++, filtro.getIdTransazione());
  349.             if(query!=null)
  350.                 query.replaceFirst("\\?", "'"+filtro.getIdTransazione()+"'");
  351.         }  
  352.         if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  353.             if(pstmt!=null)
  354.                 pstmt.setString(startIndex++, filtro.getTipoTraccia().getTipo());
  355.             if(query!=null)
  356.                 query.replaceFirst("\\?", "'"+filtro.getTipoTraccia().getTipo()+"'");
  357.         }      
  358.         if(TracciaDriverUtilities.isDefined(filtro.getTipoPdD())){
  359.             if(pstmt!=null)
  360.                 pstmt.setString(startIndex++, filtro.getTipoPdD().getTipo());
  361.             if(query!=null)
  362.                 query.replaceFirst("\\?", "'"+filtro.getTipoPdD().getTipo()+"'");
  363.         }
  364.         if(TracciaDriverUtilities.isDefined(filtro.getDominio())){
  365.             if(TracciaDriverUtilities.isDefined(filtro.getDominio().getCodicePorta())){
  366.                 if(pstmt!=null)
  367.                     pstmt.setString(startIndex++, filtro.getDominio().getCodicePorta());
  368.                 if(query!=null)
  369.                     query.replaceFirst("\\?", "'"+filtro.getDominio().getCodicePorta()+"'");
  370.             }
  371.             if(TracciaDriverUtilities.isDefined(filtro.getDominio().getTipo())){
  372.                 if(pstmt!=null)
  373.                     pstmt.setString(startIndex++, filtro.getDominio().getTipo());
  374.                 if(query!=null)
  375.                     query.replaceFirst("\\?", "'"+filtro.getDominio().getTipo()+"'");
  376.             }
  377.             if(TracciaDriverUtilities.isDefined(filtro.getDominio().getNome())){
  378.                 if(pstmt!=null)
  379.                     pstmt.setString(startIndex++, filtro.getDominio().getNome());
  380.                 if(query!=null)
  381.                     query.replaceFirst("\\?", "'"+filtro.getDominio().getNome()+"'");
  382.             }
  383.         }
  384.        
  385.        
  386.         if(TracciaDriverUtilities.isDefined(filtro.getIdBusta())){
  387.             if(pstmt!=null)
  388.                 pstmt.setString(startIndex++, filtro.getIdBusta());
  389.             if(query!=null)
  390.                 query.replaceFirst("\\?", "'"+filtro.getIdBusta()+"'");
  391.         }
  392.         else if(TracciaDriverUtilities.isDefined(filtro.getIdBustaRichiesta()) &&
  393.                 TracciaDriverUtilities.isDefined(filtro.getIdBustaRisposta())){
  394.            
  395.             if(pstmt!=null)
  396.                 pstmt.setString(startIndex++, RuoloMessaggio.RICHIESTA.getTipo());
  397.             if(query!=null)
  398.                 query.replaceFirst("\\?", "'"+RuoloMessaggio.RICHIESTA.getTipo()+"'");
  399.             if(pstmt!=null)
  400.                 pstmt.setString(startIndex++, filtro.getIdBustaRichiesta());
  401.             if(query!=null)
  402.                 query.replaceFirst("\\?", "'"+filtro.getIdBustaRichiesta()+"'");
  403.            
  404.             if(pstmt!=null)
  405.                 pstmt.setString(startIndex++, RuoloMessaggio.RISPOSTA.getTipo());
  406.             if(query!=null)
  407.                 query.replaceFirst("\\?", "'"+RuoloMessaggio.RISPOSTA.getTipo()+"'");
  408.             if(pstmt!=null)
  409.                 pstmt.setString(startIndex++, filtro.getIdBustaRisposta());
  410.             if(query!=null)
  411.                 query.replaceFirst("\\?", "'"+filtro.getIdBustaRisposta()+"'");

  412.         }
  413.         else if(TracciaDriverUtilities.isDefined(filtro.getIdBustaRichiesta())){
  414.             if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  415.                 if(pstmt!=null)
  416.                     pstmt.setString(startIndex++, filtro.getIdBustaRichiesta());
  417.                 if(query!=null)
  418.                     query.replaceFirst("\\?", "'"+filtro.getIdBustaRichiesta()+"'");
  419.             }
  420.             else{
  421.                 if(pstmt!=null)
  422.                     pstmt.setString(startIndex++, RuoloMessaggio.RICHIESTA.getTipo());
  423.                 if(query!=null)
  424.                     query.replaceFirst("\\?", "'"+RuoloMessaggio.RICHIESTA.getTipo()+"'");
  425.                 if(pstmt!=null)
  426.                     pstmt.setString(startIndex++, filtro.getIdBustaRichiesta());
  427.                 if(query!=null)
  428.                     query.replaceFirst("\\?", "'"+filtro.getIdBustaRichiesta()+"'");
  429.             }
  430.         }
  431.         else if(TracciaDriverUtilities.isDefined(filtro.getIdBustaRisposta())){
  432.             if(TracciaDriverUtilities.isDefined(filtro.getTipoTraccia())){
  433.                 if(pstmt!=null)
  434.                     pstmt.setString(startIndex++, filtro.getIdBustaRisposta());
  435.                 if(query!=null)
  436.                     query.replaceFirst("\\?", "'"+filtro.getIdBustaRisposta()+"'");
  437.             }
  438.             else{
  439.                 if(pstmt!=null)
  440.                     pstmt.setString(startIndex++, RuoloMessaggio.RISPOSTA.getTipo());
  441.                 if(query!=null)
  442.                     query.replaceFirst("\\?", "'"+RuoloMessaggio.RISPOSTA.getTipo()+"'");
  443.                 if(pstmt!=null)
  444.                     pstmt.setString(startIndex++, filtro.getIdBustaRisposta());
  445.                 if(query!=null)
  446.                     query.replaceFirst("\\?", "'"+filtro.getIdBustaRisposta()+"'");
  447.             }
  448.         }
  449.         if(TracciaDriverUtilities.isDefined(filtro.getRiferimentoMessaggio())){
  450.             if(pstmt!=null)
  451.                 pstmt.setString(startIndex++, filtro.getRiferimentoMessaggio());
  452.             if(query!=null)
  453.                 query.replaceFirst("\\?", "'"+filtro.getRiferimentoMessaggio()+"'");
  454.         }
  455.         if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo())){
  456.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente())){
  457.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente().getTipo())){
  458.                     if(pstmt!=null)
  459.                         pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getMittente().getTipo());
  460.                     if(query!=null)
  461.                         query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getMittente().getTipo()+"'");
  462.                 }
  463.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente().getNome())){
  464.                     if(pstmt!=null)
  465.                         pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getMittente().getNome());
  466.                     if(query!=null)
  467.                         query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getMittente().getNome()+"'");
  468.                 }
  469.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getMittente().getCodicePorta())){
  470.                     if(pstmt!=null)
  471.                         pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getMittente().getCodicePorta());
  472.                     if(query!=null)
  473.                         query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getMittente().getCodicePorta()+"'");
  474.                 }
  475.             }
  476.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario())){
  477.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario().getTipo())){
  478.                     if(pstmt!=null)
  479.                         pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getDestinatario().getTipo());
  480.                     if(query!=null)
  481.                         query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getDestinatario().getTipo()+"'");
  482.                 }
  483.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario().getNome())){
  484.                     if(pstmt!=null)
  485.                         pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getDestinatario().getNome());
  486.                     if(query!=null)
  487.                         query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getDestinatario().getNome()+"'");
  488.                 }
  489.                 if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getDestinatario().getCodicePorta())){
  490.                     if(pstmt!=null)
  491.                         pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getDestinatario().getCodicePorta());
  492.                     if(query!=null)
  493.                         query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getDestinatario().getCodicePorta()+"'");
  494.                 }
  495.             }
  496.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getTipoServizio())){
  497.                 if(pstmt!=null)
  498.                     pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getTipoServizio());
  499.                 if(query!=null)
  500.                     query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getTipoServizio()+"'");
  501.             }
  502.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getServizio())){
  503.                 if(pstmt!=null)
  504.                     pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getServizio());
  505.                 if(query!=null)
  506.                     query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getServizio()+"'");
  507.             }
  508.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getVersioneServizio())){
  509.                 if(pstmt!=null)
  510.                     pstmt.setInt(startIndex++, filtro.getInformazioniProtocollo().getVersioneServizio());
  511.                 if(query!=null)
  512.                     query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getVersioneServizio()+"'");
  513.             }
  514.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getAzione())){
  515.                 if(pstmt!=null)
  516.                     pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getAzione());
  517.                 if(query!=null)
  518.                     query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getAzione()+"'");
  519.             }
  520.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getProfiloCollaborazioneProtocollo())){
  521.                 if(pstmt!=null)
  522.                     pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getProfiloCollaborazioneProtocollo());
  523.                 if(query!=null)
  524.                     query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getProfiloCollaborazioneProtocollo()+"'");
  525.             }
  526.             if(TracciaDriverUtilities.isDefined(filtro.getInformazioniProtocollo().getProfiloCollaborazioneEngine())){
  527.                 if(pstmt!=null)
  528.                     pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getProfiloCollaborazioneEngine().getEngineValue());
  529.                 if(query!=null)
  530.                     query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getProfiloCollaborazioneEngine().getEngineValue()+"'");
  531.             }
  532.             if(filtro.getInformazioniProtocollo().sizeProprietaProtocollo()>0){
  533.                 String [] nomi = filtro.getInformazioniProtocollo().getProprietaProtocolloNames();
  534.                 for (int i = 0; i < nomi.length; i++) {
  535.                     if(pstmt!=null) {
  536.                         pstmt.setString(startIndex++, nomi[i]);
  537.                         // BUG: la colonna value è un TEXT: su Oracle si ottiene: ORA-00932: inconsistent datatypes: expected - got CLOB
  538.                         /**pstmt.setString(startIndex++, filtro.getInformazioniProtocollo().getProprietaProtocollo(nomi[i]));*/
  539.                     }
  540.                     if(query!=null) {
  541.                         query.replaceFirst("\\?", "'"+nomi[i]+"'");
  542.                         // BUG: la colonna value è un TEXT: su Oracle si ottiene: ORA-00932: inconsistent datatypes: expected - got CLOB
  543.                         /**query.replaceFirst("\\?", "'"+filtro.getInformazioniProtocollo().getProprietaProtocollo(nomi[i])+"'");*/
  544.                     }
  545.                 }
  546.             }
  547.         }  
  548.        
  549.        
  550.         if(TracciaDriverUtilities.isDefined(filtro.getServizioApplicativoFruitore())){
  551.             if(pstmt!=null)
  552.                 pstmt.setString(startIndex++, filtro.getServizioApplicativoFruitore());
  553.             if(query!=null)
  554.                 query.replaceFirst("\\?", "'"+filtro.getServizioApplicativoFruitore()+"'");
  555.         }
  556.         if(TracciaDriverUtilities.isDefined(filtro.getServizioApplicativoErogatore())){
  557.             if(pstmt!=null)
  558.                 pstmt.setString(startIndex++, filtro.getServizioApplicativoErogatore());
  559.             if(query!=null)
  560.                 query.replaceFirst("\\?", "'"+filtro.getServizioApplicativoErogatore()+"'");
  561.         }
  562.        
  563.        
  564.         if(TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativa()) && TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativaRisposta())){
  565.             if(pstmt!=null)
  566.                 pstmt.setString(startIndex++, filtro.getIdCorrelazioneApplicativa());
  567.             if(query!=null)
  568.                 query.replaceFirst("\\?", "'"+filtro.getIdCorrelazioneApplicativa()+"'");
  569.             if(pstmt!=null)
  570.                 pstmt.setString(startIndex++, filtro.getIdCorrelazioneApplicativaRisposta());
  571.             if(query!=null)
  572.                 query.replaceFirst("\\?", "'"+filtro.getIdCorrelazioneApplicativaRisposta()+"'");
  573.            
  574.         }
  575.         else if(TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativa())){
  576.             if(pstmt!=null)
  577.                 pstmt.setString(startIndex++, filtro.getIdCorrelazioneApplicativa());
  578.             if(query!=null)
  579.                 query.replaceFirst("\\?", "'"+filtro.getIdCorrelazioneApplicativa()+"'");
  580.         }
  581.         else if(TracciaDriverUtilities.isDefined(filtro.getIdCorrelazioneApplicativaRisposta())){
  582.             if(pstmt!=null)
  583.                 pstmt.setString(startIndex++, filtro.getIdCorrelazioneApplicativaRisposta());
  584.             if(query!=null)
  585.                 query.replaceFirst("\\?", "'"+filtro.getIdCorrelazioneApplicativaRisposta()+"'");
  586.         }
  587.        
  588.    
  589.         if(TracciaDriverUtilities.isDefined(filtro.getProtocollo())){
  590.             if(pstmt!=null)
  591.                 pstmt.setString(startIndex++, filtro.getProtocollo());
  592.             if(query!=null)
  593.                 query.replaceFirst("\\?", "'"+filtro.getProtocollo()+"'");
  594.         }
  595.    
  596.         if(filtro.getPropertiesNames()!=null && filtro.getPropertiesNames().length>0){
  597.             String [] names = filtro.getPropertiesNames();
  598.             for (int i = 0; i < names.length; i++) {
  599.                 String value = filtro.getProperty(names[i]);
  600.                 if(pstmt!=null)
  601.                     pstmt.setString(startIndex++, value);
  602.                 if(query!=null)
  603.                     query.replaceFirst("\\?", "'"+value+"'");
  604.             }
  605.         }

  606.         return startIndex;
  607.     }
  608.    
  609.        
  610.    
  611.     /**
  612.      * Recupera la traccia
  613.      *
  614.      * @return Traccia
  615.      * @throws DriverMsgDiagnosticiException
  616.      */
  617.     public static Traccia getTraccia(Connection con,String tipoDatabase,
  618.             Logger log,Long id,List<String> properties,
  619.             ProtocolliRegistrati protocolli) throws DriverTracciamentoException, DriverTracciamentoNotFoundException, SQLQueryObjectException{
  620.        
  621.         if(log!=null) {
  622.             // nop
  623.         }
  624.        
  625.         PreparedStatement pstmt = null;
  626.         ResultSet rs = null;
  627.         PreparedStatement pstmtLista = null;
  628.         ResultSet rsLista = null;
  629.         Traccia tr = null;
  630.        
  631.         try{
  632.            
  633.             ISQLQueryObject sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  634.             sqlQueryObject.addFromTable(CostantiDB.TRACCE);
  635.             sqlQueryObject.addSelectField("*");
  636.             sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_COLUMN_ID+"=?");
  637.            
  638.             pstmt = con.prepareStatement(sqlQueryObject.toString());
  639.             pstmt.setLong(1, id);
  640.             rs = pstmt.executeQuery();
  641.             if(rs.next()){
  642.                
  643.                 tr = new Traccia();
  644.                 tr.setGdo(rs.getTimestamp(CostantiDB.TRACCE_COLUMN_GDO));
  645.                 tr.setIdTransazione(rs.getString(CostantiDB.TRACCE_COLUMN_ID_TRANSAZIONE));
  646.                 IDSoggetto idSoggetto = new IDSoggetto();
  647.                 idSoggetto.setTipo(rs.getString(CostantiDB.TRACCE_COLUMN_PDD_TIPO_SOGGETTO));
  648.                 idSoggetto.setNome(rs.getString(CostantiDB.TRACCE_COLUMN_PDD_NOME_SOGGETTO));
  649.                 idSoggetto.setCodicePorta(rs.getString(CostantiDB.TRACCE_COLUMN_PDD_CODICE));
  650.                 tr.setTipoPdD(TipoPdD.toTipoPdD(rs.getString(CostantiDB.TRACCE_COLUMN_PDD_RUOLO)));
  651.                 tr.setIdSoggetto(idSoggetto);
  652.                 String t = rs.getString(CostantiDB.TRACCE_COLUMN_TIPO_MESSAGGIO);
  653.                 if(t!=null){
  654.                     tr.setTipoMessaggio(RuoloMessaggio.toTipoTraccia(t));
  655.                 }
  656.                 EsitoElaborazioneMessaggioTracciato esitoTraccia = new EsitoElaborazioneMessaggioTracciato();
  657.                 esitoTraccia.setEsito(EsitoElaborazioneMessaggioTracciatura.valueOf(rs.getString(CostantiDB.TRACCE_COLUMN_ESITO_ELABORAZIONE)));
  658.                 esitoTraccia.setDettaglio(rs.getString(CostantiDB.TRACCE_COLUMN_DETTAGLIO_ESITO_ELABORAZIONE));
  659.                 tr.setEsitoElaborazioneMessaggioTracciato(esitoTraccia);
  660.                 tr.setCorrelazioneApplicativa(rs.getString(CostantiDB.TRACCE_COLUMN_CORRELAZIONE_APPLICATIVA_RICHIESTA));
  661.                 tr.setCorrelazioneApplicativaRisposta(rs.getString(CostantiDB.TRACCE_COLUMN_CORRELAZIONE_APPLICATIVA_RISPOSTA));
  662.                 tr.setLocation(rs.getString(CostantiDB.TRACCE_COLUMN_LOCATION));
  663.                 tr.setProtocollo(rs.getString(CostantiDB.TRACCE_COLUMN_PROTOCOLLO));
  664.                 if(properties!=null){
  665.                     for (int i = 0; i < properties.size(); i++) {
  666.                         String key = properties.get(i);
  667.                         tr.addProperty(key, rs.getString(key));
  668.                     }
  669.                 }
  670.                 Busta busta = new Busta(tr.getProtocollo());
  671.                
  672.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_TIPO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_TIPO))) )
  673.                     busta.setTipoMittente(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_TIPO));
  674.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_NOME)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_NOME))) )
  675.                     busta.setMittente(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_NOME));
  676.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_IDPORTA)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_IDPORTA))) )
  677.                     busta.setIdentificativoPortaMittente(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_IDPORTA));
  678.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_INDIRIZZO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_INDIRIZZO)))){
  679.                     busta.setIndirizzoMittente(rs.getString(CostantiDB.TRACCE_COLUMN_MITTENTE_INDIRIZZO));
  680.                 }
  681.                
  682.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_TIPO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_TIPO))))
  683.                     busta.setTipoDestinatario(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_TIPO));
  684.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_NOME)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_NOME))))
  685.                     busta.setDestinatario(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_NOME));
  686.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_IDPORTA)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_IDPORTA))) )
  687.                     busta.setIdentificativoPortaDestinatario(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_IDPORTA));
  688.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_INDIRIZZO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_INDIRIZZO))))
  689.                     busta.setIndirizzoDestinatario(rs.getString(CostantiDB.TRACCE_COLUMN_DESTINATARIO_INDIRIZZO));
  690.                
  691.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_SA_FRUITORE)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_SA_FRUITORE))))
  692.                     busta.setServizioApplicativoFruitore(rs.getString(CostantiDB.TRACCE_COLUMN_SA_FRUITORE));
  693.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_SA_EROGATORE)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_SA_EROGATORE))))
  694.                     busta.setServizioApplicativoErogatore(rs.getString(CostantiDB.TRACCE_COLUMN_SA_EROGATORE));
  695.                
  696.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE))))
  697.                     busta.setProfiloDiCollaborazioneValue(rs.getString(CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE));
  698.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE_SDK_CONSTANT)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE_SDK_CONSTANT))))
  699.                     busta.setProfiloDiCollaborazione(ProfiloDiCollaborazione.toProfiloDiCollaborazione(rs.getString(CostantiDB.TRACCE_COLUMN_PROFILO_COLLABORAZIONE_SDK_CONSTANT)));
  700.                
  701.                 Integer versioneServizioCorrelato = rs.getInt(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_VERSIONE);
  702.                 if(rs.wasNull()){
  703.                     versioneServizioCorrelato = null;
  704.                 }
  705.                 if(versioneServizioCorrelato!=null){
  706.                     busta.setVersioneServizioCorrelato(versioneServizioCorrelato);
  707.                 }
  708.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_NOME)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_NOME))))
  709.                     busta.setServizioCorrelato(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_NOME));
  710.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_TIPO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_TIPO))))
  711.                     busta.setTipoServizioCorrelato(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_CORRELATO_TIPO));
  712.                
  713.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_COLLABORAZIONE)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_COLLABORAZIONE))))
  714.                     busta.setCollaborazione(rs.getString(CostantiDB.TRACCE_COLUMN_COLLABORAZIONE));
  715.                
  716.                 Integer versioneServizio = rs.getInt(CostantiDB.TRACCE_COLUMN_SERVIZIO_VERSIONE);
  717.                 if(rs.wasNull()){
  718.                     versioneServizio = null;
  719.                 }
  720.                 if(versioneServizio!=null){
  721.                     busta.setVersioneServizio(versioneServizio);
  722.                 }
  723.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_NOME)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_NOME))))
  724.                     busta.setServizio(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_NOME));
  725.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_TIPO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_TIPO))))
  726.                     busta.setTipoServizio(rs.getString(CostantiDB.TRACCE_COLUMN_SERVIZIO_TIPO));
  727.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_AZIONE)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_AZIONE))))
  728.                     busta.setAzione(rs.getString(CostantiDB.TRACCE_COLUMN_AZIONE));
  729.                
  730.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO))))
  731.                     busta.setID(rs.getString(CostantiDB.TRACCE_COLUMN_ID_MESSAGGIO));
  732.                
  733.                 if(rs.getTimestamp(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE)!=null )
  734.                     busta.setOraRegistrazione(rs.getTimestamp(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE));
  735.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE_TIPO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE_TIPO))))
  736.                     busta.setTipoOraRegistrazioneValue(rs.getString(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE_TIPO));
  737.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT))))
  738.                     busta.setTipoOraRegistrazione(TipoOraRegistrazione.toTipoOraRegistrazione(rs.getString(CostantiDB.TRACCE_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT)),busta.getTipoOraRegistrazioneValue());
  739.                
  740.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_RIFERIMENTO_MESSAGGIO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_RIFERIMENTO_MESSAGGIO))))
  741.                     busta.setRiferimentoMessaggio(rs.getString(CostantiDB.TRACCE_COLUMN_RIFERIMENTO_MESSAGGIO));
  742.                
  743.                 if(rs.getTimestamp(CostantiDB.TRACCE_COLUMN_SCADENZA)!=null )
  744.                     busta.setScadenza(rs.getTimestamp(CostantiDB.TRACCE_COLUMN_SCADENZA));
  745.                
  746.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_INOLTRO)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_INOLTRO))))
  747.                     busta.setInoltroValue(rs.getString(CostantiDB.TRACCE_COLUMN_INOLTRO));
  748.                 if(rs.getString(CostantiDB.TRACCE_COLUMN_INOLTRO_SDK_CONSTANT)!=null && (!"".equals(rs.getString(CostantiDB.TRACCE_COLUMN_INOLTRO_SDK_CONSTANT))))
  749.                     busta.setInoltro(Inoltro.toInoltro(rs.getString(CostantiDB.TRACCE_COLUMN_INOLTRO_SDK_CONSTANT)),busta.getInoltroValue());
  750.                 busta.setConfermaRicezione(rs.getInt(CostantiDB.TRACCE_COLUMN_CONFERMA_RICEZIONE)==1);
  751.                
  752.                 if(rs.getLong(CostantiDB.TRACCE_COLUMN_SEQUENZA)>0){
  753.                     busta.setSequenza(rs.getLong(CostantiDB.TRACCE_COLUMN_SEQUENZA));
  754.                 }
  755.                
  756.                 busta.setDigest(rs.getString(CostantiDB.TRACCE_COLUMN_DIGEST));
  757.                
  758.                 String headerProtocollo = rs.getString(CostantiDB.TRACCE_COLUMN_SOAP);
  759.                 if(headerProtocollo!=null){
  760.                     tr.setBustaAsString(headerProtocollo);
  761.                 }
  762.                
  763.                 long idTraccia = rs.getLong(CostantiDB.TRACCE_COLUMN_ID);
  764.                 tr.setId(idTraccia);
  765.                 tr.addProperty(TracciaDriver.IDTRACCIA, idTraccia+"");
  766.                
  767.                 /**System.out.println("ID TRACCIA ["+idTraccia+"]");*/
  768.                
  769.                 IProtocolFactory<?> protocolFactory = protocolli.getProtocolFactory(tr.getProtocollo());
  770.                 ITraduttore traduttoreProtocollo = protocolFactory.createTraduttore();
  771.                
  772.                 // Lista trasmissioni
  773.                 sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  774.                 sqlQueryObject.addFromTable(CostantiDB.TRACCE_TRASMISSIONI);
  775.                 sqlQueryObject.addSelectField("*");
  776.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ID_TRACCIA+"=?");
  777.                 sqlQueryObject.setANDLogicOperator(true);
  778.                 pstmtLista = con.prepareStatement(sqlQueryObject.toString());
  779.                 pstmtLista.setLong(1, idTraccia);
  780.                 rsLista = pstmtLista.executeQuery();
  781.                 while(rsLista.next()){
  782.                     Trasmissione trtr = new Trasmissione();
  783.                    
  784.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE))))
  785.                         trtr.setOrigine(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE));
  786.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_TIPO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_TIPO))))
  787.                         trtr.setTipoOrigine(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_TIPO));
  788.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_INDIRIZZO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_INDIRIZZO))))
  789.                         trtr.setIndirizzoOrigine(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_INDIRIZZO));
  790.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_IDPORTA)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_IDPORTA)))){
  791.                         trtr.setIdentificativoPortaOrigine(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORIGINE_IDPORTA));
  792.                     }
  793.                    
  794.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE))))
  795.                         trtr.setDestinazione(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE));
  796.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_TIPO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_TIPO))))
  797.                         trtr.setTipoDestinazione(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_TIPO));
  798.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_INDIRIZZO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_INDIRIZZO))))
  799.                         trtr.setIndirizzoDestinazione(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_INDIRIZZO));
  800.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_IDPORTA)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_IDPORTA)))){
  801.                         trtr.setIdentificativoPortaDestinazione(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_DESTINAZIONE_IDPORTA));
  802.                     }
  803.                    
  804.                     if(rsLista.getTimestamp(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE)!=null )
  805.                         trtr.setOraRegistrazione(rsLista.getTimestamp(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE));
  806.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE_TIPO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE_TIPO))))
  807.                         trtr.setTempoValue(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE_TIPO));
  808.                     if(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT))))
  809.                         trtr.setTempo(TipoOraRegistrazione.toTipoOraRegistrazione(rsLista.getString(CostantiDB.TRACCE_TRASMISSIONI_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT)));
  810.                     busta.addTrasmissione(trtr);
  811.                 }
  812.                 rsLista.close();
  813.                 pstmtLista.close();
  814.                
  815.                 // Lista eccezioni
  816.                 sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  817.                 sqlQueryObject.addFromTable(CostantiDB.TRACCE_ECCEZIONI);
  818.                 sqlQueryObject.addSelectField("*");
  819.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_ECCEZIONI_COLUMN_ID_TRACCIA+"=?");
  820.                 sqlQueryObject.setANDLogicOperator(true);
  821.                 pstmtLista = con.prepareStatement(sqlQueryObject.toString());
  822.                 pstmtLista.setLong(1, idTraccia);
  823.                 rsLista = pstmtLista.executeQuery();
  824.                
  825.                 while(rsLista.next()){
  826.                    
  827.                     Eccezione trec = Eccezione.newEccezione();
  828.                    
  829.                     String contestoCodifica = rsLista.getString(CostantiDB.TRACCE_ECCEZIONI_COLUMN_CONTESTO_CODIFICA);
  830.                     String contestoCodificaMeta = rsLista.getString(CostantiDB.TRACCE_ECCEZIONI_COLUMN_CONTESTO_CODIFICA_SDK_CONSTANT);
  831.                     String codiceEccezione = rsLista.getString(CostantiDB.TRACCE_ECCEZIONI_COLUMN_CODICE_ECCEZIONE);
  832.                     int codiceEccezioneMeta = rsLista.getInt(CostantiDB.TRACCE_ECCEZIONI_COLUMN_CODICE_ECCEZIONE_SDK_CONSTANT);
  833.                     int subCodiceEccezioneMeta = rsLista.getInt(CostantiDB.TRACCE_ECCEZIONI_COLUMN_CODICE_ECCEZIONE_SUBCOD_SDK_CONSTANT);
  834.                     String rilevanza = rsLista.getString(CostantiDB.TRACCE_ECCEZIONI_COLUMN_RILEVANZA);
  835.                     String rilevanzaMeta = rsLista.getString(CostantiDB.TRACCE_ECCEZIONI_COLUMN_RILEVANZA_SDK_CONSTANT);
  836.                     String posizione = rsLista.getString(CostantiDB.TRACCE_ECCEZIONI_COLUMN_POSIZIONE);
  837.                        
  838.                    
  839.                     // ContestoCodificaValue
  840.                     if(contestoCodifica!=null && (!"".equals(contestoCodifica))){
  841.                         trec.setContestoCodificaValue(contestoCodifica);
  842.                     }
  843.                     else if(contestoCodificaMeta!=null && (!"".equals(contestoCodificaMeta))){
  844.                         trec.setContestoCodificaValue(traduttoreProtocollo.toString(ContestoCodificaEccezione.toContestoCodificaEccezione(contestoCodificaMeta)));
  845.                     }
  846.                    
  847.                     // ContestoCodifica (META)
  848.                     if(contestoCodificaMeta!=null && (!"".equals(contestoCodificaMeta))){
  849.                         trec.setContestoCodifica(ContestoCodificaEccezione.toContestoCodificaEccezione(contestoCodificaMeta));
  850.                     }
  851.                     else if(contestoCodifica!=null && (!"".equals(contestoCodifica))){
  852.                         trec.setContestoCodifica(traduttoreProtocollo.toContestoCodificaEccezione(contestoCodifica));
  853.                     }
  854.                    
  855.                     // Tmp
  856.                     CodiceErroreCooperazione cod = CodiceErroreCooperazione.toCodiceErroreCooperazione(codiceEccezioneMeta); // se non matcha con niente diventa UNKNOWN
  857.                     SubCodiceErrore subCodiceErrore = null;
  858.                     if(subCodiceEccezioneMeta>=0){
  859.                         subCodiceErrore = new SubCodiceErrore();
  860.                         subCodiceErrore.setSubCodice(subCodiceEccezioneMeta);
  861.                     }
  862.                    
  863.                     // CodiceEccezioneValue
  864.                     if(codiceEccezione!=null && (!"".equals(codiceEccezione))){
  865.                         trec.setCodiceEccezioneValue(codiceEccezione);
  866.                     }
  867.                     else {
  868.                         trec.setCodiceEccezioneValue(traduttoreProtocollo.toString(cod,subCodiceErrore));
  869.                     }
  870.                    
  871.                     // CodiceEccezione (META)
  872.                     if(CodiceErroreCooperazione.UNKNOWN.equals(cod)){
  873.                         if(codiceEccezione!=null && (!"".equals(codiceEccezione))){
  874.                             trec.setCodiceEccezione(traduttoreProtocollo.toCodiceErroreCooperazione(codiceEccezione));
  875.                         }
  876.                     }
  877.                     else{
  878.                         trec.setCodiceEccezione(cod);
  879.                     }
  880.                    
  881.                     // SubCodiceEccezione (META)
  882.                     if(subCodiceErrore!=null){
  883.                         trec.setSubCodiceEccezione(subCodiceErrore);
  884.                     }
  885.                    
  886.                     // RilevanzaValue
  887.                     if(rilevanza!=null && (!"".equals(rilevanza))){
  888.                         trec.setRilevanzaValue(rilevanza);
  889.                     }
  890.                     else if(rilevanzaMeta!=null && (!"".equals(rilevanzaMeta))){
  891.                         trec.setRilevanzaValue(traduttoreProtocollo.toString(LivelloRilevanza.toLivelloRilevanza(rilevanzaMeta)));
  892.                     }
  893.                    
  894.                     // Rilevanza
  895.                     if(rilevanzaMeta!=null && (!"".equals(rilevanzaMeta))){
  896.                         trec.setRilevanza(LivelloRilevanza.toLivelloRilevanza(rilevanzaMeta));
  897.                     }
  898.                     else if(rilevanza!=null && (!"".equals(rilevanza))){
  899.                         trec.setRilevanza(traduttoreProtocollo.toLivelloRilevanza(rilevanza));
  900.                     }
  901.                    
  902.                     // Posizione/Descrizione
  903.                     if(posizione!=null && (!"".equals(posizione))){
  904.                         trec.setDescrizione(posizione);
  905.                     }
  906.                    
  907.                     busta.addEccezione(trec);
  908.                 }
  909.                 rsLista.close();
  910.                 pstmtLista.close();
  911.                
  912.                 // Lista riscontri
  913.                 sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  914.                 sqlQueryObject.addFromTable(CostantiDB.TRACCE_RISCONTRI);
  915.                 sqlQueryObject.addSelectField("*");
  916.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_RISCONTRI_COLUMN_ID_TRACCIA+"=?");
  917.                 sqlQueryObject.setANDLogicOperator(true);
  918.                 pstmtLista = con.prepareStatement(sqlQueryObject.toString());
  919.                 pstmtLista.setLong(1, idTraccia);
  920.                 rsLista = pstmtLista.executeQuery();
  921.                 while(rsLista.next()){
  922.                     Riscontro trris = new  Riscontro();
  923.                     if(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ID_RISCONTRO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ID_RISCONTRO))))
  924.                         trris.setID(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ID_RISCONTRO));
  925.                     if(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_RICEVUTA)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_RICEVUTA))))
  926.                         trris.setRicevuta(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_RICEVUTA));
  927.                     if(rsLista.getTimestamp(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE)!=null )
  928.                         trris.setOraRegistrazione(rsLista.getTimestamp(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE));
  929.                     if(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE_TIPO)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE_TIPO))))
  930.                         trris.setTipoOraRegistrazioneValue(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE_TIPO));
  931.                     if(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT)!=null && (!"".equals(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT))))
  932.                         trris.setTipoOraRegistrazione(TipoOraRegistrazione.toTipoOraRegistrazione(rsLista.getString(CostantiDB.TRACCE_RISCONTRI_COLUMN_ORA_REGISTRAZIONE_TIPO_SDK_CONSTANT)));
  933.                     busta.addRiscontro(trris);
  934.                 }
  935.                 rsLista.close();
  936.                 pstmtLista.close();
  937.                
  938.                
  939.                 // Lista Allegati
  940.                 sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  941.                 sqlQueryObject.addFromTable(CostantiDB.TRACCE_ALLEGATI);                
  942.                 sqlQueryObject.addSelectField("*");
  943.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_ALLEGATI_COLUMN_ID_TRACCIA+"=?");
  944.                 sqlQueryObject.setANDLogicOperator(true);
  945.                 pstmtLista = con.prepareStatement(sqlQueryObject.toString());
  946.                 pstmtLista.setLong(1, idTraccia);
  947.                 rsLista = pstmtLista.executeQuery();
  948.                 while(rsLista.next()){
  949.                     Allegato allegato = new Allegato();
  950.                     allegato.setContentId(rsLista.getString(CostantiDB.TRACCE_ALLEGATI_COLUMN_CONTENT_ID));
  951.                     allegato.setContentLocation(rsLista.getString(CostantiDB.TRACCE_ALLEGATI_COLUMN_CONTENT_LOCATION));
  952.                     allegato.setContentType(rsLista.getString(CostantiDB.TRACCE_ALLEGATI_COLUMN_CONTENT_TYPE));
  953.                     allegato.setDigest(rsLista.getString(CostantiDB.TRACCE_ALLEGATI_COLUMN_DIGEST));
  954.                     tr.addAllegato(allegato);
  955.                 }
  956.                 rsLista.close();
  957.                 pstmtLista.close();
  958.                
  959.                
  960.                 // Protocol extra info
  961.                 sqlQueryObject = TracciaDriverUtilities.getSQLQueryObject(tipoDatabase);
  962.                 sqlQueryObject.addFromTable(CostantiDB.TRACCE_EXT_INFO);                
  963.                 sqlQueryObject.addSelectField("*");
  964.                 sqlQueryObject.addWhereCondition(CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_ID_TRACCIA+"=?");
  965.                 sqlQueryObject.setANDLogicOperator(true);
  966.                 pstmtLista = con.prepareStatement(sqlQueryObject.toString());
  967.                 pstmtLista.setLong(1, idTraccia);
  968.                 rsLista = pstmtLista.executeQuery();
  969.                 while(rsLista.next()){
  970.                     busta.addProperty(rsLista.getString(CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_NAME), rsLista.getString(CostantiDB.TRACCE_EXT_PROTOCOL_INFO_COLUMN_VALUE));
  971.                 }
  972.                 rsLista.close();
  973.                 pstmtLista.close();
  974.                
  975.                
  976.                 tr.setBusta(busta);
  977.                
  978.                
  979.             }
  980.             rs.close();
  981.             pstmt.close();
  982.            
  983.             if(tr==null){
  984.                 throw new DriverTracciamentoNotFoundException("Traccia non trovata (id:"+id+")");
  985.             }
  986.             return tr;
  987.            
  988.         }catch(DriverTracciamentoNotFoundException d){
  989.             throw d;
  990.         }catch(Exception e){
  991.             throw new DriverTracciamentoException("Tracciamento exception: "+e.getMessage(),e);
  992.         }finally{
  993.             JDBCUtilities.closeResources(rsLista, pstmtLista);
  994.             JDBCUtilities.closeResources(rs, pstmt);
  995.         }
  996.     }
  997.    
  998.    
  999.    
  1000.    
  1001.    
  1002.     protected static boolean isDefined(String v){
  1003.         return v!=null && !"".equals(v);
  1004.     }
  1005.     protected static boolean isDefined(Date v){
  1006.         return v!=null;
  1007.     }
  1008.     protected static boolean isDefined(RuoloMessaggio v){
  1009.         return v!=null;
  1010.     }
  1011.     protected static boolean isDefined(TipoPdD v){
  1012.         return v!=null;
  1013.     }
  1014.     protected static boolean isDefined(IDSoggetto v){
  1015.         return v!=null;
  1016.     }
  1017.     protected static boolean isDefined(InformazioniProtocollo v){
  1018.         return v!=null;
  1019.     }
  1020.     protected static boolean isDefined(Integer v){
  1021.         return v!=null;
  1022.     }
  1023.     protected static boolean isDefined(ProfiloDiCollaborazione v){
  1024.         return v!=null;
  1025.     }
  1026. }