BasicServiceLibraryReader.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.monitor.engine.config;

  21. import org.openspcoop2.core.commons.dao.DAOFactory;
  22. import org.openspcoop2.core.commons.dao.DAOFactoryException;
  23. import org.openspcoop2.core.plugins.ConfigurazioneServizio;
  24. import org.openspcoop2.core.plugins.ConfigurazioneServizioAzione;
  25. import org.openspcoop2.core.plugins.IdConfigurazioneServizio;
  26. import org.openspcoop2.core.plugins.IdConfigurazioneServizioAzione;
  27. import org.openspcoop2.core.plugins.dao.IConfigurazioneServizioAzioneServiceSearch;
  28. import org.openspcoop2.core.plugins.dao.IConfigurazioneServizioServiceSearch;
  29. import org.openspcoop2.core.commons.search.IdAccordoServizioParteSpecifica;
  30. import org.openspcoop2.core.commons.search.IdSoggetto;
  31. import org.openspcoop2.core.commons.search.dao.IAccordoServizioParteSpecificaServiceSearch;

  32. import java.sql.Connection;

  33. import org.slf4j.Logger;
  34. import org.openspcoop2.core.id.IDAccordo;
  35. import org.openspcoop2.core.id.IDServizio;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  38. import org.openspcoop2.generic_project.beans.NonNegativeNumber;
  39. import org.openspcoop2.generic_project.exception.MultipleResultException;
  40. import org.openspcoop2.generic_project.exception.NotFoundException;
  41. import org.openspcoop2.generic_project.exception.NotImplementedException;
  42. import org.openspcoop2.generic_project.exception.ServiceException;
  43. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;

  44. /**
  45.  * BasicServiceLibraryReader
  46.  *
  47.  * @author Poli Andrea (apoli@link.it)
  48.  * @author $Author$
  49.  * @version $Rev$, $Date$
  50.  */
  51. public class BasicServiceLibraryReader {

  52.     private Connection connection;
  53.     private DAOFactory daoFactory = null;
  54.     private ServiceManagerProperties daoFactoryServiceManagerPropertiesPlugins = null;
  55.     private ServiceManagerProperties daoFactoryServiceManagerPropertiesUtils = null;
  56.     private Logger daoFactoryLogger = null;
  57.    
  58.     private org.openspcoop2.core.plugins.dao.IServiceManager serviceManagerPluginsBase;
  59.     private org.openspcoop2.core.commons.search.dao.IServiceManager serviceManagerUtils;
  60.    
  61.     private boolean debug;
  62.    
  63.     public BasicServiceLibraryReader(Connection connection,
  64.             DAOFactory daoFactory,
  65.             ServiceManagerProperties daoFactoryServiceManagerPropertiesPlugins,
  66.             ServiceManagerProperties daoFactoryServiceManagerPropertiesUtils,
  67.             Logger daoFactoryLogger, boolean debug){
  68.         this.connection = connection;
  69.         this.daoFactory = daoFactory;
  70.         this.daoFactoryServiceManagerPropertiesPlugins = daoFactoryServiceManagerPropertiesPlugins;
  71.         this.daoFactoryServiceManagerPropertiesUtils = daoFactoryServiceManagerPropertiesUtils;
  72.         this.daoFactoryLogger = daoFactoryLogger;
  73.         this.debug = debug;
  74.     }
  75.     public BasicServiceLibraryReader(org.openspcoop2.core.plugins.dao.IServiceManager jdbcServiceManagerPluginsBase,
  76.             org.openspcoop2.core.commons.search.dao.IServiceManager jdbcServiceManagerUtils,
  77.             boolean debug){
  78.         this.serviceManagerPluginsBase = jdbcServiceManagerPluginsBase;
  79.         this.serviceManagerUtils = jdbcServiceManagerUtils;
  80.         this.debug = debug;
  81.     }
  82.    
  83.     public BasicServiceLibrary read(IDServizio idServizio,Logger log) throws Exception{
  84.        
  85.         String azione = idServizio.getAzione();
  86.        
  87.         // Ottengo dati Servizio SPCoop
  88.        
  89.         org.openspcoop2.core.commons.search.AccordoServizioParteSpecifica s = null;
  90.         try{
  91.             s = this.getAccordoServizioParteSpecifica(idServizio);
  92.             if(s==null){
  93.                 throw new NotFoundException("Null instance return");
  94.             }
  95.         }catch(NotFoundException notFound){
  96.             // non e' stata configurata una parte specifica
  97.             if(this.debug){
  98.                 log.debug("Non รจ stata trovata una parte specifica con id ["+idServizio.toString()+"]: "+notFound.getMessage(),notFound);
  99.             }
  100.             return null;
  101.         }
  102.        
  103.    
  104.        
  105.         String portType = null;
  106.         if(s.getPortType()!=null && !"".equals(s.getPortType())){
  107.             portType = s.getPortType();
  108.         }
  109.         else{
  110.             portType = idServizio.getNome();
  111.         }
  112.        
  113.         if(s.getIdAccordoServizioParteComune().getIdSoggetto()==null){
  114.             log.warn("Il servizio indicato ["+idServizio+"] implementa un accordo che non contiene un soggetto referente. Opzione non supportata");
  115.             return null;
  116.         }
  117.        
  118.         IDSoggetto soggettoReferente = new IDSoggetto(s.getIdAccordoServizioParteComune().getIdSoggetto().getTipo(), s.getIdAccordoServizioParteComune().getIdSoggetto().getNome());
  119.         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromValues(s.getIdAccordoServizioParteComune().getNome(),
  120.                 soggettoReferente,
  121.                 s.getIdAccordoServizioParteComune().getVersione());
  122.        
  123.         BasicServiceLibrary basicServiceLibrary = this.read(idAccordo, portType, azione, log);
  124.         if(basicServiceLibrary!=null){
  125.             basicServiceLibrary.setIdServizio(idServizio);
  126.             basicServiceLibrary.setAccordoServizioParteSpecifica(s);
  127.         }
  128.        
  129.         return basicServiceLibrary;
  130.     }

  131.     public boolean existsAlmostOneBasicServiceLibrary(Logger log) throws Exception{
  132.         return this._existsAlmostOneBasicServiceLibrary();
  133.     }
  134.    
  135.     public BasicServiceLibrary read(IDAccordo idAccordo,String portType,String azione,Logger log) throws Exception{
  136.        
  137.         BasicServiceLibrary basicServiceLibrary = new BasicServiceLibrary();
  138.         basicServiceLibrary.setIdAccordoServizioParteComune(idAccordo);
  139.         basicServiceLibrary.setPortType(portType);
  140.         basicServiceLibrary.setAzione(azione);
  141.        
  142.         // Ottengo dati Accordo di Servizio
  143.        
  144.         // Leggo libreria servizio
  145.         ConfigurazioneServizio serviceLibrary = null;
  146.         try{
  147.             serviceLibrary = this.getServiceLibrary(idAccordo, portType);
  148.             if(serviceLibrary==null){
  149.                 throw new NotFoundException("Null instance return");
  150.             }
  151.         }catch(NotFoundException notFound){
  152.             // non e' stata configurata una libreria di servizio
  153.             if(this.debug){
  154.                 log.debug("NON e' stata configurata una libreria di servizio ["+portType+"] dell'accordo ["+idAccordo.toString()+"]");
  155.             }
  156.             return null;
  157.         }
  158.         basicServiceLibrary.setServiceLibrary(serviceLibrary);

  159.            
  160.         // ** Verifico se esiste una azione conforme a quella arrivata.**
  161.         ConfigurazioneServizioAzione serviceActionLibrary = null;
  162.         if(azione!=null){
  163.             try{
  164.                 serviceActionLibrary = getServiceActionLibrary(serviceLibrary, azione);
  165.                 if(serviceActionLibrary==null){
  166.                     throw new NotFoundException("Null instance return");
  167.                 }
  168.             }catch(NotFoundException notFound){
  169.                 // non e' stata configurata una libreria di servizio per l'azione specifica
  170.                 if(this.debug){
  171.                     log.debug("Non risulta configurata configurata l'azione specifica ["+azione+"] per la libreria di servizio ["+portType+"] dell'accordo ["+idAccordo.toString()+"]",notFound);
  172.                 }
  173.             }
  174.         }
  175.         basicServiceLibrary.setServiceActionLibrary(serviceActionLibrary);
  176.        
  177.         // ** Recupero informazioni per azione '*'
  178.         ConfigurazioneServizioAzione serviceActionAllLibrary = null;
  179.         try{
  180.             serviceActionAllLibrary = getServiceActionLibrary(serviceLibrary, "*");
  181.             if(serviceActionAllLibrary==null){
  182.                 throw new NotFoundException("Null instance return");
  183.             }
  184.         }catch(NotFoundException notFound){
  185.             // non e' stata configurata una libreria di servizio per l'azione * ????
  186.             String errorMsg = "Non risulta configurata configurata l'azione specifica ["+"*"+"] per la libreria di servizio ["+portType+"] dell'accordo ["+idAccordo.toString()+"]";
  187.             log.error(errorMsg,notFound);
  188.             throw new NotFoundException(errorMsg,notFound);
  189.         }
  190.         basicServiceLibrary.setServiceActionAllLibrary(serviceActionAllLibrary);
  191.        
  192.         return basicServiceLibrary;
  193.     }
  194.    
  195.     private org.openspcoop2.core.commons.search.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio) throws DAOFactoryException, ServiceException, NotImplementedException, NotFoundException, MultipleResultException {
  196.        
  197.         boolean autoCommit = true;
  198.        
  199.         org.openspcoop2.core.commons.search.dao.IServiceManager serviceManager = this.serviceManagerUtils;
  200.         if(serviceManager==null){
  201.             serviceManager =
  202.                     (org.openspcoop2.core.commons.search.dao.IServiceManager) this.daoFactory.getServiceManager(
  203.                             org.openspcoop2.core.commons.search.utils.ProjectInfo.getInstance(),
  204.                             this.connection, autoCommit,
  205.                             this.daoFactoryServiceManagerPropertiesUtils, this.daoFactoryLogger);
  206.             if(serviceManager instanceof org.openspcoop2.core.commons.search.dao.jdbc.JDBCServiceManager)
  207.                 ((org.openspcoop2.core.commons.search.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
  208.         }
  209.        
  210.         IAccordoServizioParteSpecificaServiceSearch search = serviceManager.getAccordoServizioParteSpecificaServiceSearch();
  211.        
  212.         IdAccordoServizioParteSpecifica idAS = new IdAccordoServizioParteSpecifica();
  213.         IdSoggetto idErogatore = new IdSoggetto();
  214.         idErogatore.setTipo(idServizio.getSoggettoErogatore().getTipo());
  215.         idErogatore.setNome(idServizio.getSoggettoErogatore().getNome());
  216.         idAS.setIdErogatore(idErogatore);
  217.         idAS.setTipo(idServizio.getTipo());
  218.         idAS.setNome(idServizio.getNome());
  219.         idAS.setVersione(idServizio.getVersione());
  220.        
  221.         return search.get(idAS);
  222.        
  223.     }
  224.    
  225.     private boolean _existsAlmostOneBasicServiceLibrary() throws DAOFactoryException, ServiceException, NotImplementedException {
  226.        
  227.         boolean autoCommit = true;
  228.        
  229.         org.openspcoop2.core.plugins.dao.IServiceManager serviceManager = this.serviceManagerPluginsBase;
  230.         if(serviceManager==null){
  231.             serviceManager = (org.openspcoop2.core.plugins.dao.IServiceManager) this.daoFactory.getServiceManager(
  232.                     org.openspcoop2.core.plugins.utils.ProjectInfo.getInstance(),
  233.                     this.connection, autoCommit,
  234.                         this.daoFactoryServiceManagerPropertiesPlugins, this.daoFactoryLogger);
  235.             if(serviceManager instanceof org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)
  236.                 ((org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
  237.         }
  238.        
  239.         IConfigurazioneServizioServiceSearch search = serviceManager.getConfigurazioneServizioServiceSearch();
  240.         NonNegativeNumber nn = search.count(search.newExpression());
  241.         return nn!=null && nn.longValue()>0;

  242.     }
  243.    
  244.     private ConfigurazioneServizio getServiceLibrary(IDAccordo idAccordo,String portType) throws DAOFactoryException, ServiceException, NotImplementedException, NotFoundException, MultipleResultException {
  245.        
  246.         boolean autoCommit = true;
  247.        
  248.         org.openspcoop2.core.plugins.dao.IServiceManager serviceManager = this.serviceManagerPluginsBase;
  249.         if(serviceManager==null){
  250.             serviceManager = (org.openspcoop2.core.plugins.dao.IServiceManager) this.daoFactory.getServiceManager(
  251.                     org.openspcoop2.core.plugins.utils.ProjectInfo.getInstance(),
  252.                     this.connection, autoCommit,
  253.                         this.daoFactoryServiceManagerPropertiesPlugins, this.daoFactoryLogger);
  254.             if(serviceManager instanceof org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)
  255.                 ((org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
  256.         }
  257.        
  258.         IConfigurazioneServizioServiceSearch search = serviceManager.getConfigurazioneServizioServiceSearch();
  259.        
  260.         IdConfigurazioneServizio idConfigurazioneServizio = new IdConfigurazioneServizio();
  261.         idConfigurazioneServizio.setAccordo(idAccordo.getNome());
  262.         if(idAccordo.getSoggettoReferente()!=null){
  263.             idConfigurazioneServizio.setTipoSoggettoReferente(idAccordo.getSoggettoReferente().getTipo());
  264.             idConfigurazioneServizio.setNomeSoggettoReferente(idAccordo.getSoggettoReferente().getNome());
  265.         }
  266.         idConfigurazioneServizio.setServizio(portType);
  267.         if(idAccordo.getVersione()!=null){
  268.             idConfigurazioneServizio.setVersione(idAccordo.getVersione());
  269.         }
  270.        
  271.         return search.get(idConfigurazioneServizio);
  272.        
  273.     }
  274.    
  275.     private ConfigurazioneServizioAzione getServiceActionLibrary(ConfigurazioneServizio serviceLibrary,String azione) throws DAOFactoryException, ServiceException, NotImplementedException, NotFoundException, MultipleResultException {
  276.        
  277.         boolean autoCommit = true;
  278.        
  279.         org.openspcoop2.core.plugins.dao.IServiceManager serviceManager = this.serviceManagerPluginsBase;
  280.         if(serviceManager==null){
  281.             serviceManager = (org.openspcoop2.core.plugins.dao.IServiceManager) this.daoFactory.getServiceManager(
  282.                     org.openspcoop2.core.plugins.utils.ProjectInfo.getInstance(),
  283.                     this.connection, autoCommit,
  284.                     this.daoFactoryServiceManagerPropertiesPlugins, this.daoFactoryLogger);
  285.             if(serviceManager instanceof org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)
  286.                 ((org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
  287.         }
  288.        
  289.         IConfigurazioneServizioServiceSearch serviceSearch = serviceManager.getConfigurazioneServizioServiceSearch();
  290.         IdConfigurazioneServizio idConfigurazioneServizio = serviceSearch.convertToId(serviceLibrary);
  291.        
  292.         IConfigurazioneServizioAzioneServiceSearch search = serviceManager.getConfigurazioneServizioAzioneServiceSearch();
  293.        
  294.         IdConfigurazioneServizioAzione idConfigurazioneServizioAzione = new IdConfigurazioneServizioAzione();
  295.         idConfigurazioneServizioAzione.setIdConfigurazioneServizio(idConfigurazioneServizio);
  296.         idConfigurazioneServizioAzione.setAzione(azione);
  297.        
  298.         return search.get(idConfigurazioneServizioAzione);
  299.        
  300.     }
  301. }