BasicServiceLibraryReader.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.monitor.engine.config;
- import org.openspcoop2.core.commons.dao.DAOFactory;
- import org.openspcoop2.core.commons.dao.DAOFactoryException;
- import org.openspcoop2.core.plugins.ConfigurazioneServizio;
- import org.openspcoop2.core.plugins.ConfigurazioneServizioAzione;
- import org.openspcoop2.core.plugins.IdConfigurazioneServizio;
- import org.openspcoop2.core.plugins.IdConfigurazioneServizioAzione;
- import org.openspcoop2.core.plugins.dao.IConfigurazioneServizioAzioneServiceSearch;
- import org.openspcoop2.core.plugins.dao.IConfigurazioneServizioServiceSearch;
- import org.openspcoop2.core.commons.search.IdAccordoServizioParteSpecifica;
- import org.openspcoop2.core.commons.search.IdSoggetto;
- import org.openspcoop2.core.commons.search.dao.IAccordoServizioParteSpecificaServiceSearch;
- import java.sql.Connection;
- import org.slf4j.Logger;
- import org.openspcoop2.core.id.IDAccordo;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.generic_project.beans.NonNegativeNumber;
- import org.openspcoop2.generic_project.exception.MultipleResultException;
- import org.openspcoop2.generic_project.exception.NotFoundException;
- import org.openspcoop2.generic_project.exception.NotImplementedException;
- import org.openspcoop2.generic_project.exception.ServiceException;
- import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
- /**
- * BasicServiceLibraryReader
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class BasicServiceLibraryReader {
- private Connection connection;
- private DAOFactory daoFactory = null;
- private ServiceManagerProperties daoFactoryServiceManagerPropertiesPlugins = null;
- private ServiceManagerProperties daoFactoryServiceManagerPropertiesUtils = null;
- private Logger daoFactoryLogger = null;
-
- private org.openspcoop2.core.plugins.dao.IServiceManager serviceManagerPluginsBase;
- private org.openspcoop2.core.commons.search.dao.IServiceManager serviceManagerUtils;
-
- private boolean debug;
-
- public BasicServiceLibraryReader(Connection connection,
- DAOFactory daoFactory,
- ServiceManagerProperties daoFactoryServiceManagerPropertiesPlugins,
- ServiceManagerProperties daoFactoryServiceManagerPropertiesUtils,
- Logger daoFactoryLogger, boolean debug){
- this.connection = connection;
- this.daoFactory = daoFactory;
- this.daoFactoryServiceManagerPropertiesPlugins = daoFactoryServiceManagerPropertiesPlugins;
- this.daoFactoryServiceManagerPropertiesUtils = daoFactoryServiceManagerPropertiesUtils;
- this.daoFactoryLogger = daoFactoryLogger;
- this.debug = debug;
- }
- public BasicServiceLibraryReader(org.openspcoop2.core.plugins.dao.IServiceManager jdbcServiceManagerPluginsBase,
- org.openspcoop2.core.commons.search.dao.IServiceManager jdbcServiceManagerUtils,
- boolean debug){
- this.serviceManagerPluginsBase = jdbcServiceManagerPluginsBase;
- this.serviceManagerUtils = jdbcServiceManagerUtils;
- this.debug = debug;
- }
-
- public BasicServiceLibrary read(IDServizio idServizio,Logger log) throws Exception{
-
- String azione = idServizio.getAzione();
-
- // Ottengo dati Servizio SPCoop
-
- org.openspcoop2.core.commons.search.AccordoServizioParteSpecifica s = null;
- try{
- s = this.getAccordoServizioParteSpecifica(idServizio);
- if(s==null){
- throw new NotFoundException("Null instance return");
- }
- }catch(NotFoundException notFound){
- // non e' stata configurata una parte specifica
- if(this.debug){
- log.debug("Non รจ stata trovata una parte specifica con id ["+idServizio.toString()+"]: "+notFound.getMessage(),notFound);
- }
- return null;
- }
-
-
-
- String portType = null;
- if(s.getPortType()!=null && !"".equals(s.getPortType())){
- portType = s.getPortType();
- }
- else{
- portType = idServizio.getNome();
- }
-
- if(s.getIdAccordoServizioParteComune().getIdSoggetto()==null){
- log.warn("Il servizio indicato ["+idServizio+"] implementa un accordo che non contiene un soggetto referente. Opzione non supportata");
- return null;
- }
-
- IDSoggetto soggettoReferente = new IDSoggetto(s.getIdAccordoServizioParteComune().getIdSoggetto().getTipo(), s.getIdAccordoServizioParteComune().getIdSoggetto().getNome());
- IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromValues(s.getIdAccordoServizioParteComune().getNome(),
- soggettoReferente,
- s.getIdAccordoServizioParteComune().getVersione());
-
- BasicServiceLibrary basicServiceLibrary = this.read(idAccordo, portType, azione, log);
- if(basicServiceLibrary!=null){
- basicServiceLibrary.setIdServizio(idServizio);
- basicServiceLibrary.setAccordoServizioParteSpecifica(s);
- }
-
- return basicServiceLibrary;
- }
- public boolean existsAlmostOneBasicServiceLibrary(Logger log) throws Exception{
- return this._existsAlmostOneBasicServiceLibrary();
- }
-
- public BasicServiceLibrary read(IDAccordo idAccordo,String portType,String azione,Logger log) throws Exception{
-
- BasicServiceLibrary basicServiceLibrary = new BasicServiceLibrary();
- basicServiceLibrary.setIdAccordoServizioParteComune(idAccordo);
- basicServiceLibrary.setPortType(portType);
- basicServiceLibrary.setAzione(azione);
-
- // Ottengo dati Accordo di Servizio
-
- // Leggo libreria servizio
- ConfigurazioneServizio serviceLibrary = null;
- try{
- serviceLibrary = this.getServiceLibrary(idAccordo, portType);
- if(serviceLibrary==null){
- throw new NotFoundException("Null instance return");
- }
- }catch(NotFoundException notFound){
- // non e' stata configurata una libreria di servizio
- if(this.debug){
- log.debug("NON e' stata configurata una libreria di servizio ["+portType+"] dell'accordo ["+idAccordo.toString()+"]");
- }
- return null;
- }
- basicServiceLibrary.setServiceLibrary(serviceLibrary);
-
- // ** Verifico se esiste una azione conforme a quella arrivata.**
- ConfigurazioneServizioAzione serviceActionLibrary = null;
- if(azione!=null){
- try{
- serviceActionLibrary = getServiceActionLibrary(serviceLibrary, azione);
- if(serviceActionLibrary==null){
- throw new NotFoundException("Null instance return");
- }
- }catch(NotFoundException notFound){
- // non e' stata configurata una libreria di servizio per l'azione specifica
- if(this.debug){
- log.debug("Non risulta configurata configurata l'azione specifica ["+azione+"] per la libreria di servizio ["+portType+"] dell'accordo ["+idAccordo.toString()+"]",notFound);
- }
- }
- }
- basicServiceLibrary.setServiceActionLibrary(serviceActionLibrary);
-
- // ** Recupero informazioni per azione '*'
- ConfigurazioneServizioAzione serviceActionAllLibrary = null;
- try{
- serviceActionAllLibrary = getServiceActionLibrary(serviceLibrary, "*");
- if(serviceActionAllLibrary==null){
- throw new NotFoundException("Null instance return");
- }
- }catch(NotFoundException notFound){
- // non e' stata configurata una libreria di servizio per l'azione * ????
- String errorMsg = "Non risulta configurata configurata l'azione specifica ["+"*"+"] per la libreria di servizio ["+portType+"] dell'accordo ["+idAccordo.toString()+"]";
- log.error(errorMsg,notFound);
- throw new NotFoundException(errorMsg,notFound);
- }
- basicServiceLibrary.setServiceActionAllLibrary(serviceActionAllLibrary);
-
- return basicServiceLibrary;
- }
-
- private org.openspcoop2.core.commons.search.AccordoServizioParteSpecifica getAccordoServizioParteSpecifica(IDServizio idServizio) throws DAOFactoryException, ServiceException, NotImplementedException, NotFoundException, MultipleResultException {
-
- boolean autoCommit = true;
-
- org.openspcoop2.core.commons.search.dao.IServiceManager serviceManager = this.serviceManagerUtils;
- if(serviceManager==null){
- serviceManager =
- (org.openspcoop2.core.commons.search.dao.IServiceManager) this.daoFactory.getServiceManager(
- org.openspcoop2.core.commons.search.utils.ProjectInfo.getInstance(),
- this.connection, autoCommit,
- this.daoFactoryServiceManagerPropertiesUtils, this.daoFactoryLogger);
- if(serviceManager instanceof org.openspcoop2.core.commons.search.dao.jdbc.JDBCServiceManager)
- ((org.openspcoop2.core.commons.search.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
- }
-
- IAccordoServizioParteSpecificaServiceSearch search = serviceManager.getAccordoServizioParteSpecificaServiceSearch();
-
- IdAccordoServizioParteSpecifica idAS = new IdAccordoServizioParteSpecifica();
- IdSoggetto idErogatore = new IdSoggetto();
- idErogatore.setTipo(idServizio.getSoggettoErogatore().getTipo());
- idErogatore.setNome(idServizio.getSoggettoErogatore().getNome());
- idAS.setIdErogatore(idErogatore);
- idAS.setTipo(idServizio.getTipo());
- idAS.setNome(idServizio.getNome());
- idAS.setVersione(idServizio.getVersione());
-
- return search.get(idAS);
-
- }
-
- private boolean _existsAlmostOneBasicServiceLibrary() throws DAOFactoryException, ServiceException, NotImplementedException {
-
- boolean autoCommit = true;
-
- org.openspcoop2.core.plugins.dao.IServiceManager serviceManager = this.serviceManagerPluginsBase;
- if(serviceManager==null){
- serviceManager = (org.openspcoop2.core.plugins.dao.IServiceManager) this.daoFactory.getServiceManager(
- org.openspcoop2.core.plugins.utils.ProjectInfo.getInstance(),
- this.connection, autoCommit,
- this.daoFactoryServiceManagerPropertiesPlugins, this.daoFactoryLogger);
- if(serviceManager instanceof org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)
- ((org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
- }
-
- IConfigurazioneServizioServiceSearch search = serviceManager.getConfigurazioneServizioServiceSearch();
- NonNegativeNumber nn = search.count(search.newExpression());
- return nn!=null && nn.longValue()>0;
- }
-
- private ConfigurazioneServizio getServiceLibrary(IDAccordo idAccordo,String portType) throws DAOFactoryException, ServiceException, NotImplementedException, NotFoundException, MultipleResultException {
-
- boolean autoCommit = true;
-
- org.openspcoop2.core.plugins.dao.IServiceManager serviceManager = this.serviceManagerPluginsBase;
- if(serviceManager==null){
- serviceManager = (org.openspcoop2.core.plugins.dao.IServiceManager) this.daoFactory.getServiceManager(
- org.openspcoop2.core.plugins.utils.ProjectInfo.getInstance(),
- this.connection, autoCommit,
- this.daoFactoryServiceManagerPropertiesPlugins, this.daoFactoryLogger);
- if(serviceManager instanceof org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)
- ((org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
- }
-
- IConfigurazioneServizioServiceSearch search = serviceManager.getConfigurazioneServizioServiceSearch();
-
- IdConfigurazioneServizio idConfigurazioneServizio = new IdConfigurazioneServizio();
- idConfigurazioneServizio.setAccordo(idAccordo.getNome());
- if(idAccordo.getSoggettoReferente()!=null){
- idConfigurazioneServizio.setTipoSoggettoReferente(idAccordo.getSoggettoReferente().getTipo());
- idConfigurazioneServizio.setNomeSoggettoReferente(idAccordo.getSoggettoReferente().getNome());
- }
- idConfigurazioneServizio.setServizio(portType);
- if(idAccordo.getVersione()!=null){
- idConfigurazioneServizio.setVersione(idAccordo.getVersione());
- }
-
- return search.get(idConfigurazioneServizio);
-
- }
-
- private ConfigurazioneServizioAzione getServiceActionLibrary(ConfigurazioneServizio serviceLibrary,String azione) throws DAOFactoryException, ServiceException, NotImplementedException, NotFoundException, MultipleResultException {
-
- boolean autoCommit = true;
-
- org.openspcoop2.core.plugins.dao.IServiceManager serviceManager = this.serviceManagerPluginsBase;
- if(serviceManager==null){
- serviceManager = (org.openspcoop2.core.plugins.dao.IServiceManager) this.daoFactory.getServiceManager(
- org.openspcoop2.core.plugins.utils.ProjectInfo.getInstance(),
- this.connection, autoCommit,
- this.daoFactoryServiceManagerPropertiesPlugins, this.daoFactoryLogger);
- if(serviceManager instanceof org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)
- ((org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager)serviceManager).getJdbcProperties().setShowSql(this.debug);
- }
-
- IConfigurazioneServizioServiceSearch serviceSearch = serviceManager.getConfigurazioneServizioServiceSearch();
- IdConfigurazioneServizio idConfigurazioneServizio = serviceSearch.convertToId(serviceLibrary);
-
- IConfigurazioneServizioAzioneServiceSearch search = serviceManager.getConfigurazioneServizioAzioneServiceSearch();
-
- IdConfigurazioneServizioAzione idConfigurazioneServizioAzione = new IdConfigurazioneServizioAzione();
- idConfigurazioneServizioAzione.setIdConfigurazioneServizio(idConfigurazioneServizio);
- idConfigurazioneServizioAzione.setAzione(azione);
-
- return search.get(idConfigurazioneServizioAzione);
-
- }
- }