SPCoopProtocolVersionManager.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.config;

  21. import org.openspcoop2.protocol.sdk.Busta;
  22. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  23. import org.openspcoop2.protocol.sdk.ProtocolException;
  24. import org.openspcoop2.protocol.sdk.Servizio;
  25. import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
  26. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  27. import org.openspcoop2.protocol.sdk.constants.StatoFunzionalitaProtocollo;
  28. import org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti;

  29. /**
  30.  * Classe che implementa, in base al protocollo SPCoop, l'interfaccia {@link org.openspcoop2.protocol.sdk.config.IProtocolVersionManager}
  31.  *
  32.  * @author Poli Andrea (apoli@link.it)
  33.  * @author Nardi Lorenzo (nardi@link.it)
  34.  * @author $Author$
  35.  * @version $Rev$, $Date$
  36.  */
  37. public class SPCoopProtocolVersionManager extends SPCoopProtocolManager implements IProtocolVersionManager {
  38.    
  39.     protected String versione;
  40.     public SPCoopProtocolVersionManager(IProtocolFactory<?> protocolFactory,String versione) throws ProtocolException{
  41.         super(protocolFactory);
  42.         this.versione = versione;
  43.     }
  44.    
  45.    
  46.    
  47.    
  48.     /* *********** FUNZIONALITA' OFFERTE DALLA Porta di Dominio ******************* */
  49.    
  50.     @Override
  51.     public StatoFunzionalitaProtocollo getFiltroDuplicati(Busta busta){
  52.         return this._getFiltroDuplicati();
  53.     }
  54.     @Override
  55.     public StatoFunzionalitaProtocollo getFiltroDuplicati(Servizio infoServizio){
  56.         return this._getFiltroDuplicati();
  57.     }
  58.     private StatoFunzionalitaProtocollo _getFiltroDuplicati(){

  59.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  60.             return StatoFunzionalitaProtocollo.ABILITATA;
  61.         } else {
  62.             return StatoFunzionalitaProtocollo.REGISTRO;
  63.         }
  64.     }
  65.    
  66.     @Override
  67.     public StatoFunzionalitaProtocollo getConsegnaAffidabile(Busta busta){
  68.         return this._getConsegnaAffidabile();
  69.     }
  70.     @Override
  71.     public StatoFunzionalitaProtocollo getConsegnaAffidabile(Servizio infoServizio){
  72.         return this._getConsegnaAffidabile();
  73.     }
  74.     private StatoFunzionalitaProtocollo _getConsegnaAffidabile(){
  75.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  76.             return StatoFunzionalitaProtocollo.DISABILITATA;
  77.         } else {
  78.             return StatoFunzionalitaProtocollo.REGISTRO;
  79.         }
  80.     }
  81.    
  82.     @Override
  83.     public StatoFunzionalitaProtocollo getConsegnaInOrdine(Busta busta){
  84.         return this._getConsegnaInOrdine();
  85.     }
  86.     @Override
  87.     public StatoFunzionalitaProtocollo getConsegnaInOrdine(Servizio infoServizio){
  88.         return this._getConsegnaInOrdine();
  89.     }
  90.     private StatoFunzionalitaProtocollo _getConsegnaInOrdine(){
  91.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  92.             return StatoFunzionalitaProtocollo.DISABILITATA;
  93.         } else {
  94.             return StatoFunzionalitaProtocollo.REGISTRO;
  95.         }
  96.     }
  97.    
  98.     @Override
  99.     public StatoFunzionalitaProtocollo getCollaborazione(Busta busta){
  100.         return this._getCollaborazione(busta.getProfiloDiCollaborazione());
  101.     }
  102.     @Override
  103.     public StatoFunzionalitaProtocollo getCollaborazione(Servizio infoServizio){
  104.         return this._getCollaborazione(infoServizio.getProfiloDiCollaborazione());
  105.     }
  106.     private StatoFunzionalitaProtocollo _getCollaborazione(ProfiloDiCollaborazione profiloCollaborazione){
  107.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  108.             if(profiloCollaborazione==null || ProfiloDiCollaborazione.UNKNOWN.equals(profiloCollaborazione)){
  109.                 return StatoFunzionalitaProtocollo.REGISTRO;
  110.             }
  111.             else if(profiloCollaborazione.equals(ProfiloDiCollaborazione.ONEWAY) || profiloCollaborazione.equals(ProfiloDiCollaborazione.SINCRONO))
  112.                 return StatoFunzionalitaProtocollo.DISABILITATA;
  113.             else {
  114.                 return StatoFunzionalitaProtocollo.ABILITATA;
  115.             }  
  116.         }
  117.         else{
  118.             return StatoFunzionalitaProtocollo.REGISTRO;
  119.         }
  120.        
  121.     }
  122.    
  123.     @Override
  124.     public StatoFunzionalitaProtocollo getIdRiferimentoRichiesta(Busta busta){
  125.         return this._getIdRiferimentoRichiesta();
  126.     }
  127.     @Override
  128.     public StatoFunzionalitaProtocollo getIdRiferimentoRichiesta(Servizio infoServizio){
  129.         return this._getIdRiferimentoRichiesta();
  130.     }
  131.     private StatoFunzionalitaProtocollo _getIdRiferimentoRichiesta(){
  132.         return StatoFunzionalitaProtocollo.DISABILITATA; // non supportato in spcoop la relazione tra piu invocazioni oneway
  133.     }

  134.    
  135.    
  136.    
  137.     /* *********** PROFILI ASINCRONI ******************* */

  138.     /**
  139.      * Ritorna l'indicazione se sulla busta di risposta del profilo asincrono simmetrico
  140.      * debba essere inserito l'identificatore del messaggio della richiesta asincrona.
  141.      *
  142.      * @return Indicazione se l'id della richiesta debba essere inserito o meno nella busta di risposta
  143.      */
  144.     @Override
  145.     public boolean isCorrelazioneRichiestaPresenteRispostaAsincronaSimmetrica(){
  146.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  147.             return false;
  148.         } else {
  149.             return true;
  150.         }
  151.     }
  152.     /**
  153.      * Ritorna l'indicazione se sulla busta di richiesta stato del profilo asincrono asimmetrico
  154.      * debba essere inserito l'identificatore del messaggio della richiesta asincrona.
  155.      *
  156.      * @return Indicazione se l'id della richiesta debba essere inserito o meno nella busta di richiesta stato
  157.      */
  158.     @Override
  159.     public boolean isCorrelazioneRichiestaPresenteRichiestaStatoAsincronaAsimmetrica(){
  160.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  161.             return false;
  162.         } else {
  163.             return true;
  164.         }
  165.     }
  166.    
  167.     /**
  168.      * Indicazione, per il profilo asincrono simmetrico,
  169.      * se deve essere riportato o meno nella busta di richiesta il servizio correlato dove deve essere inviata la risposta
  170.      *
  171.      * @return indicazione se il servizio correlato deve essere indicato o meno nella busta
  172.      */
  173.     @Override
  174.     public boolean isGenerazioneInformazioniServizioCorrelatoAsincronoSimmetrico(){
  175.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  176.             return false;
  177.         } else {
  178.             return true;
  179.         }
  180.     }
  181.     /**
  182.      * Indicazione, per il profilo asincrono asimmetrico,
  183.      * se deve essere riportato o meno nella busta di ricevuta alla richiesta il servizio correlato dove deve essere effettuato il polling
  184.      *
  185.      * @return indicazione se il servizio correlato deve essere indicato o meno nella busta
  186.      */
  187.     @Override
  188.     public boolean isGenerazioneInformazioniServizioCorrelatoAsincronoAsimmetrico(){
  189.         return !SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione);
  190.     }
  191.    
  192.     /**
  193.      * Ritorna l'identificatore da utilizzare per la correlazione asincrona scelto tra i valori della busta
  194.      *
  195.      * @param richiesta Busta
  196.      * @return identificatore da utilizzare per la correlazione asincrona
  197.      */
  198.     @Override
  199.     public String getIdCorrelazioneAsincrona(Busta richiesta){
  200.         if(SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione)){
  201.             return richiesta.getCollaborazione();
  202.         } else {
  203.             return richiesta.getRiferimentoMessaggio();
  204.         }
  205.     }
  206.    
  207.     /**
  208.      * Ritorna l'identificatore da utilizzare per la correlazione asincrona scelto tra i due parametri
  209.      *
  210.      * @param rifMsg riferimento messaggio
  211.      * @param collaborazione id collaborazione
  212.      * @return identificatore da utilizzare per la correlazione asincrona
  213.      */
  214.     @Override
  215.     public String getIdCorrelazioneAsincrona(String rifMsg,String collaborazione){
  216.         if (SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equalsIgnoreCase(this.versione)) {
  217.             // Se presente riferimentoMessaggio utilizzo quello.
  218.             if (rifMsg != null) {
  219.                 return rifMsg;
  220.             } else if (collaborazione != null) {
  221.                 // Utilizzo Collaborazione come riferimentoServizioCorrelato
  222.                 // Tanto nelle linee guida non possono esistere piu' istanze con la stessa collaborazione, e' stata deprecata.
  223.                 // Per igni istanza asincrona (richiesta/risposta) la richiesta genera una collaborazione a capostipite
  224.                 return collaborazione;
  225.             }
  226.         } else {
  227.             return rifMsg;
  228.         }
  229.         return null;
  230.     }
  231.    
  232.    
  233.    
  234.    
  235.    

  236.    
  237.     /* *********** ECCEZIONI ******************* */

  238.     /**
  239.      * Indicazione se devono essere gestite eccezioni di livello INFO
  240.      *
  241.      * @return Indicazione se devono essere gestite eccezioni di livello INFO
  242.      */
  243.     @Override
  244.     public boolean isEccezioniLivelloInfoAbilitato(){
  245.         return SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione);
  246.     }

  247.    
  248.     /**
  249.      * Indicazione se devono essere ignorate eventuali eccezioni di livello diverso da GRAVE
  250.      *
  251.      * @return Indicazione se devono essere ignorate eventuali eccezioni di livello diverso da GRAVE
  252.      */
  253.     @Override
  254.     public boolean isIgnoraEccezioniLivelloNonGrave(){
  255.         return SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione);
  256.     }
  257.    
  258.    
  259.    
  260.    
  261.    
  262.    
  263.     /* *********** VALIDAZIONE/GENERAZIONE BUSTE ******************* */
  264.    
  265.     /**
  266.      * Indicazione se ritornare solo SoapFault o busteErrore in caso di buste con struttura malformata.
  267.      *  
  268.      * @return Indicazione se ritornare solo SoapFault o busteErrore in caso di buste con struttura malformata.
  269.      */
  270.     @Override
  271.     public boolean isGenerazioneBusteErrore_strutturaMalformataHeaderProtocollo(){
  272.         return this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo();
  273.     }
  274.    
  275.     /**
  276.      * Indicazione se in caso di messaggio con profilo oneway duplicato, debba essere generato un errore di protocollo o meno
  277.      *
  278.      * @return Indicazione se in caso di messaggio con profilo oneway duplicato, debba essere generato un errore di protocollo o meno
  279.      */
  280.     @Override
  281.     public boolean isGenerazioneErroreMessaggioOnewayDuplicato(){
  282.         return SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equals(this.versione);
  283.     }

  284.    
  285.    
  286.    
  287.    
  288.    
  289.     /* *********** ALTRO ******************* */
  290.    
  291.     /**
  292.      * Indicazione se l'indirizzo telematico deve essere interpretato dalla Porta di Dominio
  293.      *
  294.      * @return Indicazione se l'indirizzo telematico deve essere interpretato dalla Porta di Dominio
  295.      */
  296.     @Override
  297.     public boolean isUtilizzoIndirizzoSoggettoPresenteBusta(){
  298.         return !SPCoopCostanti.PROFILO_CNIPA_LINEE_GUIDA_11_BUSTA_EGOV_11.equalsIgnoreCase(this.versione);
  299.     }



  300. }