AbstractConverter.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.protocol.basic.archive.abstraction;

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

  23. import org.openspcoop2.core.config.ServizioApplicativo;
  24. import org.openspcoop2.core.id.IDAccordo;
  25. import org.openspcoop2.core.id.IDServizio;
  26. import org.openspcoop2.core.id.IDServizioApplicativo;
  27. import org.openspcoop2.core.id.IDSoggetto;
  28. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  29. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  30. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  31. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  32. import org.openspcoop2.protocol.abstraction.Soggetto;
  33. import org.openspcoop2.protocol.basic.archive.ZIPReadUtils;
  34. import org.openspcoop2.protocol.sdk.ProtocolException;
  35. import org.openspcoop2.protocol.sdk.archive.Archive;
  36. import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaAccordi;
  37. import org.openspcoop2.protocol.sdk.registry.ProtocolFiltroRicercaServizi;
  38. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  39. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  40. import org.openspcoop2.protocol.sdk.registry.RegistryException;
  41. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  42. import org.slf4j.Logger;

  43. /**    
  44.  * AbstractConverter
  45.  *
  46.  * @author Poli Andrea (poli@link.it)
  47.  * @author $Author$
  48.  * @version $Rev$, $Date$
  49.  */
  50. public abstract class AbstractConverter {


  51.    
  52.     protected IDAccordoFactory idAccordoFactory;
  53.     protected IDServizioFactory idServizioFactory;
  54.     protected Logger log;
  55.     protected ZIPReadUtils filler;
  56.    
  57.     protected AbstractConverter(Logger log,ZIPReadUtils zipReader) throws ProtocolException{
  58.         this.idAccordoFactory = IDAccordoFactory.getInstance();
  59.         this.idServizioFactory = IDServizioFactory.getInstance();
  60.         this.log = log;
  61.         this.filler = zipReader;
  62.     }
  63.            
  64.     protected boolean existsPdd(Archive archive, IRegistryReader registryReader, String pdd) {
  65.        
  66.         // Cerco nel registro
  67.         if(registryReader.existsPortaDominio(pdd)){
  68.             return true;
  69.         }
  70.                
  71.         // Cerco negli oggetti presenti nell'archivio
  72.         if(archive.getPdd().size()>0){
  73.             for (int i = 0; i < archive.getPdd().size(); i++) {
  74.                 String nome = archive.getPdd().get(i).getPortaDominio().getNome();
  75.                 if(nome.equals(pdd)){
  76.                     return true;
  77.                 }
  78.             }
  79.         }
  80.        
  81.         return false;
  82.                
  83.     }
  84.    
  85.     protected boolean isPddOperativa(Archive archive, IRegistryReader registryReader, String pdd) throws RegistryException{
  86.        
  87.         // Cerco nel registro
  88.         if(registryReader.existsPortaDominio(pdd)){
  89.             try{
  90.                 if(registryReader.findIdPorteDominio(true).contains(pdd)){
  91.                     return true;
  92.                 }
  93.             }catch(RegistryNotFound notFound){
  94.                 return false;
  95.             }
  96.         }
  97.        
  98.         return false; // le pdd presenti nell'archivio vengono aggiunte come esterne.
  99.     }
  100.    
  101.     protected String getPddOperativa(IRegistryReader registryReader) throws RegistryNotFound, RegistryException{
  102.         return registryReader.findIdPorteDominio(true).get(0); // una pdd operativa esiste sempre
  103.     }
  104.    
  105.     protected boolean existsSoggetto(Archive archive, IRegistryReader registryReader, Soggetto idSoggetto) {
  106.        
  107.         // Cerco nel registro
  108.         if(registryReader.existsSoggetto(new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome()))){
  109.             return true;
  110.         }
  111.        
  112.         // Cerco negli oggetti presenti nell'archivio
  113.         if(archive.getSoggetti().size()>0){
  114.             for (int i = 0; i < archive.getSoggetti().size(); i++) {
  115.                 org.openspcoop2.core.registry.Soggetto soggetto = archive.getSoggetti().get(i).getSoggettoRegistro();
  116.                 if(soggetto!=null){
  117.                     if(idSoggetto.getTipo().equals(soggetto.getTipo()) && idSoggetto.getNome().equals(soggetto.getNome())){
  118.                         return true;
  119.                     }
  120.                 }
  121.             }
  122.         }
  123.        
  124.         return false;
  125.                
  126.     }
  127.    
  128.     protected boolean existsServizioApplicativo(Archive archive, IConfigIntegrationReader configIntegrationReader, Soggetto idSoggetto, String nomeServizioApplicativo) {
  129.        
  130.         IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  131.         idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome()));
  132.         idServizioApplicativo.setNome(nomeServizioApplicativo);
  133.        
  134.         // Cerco nel registro
  135.         if(configIntegrationReader.existsServizioApplicativo(idServizioApplicativo)){
  136.             return true;
  137.         }
  138.        
  139.         // Cerco negli oggetti presenti nell'archivio
  140.         if(archive.getServiziApplicativi().size()>0){
  141.             for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
  142.                 org.openspcoop2.core.config.ServizioApplicativo sa = archive.getServiziApplicativi().get(i).getServizioApplicativo();
  143.                 if(sa!=null){
  144.                     if(idSoggetto.getTipo().equals(sa.getTipoSoggettoProprietario()) &&
  145.                             idSoggetto.getNome().equals(sa.getNomeSoggettoProprietario()) &&
  146.                             nomeServizioApplicativo.equals(sa.getNome())){
  147.                         return true;
  148.                     }
  149.                 }
  150.             }
  151.         }
  152.        
  153.         return false;
  154.                
  155.     }
  156.    
  157.     protected String getTipoCredenzialeServizioApplicativo(Archive archive, IConfigIntegrationReader configIntegrationReader, Soggetto idSoggetto, String nomeServizioApplicativo) throws Exception {
  158.        
  159.         IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
  160.         idServizioApplicativo.setIdSoggettoProprietario(new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome()));
  161.         idServizioApplicativo.setNome(nomeServizioApplicativo);
  162.        
  163.         ServizioApplicativo sa = null;
  164.        
  165.         // Cerco nel registro
  166.         if(configIntegrationReader.existsServizioApplicativo(idServizioApplicativo)){
  167.             sa = configIntegrationReader.getServizioApplicativo(idServizioApplicativo);
  168.         }
  169.         else{
  170.             // Cerco negli oggetti presenti nell'archivio
  171.             if(archive.getServiziApplicativi().size()>0){
  172.                 for (int i = 0; i < archive.getServiziApplicativi().size(); i++) {
  173.                     org.openspcoop2.core.config.ServizioApplicativo saTmp = archive.getServiziApplicativi().get(i).getServizioApplicativo();
  174.                     if(saTmp!=null){
  175.                         if(idSoggetto.getTipo().equals(saTmp.getTipoSoggettoProprietario()) &&
  176.                                 idSoggetto.getNome().equals(saTmp.getNomeSoggettoProprietario()) &&
  177.                                 nomeServizioApplicativo.equals(saTmp.getNome())){
  178.                             sa = saTmp;
  179.                             break;
  180.                         }
  181.                     }
  182.                 }
  183.             }
  184.         }
  185.        
  186.         if(sa==null){
  187.             throw new Exception("Servizio Applicativo ["+idServizioApplicativo.toString()+"] non esistente");
  188.         }
  189.         if(sa.getInvocazionePorta()==null){
  190.             throw new Exception("Servizio Applicativo ["+idServizioApplicativo.toString()+"] non possiede delle credenziali di accesso alla PdD (Indicare un applicativo con tipologia 'fruitore')");
  191.         }
  192.         if(sa.getInvocazionePorta().sizeCredenzialiList()<=0){
  193.             throw new Exception("Servizio Applicativo ["+idServizioApplicativo.toString()+"] non possiede delle credenziali di accesso alla PdD (Indicare un applicativo con tipologia 'fruitore') con credenziali");
  194.         }
  195.         return sa.getInvocazionePorta().getCredenziali(0).getTipo().getValue();
  196.                
  197.     }
  198.    
  199.     protected boolean existsAccordoServizioParteComune(Archive archive, IRegistryReader registryReader, IDAccordo idAccordo) throws RegistryException {
  200.        
  201.         // Cerco nel registro
  202.         try{
  203.             registryReader.getAccordoServizioParteComune(idAccordo);
  204.             return true;
  205.         }catch(RegistryNotFound notFound){
  206.             // ignore
  207.         }
  208.        
  209.         // Cerco negli oggetti presenti nell'archivio
  210.         if(archive.getAccordiServizioParteComune().size()>0){
  211.             for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
  212.                 try{
  213.                     IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioParteComune().get(i).getAccordoServizioParteComune());
  214.                     if(idAccordo.equals(id)){
  215.                         return true;
  216.                     }
  217.                 }catch(Exception e){
  218.                     // ignore
  219.                 }
  220.             }
  221.         }
  222.         if(archive.getAccordiServizioComposto().size()>0){
  223.             for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
  224.                 try{
  225.                     IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioComposto().get(i).getAccordoServizioParteComune());
  226.                     if(idAccordo.equals(id)){
  227.                         return true;
  228.                     }
  229.                 }catch(Exception e){
  230.                     // ignore
  231.                 }
  232.             }
  233.         }

  234.         return false;
  235.                
  236.     }
  237.    
  238.     protected IDAccordo findIdAccordoServizioParteComune(Archive archive, IRegistryReader registryReader,
  239.             String nome, Soggetto idSoggetto, Integer versione) throws DriverRegistroServiziException, ProtocolException, RegistryException{
  240.        
  241.         List<IDAccordo> idAccordi = new ArrayList<IDAccordo>();
  242.         List<String> uriAccordi = new ArrayList<>();
  243.        
  244.         // Cerco nel registro
  245.         ProtocolFiltroRicercaAccordi filtroAccordi = new ProtocolFiltroRicercaAccordi();
  246.         filtroAccordi.setNome(nome);
  247.         if(versione!=null){
  248.             filtroAccordi.setVersione(versione);
  249.         }
  250.         if(idSoggetto!=null){
  251.             IDSoggetto idSoggettoOp2 = new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome());
  252.             filtroAccordi.setSoggetto(idSoggettoOp2);
  253.         }
  254.         try {
  255.             List<IDAccordo> found = registryReader.findIdAccordiServizioParteComune(filtroAccordi);
  256.             if(found.size()>0){
  257.                 for (IDAccordo id : found) {
  258.                     idAccordi.add(id);
  259.                     uriAccordi.add(this.idAccordoFactory.getUriFromIDAccordo(id));
  260.                 }
  261.             }
  262.         } catch (RegistryNotFound e) {
  263.         }
  264.        
  265.         // Cerco negli oggetti presenti nell'archivio
  266.         if(archive.getAccordiServizioParteComune().size()>0){
  267.             for (int i = 0; i < archive.getAccordiServizioParteComune().size(); i++) {
  268.                 try{    
  269.                     IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioParteComune().get(i).getAccordoServizioParteComune());
  270.                     if(nome.equals(id.getNome())==false){
  271.                         continue;
  272.                     }
  273.                     if(versione!=null && id.getVersione()!=null && (versione.intValue()!=id.getVersione().intValue()) ){
  274.                         continue;
  275.                     }
  276.                     if(idSoggetto!=null){
  277.                         if(id.getSoggettoReferente()==null){
  278.                             continue;
  279.                         }
  280.                         if(idSoggetto.getTipo()!=null && idSoggetto.getTipo().equals(id.getSoggettoReferente().getTipo())==false){
  281.                             continue;
  282.                         }
  283.                         if(idSoggetto.getNome()!=null && idSoggetto.getNome().equals(id.getSoggettoReferente().getNome())==false){
  284.                             continue;
  285.                         }
  286.                     }
  287.                     String uri = this.idAccordoFactory.getUriFromIDAccordo(id);
  288.                     if(uriAccordi.contains(uri)==false){
  289.                         idAccordi.add(id);
  290.                         uriAccordi.add(uri);
  291.                     }
  292.                 }catch(Exception e){
  293.                     // ignore
  294.                 }
  295.             }
  296.         }
  297.         if(archive.getAccordiServizioComposto().size()>0){
  298.             for (int i = 0; i < archive.getAccordiServizioComposto().size(); i++) {
  299.                 try{
  300.                     IDAccordo id = this.idAccordoFactory.getIDAccordoFromAccordo(archive.getAccordiServizioComposto().get(i).getAccordoServizioParteComune());
  301.                     if(nome.equals(id.getNome())==false){
  302.                         continue;
  303.                     }
  304.                     if(versione!=null && id.getVersione()!=null && (versione.intValue()!=id.getVersione().intValue()) ){
  305.                         continue;
  306.                     }
  307.                     if(idSoggetto!=null){
  308.                         if(id.getSoggettoReferente()==null){
  309.                             continue;
  310.                         }
  311.                         if(idSoggetto.getTipo()!=null && idSoggetto.getTipo().equals(id.getSoggettoReferente().getTipo())==false){
  312.                             continue;
  313.                         }
  314.                         if(idSoggetto.getNome()!=null && idSoggetto.getNome().equals(id.getSoggettoReferente().getNome())==false){
  315.                             continue;
  316.                         }
  317.                     }
  318.                     String uri = this.idAccordoFactory.getUriFromIDAccordo(id);
  319.                     if(uriAccordi.contains(uri)==false){
  320.                         idAccordi.add(id);
  321.                         uriAccordi.add(uri);
  322.                     }
  323.                 }catch(Exception e){
  324.                     // ignore
  325.                 }
  326.             }
  327.         }
  328.        
  329.         // Verifico
  330.         if(idAccordi.size()==1){
  331.             return idAccordi.get(0);
  332.         }
  333.         else {
  334.             String filtro = "Nome["+nome+"]";
  335.             if(versione!=null){
  336.                 filtro = filtro + " Versione["+versione+"]";
  337.             }
  338.             if(idSoggetto!=null){
  339.                 filtro = filtro + " TipoSoggetto["+idSoggetto.getTipo()+"]";
  340.                 filtro = filtro + " NomeSoggetto["+idSoggetto.getNome()+"]";
  341.             }
  342.             if(idAccordi.size()<1){
  343.                 throw new ProtocolException("Non risultano accordi di servizio parte comune che corrispondono al seguente criterio di ricerca: "+filtro);
  344.             }
  345.             else{
  346.                 throw new ProtocolException("Risultano più accordi di servizio parte comune ("+uriAccordi.size()+") che corrispondono al seguente criterio di ricerca: "+filtro+""
  347.                         + "\nGli accordi sono: "+uriAccordi.toString());
  348.             }
  349.         }
  350.     }
  351.    
  352.    
  353.     protected boolean existsAccordoServizioParteSpecifica(Archive archive, IRegistryReader registryReader, IDServizio idServizio) throws RegistryException {
  354.        
  355.         // Cerco nel registro
  356.         try{
  357.             registryReader.getAccordoServizioParteSpecifica(idServizio);
  358.             return true;
  359.         }catch(RegistryNotFound notFound){
  360.             // ignore
  361.         }
  362.        
  363.         // Cerco negli oggetti presenti nell'archivio
  364.         if(archive.getAccordiServizioParteSpecifica().size()>0){
  365.             for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  366.                 try{
  367.                     AccordoServizioParteSpecifica asps = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
  368.                     IDServizio id = IDServizioFactory.getInstance().getIDServizioFromValues(asps.getTipo(), asps.getNome(),
  369.                             asps.getTipoSoggettoErogatore(), asps.getNomeSoggettoErogatore(),
  370.                             asps.getVersione());
  371.                     if(idServizio.equals(id)){
  372.                         return true;
  373.                     }
  374.                 }catch(Exception e){
  375.                     // ignore
  376.                 }
  377.             }
  378.         }

  379.         return false;
  380.                
  381.     }

  382.    
  383.     protected AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(Archive archive, IRegistryReader registryReader, IDServizio idServizio) throws RegistryException {
  384.    
  385.         // Cerco nel registro
  386.         try{
  387.             return registryReader.getAccordoServizioParteSpecifica(idServizio);
  388.         }catch(RegistryNotFound notFound){
  389.             // ignore
  390.         }
  391.        
  392.         // Cerco negli oggetti presenti nell'archivio
  393.         if(archive.getAccordiServizioParteSpecifica().size()>0){
  394.             for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  395.                 try{
  396.                     AccordoServizioParteSpecifica asps = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
  397.                     if(idServizio.getTipo().equals(asps.getTipo())==false ){
  398.                         continue;
  399.                     }
  400.                     if(idServizio.getNome().equals(asps.getNome())==false){
  401.                         continue;
  402.                     }
  403.                     if(idServizio.getVersione().intValue() != asps.getVersione().intValue()){
  404.                         continue;
  405.                     }
  406.                     if(idServizio.getSoggettoErogatore().getTipo().equals(asps.getTipoSoggettoErogatore())==false){
  407.                         continue;
  408.                     }
  409.                     if(idServizio.getSoggettoErogatore().getNome().equals(asps.getNomeSoggettoErogatore())==false){
  410.                         continue;
  411.                     }
  412.                     return asps;
  413.                 }catch(Exception e){
  414.                     // ignore
  415.                 }
  416.             }
  417.         }
  418.         return null;
  419.                
  420.     }
  421.    
  422.     protected IDServizio findIdAccordoServizioParteSpecifica(Archive archive, IRegistryReader registryReader,
  423.             String nome, String tipo, Integer versione, Soggetto idSoggetto) throws DriverRegistroServiziException, ProtocolException, RegistryException{
  424.        
  425.         List<IDServizio> idAccordi = new ArrayList<IDServizio>();
  426.         List<String> uriAccordi = new ArrayList<>();
  427.        
  428.         // Cerco nel registro
  429.         ProtocolFiltroRicercaServizi filtroAccordi = new ProtocolFiltroRicercaServizi();
  430.         filtroAccordi.setTipoServizio(tipo);
  431.         filtroAccordi.setNomeServizio(nome);
  432.         if(idSoggetto!=null){
  433.             IDSoggetto idSoggettoOp2 = new IDSoggetto(idSoggetto.getTipo(), idSoggetto.getNome());
  434.             filtroAccordi.setSoggettoErogatore(idSoggettoOp2);
  435.         }
  436.         try {
  437.             List<IDServizio> found = registryReader.findIdAccordiServizioParteSpecifica(filtroAccordi);
  438.             if(found.size()>0){
  439.                 for (IDServizio id : found) {
  440.                     idAccordi.add(id);
  441.                     uriAccordi.add(id.toString());
  442.                 }
  443.             }
  444.         } catch (RegistryNotFound e) {
  445.         }
  446.        
  447.         // Cerco negli oggetti presenti nell'archivio
  448.         if(archive.getAccordiServizioParteSpecifica().size()>0){
  449.             for (int i = 0; i < archive.getAccordiServizioParteSpecifica().size(); i++) {
  450.                 try{
  451.                     AccordoServizioParteSpecifica asps = archive.getAccordiServizioParteSpecifica().get(i).getAccordoServizioParteSpecifica();
  452.                     if(tipo!=null && (tipo.equals(asps.getTipo())==false) ){
  453.                         continue;
  454.                     }
  455.                     if(nome.equals(asps.getNome())==false){
  456.                         continue;
  457.                     }
  458.                     if(versione!=null && (versione.intValue() != asps.getVersione().intValue()) ){
  459.                         continue;
  460.                     }
  461.                     if(idSoggetto!=null){
  462.                         if(idSoggetto.getTipo().equals(asps.getTipoSoggettoErogatore())==false){
  463.                             continue;
  464.                         }
  465.                         if(idSoggetto.getNome().equals(asps.getNomeSoggettoErogatore())==false){
  466.                             continue;
  467.                         }

  468.                         IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipo, nome,
  469.                                 new IDSoggetto(idSoggetto.getTipo(),idSoggetto.getNome()),
  470.                                 versione);
  471.                         String uri = idServizio.toString();
  472.                         if(uriAccordi.contains(uri)==false){
  473.                             idAccordi.add(idServizio);
  474.                             uriAccordi.add(uri);
  475.                         }
  476.                     }
  477.                 }catch(Exception e){
  478.                     // ignore
  479.                 }
  480.             }
  481.         }
  482.        
  483.        
  484.         // Verifico
  485.         if(idAccordi.size()==1){
  486.             return idAccordi.get(0);
  487.         }
  488.         else {
  489.             String filtro = "Nome["+nome+"]";
  490.             if(tipo!=null){
  491.                 filtro = filtro + " Tipo["+tipo+"]";
  492.             }
  493.             if(idSoggetto!=null){
  494.                 filtro = filtro + " TipoSoggetto["+idSoggetto.getTipo()+"]";
  495.                 filtro = filtro + " NomeSoggetto["+idSoggetto.getNome()+"]";
  496.             }
  497.             if(idAccordi.size()<1){
  498.                 throw new ProtocolException("Non risultano accordi di servizio parte specifica che corrispondono al seguente criterio di ricerca: "+filtro);
  499.             }
  500.             else{
  501.                 throw new ProtocolException("Risultano più accordi di servizio parte specifica ("+uriAccordi.size()+") che corrispondono al seguente criterio di ricerca: "+filtro+""
  502.                         + "\nGli accordi sono: "+uriAccordi.toString());
  503.             }
  504.         }
  505.     }
  506.        
  507.    
  508. }