SPCoopValidazioneSemantica.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.spcoop.validator;

  21. import org.openspcoop2.core.id.IDServizio;
  22. import org.openspcoop2.core.id.IDSoggetto;
  23. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  24. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  25. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  26. import org.openspcoop2.message.OpenSPCoop2Message;
  27. import org.openspcoop2.protocol.basic.BasicStateComponentFactory;
  28. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  29. import org.openspcoop2.protocol.registry.RegistroServiziReader;
  30. import org.openspcoop2.protocol.registry.RisultatoValidazione;
  31. import org.openspcoop2.protocol.sdk.Busta;
  32. import org.openspcoop2.protocol.sdk.Context;
  33. import org.openspcoop2.protocol.sdk.Eccezione;
  34. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  35. import org.openspcoop2.protocol.sdk.ProtocolException;
  36. import org.openspcoop2.protocol.sdk.Riscontro;
  37. import org.openspcoop2.protocol.sdk.SecurityInfo;
  38. import org.openspcoop2.protocol.sdk.Servizio;
  39. import org.openspcoop2.protocol.sdk.Trasmissione;
  40. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  41. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  42. import org.openspcoop2.protocol.sdk.constants.ContestoCodificaEccezione;
  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.RuoloBusta;
  47. import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
  48. import org.openspcoop2.protocol.sdk.state.IState;
  49. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  50. import org.openspcoop2.protocol.sdk.validator.IValidazioneSemantica;
  51. import org.openspcoop2.protocol.sdk.validator.ProprietaValidazione;
  52. import org.openspcoop2.protocol.sdk.validator.ValidazioneSemanticaResult;
  53. import org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti;
  54. import org.openspcoop2.protocol.spcoop.constants.SPCoopCostantiPosizioneEccezione;
  55. import org.openspcoop2.utils.digest.IDigestReader;



  56. /**
  57.  * Classe che implementa, in base al protocollo SPCoop, l'interfaccia {@link org.openspcoop2.protocol.sdk.validator.IValidazioneSemantica}
  58.  *
  59.  * @author Poli Andrea (apoli@link.it)
  60.  * @author $Author$
  61.  * @version $Rev$, $Date$
  62.  */

  63. public class SPCoopValidazioneSemantica extends BasicStateComponentFactory implements IValidazioneSemantica {

  64.     /** Errori di validazione riscontrati sulla busta */
  65.     private java.util.List<Eccezione> erroriValidazione;
  66.     /** Errori di processamento riscontrati sulla busta */
  67.     private java.util.List<Eccezione> erroriProcessamento;
  68.     /** Busta */
  69.     private Busta busta;
  70.     /** Validazione IDEGov completa */
  71.     private boolean validazioneIDEGovCompleta = false;


  72.     /** ServizioCorrelato */
  73.     private String servizioCorrelato;
  74.     /** Tipo ServizioCorrelato */
  75.     private String tipoServizioCorrelato;
  76.     /** Versione ServizioCorrelato */
  77.     private Integer versioneServizioCorrelato = 1; // in spcoop รจ fissa
  78.     /** Azione Correlata */
  79.     private String azioneCorrelata;
  80.     /** Reader Registro */
  81.     private RegistroServiziManager registroServiziReader;
  82.     /** informazioni Servizio */
  83.     private Servizio infoServizio = null;
  84.    
  85.     @SuppressWarnings("unused")
  86.     private Context context;
  87.    

  88.     /**
  89.      * Costruttore.
  90.      *
  91.      * @param protocolFactory ProtocolFactory
  92.      * @throws ProtocolException
  93.      *
  94.      */
  95.     public SPCoopValidazioneSemantica(IProtocolFactory<?> protocolFactory,IState state) throws ProtocolException{
  96.         super(protocolFactory,state);
  97.     }

  98.    
  99.     @Override
  100.     public void setContext(Context context) {
  101.         this.context = context;
  102.     }
  103.    

  104.     /**
  105.      * Metodo che effettua la validazione dei soggetti di una busta, controllando la loro registrazione nel registro dei servizi.
  106.      *
  107.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  108.      *   {@link Eccezione}, e viene inserito nel List <var>errors</var>.
  109.      *
  110.      * @param tipoValidazione tipo di Validazione
  111.      *
  112.      */
  113.     public void valida(ProprietaValidazione tipoValidazione, RuoloBusta tipoBusta, String profiloGestione){

  114.         try{
  115.             RequestInfo requestInfo = null;
  116.             if(this.context!=null && this.context.containsKey(org.openspcoop2.core.constants.Costanti.REQUEST_INFO)) {
  117.                 requestInfo = (RequestInfo) this.context.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
  118.             }
  119.            
  120.             this.erroriValidazione = new java.util.ArrayList<Eccezione>();
  121.             this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
  122.             //log.info("Validazione semantica...");        
  123.            
  124.             /* Accesso al registro */
  125.             if( RegistroServiziReader.isInitialize()==false || this.registroServiziReader==null){
  126.                 this.log.error("Registro dei Servizi non inizializzato.");
  127.                 Eccezione ecc = new Eccezione();
  128.                 ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  129.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  130.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  131.                 ecc.setDescrizione("Registro dei Servizi non disponibile");
  132.                 this.erroriProcessamento.add(ecc);
  133.                 return;
  134.             }
  135.            

  136.             //log.info("Validazione mittente...");
  137.             // Mittente: check registrazione nel Registro dei Servizi
  138.             IDSoggetto soggMitt = new IDSoggetto(this.busta.getTipoMittente(),this.busta.getMittente());
  139.             String dominioMittente = null;
  140.             boolean mittenteSconosciuto = false;
  141.             try{
  142.                 dominioMittente = this.registroServiziReader.getDominio(soggMitt,null,this.protocolFactory, requestInfo); //null=allRegistri
  143.                 if(dominioMittente==null)
  144.                     throw new Exception("Dominio non definito");
  145.                 else
  146.                     this.busta.setIdentificativoPortaMittente(dominioMittente);
  147.             }catch(DriverRegistroServiziNotFound es){
  148.                 Eccezione ecc = new Eccezione();
  149.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  150.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.MITTENTE_SCONOSCIUTO);
  151.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  152.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString());
  153.                 this.log.debug("Identificazione mittente fallita:"+es.getMessage());
  154.                 this.erroriValidazione.add(ecc);
  155.                 mittenteSconosciuto = true;
  156.             }catch(Exception es){
  157.                 Eccezione ecc = new Eccezione();
  158.                 ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  159.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  160.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  161.                 ecc.setDescrizione("Identificazione mittente non riuscita: errore di processamento");
  162.                 this.log.error("Identificazione mittente non riuscita",es);
  163.                 this.erroriProcessamento.add(ecc);
  164.                 mittenteSconosciuto = true;
  165.             }

  166.             //log.info("Validazione destinatario...");
  167.             // Destinatario: check registrazione nel Registro dei Servizi
  168.             IDSoggetto soggDest = new IDSoggetto(this.busta.getTipoDestinatario(),this.busta.getDestinatario());
  169.             String dominioDestinatario = null;
  170.             boolean destinatarioSconosciuto = false;
  171.             try{
  172.                 dominioDestinatario = this.registroServiziReader.getDominio(soggDest,null,this.protocolFactory, requestInfo); // null=allRegistri
  173.                 if(dominioDestinatario==null)
  174.                     throw new Exception("Dominio non definito");
  175.                 else
  176.                     this.busta.setIdentificativoPortaDestinatario(dominioDestinatario);
  177.             }catch(DriverRegistroServiziNotFound es){
  178.                 Eccezione ecc = new Eccezione();
  179.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  180.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.DESTINATARIO_SCONOSCIUTO);
  181.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  182.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString());
  183.                 this.log.debug("Identificazione destinatario fallita: "+es.getMessage());
  184.                 this.erroriValidazione.add(ecc);
  185.                 destinatarioSconosciuto = true;
  186.             }catch(Exception es){
  187.                 Eccezione ecc = new Eccezione();
  188.                 ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  189.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  190.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  191.                 ecc.setDescrizione("Identificazione destinatario non riuscita: errore di processamento");
  192.                 this.log.error("Identificazione destinatario non riuscita",es);
  193.                 this.erroriProcessamento.add(ecc);
  194.                 destinatarioSconosciuto = true;
  195.             }

  196.             // Riconoscimento servizio-azione: viene effettuato per Richiesta/Risposta/Ricevuta
  197.             // Per risposte e ricevute, viene controllato che esista servizio e azione associate al mittente della busta
  198.             // per richieste, viene controllato che esista servizio e azione associate al destinatario della busta
  199.             RisultatoValidazione risultatoValidazioneServizio = null;
  200.             if( RuoloBusta.BUSTA_DI_SERVIZIO.equals(tipoBusta.toString()) == false ){
  201.                 //log.info("Validazione servizio azione...");
  202.                 risultatoValidazioneServizio = riconoscimentoServizioAzione(tipoBusta,mittenteSconosciuto,destinatarioSconosciuto);
  203.             }
  204.             // Controllo correlazione alla richiesta per buste contenenti Risposte o ricevute
  205.             //System.out.println("TIPO BUSTA ["+tipoBusta+"]");
  206.             // LOGICA SPOSTATA NELL'ENGINE VALIDATOR
  207. //          if( RuoloBusta.BUSTA_DI_SERVIZIO.equals(tipoBusta.toString()) == false &&
  208. //                  RuoloBusta.RICHIESTA.equals(tipoBusta.toString()) == false){
  209. //              //log.info("Validazione correlazione...");
  210. //              validazioneCorrelazione(tipoBusta);
  211. //          }

  212.             // boolean indicazione se il servizio e' stato riconosciuto in base a mittente, destinatario servizio e azione
  213.             boolean servizioBustaValido = false;
  214.             if( (RuoloBusta.BUSTA_DI_SERVIZIO.equals(tipoBusta.toString()) == false ) &&
  215.                     (destinatarioSconosciuto==false) &&
  216.                     (mittenteSconosciuto==false) ){
  217.                 //this.log.info("Indicazione servizio...");
  218.                 if(risultatoValidazioneServizio!=null && risultatoValidazioneServizio.getServizioRegistrato()){
  219.                     if( (this.busta.getAzione()==null) && (risultatoValidazioneServizio.getAccessoSenzaAzione()) ){
  220.                         servizioBustaValido = true;
  221.                     }else if(this.busta.getAzione()!=null){
  222.                         if(risultatoValidazioneServizio.getAzioni()!=null){
  223.                             for(int j=0; j<risultatoValidazioneServizio.sizeAzioni();j++){
  224.                                 if(this.busta.getAzione().equals(risultatoValidazioneServizio.getAzioni()[j])){
  225.                                     servizioBustaValido = true;
  226.                                     break;
  227.                                 }
  228.                             }
  229.                         }
  230.                     }
  231.                 }
  232.                 //this.log.info("Raccolta info servizio...");
  233.                 if(servizioBustaValido){
  234.                     IDSoggetto idSoggettoFruitore = new IDSoggetto();
  235.                     IDSoggetto idSoggettoErogatore = new IDSoggetto();
  236.                     this.impostaFruitoreErogatoreRealiServizio(idSoggettoFruitore,idSoggettoErogatore,tipoBusta);
  237.                    
  238.                     IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(this.busta.getTipoServizio(),this.busta.getServizio(),
  239.                             idSoggettoErogatore,
  240.                             this.busta.getVersioneServizio());
  241.                     idServizio.setAzione(this.busta.getAzione());
  242.                     try{
  243.                         this.infoServizio = this.registroServiziReader.getInfoServizio(idSoggettoFruitore,idServizio,null,false, true, requestInfo);//null=allRegistri
  244.                     }catch(DriverRegistroServiziNotFound dnot){}
  245.                     if(this.infoServizio==null){
  246.                         try{
  247.                             this.infoServizio = this.registroServiziReader.getInfoServizioCorrelato(soggMitt, idServizio, null, true, requestInfo);//null=allRegistri
  248.                         }catch(DriverRegistroServiziNotFound dnot){}
  249.                     }
  250.                     if(this.infoServizio==null){
  251.                         Eccezione ecc = new Eccezione();
  252.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  253.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  254.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  255.                         ecc.setDescrizione("Raccolta informazioni servizio: servizio sconosciuto");
  256.                         this.erroriValidazione.add(ecc);
  257.                         servizioBustaValido = false;
  258.                     }
  259.                 }
  260.                 //this.log.info("Raccolta info servizio effettuata");
  261.             }
  262.        
  263.            
  264.            
  265.             // Riconoscimento profilo di collaborazione: viene controllato che sia usato il profilo di collaborazione registrato
  266.             // Per risposte e ricevute, viene controllato che esista servizio e azione associate al mittente della busta (fruitore e' destinatario)
  267.             // per richieste, viene controllato che esista servizio e azione associate al destinatario della busta (fruitore e' destinatario)
  268.             if( (servizioBustaValido) && (tipoValidazione.isValidazioneProfiloCollaborazione()) && (RuoloBusta.RICHIESTA.equals(tipoBusta.toString())) ){
  269.                 riconoscimentoProfiloCollaborazione(tipoBusta);
  270.             }

  271.             // Identificativo Messaggio: viene controllato che l'identificativo porta sia quello del mittente della busta
  272.             //log.info("Validazione ID...");
  273.             if(mittenteSconosciuto==false){
  274.                 if( validazioneID_engine(this.busta.getID(),this.busta.getMittente(),dominioMittente) == false ){
  275.                     Eccezione ecc = new Eccezione();
  276.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  277.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALIDO);
  278.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  279.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_VALIDO_POSIZIONE.toString());
  280.                     this.erroriValidazione.add(ecc);
  281.                 }
  282.             }

  283.             // Riferimento Messaggio: viene controllato che l'identificativo porta sia quello del mittente della busta
  284.             //                        viene inoltro controllato che il riferimento messaggio sia quello aspettato per il profilo gestito
  285.             if(this.busta.getRiferimentoMessaggio()!=null){
  286.                 //log.info("Validazione RifMsg... ["+tipoBusta+"] ["+this.busta.getRiferimentoMessaggio()+"]");
  287.                 boolean validazioneIDRiferimentoMessaggio = true;
  288.                 if(ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione()) &&
  289.                         RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
  290.                     // per il profilo asincrono asimmetrico devo usare come dominio/nome per il rifMsg il mittente, invece che il destinatario
  291.                     if(mittenteSconosciuto==false){
  292.                         validazioneIDRiferimentoMessaggio = validazioneID_engine(this.busta.getRiferimentoMessaggio(),this.busta.getMittente(),dominioMittente);
  293.                     }
  294.                 }else{
  295.                     if(destinatarioSconosciuto==false){
  296.                         validazioneIDRiferimentoMessaggio = validazioneID_engine(this.busta.getRiferimentoMessaggio(),this.busta.getDestinatario(),dominioDestinatario);
  297.                     }
  298.                 }
  299.                 if(validazioneIDRiferimentoMessaggio  == false ){
  300.                     Eccezione ecc = new Eccezione();
  301.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  302.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALIDO);
  303.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  304.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_RIFERIMENTO_MESSAGGIO_NON_VALIDO_POSIZIONE.toString());
  305.                     this.erroriValidazione.add(ecc);
  306.                 }else{
  307.                     //log.info("Validazione RifMsg specifico...");
  308.                     // LOGICA SPOSTATA NELL'ENGINE VALIDATOR
  309.                     //validazioneRiferimentoMessaggio(tipoBusta);
  310.                 }
  311.             }

  312.             // Controllo Collaborazione (validazioneID e Riconoscimento)
  313.             // Controllo che non deve essere effettuato se ho ricevuto un Fault
  314.             // LOGICA DI RICONOSCIMENTO COLLABORAZIONE SPOSTATA NELL'ENGINE VALIDATOR.
  315.             // Qua viene controllato solo la struttura dell'id
  316.             if( RuoloBusta.BUSTA_DI_SERVIZIO.equals(tipoBusta.toString()) == false ){
  317.                 //log.info("Validazione Collaborazione...");
  318.                 validazioneCollaborazione(tipoBusta,dominioMittente,dominioDestinatario);
  319.             }

  320.             // Validazione Sequenza: se presente, ci deve essere anche una collaborazione valida (se si arriva qua, e' garantito)
  321.             // ed un profiloTrasmissione con 'inoltro= ALPIUUNAVOLTA' e 'conferma=TRUE'
  322.             //log.info("Validazione Sequenza...");
  323.             if( (SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(profiloGestione)==false) &&  (this.busta.getSequenza() != -1) ){
  324.                 if( (this.busta.getCollaborazione() == null) ||
  325.                         (this.busta.getInoltro() == null)  ){
  326.                     Eccezione ecc = new Eccezione();
  327.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  328.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_NON_VALIDA);
  329.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  330.                     if( (this.busta.getCollaborazione() == null) && (this.busta.getInoltro() == null))
  331.                         ecc.setDescrizione("Sequenza non gestibile, elementi Collaborazione e ProfiloTrasmissione non presenti");
  332.                     else if( this.busta.getCollaborazione() == null ){
  333.                         ecc.setDescrizione("Sequenza non gestibile, elemento Collaborazione non presente");
  334.                     }else{
  335.                         ecc.setDescrizione("Sequenza non gestibile, elemento ProfiloTrasmissione non presente");
  336.                     }
  337.                     this.erroriValidazione.add(ecc);
  338.                 }else{
  339.                     if( (Inoltro.SENZA_DUPLICATI.equals(this.busta.getInoltro())==false)||
  340.                             (this.busta.isConfermaRicezione()==false) ){
  341.                         Eccezione ecc = new Eccezione();
  342.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  343.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_NON_GESTIBILE);
  344.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  345.                         if((Inoltro.SENZA_DUPLICATI.equals(this.busta.getInoltro())==false) && (this.busta.isConfermaRicezione()==false)){
  346.                             ecc.setDescrizione("Sequenza non gestibile, attributi dell'elemento ProfiloTrasmissione non validi con la sequenza");
  347.                         }else if(this.busta.isConfermaRicezione()==false){
  348.                             ecc.setDescrizione("Sequenza non gestibile, attributo confermaRicezione dell'elemento ProfiloTrasmissione non valido con la sequenza");
  349.                         }else{
  350.                             ecc.setDescrizione("Sequenza non gestibile, attributo inoltro dell'elemento ProfiloTrasmissione non valido con la sequenza");
  351.                         }
  352.                         this.erroriValidazione.add(ecc);
  353.                     }
  354.                 }
  355.             }

  356.             // Riscontri (ID)
  357.             //log.info("Validazione Riscontri...");
  358.             for(int i=0; i<this.busta.sizeListaRiscontri();i++){
  359.                 Riscontro r = this.busta.getRiscontro(i);
  360.                 if(validazioneID_engine(r.getID()) == false){
  361.                     Eccezione ecc = new Eccezione();
  362.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  363.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_IDENTIFICATIVO_MESSAGGIO_NON_VALIDO);
  364.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  365.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_IDENTIFICATORE.toString());
  366.                     this.erroriValidazione.add(ecc);
  367.                 }
  368.             }

  369.             // Trasmissione (Origine e Destinazione)
  370.             //log.info("Validazione Trasmissione...");
  371.             for(int i=0; i<this.busta.sizeListaTrasmissioni();i++){
  372.                 Trasmissione t = this.busta.getTrasmissione(i);

  373.                 IDSoggetto soggOrig = new IDSoggetto(t.getTipoOrigine(),t.getOrigine());
  374.                 String dominioOrig = null;
  375.                 try{
  376.                     dominioOrig = this.registroServiziReader.getDominio(soggOrig,null,this.protocolFactory, requestInfo); // null=allRegistri
  377.                     if(dominioOrig==null)
  378.                         throw new Exception("Dominio non definito");
  379.                     else
  380.                         t.setIdentificativoPortaOrigine(dominioOrig);
  381.                 }catch(DriverRegistroServiziNotFound es){
  382.                     Eccezione ecc = new Eccezione();
  383.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  384.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORIGINE_NON_VALIDA);
  385.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  386.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE.toString());
  387.                     this.log.debug("Identificazione origine trasmissione fallita:"+es.getMessage());
  388.                     this.erroriValidazione.add(ecc);
  389.                 }catch(Exception es){
  390.                     Eccezione ecc = new Eccezione();
  391.                     ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  392.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  393.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  394.                     ecc.setDescrizione("Identificazione origine della trasmissione non riuscita: errore di processamento");
  395.                     this.log.error("Identificazione origine trasmissione non riuscita",es);
  396.                     this.erroriProcessamento.add(ecc);
  397.                 }

  398.                 IDSoggetto soggDestTr = new IDSoggetto(t.getTipoDestinazione(),t.getDestinazione());
  399.                 String dominioDestinatarioTr = null;
  400.                 try{
  401.                     dominioDestinatarioTr = this.registroServiziReader.getDominio(soggDestTr,null,this.protocolFactory, requestInfo); // null=allRegistri
  402.                     if(dominioDestinatarioTr==null)
  403.                         throw new Exception("Dominio non definito");
  404.                     else
  405.                         t.setIdentificativoPortaDestinazione(dominioDestinatarioTr);
  406.                 }catch(DriverRegistroServiziNotFound es){
  407.                     Eccezione ecc = new Eccezione();
  408.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  409.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_DESTINAZIONE_NON_VALIDA);
  410.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  411.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE.toString());
  412.                     this.log.debug("Identificazione destinazione trasmissione fallita:"+es.getMessage());
  413.                     this.erroriValidazione.add(ecc);
  414.                 }catch(Exception es){
  415.                     Eccezione ecc = new Eccezione();
  416.                     ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  417.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  418.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  419.                     ecc.setDescrizione("Identificazione destinazione della trasmissione non riuscita: errore di processamento");
  420.                     this.log.error("Identificazione destinazione trasmissione non riuscita",es);
  421.                     this.erroriProcessamento.add(ecc);
  422.                 }
  423.             }

  424.            
  425.             // Validazione LineeGuida1.1
  426.             if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(profiloGestione)){
  427.                 // log.info("Validazione LineeGuida1.1...");
  428.                 this.validazioneLineeGuida11();
  429.             }

  430.         } catch(Exception e) {
  431.             this.log.error("ValidazioneSemantica: riscontrato errore durante la validazione",e);
  432.             Eccezione ecc = new Eccezione();
  433.             ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  434.             ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  435.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  436.             ecc.setDescrizione("Errore di processamento durante la validazione semantica.");
  437.             this.erroriProcessamento.add(ecc);
  438.         }

  439.     }


  440.    

  441.     private void validazioneCollaborazione(RuoloBusta tipoBusta,String dominioMittente,String dominioDestinatario) throws ProtocolException{
  442.        
  443.         // La collaborazione deve appartenere o al mittente, o al destinatario della busta.
  444.         if(this.busta.getCollaborazione()!=null){
  445.             if( (validazioneID_engine(this.busta.getCollaborazione(),this.busta.getMittente(),dominioMittente) == false) &&
  446.                     (validazioneID_engine(this.busta.getCollaborazione(),this.busta.getDestinatario(),dominioDestinatario) == false) ){
  447.                 Eccezione ecc = new Eccezione();
  448.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  449.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.COLLABORAZIONE_SCONOSCIUTA);
  450.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  451.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE.toString());
  452.                 this.erroriValidazione.add(ecc);
  453.                 return;
  454.             }
  455.         }
  456.    
  457.     }
  458.    
  459.  
  460.     private void impostaFruitoreErogatoreRealiServizio(IDSoggetto fruitore,IDSoggetto erogatore,RuoloBusta tipoBusta){
  461.         if( (RuoloBusta.RICHIESTA.equals(tipoBusta.toString())) ||
  462.                     ((RuoloBusta.RISPOSTA.equals(tipoBusta.toString())) && (ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione()))) ||
  463.                     ((RuoloBusta.RISPOSTA.equals(tipoBusta.toString())) && (ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione()))) ){
  464.             if(erogatore!=null){    
  465.                 erogatore.setTipo(this.busta.getTipoDestinatario());
  466.                 erogatore.setNome(this.busta.getDestinatario());
  467.             }
  468.             if(fruitore!=null){
  469.                 fruitore.setTipo(this.busta.getTipoMittente());
  470.                 fruitore.setNome(this.busta.getMittente());
  471.             }
  472.         }else if((RuoloBusta.RISPOSTA.equals(tipoBusta.toString())) || (RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString())) || (RuoloBusta.RICEVUTA_RISPOSTA.equals(tipoBusta.toString()))){
  473.             if(erogatore!=null){    
  474.                 erogatore.setTipo(this.busta.getTipoMittente());
  475.                 erogatore.setNome(this.busta.getMittente());
  476.             }
  477.             if(fruitore!=null){
  478.                 fruitore.setTipo(this.busta.getTipoDestinatario());
  479.                 fruitore.setNome(this.busta.getDestinatario());
  480.             }
  481.         }
  482.        

  483.     }
  484.    
  485.     /**
  486.      * Metodo che si occupa di validare l'elemento 'Servizio' e 'Azione', controllando
  487.      * che siano riconosciuti all'interno del registro dei servizi di riferimento (es. registro UDDI)
  488.      *
  489.      * @param tipoBusta tipo di Busta da validare
  490.      *
  491.      */
  492.     private RisultatoValidazione riconoscimentoServizioAzione(RuoloBusta tipoBusta,boolean mittenteSconosciuto,boolean destinatarioSconosciuto) throws ProtocolException,DriverRegistroServiziException{

  493.         if(mittenteSconosciuto)
  494.             return null;
  495.         if(destinatarioSconosciuto)
  496.             return null;
  497.         IDSoggetto idSoggettoErogatore = new IDSoggetto();
  498.         IDSoggetto idSoggettoFruitore = null;
  499.         // Per richiesta asincrono simmetrico serve anche il fruitore per la localizzazione del servizio correlato
  500.         if( (ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())) &&
  501.                     (RuoloBusta.RICHIESTA.equals(tipoBusta.toString())) ){
  502.             idSoggettoFruitore = new IDSoggetto();
  503.         }else if( (ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())) ){
  504.             idSoggettoFruitore = new IDSoggetto();
  505.         }
  506.         this.impostaFruitoreErogatoreRealiServizio(idSoggettoFruitore,idSoggettoErogatore,tipoBusta);
  507.        

  508.         // 1) Validazione Servizio
  509.         RisultatoValidazione validazione = null;
  510.         if(this.busta.getServizio()!=null && this.busta.getTipoServizio()!=null){
  511.             IDServizio idService = IDServizioFactory.getInstance().getIDServizioFromValues(this.busta.getTipoServizio(),this.busta.getServizio(),
  512.                     idSoggettoErogatore,
  513.                     this.busta.getVersioneServizio());
  514.             idService.setAzione(this.busta.getAzione());
  515.             try{
  516.                 validazione = this.registroServiziReader.validaServizio(idSoggettoFruitore,idService,null); //null=allRegistri  
  517.             }catch(Exception e){
  518.                 this.log.error("Errore durante l'accesso al registro per la validazione del servizio e dell'azione",e);
  519.                 Eccezione ecc = new Eccezione();
  520.                 ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  521.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  522.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  523.                 ecc.setDescrizione("Riconoscimento Servizio/Azione: errore di processamento");
  524.                 this.erroriProcessamento.add(ecc);
  525.                 return null;
  526.             }
  527.             if(validazione.getServizioRegistrato()==false){
  528.                 Eccezione ecc = new Eccezione();
  529.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  530.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_SCONOSCIUTO);
  531.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  532.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE.toString());
  533.                 this.erroriValidazione.add(ecc);
  534.                 return validazione;
  535.             }
  536.             this.servizioCorrelato = validazione.getServizioCorrelato();
  537.             this.tipoServizioCorrelato = validazione.getTipoServizioCorrelato();
  538.             this.versioneServizioCorrelato = validazione.getVersioneServizioCorrelato();
  539.             this.azioneCorrelata = validazione.getAzioneCorrelata();
  540.         }



  541.         // 2) Validazione Azione (solo se c'e' un servizio)
  542.         if(this.busta.getServizio()!=null && this.busta.getTipoServizio()!=null){
  543.            
  544.             if(validazione==null) {
  545.                 this.log.error("Errore durante l'accesso al registro per la validazione del servizio e dell'azione: validazione is null");
  546.                 Eccezione ecc = new Eccezione();
  547.                 ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  548.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  549.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  550.                 ecc.setDescrizione("Riconoscimento Azione: errore di processamento");
  551.                 this.erroriProcessamento.add(ecc);
  552.                 return null;
  553.             }
  554.            
  555.             //log.info("Validazione Azione...");
  556.             if(this.busta.getAzione() == null){
  557.                 // Controllo che sia valida una invocazione senza azione
  558.                 if(validazione.getAccessoSenzaAzione() == false){
  559.                     Eccezione ecc = new Eccezione();
  560.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  561.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.INVOCAZIONE_SENZA_AZIONE_NON_PERMESSA);
  562.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  563.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE.toString());
  564.                     this.erroriValidazione.add(ecc);
  565.                     return validazione;
  566.                 }
  567.             }else{
  568.                 String[]azioni = validazione.getAzioni();
  569.                 boolean azioneTrovata = false;
  570.                 if(azioni!=null){
  571.                     for(int i=0;i<azioni.length;i++){
  572.                         if(this.busta.getAzione().equals(azioni[i])){
  573.                             azioneTrovata=true;
  574.                             break;
  575.                         }
  576.                     }
  577.                 }
  578.                 if(azioneTrovata==false){
  579.                     Eccezione ecc = new Eccezione();
  580.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  581.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.AZIONE_SCONOSCIUTA);
  582.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  583.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE.toString());
  584.                     this.erroriValidazione.add(ecc);
  585.                     return validazione;
  586.                 }
  587.             }
  588.         }

  589.        
  590.         // 3) Validazione elementi ServizioCorrelato e TipoServizioCorrelato
  591.         if(ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())
  592.                 && RuoloBusta.RICHIESTA.equals(tipoBusta.toString())){
  593.             /* Con la certificazione CNIPA, questi attributi non sono piu' obbligatori */
  594.             /*if( (this.busta.getServizioCorrelato()==null) || (this.busta.getTipoServizioCorrelato()==null) ||
  595.                     (this.busta.getTipoServizioCorrelato().equals(validazione.getTipoServizioCorrelato())== false) ||
  596.                     (this.busta.getServizioCorrelato().equals(validazione.getServizioCorrelato())== false) ){
  597.                 Eccezione ecc = new Eccezione();
  598.                 ecc.setContestoCodifica(Costanti.CONTESTO_CODIFICA_ECCEZIONE_VALIDAZIONE);
  599.                 ecc.setCodiceEccezione(Costanti.ECCEZIONE_SERVIZIO_SCONOSCIUTO);
  600.                 ecc.setRilevanza(Costanti.GRAVE);
  601.                 ecc.setDescrizione("Servizio Correlato non valido (o non presente) nella richiesta asincrona simmetrica");
  602.                 this.erroriValidazione.add(ecc);
  603.                 return;
  604.             }*/
  605.             // NEW ALGORITM:
  606.             if(
  607.                     (this.busta.getServizioCorrelato()!=null) &&
  608.                     validazione!=null &&
  609.                     (this.busta.getServizioCorrelato().equals(validazione.getServizioCorrelato())== false)
  610.             ){
  611.                 Eccezione ecc = new Eccezione();
  612.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  613.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_CORRELATO_NON_VALIDO);
  614.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  615.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_SERVIZIO_CORRELATO+" diverso da quello atteso (richiesta asincrona simmetrica)");
  616.                 this.erroriValidazione.add(ecc);
  617.                 return validazione;
  618.             }
  619.             if(
  620.                     (this.busta.getTipoServizioCorrelato()!=null) &&
  621.                     validazione!=null &&
  622.                     (this.busta.getTipoServizioCorrelato().equals(validazione.getTipoServizioCorrelato())== false)
  623.             ){
  624.                 Eccezione ecc = new Eccezione();
  625.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  626.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_CORRELATO_NON_VALIDO);
  627.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  628.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO+" diverso da quello atteso (richiesta asincrona simmetrica)");
  629.                 this.erroriValidazione.add(ecc);
  630.                 return validazione;
  631.             }

  632.         }
  633.         if(ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())
  634.                 && RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString())  ){
  635.             /* Con la certificazione CNIPA, questi attributi non sono piu' obbligatori */
  636.             /*
  637.             if( (this.busta.getServizioCorrelato()==null) || (this.busta.getTipoServizioCorrelato()==null) ||
  638.                     (this.busta.getTipoServizioCorrelato().equals(validazione.getTipoServizioCorrelato())== false) ||
  639.                     (this.busta.getServizioCorrelato().equals(validazione.getServizioCorrelato())== false) ){
  640.                 Eccezione ecc = new Eccezione();
  641.                 ecc.setContestoCodifica(Costanti.CONTESTO_CODIFICA_ECCEZIONE_VALIDAZIONE);
  642.                 ecc.setCodiceEccezione(Costanti.ECCEZIONE_SERVIZIO_SCONOSCIUTO);
  643.                 ecc.setRilevanza(Costanti.GRAVE);
  644.                 ecc.setDescrizione("Servizio Correlato non valido (o non presente) nella ricevuta della richiesta asincrona asimmetrica");
  645.                 this.erroriValidazione.add(ecc);
  646.                 return;
  647.             }*/
  648.             // NEW ALGORITM:
  649.             if(
  650.                     (this.busta.getServizioCorrelato()!=null) &&
  651.                     validazione!=null &&
  652.                     (this.busta.getServizioCorrelato().equals(validazione.getServizioCorrelato())== false)
  653.             ){
  654.                 Eccezione ecc = new Eccezione();
  655.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  656.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_CORRELATO_NON_VALIDO);
  657.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  658.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_SERVIZIO_CORRELATO+" diverso da quello atteso (ricevuta della richiesta asincrona simmetrica)");
  659.                 this.erroriValidazione.add(ecc);
  660.                 return validazione;
  661.             }
  662.             if(
  663.                     (this.busta.getTipoServizioCorrelato()!=null) &&
  664.                     validazione!=null &&
  665.                     (this.busta.getTipoServizioCorrelato().equals(validazione.getTipoServizioCorrelato())== false)
  666.             ){
  667.                 Eccezione ecc = new Eccezione();
  668.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  669.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_CORRELATO_NON_VALIDO);
  670.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  671.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO+" diverso da quello atteso (ricevuta della richiesta asincrona simmetrica)");
  672.                 this.erroriValidazione.add(ecc);
  673.                 return validazione;
  674.             }
  675.         }

  676.        
  677.         return validazione;
  678.     }
  679.    
  680.    


  681.     /**
  682.      * Metodo che si occupa di validare l'elemento 'Servizio' e 'Azione', controllando
  683.      * che siano riconosciuti all'interno del registro dei servizi di riferimento (es. registro UDDI)
  684.      *
  685.      * @param tipoBusta tipo di Busta da validare
  686.      *
  687.      */
  688.     private void riconoscimentoProfiloCollaborazione(RuoloBusta tipoBusta){

  689.         // Viene effettuato solo per la richiesta.
  690.         try{
  691.             if(this.infoServizio.getProfiloDiCollaborazione().equals(this.busta.getProfiloDiCollaborazione())==false){
  692.                     Eccezione ecc = new Eccezione();
  693.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  694.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_COLLABORAZIONE_NON_VALIDO);
  695.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  696.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE+" diverso da quanto specificato nel registro");
  697.                     this.erroriValidazione.add(ecc);
  698.             }
  699.         }catch(Exception e){
  700.             this.log.error("Errore durante l'accesso al registro per la validazione del profilo di collaborazione",e);
  701.             Eccezione ecc = new Eccezione();
  702.             ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  703.             ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  704.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  705.             ecc.setDescrizione("Riconoscimento Profilo di Collaborazione: errore di processamento");
  706.             this.erroriProcessamento.add(ecc);
  707.         }

  708.     }

  709.    
  710.     /**
  711.      * Metodo che si occupa di validare l'identificativo <var>id</var> secondo la specifica eGov.
  712.      *
  713.      * @param id identificativo eGov da validare
  714.      * @return il valore boolean true se l'identificativo fornito e' conforme alla specifica eGov. Altrimenti false.
  715.      *
  716.      */
  717.     public boolean validazioneID_engine(String id){
  718.         return validazioneID_engine(id,null,null);
  719.     }

  720.     /**
  721.      * Metodo che si occupa di validare l'identificativo <var>id</var> secondo la specifica eGov.
  722.      * L'identificativo e' formato da :
  723.      * codAmministrazione_codPortaDominio_num.progressivo_data_ora
  724.      * <p>
  725.      * Il codice Amministrazione e' preso da <var>codAmm</var>.
  726.      * Il codice Amministrazione deve contenere l'identificativo parte del mittente, quando deve essere validato
  727.      * un identificativo del messaggio od una collaborazione di una richiesta
  728.      * (oneWay, richiestaSincrona , richiesta/ricevutaRisposta AsincronaSimmetrica ,
  729.      *  richiesta/richiestaStato AsincronaAsimmetrica), poiche' e' lui che lo ha spedito
  730.      * e che ha quindi creato l'identificatore.
  731.      * Deve contenere invece il codice del destinatario, quando deve essere validato un RiferimentoMessaggio, od una
  732.      * collaborazione di una risposta (Sincrona , ricevutaRichiesta/Risposta AsincronaSimmetrica ,
  733.      * ricevutaRichiesta/ricevutaRichiestaStato AsincronaAsimmetrica),
  734.      * poiche' la creazione dell'identificatore venne fatta dal destinatario quando creo' la richiesta.
  735.      * <p>
  736.      * Il codice amministrativo <var>codAmm</var>,  sara' utilizzato anche per ottenere dal
  737.      * registro dei servizi di openspcoop la validazione del codice della Porta di Dominio presente nell'identificativo.
  738.      *
  739.      *
  740.      * @param id identificativo eGov da validare
  741.      * @param codAmm Identificativo Parte mittente o destinatario di una busta.
  742.      * @param codDominio Identificativo del dominio del codice di amministrazione
  743.      * @return il valore boolean true se l'identificativo fornito e' conforme alla specifica eGov. Altrimenti false.
  744.      *
  745.      */
  746.     public boolean validazioneID_engine(String id, String codAmm, String codDominio){

  747.         try{

  748.             // Ottengo parti dell'identificatore
  749.             String [] split = id.split("_");
  750.             if(split == null)
  751.                 return false;
  752.             if(split.length != 5)
  753.                 return false;

  754.             if(codAmm!=null && this.validazioneIDEGovCompleta){
  755.                 // Check codice amministrazione
  756.                 if(!split[0].equals(codAmm))
  757.                     return false;
  758.                 byte [] checkID = split[0].getBytes();
  759.                 for(int j=0;j<checkID.length;j++){
  760.                     if( !Character.isLetterOrDigit((char)checkID[j]))
  761.                         return false;
  762.                 }
  763.             }

  764.             if(codDominio!=null && this.validazioneIDEGovCompleta){
  765.                 // Check codice porta di dominio        
  766.                 if(!split[1].equalsIgnoreCase(codDominio))
  767.                     return false;
  768.                 byte [] checkPDD = split[1].getBytes();
  769.                 for(int j=0;j<checkPDD.length;j++){
  770.                     if( !Character.isLetterOrDigit((char)checkPDD[j]))
  771.                         return false;
  772.                 }

  773.             }

  774.             // Check num progressivo
  775.             if(split[2].length() != 7)
  776.                 return false;
  777.             try{
  778.                 Integer test = Integer.valueOf(split[2]);
  779.                 if(test.intValue()<0) {
  780.                     // ignore
  781.                 }
  782.             } catch(Exception e){
  783.                 return false;
  784.             }

  785.             // Check data yyyy-MM-dd
  786.             String [] date = split[3].split("-");
  787.             if(date == null)
  788.                 return false;
  789.             if(date.length != 3)
  790.                 return false;
  791.             if(date[0].length() != 4)
  792.                 return false;
  793.             try{
  794.                 Integer test = Integer.valueOf(date[0]);
  795.                 if(test.intValue()>2100)
  796.                     return false;
  797.             } catch(Exception e){
  798.                 return false;
  799.             }
  800.             if(date[1].length() != 2)
  801.                 return false;
  802.             if(date[2].length() != 2)
  803.                 return false;
  804.             try{
  805.                 Integer mese = Integer.valueOf(date[1]);
  806.                 if(mese.intValue()>12 || mese.intValue() < 0)
  807.                     return false;
  808.                 Integer giorno = Integer.valueOf(date[2]);
  809.                 if(giorno.intValue() < 0)
  810.                     return false;
  811.                 if(giorno.intValue()>29 && mese.intValue() == 2)
  812.                     return false;
  813.                 else if(giorno.intValue()>30 &&
  814.                         (  (mese.intValue() == 4) ||
  815.                                 (mese.intValue() == 6) ||
  816.                                 (mese.intValue() == 9) ||
  817.                                 (mese.intValue() == 11) ) )
  818.                     return false;
  819.                 else if(giorno.intValue()>31)
  820.                     return false;
  821.             } catch(Exception e){
  822.                 return false;
  823.             }


  824.             // Check ora hh:mm
  825.             String [] ora = split[4].split(":");
  826.             if(ora == null)
  827.                 return false;
  828.             if(ora.length != 2)
  829.                 return false;
  830.             if(ora[0].length() != 2)
  831.                 return false;
  832.             try{
  833.                 Integer test = Integer.valueOf(ora[0]);
  834.                 if(test.intValue() > 23 || test.intValue() < 0)
  835.                     return false;
  836.             } catch(Exception e){
  837.                 return false;
  838.             }
  839.             if(ora[1].length() != 2)
  840.                 return false;
  841.             try{
  842.                 Integer test = Integer.valueOf(ora[1]);
  843.                 if(test.intValue() > 59 || test.intValue() < 0)
  844.                     return false;
  845.             } catch(Exception e){
  846.                 return false;
  847.             }

  848.             return true;

  849.         }catch(Exception error){
  850.             return false;
  851.         }
  852.     }

  853.     private void validazioneLineeGuida11() throws ProtocolException{
  854.        
  855.         ITraduttore traduttore = this.protocolFactory.createTraduttore();
  856.         String valoreEngine = traduttore.toRegistryOrganizationType(SPCoopCostanti.SERVIZIO_SPC);
  857.        
  858.         //    mittente
  859.         if(valoreEngine.equals(this.busta.getTipoMittente())==false){
  860.             Eccezione ecc = new Eccezione();
  861.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  862.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_MITTENTE_NON_VALIDO);
  863.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  864.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  865.             this.erroriValidazione.add(ecc);
  866.         }
  867.        
  868.         //    destinatario
  869.         if(valoreEngine.equals(this.busta.getTipoDestinatario())==false){
  870.             Eccezione ecc = new Eccezione();
  871.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  872.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_DESTINATARIO_NON_VALIDO);
  873.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  874.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  875.             this.erroriValidazione.add(ecc);
  876.         }
  877.        
  878.         // Servizio e' obbligatorio in questo profilo (queste sono eccezioni GRAVI!)
  879.         if(this.busta.getTipoServizio()==null){
  880.             Eccezione ecc = new Eccezione();
  881.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  882.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_NON_PRESENTE);
  883.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  884.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE_TIPO.toString());
  885.             this.erroriValidazione.add(ecc);
  886.         }
  887.         if(this.busta.getServizio()==null){
  888.             Eccezione ecc = new Eccezione();
  889.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  890.             ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_NON_PRESENTE);
  891.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  892.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE.toString());
  893.             this.erroriValidazione.add(ecc);
  894.         }
  895.        
  896.         //        servizio
  897.         if(valoreEngine.equals(this.busta.getTipoServizio())==false){
  898.             Eccezione ecc = new Eccezione();
  899.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  900.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_NON_VALIDO);
  901.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  902.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE_TIPO.toString());
  903.             this.erroriValidazione.add(ecc);
  904.         }
  905.        
  906.         // Azione e' obbligatoria (queste sono eccezioni GRAVI!)
  907.         if(this.busta.getAzione()==null){
  908.             Eccezione ecc = new Eccezione();
  909.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  910.             ecc.setCodiceEccezione(CodiceErroreCooperazione.AZIONE_NON_PRESENTE);
  911.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  912.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE.toString());
  913.             this.erroriValidazione.add(ecc);
  914.         }
  915.        
  916.         // Profilo di Collaborazione
  917.         if(this.busta.getProfiloDiCollaborazione()==null){
  918.             Eccezione ecc = new Eccezione();
  919.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  920.             ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_COLLABORAZIONE_NON_PRESENTE);
  921.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  922.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE.toString());
  923.             this.erroriValidazione.add(ecc);
  924.         }

  925.         // Collaborazione (valida solo per profili asincroni)
  926.         if(  ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())
  927.                 ||
  928.              ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione()) ){
  929.             if(this.busta.getCollaborazione()==null){
  930.                 Eccezione ecc = new Eccezione();
  931.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  932.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.COLLABORAZIONE_NON_VALIDA);
  933.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  934.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE.toString());
  935.                 this.erroriValidazione.add(ecc);
  936.             }
  937.         }
  938.        
  939.         // OraRegistrazione
  940.         if(TipoOraRegistrazione.SINCRONIZZATO.equals(this.busta.getTipoOraRegistrazione())==false){
  941.             Eccezione ecc = new Eccezione();
  942.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  943.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_ORA_REGISTRAZIONE_NON_VALIDA);
  944.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  945.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE_TEMPO.toString());
  946.             this.erroriValidazione.add(ecc);
  947.         }
  948.        
  949.         // Profilo di Trasmissione (queste sono eccezioni GRAVI!)
  950.         if(this.busta.isConfermaRicezione()==true){
  951.             Eccezione ecc = new Eccezione();
  952.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  953.             ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_TRASMISSIONE_CONFERMA_RICEZIONE_NON_VALIDO);
  954.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  955.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE_CONFERMA_RICEZIONE.toString());
  956.             this.erroriValidazione.add(ecc);
  957.         }
  958.         if(Inoltro.CON_DUPLICATI.equals(this.busta.getInoltro())){
  959.             Eccezione ecc = new Eccezione();
  960.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  961.             ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_TRASMISSIONE_FILTRO_DUPLICATI_NON_VALIDO);
  962.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  963.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE_INOLTRO.toString());
  964.             this.erroriValidazione.add(ecc);
  965.         }
  966.                
  967.         for(int i=0; i<this.busta.sizeListaTrasmissioni(); i++){
  968.             Trasmissione tr = this.busta.getTrasmissione(i);
  969.             if(valoreEngine.equals(tr.getTipoOrigine())==false){
  970.                 Eccezione ecc = new Eccezione();
  971.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  972.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORIGINE_NON_VALIDA);
  973.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  974.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE_TIPO.toString());
  975.                 this.erroriValidazione.add(ecc);
  976.             }
  977.             if(valoreEngine.equals(tr.getTipoDestinazione())==false){
  978.                 Eccezione ecc = new Eccezione();
  979.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  980.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_DESTINAZIONE_NON_VALIDA);
  981.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  982.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  983.                 this.erroriValidazione.add(ecc);
  984.             }
  985.             if(TipoOraRegistrazione.SINCRONIZZATO.equals(tr.getTempo())==false){
  986.                 Eccezione ecc = new Eccezione();
  987.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  988.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_NON_VALIDA);
  989.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  990.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE_TEMPO.toString());
  991.                 this.erroriValidazione.add(ecc);
  992.             }
  993.         }
  994.        
  995.         // Lista riscontri
  996.         for(int i=0; i<this.busta.sizeListaRiscontri(); i++){
  997.             Riscontro r = this.busta.getRiscontro(i);
  998.             if(TipoOraRegistrazione.SINCRONIZZATO.equals(r.getTipoOraRegistrazione())==false){
  999.                 Eccezione ecc = new Eccezione();
  1000.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1001.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_TIPO_ORA_REGISTRAZIONE_NON_VALIDO);
  1002.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  1003.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE_TEMPO.toString());
  1004.                 this.erroriValidazione.add(ecc);
  1005.             }
  1006.         }
  1007.        
  1008.        
  1009.        
  1010.        
  1011.         // Segnalo errori di tipo INFO SOLO SE non ci sono stati gia errori di tipo GRAVE
  1012.         if(this.erroriValidazione.size()==0){
  1013.            
  1014.             // Indirizzo telematico mittente
  1015.             if(this.busta.getIndirizzoMittente()!=null){
  1016.                 Eccezione ecc = new Eccezione();
  1017.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1018.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INDIRIZZO_MITTENTE_NON_VALIDO);
  1019.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1020.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1021.                 this.erroriValidazione.add(ecc);
  1022.             }
  1023.            
  1024.             // Indirizzo telematico destinatario
  1025.             if(this.busta.getIndirizzoDestinatario()!=null){
  1026.                 Eccezione ecc = new Eccezione();
  1027.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1028.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INDIRIZZO_DESTINATARIO_NON_VALIDO);
  1029.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1030.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1031.                 this.erroriValidazione.add(ecc);
  1032.             }
  1033.            
  1034.             // Profilo di Collaborazione
  1035.             if(this.busta.getTipoServizioCorrelato()!=null){
  1036.                 Eccezione ecc = new Eccezione();
  1037.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1038.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_CORRELATO_NON_VALIDO);
  1039.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1040.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO.toString());
  1041.                 this.erroriValidazione.add(ecc);
  1042.             }
  1043.             if(this.busta.getServizioCorrelato()!=null){
  1044.                 Eccezione ecc = new Eccezione();
  1045.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1046.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_CORRELATO_NON_VALIDO);
  1047.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1048.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_SERVIZIO_CORRELATO.toString());
  1049.                 this.erroriValidazione.add(ecc);
  1050.             }
  1051.            
  1052.             // Collaborazione valida solo per gli asincroni
  1053.             if(  (ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())==false)  
  1054.                     &&
  1055.                  (ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())==false) ){
  1056.                 if(this.busta.getCollaborazione()!=null){
  1057.                     Eccezione ecc = new Eccezione();
  1058.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1059.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.COLLABORAZIONE_NON_VALIDA);
  1060.                     ecc.setRilevanza(LivelloRilevanza.INFO);
  1061.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE.toString());
  1062.                     this.erroriValidazione.add(ecc);
  1063.                 }
  1064.             }
  1065.            
  1066.             // Sequenza
  1067.             if(this.busta.getSequenza()!=-1){
  1068.                 Eccezione ecc = new Eccezione();
  1069.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1070.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_NON_SUPPORTATA);
  1071.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1072.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_TRASPARENZA_TEMPORALE_NON_SUPPORTATA_POSIZIONE.toString());
  1073.                 this.erroriValidazione.add(ecc);
  1074.             }
  1075.            
  1076.             // Lista trasmissioni
  1077.             /* L'hanno riammessa.
  1078.             if(this.busta.sizeListaTrasmissioni()>0){
  1079.                 Eccezione ecc = new Eccezione();
  1080.                 ecc.setContestoCodifica(Costanti.CONTESTO_CODIFICA_ECCEZIONE_VALIDAZIONE);
  1081.                 ecc.setCodiceEccezione(Costanti.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO);
  1082.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1083.                 ecc.setDescrizione(Costanti.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE);
  1084.                 this.erroriValidazione.add(ecc);
  1085.             }*/
  1086.             for(int i=0; i<this.busta.sizeListaTrasmissioni(); i++){
  1087.                 Trasmissione tr = this.busta.getTrasmissione(i);
  1088.                 if(tr.getIndirizzoOrigine()!=null){
  1089.                     Eccezione ecc = new Eccezione();
  1090.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1091.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_INDIRIZZO_ORIGINE_NON_VALIDA);
  1092.                     ecc.setRilevanza(LivelloRilevanza.INFO);
  1093.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1094.                     this.erroriValidazione.add(ecc);
  1095.                 }
  1096.                 if(tr.getIndirizzoDestinazione()!=null){
  1097.                     Eccezione ecc = new Eccezione();
  1098.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1099.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_INDIRIZZO_DESTINAZIONE_NON_VALIDA);
  1100.                     ecc.setRilevanza(LivelloRilevanza.INFO);
  1101.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1102.                     this.erroriValidazione.add(ecc);
  1103.                 }
  1104.             }
  1105.            
  1106.             // Lista riscontri
  1107.             if(this.busta.sizeListaRiscontri()>0){
  1108.                 Eccezione ecc = new Eccezione();
  1109.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1110.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_RISCONTRI_NON_VALIDA);
  1111.                 ecc.setRilevanza(LivelloRilevanza.INFO);
  1112.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE.toString());
  1113.                 this.erroriValidazione.add(ecc);
  1114.             }
  1115.         }
  1116.     }
  1117.    

  1118.     public String getAzioneCorrelata() {
  1119.         return this.azioneCorrelata;
  1120.     }
  1121.     public void setAzioneCorrelata(String azioneCorrelata) {
  1122.         this.azioneCorrelata = azioneCorrelata;
  1123.     }


  1124.     @Override
  1125.     public IProtocolFactory<?> getProtocolFactory() {
  1126.         return this.protocolFactory;
  1127.     }


  1128.     @Override
  1129.     public boolean validazioneID(String id, IDSoggetto dominio, ProprietaValidazione proprietaValidazione) {
  1130.         this.validazioneIDEGovCompleta = proprietaValidazione.isValidazioneIDCompleta();
  1131.         if(dominio!=null){
  1132.             return this.validazioneID_engine(id, dominio.getNome(), dominio.getCodicePorta());
  1133.         }else{
  1134.             return this.validazioneID_engine(id, null, null);
  1135.         }
  1136.     }


  1137.     @Override
  1138.     public ValidazioneSemanticaResult valida(OpenSPCoop2Message msg, Busta busta,
  1139.             ProprietaValidazione proprietaValidazione, RuoloBusta tipoBusta)
  1140.             throws ProtocolException {
  1141.         this.busta = busta;
  1142.         this.registroServiziReader = RegistroServiziManager.getInstance(this.state);
  1143.         this.validazioneIDEGovCompleta = proprietaValidazione.isValidazioneIDCompleta();
  1144.         this.valida(proprietaValidazione, tipoBusta, proprietaValidazione.getVersioneProtocollo());
  1145.         ValidazioneSemanticaResult result = new ValidazioneSemanticaResult(this.erroriValidazione, this.erroriProcessamento,
  1146.                 this.servizioCorrelato, this.tipoServizioCorrelato, this.versioneServizioCorrelato, this.infoServizio);
  1147.         return result;
  1148.     }

  1149.    
  1150.     @Override
  1151.     public SecurityInfo readSecurityInformation(IDigestReader digestReader, OpenSPCoop2Message msg) throws ProtocolException{
  1152.         return null;
  1153.     }
  1154. }