InformazioniRecordDiagnostici.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.pdd.logger.diagnostica;

  21. import java.util.ArrayList;
  22. import java.util.Date;
  23. import java.util.List;

  24. import org.openspcoop2.core.commons.CoreException;
  25. import org.openspcoop2.pdd.logger.record.AbstractDatoRicostruzione;
  26. import org.openspcoop2.pdd.logger.record.CharDatoRicostruzione;
  27. import org.openspcoop2.pdd.logger.record.StringDatoRicostruzione;
  28. import org.openspcoop2.pdd.logger.record.TimestampDatoRicostruzione;

  29. /**    
  30.  * InformazioniRecordDiagnostici
  31.  *
  32.  * @author Poli Andrea (poli@link.it)
  33.  * @author $Author$
  34.  * @version $Rev$, $Date$
  35.  */
  36. public class InformazioniRecordDiagnostici {

  37.     protected boolean presenti = false;
  38.    
  39.     protected boolean ricostruibili = false;
  40.    
  41.     protected List<AbstractDatoRicostruzione<?>> dati = new ArrayList<>();

  42.     protected List<InfoDiagnostico> diagnostici = new ArrayList<>();
  43.        
  44.     protected String motivoRicostruzioneNonFattibile = null;
  45.    
  46.    
  47.     // Gli Ext servono per generare diagnostici dinamici che magari presentano template uguali ma che devono essere risolti con valori diversi
  48.    
  49.     protected List<InfoDiagnostico> diagnosticiExt = new ArrayList<>();
  50.    
  51.     protected List<DynamicExtendedInfoDiagnostico> datiExt = new ArrayList<>();
  52.    
  53.     protected String rawDBValue = null;
  54.    
  55.     public String getRawDBValue() {
  56.         return this.rawDBValue;
  57.     }

  58.     public void setRawDBValue(String rawDBValue) {
  59.         this.rawDBValue = rawDBValue;
  60.     }
  61.    

  62.     public String getMotivoRicostruzioneNonFattibile() {
  63.         return this.motivoRicostruzioneNonFattibile;
  64.     }
  65.    
  66.     public boolean isRicostruibili() {
  67.         return this.ricostruibili;
  68.     }
  69.    
  70.     public boolean isPresenti() {
  71.         return this.presenti;
  72.     }

  73.     public int sizeMetaDati(){
  74.         return this.dati.size();
  75.     }
  76.    
  77.     public AbstractDatoRicostruzione<?> getDato(MappingRicostruzioneDiagnostici mapping){
  78.         if(mapping.getValue()==null) {
  79.             return null;
  80.         }
  81.         int index = mapping.getValue();
  82.         if(index < this.dati.size()) {
  83.             return this.dati.get(index);
  84.         }
  85.         return null;
  86.     }
  87.    
  88.     public List<InfoDiagnostico> getDiagnostici() {
  89.         return this.diagnostici;
  90.     }
  91.    
  92.     public void setPresenti(boolean presenti) {
  93.         this.presenti = presenti;
  94.     }
  95.    
  96.     public void setRicostruibili(boolean ricostruibili) {
  97.         this.ricostruibili = ricostruibili;
  98.     }

  99.     public void setMotivoRicostruzioneNonFattibile(
  100.             String motivoRicostruzioneNonFattibile) {
  101.         this.motivoRicostruzioneNonFattibile = motivoRicostruzioneNonFattibile;
  102.     }

  103.     public void setDati(List<AbstractDatoRicostruzione<?>> dati) {
  104.         this.dati = dati;
  105.     }
  106.    
  107.     public void setDiagnostici(List<InfoDiagnostico> diagnostici) {
  108.         this.diagnostici = diagnostici;
  109.     }
  110.    
  111.     public List<InfoDiagnostico> getDiagnosticiExt() {
  112.         return this.diagnosticiExt;
  113.     }

  114.     public void setDiagnosticiExt(List<InfoDiagnostico> diagnosticiExt) {
  115.         this.diagnosticiExt = diagnosticiExt;
  116.     }

  117.     public void setDatiExt(List<DynamicExtendedInfoDiagnostico> datiExt) {
  118.         this.datiExt = datiExt;
  119.     }
  120.    
  121.     public List<DynamicExtendedInfoDiagnostico> getDatiExt() {
  122.         return this.datiExt;
  123.     }
  124.    
  125.    
  126.    
  127.     @Override
  128.     public String toString(){
  129.         StringBuilder bf = new StringBuilder();
  130.         bf.append("---- Diagnostici -----\n");
  131.         bf.append("\tpresenti("+this.presenti+")\n");
  132.         bf.append("\tricostruibili("+this.ricostruibili+")\n");
  133.         bf.append("\tdati size:"+this.dati.size()).append("\n");
  134.         for (int i = 0; i < this.dati.size(); i++) {
  135.             bf.append("\t\tdato["+MappingRicostruzioneDiagnostici.toEnumConstant(i).name()+"("+i+")]").append("\n");
  136.             bf.append("\t\t\tdescrizione:"+this.dati.get(i).getInfo().getDescription()).append("\n");
  137.             try{
  138.                 bf.append("\t\t\tvalore:"+this.dati.get(i).convertToString()).append("\n");
  139.             }catch(Exception e){
  140.                 bf.append("\t\t\tvalore: ERRORE NEL CALCOLO: "+e.getMessage()).append("\n");
  141.             }
  142.         }
  143.         if(!this.ricostruibili){
  144.             bf.append(" motivoRicostruzioneNonFattibile("+this.motivoRicostruzioneNonFattibile+")\n");  
  145.         }
  146.         return bf.toString();
  147.     }
  148.        
  149.     public static InformazioniRecordDiagnostici convertoFromDBColumnValue(String columnMetaInf, String columnList1, String columnList2,
  150.             String columnListExt, String datiExt) throws CoreException{
  151.        
  152.         InformazioniRecordDiagnostici info = new InformazioniRecordDiagnostici();
  153.        
  154.         if(columnMetaInf == null || "".equals(columnMetaInf.trim())){
  155.             throw new CoreException("Valore non fornito");
  156.         }
  157.         info.setRawDBValue(columnMetaInf);
  158.        
  159.         if(columnMetaInf.length()==1 && (CostantiMappingDiagnostici.NON_PRESENTE == columnMetaInf.charAt(0)) ){
  160.             info.setPresenti(false);
  161.             return info;
  162.         }
  163.        
  164.         info.setPresenti(true);
  165.        
  166.        
  167.         // meta-inf
  168.        
  169.         String dbValue = columnMetaInf.trim();
  170.        
  171.         if(!dbValue.contains(CostantiMappingDiagnostici.SEPARATOR)){
  172.             info.setRicostruibili(false);
  173.             info.setMotivoRicostruzioneNonFattibile("Non sono presenti caratteri separatori ["+CostantiMappingDiagnostici.SEPARATOR+"] nel valore");
  174.             return info;
  175.         }
  176.        
  177.         String [] split = dbValue.split(CostantiMappingDiagnostici.SEPARATOR);
  178.         Date gdoFirstDiagnostic = null;
  179.         if( CostantiMappingDiagnostici.DIAGNOSTICI_EMESSI_RICOSTRUIBILI != split[0].charAt(0) ){
  180.             info.setRicostruibili(false);
  181.             info.setMotivoRicostruzioneNonFattibile(dbValue);
  182.         }
  183.         else{
  184.             info.setRicostruibili(true);
  185.             List<AbstractDatoRicostruzione<?>> listaDati = new ArrayList<>();
  186.             info.setDati(listaDati);
  187.            
  188.             listaDati.add(new CharDatoRicostruzione(split[MappingRicostruzioneDiagnostici.DIAGNOSTICI_EMESSI.getPosition()],
  189.                     CostantiMappingDiagnostici.DIAGNOSTICI_EMESSI));
  190.            
  191.             listaDati.add(new TimestampDatoRicostruzione(split[MappingRicostruzioneDiagnostici.DIAGNOSTICI_EMISSIONE_FIRST_DATE.getPosition()],
  192.                     CostantiMappingDiagnostici.DIAGNOSTICI_EMISSIONE_FIRST_DATE));
  193.             Object oGdoFist = listaDati.get(MappingRicostruzioneDiagnostici.DIAGNOSTICI_EMISSIONE_FIRST_DATE.getPosition()).getDato();
  194.             gdoFirstDiagnostic = (oGdoFist!=null ? (Date)oGdoFist : null);
  195.            
  196.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_AUTORIZZAZIONE.getPosition()],
  197.                     CostantiMappingDiagnostici.TIPO_AUTORIZZAZIONE));
  198.            
  199.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.CODICE_TRASPORTO_RICHIESTA.getPosition()],
  200.                     CostantiMappingDiagnostici.CODICE_TRASPORTO_RICHIESTA));
  201.            
  202.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.CODICE_TRASPORTO_RISPOSTA.getPosition()],
  203.                     CostantiMappingDiagnostici.CODICE_TRASPORTO_RISPOSTA));
  204.            
  205.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_CONNETTORE.getPosition()],
  206.                     CostantiMappingDiagnostici.TIPO_CONNETTORE));
  207.            
  208.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.MAX_THREADS_THRESHOLD.getPosition()],
  209.                     CostantiMappingDiagnostici.MAX_THREADS_THRESHOLD));
  210.            
  211.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.CONTROLLO_TRAFFICO_THRESHOLD.getPosition()],
  212.                     CostantiMappingDiagnostici.CONTROLLO_TRAFFICO_THRESHOLD));
  213.            
  214.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.ACTIVE_THREADS.getPosition()],
  215.                     CostantiMappingDiagnostici.ACTIVE_THREADS));
  216.            
  217.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_CONFIGURATE.getPosition()],
  218.                     CostantiMappingDiagnostici.NUMERO_POLICY_CONFIGURATE));
  219.            
  220.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_DISABILITATE.getPosition()],
  221.                     CostantiMappingDiagnostici.NUMERO_POLICY_DISABILITATE));
  222.            
  223.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_FILTRATE.getPosition()],
  224.                     CostantiMappingDiagnostici.NUMERO_POLICY_FILTRATE));
  225.            
  226.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_NON_APPLICATE.getPosition()],
  227.                     CostantiMappingDiagnostici.NUMERO_POLICY_NON_APPLICATE));
  228.            
  229.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_RISPETTATE.getPosition()],
  230.                     CostantiMappingDiagnostici.NUMERO_POLICY_RISPETTATE));
  231.            
  232.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_VIOLATE.getPosition()],
  233.                     CostantiMappingDiagnostici.NUMERO_POLICY_VIOLATE));
  234.            
  235.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_VIOLATE_WARNING_ONLY.getPosition()],
  236.                     CostantiMappingDiagnostici.NUMERO_POLICY_VIOLATE_WARNING_ONLY));
  237.            
  238.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.NUMERO_POLICY_IN_ERRORE.getPosition()],
  239.                     CostantiMappingDiagnostici.NUMERO_POLICY_IN_ERRORE));
  240.            
  241.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_AUTENTICAZIONE.getPosition()],
  242.                     CostantiMappingDiagnostici.TIPO_AUTENTICAZIONE));
  243.            
  244.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_AUTORIZZAZIONE_CONTENUTI.getPosition()],
  245.                     CostantiMappingDiagnostici.TIPO_AUTORIZZAZIONE_CONTENUTI));
  246.            
  247.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_VALIDAZIONE_CONTENUTI.getPosition()],
  248.                     CostantiMappingDiagnostici.TIPO_VALIDAZIONE_CONTENUTI));
  249.            
  250.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MTOM_RICHIESTA.getPosition()],
  251.                     CostantiMappingDiagnostici.TIPO_PROCESSAMENTO_MTOM_RICHIESTA));
  252.            
  253.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MTOM_RISPOSTA.getPosition()],
  254.                     CostantiMappingDiagnostici.TIPO_PROCESSAMENTO_MTOM_RISPOSTA));
  255.            
  256.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MESSAGE_SECURITY_RICHIESTA.getPosition()],
  257.                     CostantiMappingDiagnostici.TIPO_PROCESSAMENTO_MESSAGE_SECURITY_RICHIESTA));
  258.            
  259.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_PROCESSAMENTO_MESSAGE_SECURITY_RISPOSTA.getPosition()],
  260.                     CostantiMappingDiagnostici.TIPO_PROCESSAMENTO_MESSAGE_SECURITY_RISPOSTA));
  261.                
  262.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.AUTENTICAZIONE_IN_CACHE.getPosition()],
  263.                     CostantiMappingDiagnostici.AUTENTICAZIONE_IN_CACHE));
  264.            
  265.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.AUTORIZZAZIONE_IN_CACHE.getPosition()],
  266.                     CostantiMappingDiagnostici.AUTORIZZAZIONE_IN_CACHE));
  267.            
  268.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.AUTORIZZAZIONE_CONTENUTI_IN_CACHE.getPosition()],
  269.                     CostantiMappingDiagnostici.AUTORIZZAZIONE_CONTENUTI_IN_CACHE));
  270.            
  271.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TOKEN_POLICY.getPosition()],
  272.                     CostantiMappingDiagnostici.TOKEN_POLICY));
  273.            
  274.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TOKEN_POLICY_ACTIONS.getPosition()],
  275.                     CostantiMappingDiagnostici.TOKEN_POLICY_ACTIONS));
  276.            
  277.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TOKEN_POLICY_AUTENTCAZIONE.getPosition()],
  278.                     CostantiMappingDiagnostici.TOKEN_POLICY_AUTENTCAZIONE));
  279.            
  280.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.RESPONSE_FROM_CACHE.getPosition()],
  281.                     CostantiMappingDiagnostici.RESPONSE_FROM_CACHE));
  282.            
  283.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_TRASFORMAZIONE_RICHIESTA.getPosition()],
  284.                     CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_RICHIESTA));
  285.            
  286.             listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.TIPO_TRASFORMAZIONE_RISPOSTA.getPosition()],
  287.                     CostantiMappingDiagnostici.TIPO_TRASFORMAZIONE_RISPOSTA));
  288.            
  289.             if(split.length>(CostantiMappingDiagnostici.LENGHT_DATI_SIMULATI_VERSIONE_ATTUALE_PRECEDENTE_INTRODOTTO_33_34)){
  290.            
  291.                 listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.AUTENTICAZIONE_TOKEN_IN_CACHE.getPosition()],
  292.                         CostantiMappingDiagnostici.AUTENTICAZIONE_TOKEN_IN_CACHE));
  293.                
  294.                 listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.AUTENTICAZIONE_FALLITA_MOTIVAZIONE.getPosition()],
  295.                         CostantiMappingDiagnostici.AUTENTICAZIONE_FALLITA_MOTIVAZIONE));
  296.                
  297.             }
  298.            
  299.             if(split.length>(CostantiMappingDiagnostici.LENGHT_DATI_SIMULATI_VERSIONE_ATTUALE_PRECEDENTE_INTRODOTTO_35_36_37)){
  300.                
  301.                 listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.MODI_TOKEN_AUTHORIZATION_IN_CACHE.getPosition()],
  302.                         CostantiMappingDiagnostici.MODI_TOKEN_AUTHORIZATION_IN_CACHE));
  303.                
  304.                 listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.MODI_TOKEN_INTEGRITY_IN_CACHE.getPosition()],
  305.                         CostantiMappingDiagnostici.MODI_TOKEN_INTEGRITY_IN_CACHE));
  306.                
  307.                 listaDati.add(new StringDatoRicostruzione(split[MappingRicostruzioneDiagnostici.MODI_TOKEN_AUDIT_IN_CACHE.getPosition()],
  308.                         CostantiMappingDiagnostici.MODI_TOKEN_AUDIT_IN_CACHE));
  309.                
  310.             }
  311.            
  312.             if(split.length>CostantiMappingDiagnostici.LENGHT_DATI_SIMULATI_VERSIONE_ATTUALE){
  313.                
  314.                 // NOTA: successivi dati aggiunti
  315.                 // GESTIRE QUANDO SI INTRODUCONO NUOVE INFO
  316.                
  317.             }
  318.         }
  319.        
  320.        
  321.         // diagnostic
  322.        
  323.         List<InfoDiagnostico> listaDiagnostici = new ArrayList<>();
  324.         info.setDiagnostici(listaDiagnostici);
  325.        
  326.         if( (columnList1==null || "".equals(columnList1))
  327.                 &&
  328.             (info.isPresenti() && info.isRicostruibili())
  329.             &&
  330.                
  331.             // Prima di sollevare l'eccezione controllo se i diagnostici simulati sono presenti solamente nella colonna column ext
  332.             (columnListExt==null || "".equals(columnListExt) ||
  333.                     datiExt==null || "".equals(datiExt))
  334.             ){
  335.             throw new CoreException("Valore ColumnList1 non fornito, nonostante dovrebbero essere presenti dei diagnostici (informazione meta-inf indica la presenza e indica che sono ricostruibili)");
  336.         }
  337.         if(columnList1!=null && !"".equals(columnList1)){
  338.             String [] splitDiagnosticList1 = columnList1.split(CostantiMappingDiagnostici.SEPARATOR);
  339.             if(splitDiagnosticList1.length>CostantiMappingDiagnostici.MAX_DIAGNOSTIC_LIST_ROW_1){
  340.                 throw new CoreException("Valore ColumnList1 fornito non corretto. Non possono essere definiti piu' di "+CostantiMappingDiagnostici.MAX_DIAGNOSTIC_LIST_ROW_1+" diagnostici (separati dal carattere separatore ["+CostantiMappingDiagnostici.SEPARATOR+"])");
  341.             }
  342.             for (int i = 0; i < splitDiagnosticList1.length; i++) {
  343.                 String diagnostic = splitDiagnosticList1[i].trim();
  344.                 listaDiagnostici.add(InfoDiagnostico.convertoFromDBColumnValue(gdoFirstDiagnostic, diagnostic));
  345.             }
  346.         }
  347.        
  348.         if(columnList2!=null && !"".equals(columnList2)){
  349.             String [] splitDiagnosticList2 = columnList2.split(CostantiMappingDiagnostici.SEPARATOR);
  350.             if(splitDiagnosticList2.length>CostantiMappingDiagnostici.MAX_DIAGNOSTIC_LIST_ROW_2){
  351.                 throw new CoreException("Valore ColumnList2 fornito non corretto. Non possono essere definiti piu' di "+CostantiMappingDiagnostici.MAX_DIAGNOSTIC_LIST_ROW_2+" diagnostici (separati dal carattere separatore ["+CostantiMappingDiagnostici.SEPARATOR+"])");
  352.             }
  353.             for (int i = 0; i < splitDiagnosticList2.length; i++) {
  354.                 String diagnostic = splitDiagnosticList2[i].trim();
  355.                 listaDiagnostici.add(InfoDiagnostico.convertoFromDBColumnValue(gdoFirstDiagnostic, diagnostic));
  356.             }
  357.         }
  358.        
  359.         if(columnListExt!=null && !"".equals(columnListExt)){
  360.            
  361.             if(datiExt==null || "".equals(datiExt)){
  362.                 throw new CoreException("Trovato valore ColumnListExt ma non esiste un analogo valore per i DatiExt");
  363.             }
  364.                        
  365.             String [] splitDiagnosticListExt = columnListExt.split(CostantiMappingDiagnostici.SEPARATOR);
  366.             String [] splitDatiExt = datiExt.split(CostantiMappingDiagnostici.DIAGNOSTIC_WITH_DYNAMIC_INFO_DIAG_SEPARATOR);
  367.            
  368.             if(splitDiagnosticListExt==null || splitDiagnosticListExt.length<=0){
  369.                 throw new CoreException("Trovato valore ColumnListExt corrotto");
  370.             }
  371.             if(splitDatiExt==null || splitDatiExt.length<=0){
  372.                 throw new CoreException("Trovato valore DatiExt corrotto");
  373.             }
  374.             if(splitDiagnosticListExt.length!=splitDatiExt.length){
  375.                 throw new CoreException("Assocazione tra ColumnListExt("+splitDiagnosticListExt.length+") e DatiExt("+splitDatiExt.length+") non corretta");
  376.             }
  377.            
  378.             List<InfoDiagnostico> listaDiagnosticiExt = new ArrayList<>();
  379.             info.setDiagnosticiExt(listaDiagnosticiExt);
  380.            
  381.             List<DynamicExtendedInfoDiagnostico> listaDatiExt = new ArrayList<>();
  382.             info.setDatiExt(listaDatiExt);
  383.            
  384.             for (int i = 0; i < splitDiagnosticListExt.length; i++) {
  385.                
  386.                 String diagnostic = splitDiagnosticListExt[i].trim();
  387.                 listaDiagnosticiExt.add(InfoDiagnostico.convertoFromDBColumnValue(gdoFirstDiagnostic, diagnostic));
  388.                
  389.                 String valueExt = splitDatiExt[i].trim();
  390.                 listaDatiExt.add(DynamicExtendedInfoDiagnostico.convertoFromDBColumnValue(valueExt));
  391.                
  392.             }
  393.            
  394.         }
  395.        
  396.         return info;
  397.     }
  398. }