DriverRegistroServiziDB_accordiDriver.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 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.core.registry.driver.db;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.commons.DBUtils;
import org.openspcoop2.core.commons.Filtri;
import org.openspcoop2.core.commons.ISearch;
import org.openspcoop2.core.commons.Liste;
import org.openspcoop2.core.commons.SearchUtils;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.core.constants.ProprietariProtocolProperty;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoCooperazione;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.IdSoggetto;
import org.openspcoop2.core.registry.Operation;
import org.openspcoop2.core.registry.PortType;
import org.openspcoop2.core.registry.ProtocolProperty;
import org.openspcoop2.core.registry.Soggetto;
import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
import org.openspcoop2.core.registry.constants.ProfiloCollaborazione;
import org.openspcoop2.core.registry.constants.ProprietariDocumento;
import org.openspcoop2.core.registry.constants.RuoliDocumento;
import org.openspcoop2.core.registry.constants.ServiceBinding;
import org.openspcoop2.core.registry.constants.StatiAccordo;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
import org.openspcoop2.utils.jdbc.JDBCUtilities;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.SQLObjectFactory;
/**
* DriverRegistroServiziDB_accordiDriver
*
*
* @author Sandra Giangrandi (sandra@link.it)
* @author Stefano Corallo (corallo@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class DriverRegistroServiziDB_accordiDriver {
private DriverRegistroServiziDB driver = null;
private DriverRegistroServiziDB_accordiSoapDriver driverSoap = null;
private DriverRegistroServiziDB_accordiRestDriver driverRest = null;
private DriverRegistroServiziDB_accordiGruppiDriver driverGruppi = null;
private DriverRegistroServiziDB_accordiServiziCompostiDriver driverAccordiServiziComposti = null;
protected DriverRegistroServiziDB_accordiDriver(DriverRegistroServiziDB driver) {
this.driver = driver;
this.driverSoap = new DriverRegistroServiziDB_accordiSoapDriver(driver);
this.driverRest = new DriverRegistroServiziDB_accordiRestDriver(driver);
this.driverGruppi = new DriverRegistroServiziDB_accordiGruppiDriver(driver);
this.driverAccordiServiziComposti = new DriverRegistroServiziDB_accordiServiziCompostiDriver(driver);
}
protected int getAccordoServizioParteComuneNextVersion(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
// conrollo consistenza
if (idAccordo == null)
throw new DriverRegistroServiziException("[getAccordoServizioParteComuneNextVersion] Parametro idAccordo is null");
if (idAccordo.getNome() == null)
throw new DriverRegistroServiziException("[getAccordoServizioParteComuneNextVersion] Parametro idAccordo.getNome is null");
if (idAccordo.getNome().trim().equals(""))
throw new DriverRegistroServiziException("[getAccordoServizioParteComuneNextVersion] Parametro idAccordo.getNome non e' definito");
this.driver.logDebug("richiesto getAccordoServizioParteComuneNextVersion: " + idAccordo.toString());
int nextVersion = -1;
Connection con = null;
try {
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
// prendo la connessione dal pool
if (this.driver.atomica)
con = this.driver.getConnectionFromDatasource("getAccordoServizioParteComuneNextVersion(idAccordo)");
else
con = this.driver.globalConnection;
nextVersion = DBUtils.getAccordoServizioParteComuneNextVersion(idAccordo, con, this.driver.tipoDB);
}catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteComuneNextVersion] Exception :" + se.getMessage(),se);
} finally {
this.driver.closeConnection(con);
}
return nextVersion;
}
protected org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
return getAccordoServizioParteComune(idAccordo,false,false);
}
protected org.openspcoop2.core.registry.AccordoServizioParteComune getAccordoServizioParteComune(IDAccordo idAccordo,boolean readContenutoAllegati,boolean readDatiRegistro) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
// conrollo consistenza
if (idAccordo == null)
throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro idAccordo is null");
if (idAccordo.getNome() == null)
throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro idAccordo.getNome is null");
if (idAccordo.getNome().trim().equals(""))
throw new DriverRegistroServiziException("[getAccordoServizioParteComune] Parametro idAccordo.getNome non e' definito");
this.driver.logDebug("richiesto getAccordoServizioParteComune: " + idAccordo.toString());
org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio = null;
Connection con = null;
PreparedStatement stm = null;
ResultSet rs = null;
try {
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
// prendo la connessione dal pool
if (this.driver.atomica)
con = this.driver.getConnectionFromDatasource("getAccordoServizioParteComune(idAccordo)");
else
con = this.driver.globalConnection;
long idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, this.driver.tipoDB);
if(idAccordoLong<=0){
throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoServizioParteComune] Accordo non trovato (id:"+idAccordo+")");
}
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addSelectField("*");
sqlQueryObject.addWhereCondition("id = ?");
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stm = con.prepareStatement(sqlQuery);
stm.setLong(1, idAccordoLong);
this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
rs = stm.executeQuery();
if (rs.next()) {
accordoServizio = new org.openspcoop2.core.registry.AccordoServizioParteComune();
accordoServizio.setId(rs.getLong("id"));
String tmp = rs.getString("nome");
// se tmp==null oppure tmp=="" then setNome(null) else
// setNome(tmp)
accordoServizio.setNome(((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("descrizione");
accordoServizio.setDescrizione(((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("service_binding");
accordoServizio.setServiceBinding(DriverRegistroServiziDB_LIB.getEnumServiceBinding((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("message_type");
accordoServizio.setMessageType(DriverRegistroServiziDB_LIB.getEnumMessageType((tmp == null || tmp.equals("")) ? null : tmp));
// controllare i vari casi di profcoll (one-way....)
tmp = rs.getString("profilo_collaborazione");
accordoServizio.setProfiloCollaborazione(DriverRegistroServiziDB_LIB.getEnumProfiloCollaborazione((tmp == null || tmp.equals("")) ? null : tmp));
if(accordoServizio.getProfiloCollaborazione()==null){
// puo' essere null se e' stato ridefinito nei port type e nelle operation
// inserisco comunque un default (usato anche nelle interfacce)
accordoServizio.setProfiloCollaborazione(ProfiloCollaborazione.ONEWAY);
}
// if (tmp == null || tmp.equals(""))
// accordoServizio.setProfiloCollaborazione(null);
// if (tmp.equals("oneway"))
// accordoServizio
// .setProfiloCollaborazione(CostantiRegistroServizi.ONEWAY);
// if (tmp.equals("sincrono"))
// accordoServizio
// .setProfiloCollaborazione(CostantiRegistroServizi.SINCRONO);
// if (tmp.equals("asincrono-simmetrico"))
// accordoServizio
// .setProfiloCollaborazione(CostantiRegistroServizi.ASINCRONO_SIMMETRICO);
// if (tmp.equals("asincrono-asimmetrico"))
// accordoServizio
// .setProfiloCollaborazione(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO);
tmp = rs.getString("formato_specifica");
accordoServizio.setFormatoSpecifica(DriverRegistroServiziDB_LIB.getEnumFormatoSpecifica((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("wsdl_definitorio");
accordoServizio.setByteWsdlDefinitorio(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
tmp = rs.getString("wsdl_concettuale");
accordoServizio.setByteWsdlConcettuale(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
tmp = rs.getString("wsdl_logico_erogatore");
accordoServizio.setByteWsdlLogicoErogatore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
tmp = rs.getString("wsdl_logico_fruitore");
accordoServizio.setByteWsdlLogicoFruitore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
tmp = rs.getString("spec_conv_concettuale");
accordoServizio.setByteSpecificaConversazioneConcettuale(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
tmp = rs.getString("spec_conv_erogatore");
accordoServizio.setByteSpecificaConversazioneErogatore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
tmp = rs.getString("spec_conv_fruitore");
accordoServizio.setByteSpecificaConversazioneFruitore(((tmp == null || tmp.trim().equals("")) ? null : tmp.getBytes()));
accordoServizio.setUtilizzoSenzaAzione(rs.getInt("utilizzo_senza_azione") == CostantiDB.TRUE ? true : false);
tmp = rs.getString("filtro_duplicati");
accordoServizio.setFiltroDuplicati(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("conferma_ricezione");
accordoServizio.setConfermaRicezione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("identificativo_collaborazione");
accordoServizio.setIdCollaborazione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("id_riferimento_richiesta");
accordoServizio.setIdRiferimentoRichiesta(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("consegna_in_ordine");
accordoServizio.setConsegnaInOrdine(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("scadenza");
accordoServizio.setScadenza(((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("superuser");
accordoServizio.setSuperUser(((tmp == null || tmp.equals("")) ? null : tmp));
if(rs.getInt("privato")==1)
accordoServizio.setPrivato(true);
else
accordoServizio.setPrivato(false);
// Ora Registrazione
if(rs.getTimestamp("ora_registrazione")!=null){
accordoServizio.setOraRegistrazione(new Date(rs.getTimestamp("ora_registrazione").getTime()));
}
// Soggetto referente
long idReferente = rs.getLong("id_referente");
if(idReferente>0) {
IDSoggetto soggettoReferente = null;
try {
soggettoReferente = this.driver.getIdSoggetto(idReferente,con);
if(soggettoReferente==null){
throw new DriverRegistroServiziNotFound ("non esiste");
}
}catch(DriverRegistroServiziNotFound notFound) {
throw new Exception ("Soggetto referente ["+idReferente+"] dell'accordo non esiste");
}
IdSoggetto assr = new IdSoggetto();
assr.setTipo(soggettoReferente.getTipo());
assr.setNome(soggettoReferente.getNome());
assr.setId(idReferente);
accordoServizio.setSoggettoReferente(assr);
}
//Versione
if(rs.getString("versione")!=null && !"".equals(rs.getString("versione")))
accordoServizio.setVersione(rs.getInt("versione"));
// Stato
tmp = rs.getString("stato");
accordoServizio.setStatoPackage(((tmp == null || tmp.equals("")) ? null : tmp));
// Canali
String canale = rs.getString("canale");
accordoServizio.setCanale(canale);
// Proprieta Oggetto
accordoServizio.setProprietaOggetto(DriverRegistroServiziDB_utilsDriver.readProprietaOggetto(rs,false));
rs.close();
stm.close();
// Aggiungo azione
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_AZIONI);
sqlQueryObject.addSelectField("*");
sqlQueryObject.addWhereCondition("id_accordo = ?");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addOrderBy("nome");
sqlQueryObject.setSortType(true);
sqlQuery = sqlQueryObject.createSQLQuery();
stm = con.prepareStatement(sqlQuery);
stm.setLong(1, idAccordoLong);
this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
rs = stm.executeQuery();
org.openspcoop2.core.registry.Azione azione = null;
while (rs.next()) {
azione = new org.openspcoop2.core.registry.Azione();
tmp = rs.getString("conferma_ricezione");
azione.setConfermaRicezione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("consegna_in_ordine");
azione.setConsegnaInOrdine(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("filtro_duplicati");
azione.setFiltroDuplicati(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("identificativo_collaborazione");
azione.setIdCollaborazione(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("id_riferimento_richiesta");
azione.setIdRiferimentoRichiesta(DriverRegistroServiziDB_LIB.getEnumStatoFunzionalita(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("nome");
azione.setNome(((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("scadenza");
azione.setScadenza(((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("profilo_collaborazione");
azione.setProfiloCollaborazione(DriverRegistroServiziDB_LIB.getEnumProfiloCollaborazione(((tmp == null || tmp.equals("")) ? null : tmp)));
tmp = rs.getString("correlata");
azione.setCorrelata(((tmp == null || tmp.equals("")) ? null : tmp));
tmp = rs.getString("profilo_azione");
if (tmp == null || tmp.equals(""))
azione.setProfAzione(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT);
else
azione.setProfAzione(tmp);
long idAzione = rs.getLong("id");
azione.setId(idAzione);
// Protocol Properties
try{
List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(idAzione, ProprietariProtocolProperty.AZIONE_ACCORDO, con,
this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
if(listPP!=null && !listPP.isEmpty()){
for (ProtocolProperty protocolProperty : listPP) {
azione.addProtocolProperty(protocolProperty);
}
}
}catch(DriverRegistroServiziNotFound dNotFound){
// ignore
}
accordoServizio.addAzione(azione);
}
rs.close();
stm.close();
// read port type
this.driverSoap.readPortTypes(accordoServizio,con);
// read resources
this.driverRest.readResources(accordoServizio,con,readDatiRegistro);
// read gruppi
this.driverGruppi.readAccordiGruppi(accordoServizio,con);
// read AccordoServizioComposto
this.driverAccordiServiziComposti.readAccordoServizioComposto(accordoServizio , con);
// read Documenti generici: i bytes non vengono ritornati se readContenutoAllegati==false, utilizzare il metodo apposta per averli:
// DriverRegistroServiziDB_LIB.getDocumento(id, readBytes, connection);
try{
List<?> allegati = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.allegato.toString(), idAccordoLong,
ProprietariDocumento.accordoServizio,readContenutoAllegati, con, this.driver.tipoDB);
for(int i=0; i<allegati.size();i++){
accordoServizio.addAllegato((Documento) allegati.get(i));
}
}catch(DriverRegistroServiziNotFound dNotFound){}
try{
List<?> specificheSemiformali = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaSemiformale.toString(),
idAccordoLong, ProprietariDocumento.accordoServizio,readContenutoAllegati, con, this.driver.tipoDB);
for(int i=0; i<specificheSemiformali.size();i++){
accordoServizio.addSpecificaSemiformale((Documento) specificheSemiformali.get(i));
}
}catch(DriverRegistroServiziNotFound dNotFound){}
if(accordoServizio.getServizioComposto()!=null){
// read Documenti generici: i bytes non vengono ritornati se readContenutoAllegati==false, utilizzare il metodo apposta per averli:
/** DriverRegistroServiziDB_LIB.getDocumento(id, readBytes, connection);*/
try{
List<?> specificheCoordinamento = DriverRegistroServiziDB_documentiLIB.getListaDocumenti(RuoliDocumento.specificaCoordinamento.toString(),
idAccordoLong, ProprietariDocumento.accordoServizio,readContenutoAllegati, con, this.driver.tipoDB);
for(int i=0; i<specificheCoordinamento.size();i++){
accordoServizio.getServizioComposto().addSpecificaCoordinamento((Documento) specificheCoordinamento.get(i));
}
}catch(DriverRegistroServiziNotFound dNotFound){}
}
// Protocol Properties
try{
List<ProtocolProperty> listPP = DriverRegistroServiziDB_LIB.getListaProtocolProperty(idAccordoLong, ProprietariProtocolProperty.ACCORDO_SERVIZIO_PARTE_COMUNE, con,
this.driver.tipoDB, this.driver.getDriverUnwrapBYOK());
if(listPP!=null && !listPP.isEmpty()){
for (ProtocolProperty protocolProperty : listPP) {
accordoServizio.addProtocolProperty(protocolProperty);
}
}
}catch(DriverRegistroServiziNotFound dNotFound){
// ignore
}
} else {
throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoServizioParteComune] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, idAccordoLong));
}
/** if(accordoServizio!=null){
// // nomiAzione setting
// accordoServizio.setNomiAzione(accordoServizio.readNomiAzione());
// }*/
return accordoServizio;
}catch (DriverRegistroServiziNotFound e) {
throw e;
}catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizioParteComune] Exception :" + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stm);
this.driver.closeConnection(con);
}
}
protected AccordoServizioParteComune getAccordoServizioParteComune(long id) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
return getAccordoServizioParteComune(id,false,false,null);
}
protected AccordoServizioParteComune getAccordoServizioParteComune(long id, boolean readContenutoAllegati,boolean readDatiRegistro) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
return getAccordoServizioParteComune(id,readContenutoAllegati,readDatiRegistro,null);
}
protected AccordoServizioParteComune getAccordoServizioParteComune(long id,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
return getAccordoServizioParteComune(id,false,false,conParam);
}
protected AccordoServizioParteComune getAccordoServizioParteComune(long id, boolean readContenutoAllegati,boolean readDatiRegistro,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
this.driver.logDebug("richiesto getAccordoServizio: " + id);
// conrollo consistenza
if (id <= 0)
return null;
Connection con = null;
PreparedStatement stm = null;
ResultSet rs = null;
IDAccordo idAccordo = null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addSelectField("*");
sqlQueryObject.addWhereCondition("id = ?");
String sqlQuery = sqlQueryObject.createSQLQuery();
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
// prendo la connessione dal pool
if(conParam!=null){
con = conParam;
}
else if (this.driver.atomica)
con = this.driver.getConnectionFromDatasource("getAccordoServizioParteComune(longId)");
else
con = this.driver.globalConnection;
stm = con.prepareStatement(sqlQuery);
stm.setLong(1, id);
this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
rs = stm.executeQuery();
if (rs.next()) {
IDSoggetto referente = null;
long idReferente = rs.getLong("id_referente");
if(idReferente>0){
try {
referente = this.driver.getIdSoggetto(idReferente,con);
if(referente==null){
throw new DriverRegistroServiziNotFound ("non esiste");
}
}catch(DriverRegistroServiziNotFound notFound) {
throw new Exception ("Soggetto referente ["+idReferente+"] dell'accordo non esiste");
}
}
idAccordo = this.driver.idAccordoFactory.getIDAccordoFromValues(rs.getString("nome"),referente,rs.getInt("versione"));
} else {
rs.close();
stm.close();
throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getAccordoServizio] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
}
rs.close();
stm.close();
} catch (SQLException se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizio] SQLException :" + se.getMessage(),se);
}catch (DriverRegistroServiziNotFound e) {
throw e;
}catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getAccordoServizio] Exception :" + se.getMessage(),se);
} finally {
//Chiudo statement and resultset
JDBCUtilities.closeResources(rs, stm);
this.driver.closeConnection(conParam, con);
}
return this.getAccordoServizioParteComune(idAccordo, readContenutoAllegati, readDatiRegistro);
}
protected List<AccordoServizioParteComune> accordiCompatibiliList(ISearch ricerca) throws DriverRegistroServiziException {
String nomeMetodo = "accordiCompatibiliList";
int idLista = Liste.ACCORDI;
int offset;
int limit;
String search;
String queryString;
limit = ricerca.getPageSize(idLista);
offset = ricerca.getIndexIniziale(idLista);
search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
ricerca.getSearchString(idLista);
this.driver.logDebug("search : " + search);
Connection con = null;
PreparedStatement stmt = null;
ResultSet risultato = null;
ArrayList<AccordoServizioParteComune> lista = new ArrayList<AccordoServizioParteComune>();
if (this.driver.atomica) {
try {
con = this.driver.getConnectionFromDatasource("accordiCompatibiliList");
} catch (Exception e) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);
}
} else
con = this.driver.globalConnection;
this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);
try {
ISQLQueryObject sqlquery = DriverRegistroServiziDB_accordiLIB.getSQLRicercaAccordiValidi();
sqlquery.setANDLogicOperator(true);
ISQLQueryObject sqlQueryObjectSoggetti = null;
if (!search.equals("")) {
sqlQueryObjectSoggetti = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObjectSoggetti.addFromTable(CostantiDB.SOGGETTI);
sqlQueryObjectSoggetti.addSelectField(CostantiDB.SOGGETTI, "nome_soggetto");
sqlQueryObjectSoggetti.addWhereCondition(true,
sqlQueryObjectSoggetti.getWhereLikeCondition("nome_soggetto", search, true, true),
CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
}
if (!search.equals("")) {
//query con search
sqlquery.addSelectCountField("*", "cont");
sqlquery.addWhereCondition(false,
sqlquery.getWhereLikeCondition("nome", search, true, true),
sqlquery.getWhereLikeCondition("versione", search, true, true),
sqlquery.getWhereExistsCondition(false, sqlQueryObjectSoggetti));
queryString = sqlquery.createSQLQuery();
} else {
sqlquery.addSelectCountField("*", "cont");
queryString = sqlquery.createSQLQuery();
}
stmt = con.prepareStatement(queryString);
risultato = stmt.executeQuery();
if (risultato.next())
ricerca.setNumEntries(idLista,risultato.getInt(1));
risultato.close();
stmt.close();
//resetto query
sqlquery = DriverRegistroServiziDB_accordiLIB.getSQLRicercaAccordiValidi();
sqlquery.setANDLogicOperator(true);
// ricavo le entries
if (limit == 0) // con limit
limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
if (!search.equals("")) { // con search
sqlquery.addSelectField("id");
sqlquery.addSelectField("nome");
sqlquery.addSelectField("descrizione");
sqlquery.addSelectField("id_referente");
sqlquery.addSelectField("versione");
sqlquery.addSelectField("stato");
sqlquery.addWhereCondition(false,
sqlquery.getWhereLikeCondition("nome", search, true, true),
sqlquery.getWhereLikeCondition("versione", search, true, true),
sqlquery.getWhereExistsCondition(false, sqlQueryObjectSoggetti));
sqlquery.addOrderBy("nome");
sqlquery.addOrderBy("versione");
sqlquery.addOrderBy("id_referente");
sqlquery.setSortType(true);
sqlquery.setLimit(limit);
sqlquery.setOffset(offset);
queryString = sqlquery.createSQLQuery();
} else {
// senza search
sqlquery.addSelectField("id");
sqlquery.addSelectField("nome");
sqlquery.addSelectField("descrizione");
sqlquery.addSelectField("id_referente");
sqlquery.addSelectField("versione");
sqlquery.addSelectField("stato");
sqlquery.addOrderBy("nome");
sqlquery.addOrderBy("versione");
sqlquery.addOrderBy("id_referente");
sqlquery.setSortType(true);
sqlquery.setLimit(limit);
sqlquery.setOffset(offset);
queryString = sqlquery.createSQLQuery();
}
this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(queryString));
stmt = con.prepareStatement(queryString);
risultato = stmt.executeQuery();
AccordoServizioParteComune accordo = null;
while (risultato.next()) {
accordo = new AccordoServizioParteComune();
accordo.setId(risultato.getLong("id"));
accordo.setNome(risultato.getString("nome"));
accordo.setDescrizione(risultato.getString("descrizione"));
accordo.setStatoPackage(risultato.getString("stato"));
accordo.setVersione(risultato.getInt("versione"));
// Soggetto referente
long id_referente = risultato.getLong("id_referente");
IDSoggetto soggettoReferente = null;
if(id_referente>0){
try {
soggettoReferente = this.driver.getIdSoggetto(id_referente,con);
if(soggettoReferente==null){
throw new DriverRegistroServiziNotFound ("non esiste");
}
}catch(DriverRegistroServiziNotFound notFound) {
throw new Exception ("Soggetto referente ["+id_referente+"] dell'accordo non esiste");
}
IdSoggetto assr = new IdSoggetto();
assr.setTipo(soggettoReferente.getTipo());
assr.setNome(soggettoReferente.getNome());
accordo.setSoggettoReferente(assr);
}
lista.add(accordo);
this.driverAccordiServiziComposti.readAccordoServizioComposto(accordo, con);
}
}catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
} finally {
//Chiudo statement and resultset
JDBCUtilities.closeResources(risultato, stmt);
this.driver.closeConnection(con);
}
return lista;
}
protected void createAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException {
Connection connection = null;
boolean error = false;
if (this.driver.atomica) {
try {
connection = this.driver.getConnectionFromDatasource("createAccordoServizioParteComune");
connection.setAutoCommit(false);
} catch (Exception e) {
throw new DriverRegistroServiziException("DriverRegistroServiziDB::createAccordoServizioParteComune] Exception accedendo al datasource :" + e.getMessage(),e);
}
} else
connection = this.driver.globalConnection;
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
try {
DriverRegistroServiziDB_accordiLIB.createAccordoServizioParteComune(accordoServizio, connection, this.driver.tabellaSoggetti, this.driver.log,
this.driver.idAccordoFactory, this.driver.getDriverWrapBYOK());
} catch (DriverRegistroServiziException e) {
error = true;
throw e;
}catch (Exception e) {
error = true;
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::createAccordoServizioParteComune] Exception [" + e.getMessage() + "].",e);
}finally {
this.driver.closeConnection(error, connection);
}
}
protected void updateAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException {
Connection connection = null;
boolean error = false;
if (this.driver.atomica) {
try {
connection = this.driver.getConnectionFromDatasource("updateAccordoServizioParteComune");
connection.setAutoCommit(false);
} catch (Exception e) {
throw new DriverRegistroServiziException("DriverRegistroServiziDB::createAccordoServizio] Exception accedendo al datasource :" + e.getMessage(),e);
}
} else
connection = this.driver.globalConnection;
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
try {
DriverRegistroServiziDB_accordiLIB.updateAccordoServizioParteComune(accordoServizio, connection, this.driver.tabellaSoggetti, this.driver.log,
this.driver.idAccordoFactory, this.driver.getDriverWrapBYOK());
}catch (DriverRegistroServiziException se) {
this.driver.log.error(se.getMessage(),se);
error = true;
throw se;
}
catch (Exception se) {
this.driver.log.error(se.getMessage(),se);
error = true;
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::updateAccordoServizio] Exception [" + se.getMessage() + "].",se);
}finally {
this.driver.closeConnection(error, connection);
}
}
protected void deleteAccordoServizioParteComune(org.openspcoop2.core.registry.AccordoServizioParteComune accordoServizio) throws DriverRegistroServiziException {
Connection connection = null;
boolean error = false;
if (this.driver.atomica) {
try {
connection = this.driver.getConnectionFromDatasource("deleteAccordoServizioParteComune");
connection.setAutoCommit(false);
} catch (Exception e) {
throw new DriverRegistroServiziException("DriverRegistroServiziDB::deleteAccordoServizioParteComune] Exception accedendo al datasource :" + e.getMessage(),e);
}
} else
connection = this.driver.globalConnection;
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
try {
DriverRegistroServiziDB_accordiLIB.deleteAccordoServizioParteComune(accordoServizio, connection, this.driver.tabellaSoggetti, this.driver.log,
this.driver.idAccordoFactory, this.driver.getDriverWrapBYOK());
} catch (DriverRegistroServiziException se) {
error = true;
throw se;
} catch (Exception se) {
error = true;
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::deleteAccordoServizio] Exception [" + se.getMessage() + "].",se);
}finally {
this.driver.closeConnection(error, connection);
}
}
protected List<IDAccordoDB> idAccordiList(String superuser, ISearch ricerca,
boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
return idAccordiListEngine(superuser,ricerca,false,false,
soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
}
protected List<IDAccordoDB> idAccordiServizioParteComuneList(String superuser, ISearch ricerca,
boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
return idAccordiListEngine(superuser,ricerca,false,true,
soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
}
protected List<IDAccordoDB> idAccordiServizioCompostiList(String superuser, ISearch ricerca,
boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
return idAccordiListEngine(superuser,ricerca,true,false,
soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
}
private List<IDAccordoDB> idAccordiListEngine(String superuser, ISearch ricerca,boolean excludeASParteComune,boolean excludeASComposti,
boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException {
String nomeMetodo = "idAccordiList";
int idLista = Liste.ACCORDI;
int offset;
int limit;
String search;
String queryString;
limit = ricerca.getPageSize(idLista);
offset = ricerca.getIndexIniziale(idLista);
search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
String filterProtocollo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLO);
String filterProtocolli = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_PROTOCOLLI);
List<String> tipoSoggettiProtocollo = null;
try {
tipoSoggettiProtocollo = Filtri.convertToTipiSoggetti(filterProtocollo, filterProtocolli);
}catch(Exception e) {
throw new DriverRegistroServiziException(e.getMessage(),e);
}
boolean searchByTipoSoggetto = (tipoSoggettiProtocollo!=null && tipoSoggettiProtocollo.size()>0);
String filterTipoAPI = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_SERVICE_BINDING);
String filterStatoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_STATO_ACCORDO);
String filterGruppo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_GRUPPO);
String filterCanale = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_CANALE);
boolean searchCanale = false;
boolean canaleDefault = false;
if(filterCanale!=null && !filterCanale.equals("")) {
searchCanale = true;
if(filterCanale.startsWith(Filtri.PREFIX_VALUE_CANALE_DEFAULT)) {
filterCanale = filterCanale.substring(Filtri.PREFIX_VALUE_CANALE_DEFAULT.length());
canaleDefault = true;
}
}
this.driver.logDebug("search : " + search);
this.driver.logDebug("filterProtocollo : " + filterProtocollo);
this.driver.logDebug("filterProtocolli : " + filterProtocolli);
this.driver.logDebug("filterTipoAPI : " + filterTipoAPI);
this.driver.logDebug("filterStatoAccordo : " + filterStatoAccordo);
this.driver.logDebug("filterGruppo : " + filterGruppo);
this.driver.logDebug("filterCanale : " + filterCanale);
Connection con = null;
PreparedStatement stmt = null;
ResultSet risultato = null;
ArrayList<IDAccordoDB> lista = new ArrayList<IDAccordoDB>();
if (this.driver.atomica) {
try {
con = this.driver.getConnectionFromDatasource("accordiListEngine");
} catch (Exception e) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);
}
} else
con = this.driver.globalConnection;
this.driver.logDebug("operazione this.driver.atomica = " + this.driver.atomica);
try {
if(excludeASComposti && excludeASParteComune){
throw new Exception("Non e' possibile invocare il metodo accordiListEngine con entrambi i parametri excludeASParteComune,excludeASComposti impostati al valore true");
}
ISQLQueryObject sqlQueryObjectExclude = null;
if(excludeASComposti || excludeASParteComune){
sqlQueryObjectExclude = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObjectExclude.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObjectExclude.addSelectField(CostantiDB.ACCORDI_SERVIZI_COMPOSTO, "id_accordo");
sqlQueryObjectExclude.addWhereCondition(CostantiDB.ACCORDI_SERVIZI_COMPOSTO+".id_accordo="+CostantiDB.ACCORDI+".id");
}
ISQLQueryObject sqlQueryObjectExistsResource = null;
if(soloAccordiConsistentiRest) {
sqlQueryObjectExistsResource = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObjectExistsResource.addFromTable(CostantiDB.API_RESOURCES);
sqlQueryObjectExistsResource.addSelectField(CostantiDB.API_RESOURCES, "id_accordo");
sqlQueryObjectExistsResource.addWhereCondition(CostantiDB.API_RESOURCES+".id_accordo="+CostantiDB.ACCORDI+".id");
sqlQueryObjectExistsResource.setANDLogicOperator(true);
}
ISQLQueryObject sqlQueryObjectExistsPortTypeConAzioni = null;
if(soloAccordiConsistentiSoap){
ISQLQueryObject sqlQueryObjectExistsPortTypeCheckAzioni = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObjectExistsPortTypeCheckAzioni.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
sqlQueryObjectExistsPortTypeCheckAzioni.addSelectField(CostantiDB.PORT_TYPE_AZIONI, "id_port_type");
sqlQueryObjectExistsPortTypeCheckAzioni.addWhereCondition(CostantiDB.PORT_TYPE_AZIONI+".id_port_type="+CostantiDB.PORT_TYPE+".id");
sqlQueryObjectExistsPortTypeCheckAzioni.setANDLogicOperator(true);
sqlQueryObjectExistsPortTypeConAzioni = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObjectExistsPortTypeConAzioni.addFromTable(CostantiDB.PORT_TYPE);
sqlQueryObjectExistsPortTypeConAzioni.addSelectField(CostantiDB.PORT_TYPE, "id_accordo");
sqlQueryObjectExistsPortTypeConAzioni.addWhereCondition(CostantiDB.PORT_TYPE+".id_accordo="+CostantiDB.ACCORDI+".id");
sqlQueryObjectExistsPortTypeConAzioni.addWhereExistsCondition(false, sqlQueryObjectExistsPortTypeCheckAzioni);
sqlQueryObjectExistsPortTypeConAzioni.setANDLogicOperator(true);
}
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
sqlQueryObject.addSelectCountField("*", "cont");
if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".superuser = ?");
//query con search
if (!search.equals("")) {
sqlQueryObject.addWhereCondition(false,
sqlQueryObject.getWhereLikeCondition(CostantiDB.ACCORDI+".nome", search, true, true));
//sqlQueryObject.getWhereLikeCondition("versione", search, true, true), // la versione e' troppo, tutte hanno 1 ....
//sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".nome_soggetto", search, true, true)); // fa confusone nei protocolli che non supportano il referente
}
if (searchByTipoSoggetto) {
sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
}
if(excludeASParteComune){
sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExclude);
}
if(excludeASComposti){
sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectExclude);
}
if(filterTipoAPI!=null && !filterTipoAPI.equals("")) {
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".service_binding = ?");
}
if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".stato = ?");
}
if(filterGruppo!=null && !filterGruppo.equals("")) {
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_GRUPPI);
sqlQueryObject.addFromTable(CostantiDB.GRUPPI);
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_accordo="+CostantiDB.ACCORDI+".id");
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_gruppo="+CostantiDB.GRUPPI+".id");
sqlQueryObject.addWhereCondition(CostantiDB.GRUPPI+".nome = ?");
}
if(soloAccordiConsistentiRest && soloAccordiConsistentiSoap) {
sqlQueryObject.addWhereCondition(false,
sqlQueryObjectExistsResource.getWhereExistsCondition(false, sqlQueryObjectExistsResource),
sqlQueryObjectExistsPortTypeConAzioni.getWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni));
}
else if(soloAccordiConsistentiRest) {
sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsResource);
}
else if(soloAccordiConsistentiSoap) {
sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni);
}
if(searchCanale) {
if(canaleDefault) {
sqlQueryObject.addWhereCondition(false, CostantiDB.ACCORDI+".canale = ?", CostantiDB.ACCORDI+".canale is null");
}
else {
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".canale = ?");
}
}
sqlQueryObject.setANDLogicOperator(true);
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
int index = 1;
if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
stmt.setString(index++, superuser);
if(filterTipoAPI!=null && !filterTipoAPI.equals("")) {
stmt.setString(index++, filterTipoAPI);
}
if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
stmt.setString(index++, filterStatoAccordo);
}
if(filterGruppo!=null && !filterGruppo.equals("")) {
stmt.setString(index++, filterGruppo);
}
if(searchCanale) {
stmt.setString(index++, filterCanale);
}
risultato = stmt.executeQuery();
if (risultato.next())
ricerca.setNumEntries(idLista,risultato.getInt(1));
risultato.close();
stmt.close();
// ricavo le entries
if (limit == 0) // con limit
limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI, "id", "idAccordo");
sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI, "nome", "nomeAccordo");
sqlQueryObject.addSelectField(CostantiDB.ACCORDI, "versione");
sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "tipo_soggetto");
sqlQueryObject.addSelectField(CostantiDB.SOGGETTI, "nome_soggetto");
sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI, "id", "idSoggetto");
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
//sqlQueryObject.addSelectField("id_referente");
if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".superuser = ?");
if (!search.equals("")) { // con search
sqlQueryObject.addWhereCondition(false,
sqlQueryObject.getWhereLikeCondition(CostantiDB.ACCORDI+".nome", search, true, true));
//sqlQueryObject.getWhereLikeCondition("versione", search, true, true), // la versione e' troppo, tutte hanno 1 ....
//sqlQueryObject.getWhereLikeCondition(CostantiDB.SOGGETTI+".nome_soggetto", search, true, true)); // fa confusone nei protocolli che non supportano il referente
}
if (searchByTipoSoggetto) {
sqlQueryObject.addWhereINCondition("tipo_soggetto", true, tipoSoggettiProtocollo.toArray(new String[1]));
}
if(excludeASParteComune){
sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExclude);
}
if(excludeASComposti){
sqlQueryObject.addWhereExistsCondition(true, sqlQueryObjectExclude);
}
if(filterTipoAPI!=null && !filterTipoAPI.equals("")) { // con filter
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".service_binding = ?");
}
if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".stato = ?");
}
if(filterGruppo!=null && !filterGruppo.equals("")) {
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_GRUPPI);
sqlQueryObject.addFromTable(CostantiDB.GRUPPI);
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_accordo="+CostantiDB.ACCORDI+".id");
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI_GRUPPI+".id_gruppo="+CostantiDB.GRUPPI+".id");
sqlQueryObject.addWhereCondition(CostantiDB.GRUPPI+".nome = ?");
}
if(soloAccordiConsistentiRest && soloAccordiConsistentiSoap) {
sqlQueryObject.addWhereCondition(false,
sqlQueryObjectExistsResource.getWhereExistsCondition(false, sqlQueryObjectExistsResource),
sqlQueryObjectExistsPortTypeConAzioni.getWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni));
}
else if(soloAccordiConsistentiRest) {
sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsResource);
}
else if(soloAccordiConsistentiSoap) {
sqlQueryObject.addWhereExistsCondition(false, sqlQueryObjectExistsPortTypeConAzioni);
}
if(searchCanale) {
if(canaleDefault) {
sqlQueryObject.addWhereCondition(false, CostantiDB.ACCORDI+".canale = ?", CostantiDB.ACCORDI+".canale is null");
}
else {
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".canale = ?");
}
}
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addOrderBy("nomeAccordo");
sqlQueryObject.addOrderBy("versione");
sqlQueryObject.addOrderBy("nome_soggetto");
sqlQueryObject.addOrderBy("tipo_soggetto");
sqlQueryObject.setSortType(true);
sqlQueryObject.setLimit(limit);
sqlQueryObject.setOffset(offset);
queryString = sqlQueryObject.createSQLQuery();
this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(queryString));
stmt = con.prepareStatement(queryString);
index = 1;
if(this.driver.useSuperUser && superuser!=null && (!superuser.equals("")))
stmt.setString(index++, superuser);
if(filterTipoAPI!=null && !filterTipoAPI.equals("")) {
stmt.setString(index++, filterTipoAPI);
}
if(filterStatoAccordo!=null && !filterStatoAccordo.equals("")) {
stmt.setString(index++, filterStatoAccordo);
}
if(filterGruppo!=null && !filterGruppo.equals("")) {
stmt.setString(index++, filterGruppo);
}
if(searchCanale) {
stmt.setString(index++, filterCanale);
}
risultato = stmt.executeQuery();
while (risultato.next()) {
IDSoggettoDB idSoggettoDB = new IDSoggettoDB(risultato.getString("tipo_soggetto"), risultato.getString("nome_soggetto"));
idSoggettoDB.setId(risultato.getLong("idSoggetto"));
IDAccordoDB idAccordoDB = new IDAccordoDB(risultato.getString("nomeAccordo"), idSoggettoDB, risultato.getInt("versione"));
idAccordoDB.setId(risultato.getLong("idAccordo"));
lista.add(idAccordoDB);
}
this.driver.logDebug("size lista :" + ((lista == null) ? null : lista.size()));
return lista;
} catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
} finally {
//Chiudo statement and resultset
JDBCUtilities.closeResources(risultato, stmt);
this.driver.closeConnection(con);
}
}
protected AccordoServizioParteComune[] getAllIdAccordiWithSoggettoReferente(IDSoggetto idsoggetto) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
Connection con = null;
PreparedStatement stm = null;
ResultSet rs = null;
this.driver.logDebug("getAllIdAccordiWithSoggettoReferente...");
try {
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
// prendo la connessione dal pool
if (this.driver.atomica)
con = this.driver.getConnectionFromDatasource("getAllIdAccordiWithSoggettoReferente");
else
con = this.driver.globalConnection;
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
sqlQueryObject.addSelectAliasField(CostantiDB.ACCORDI,"id","idAccordo");
sqlQueryObject.addWhereCondition(CostantiDB.ACCORDI+".id_referente="+CostantiDB.SOGGETTI+".id");
sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".tipo_soggetto=?");
sqlQueryObject.addWhereCondition(CostantiDB.SOGGETTI+".nome_soggetto=?");
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
this.driver.logDebug("eseguo query : " + sqlQuery );
stm = con.prepareStatement(sqlQuery);
stm.setString(1, idsoggetto.getTipo());
stm.setString(2, idsoggetto.getNome());
rs = stm.executeQuery();
List<AccordoServizioParteComune> accordi = new ArrayList<AccordoServizioParteComune>();
while (rs.next()) {
accordi.add(this.getAccordoServizioParteComune(rs.getLong("idAccordo")));
}
if(accordi.size()==0){
throw new DriverRegistroServiziNotFound("Accordi non trovati con soggetto referente ["+idsoggetto+"]");
}else{
AccordoServizioParteComune [] res = new AccordoServizioParteComune[1];
return accordi.toArray(res);
}
}catch(DriverRegistroServiziNotFound de){
throw de;
}
catch(Exception e){
throw new DriverRegistroServiziException("getAllIdAccordiWithSoggettoReferente error",e);
} finally {
//Chiudo statement and resultset
JDBCUtilities.closeResources(rs, stm);
this.driver.closeConnection(con);
}
}
protected IDAccordo getIdAccordoServizioParteComune(long id) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
return getIdAccordoServizioParteComune(id,null);
}
protected IDAccordo getIdAccordoServizioParteComune(long id,Connection conParam) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
this.driver.logDebug("richiesto getIdAccordoServizioParteComune: " + id);
// conrollo consistenza
if (id <= 0)
return null;
Connection con = null;
PreparedStatement stm = null;
ResultSet rs = null;
IDAccordo idAccordo = null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addSelectField("nome");
sqlQueryObject.addSelectField("id_referente");
sqlQueryObject.addSelectField("versione");
sqlQueryObject.addWhereCondition("id = ?");
String sqlQuery = sqlQueryObject.createSQLQuery();
this.driver.logDebug("operazione atomica = " + this.driver.atomica);
// prendo la connessione dal pool
if(conParam!=null){
con = conParam;
}
else if (this.driver.atomica)
con = this.driver.getConnectionFromDatasource("getIdAccordoServizioParteComune(longId)");
else
con = this.driver.globalConnection;
stm = con.prepareStatement(sqlQuery);
stm.setLong(1, id);
this.driver.logDebug("eseguo query : " + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
rs = stm.executeQuery();
if (rs.next()) {
IDSoggetto referente = null;
long idReferente = rs.getLong("id_referente");
if(idReferente>0){
referente = this.driver.getIdSoggetto(idReferente,con);
if(referente==null){
throw new Exception("Soggetto referente non presente?");
}
}
idAccordo = this.driver.idAccordoFactory.getIDAccordoFromValues(rs.getString("nome"),referente,rs.getInt("versione"));
} else {
rs.close();
stm.close();
throw new DriverRegistroServiziNotFound("[DriverRegistroServiziDB::getIdAccordoServizioParteComune] rs.next non ha restituito valori con la seguente interrogazione :\n" + DriverRegistroServiziDB_LIB.formatSQLString(sqlQuery, id));
}
rs.close();
stm.close();
} catch (SQLException se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getIdAccordoServizioParteComune] SQLException :" + se.getMessage(),se);
}catch (DriverRegistroServiziNotFound e) {
throw e;
}catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::getIdAccordoServizioParteComune] Exception :" + se.getMessage(),se);
} finally {
//Chiudo statement and resultset
JDBCUtilities.closeResources(rs, stm);
this.driver.closeConnection(conParam, con);
}
return idAccordo;
}
protected List<Documento> accordiAllegatiList(long idAccordo, ISearch ricerca) throws DriverRegistroServiziException {
String nomeMetodo = "accordiAllegatiList";
int idLista = Liste.ACCORDI_ALLEGATI;
int offset;
int limit;
String search;
String queryString;
limit = ricerca.getPageSize(idLista);
offset = ricerca.getIndexIniziale(idLista);
search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
ricerca.getSearchString(idLista);
Connection con = null;
PreparedStatement stmt = null;
ResultSet risultato = null;
ArrayList<Documento> lista = new ArrayList<Documento>();
if (this.driver.atomica) {
try {
con = this.driver.getConnectionFromDatasource("accordiAllegatiList");
} catch (Exception e) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(),e);
}
} else
con = this.driver.globalConnection;
try {
if (!search.equals("")) {
//query con search
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.DOCUMENTI);
sqlQueryObject.addSelectCountField("*", "cont");
sqlQueryObject.addWhereCondition("id_proprietario = ?");
sqlQueryObject.addWhereCondition("tipo_proprietario = ?");
sqlQueryObject.addWhereCondition(false,
//sqlQueryObject.getWhereLikeCondition("ruolo",search,true,true),
sqlQueryObject.getWhereLikeCondition("nome",search,true,true));
sqlQueryObject.setANDLogicOperator(true);
queryString = sqlQueryObject.createSQLQuery();
} else {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.DOCUMENTI);
sqlQueryObject.addSelectCountField("*", "cont");
sqlQueryObject.addWhereCondition("id_proprietario = ?");
sqlQueryObject.addWhereCondition("tipo_proprietario = ?");
sqlQueryObject.setANDLogicOperator(true);
queryString = sqlQueryObject.createSQLQuery();
}
stmt = con.prepareStatement(queryString);
stmt.setLong(1,idAccordo);
stmt.setString(2, ProprietariDocumento.accordoServizio.toString());
risultato = stmt.executeQuery();
if (risultato.next())
ricerca.setNumEntries(idLista,risultato.getInt("cont"));
risultato.close();
stmt.close();
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.DOCUMENTI);
sqlQueryObject.addSelectField("id");
sqlQueryObject.addSelectField("nome");
sqlQueryObject.addSelectField("ruolo");
sqlQueryObject.addSelectField("id_proprietario");
sqlQueryObject.addSelectField("tipo_proprietario");
//where
sqlQueryObject.addWhereCondition("id_proprietario = ?");
sqlQueryObject.addWhereCondition("tipo_proprietario = ?");
// ricavo le entries
if (limit == 0) // con limit
limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
if (!search.equals("")) { // con search
sqlQueryObject.addWhereCondition(false,
//sqlQueryObject.getWhereLikeCondition("ruolo",search,true,true),
sqlQueryObject.getWhereLikeCondition("nome",search,true,true));
}
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addOrderBy("nome");
sqlQueryObject.setSortType(true);
sqlQueryObject.setLimit(limit);
sqlQueryObject.setOffset(offset);
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setLong(1, idAccordo);
stmt.setString(2, ProprietariDocumento.accordoServizio.toString());
risultato = stmt.executeQuery();
while(risultato.next()){
Documento doc = DriverRegistroServiziDB_documentiLIB.getDocumento(risultato.getLong("id"),false, con, this.driver.tipoDB);
lista.add(doc);
}
return lista;
} catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
} finally {
//Chiudo statement and resultset
JDBCUtilities.closeResources(risultato, stmt);
this.driver.closeConnection(con);
}
}
protected List<IDServizio> getIdServiziWithAccordo(IDAccordo idAccordo,boolean checkPTisNull) throws DriverRegistroServiziException,DriverRegistroServiziNotFound {
String nomeMetodo = "getIdServiziWithPortType";
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String queryString;
if (this.driver.atomica) {
try {
con = this.driver.getConnectionFromDatasource("getIdServiziWithAccordo");
} catch (Exception e) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::" + nomeMetodo + "] Exception accedendo al datasource :" + e.getMessage(), e);
}
} else {
con = this.driver.globalConnection;
}
this.driver.logDebug("operazione this.atomica = " + this.driver.atomica);
List<IDServizio> idServizi = new ArrayList<IDServizio>();
try {
//recupero idAccordo
long idAccordoLong = DBUtils.getIdAccordoServizioParteComune(idAccordo, con, this.driver.tipoDB);
// Controllo che il pdd non sia in uso
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.driver.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
sqlQueryObject.addSelectField("nome_servizio");
sqlQueryObject.addSelectField("tipo_servizio");
sqlQueryObject.addSelectField("versione_servizio");
sqlQueryObject.addSelectField("nome_soggetto");
sqlQueryObject.addSelectField("tipo_soggetto");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_accordo=?");
sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".id_soggetto="+CostantiDB.SOGGETTI+".id");
if(checkPTisNull){
sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI+".port_type is null");
}
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setLong(1, idAccordoLong);
rs = stmt.executeQuery();
while (rs.next()) {
IDSoggetto soggettoErogatore = new IDSoggetto(rs.getString("tipo_soggetto"), rs.getString("nome_soggetto"));
IDServizio idServizio =
this.driver.idServizioFactory.getIDServizioFromValues(rs.getString("tipo_servizio"),
rs.getString("nome_servizio"), soggettoErogatore, rs.getInt("versione_servizio"));
idServizi.add(idServizio);
}
if(idServizi.size()<=0){
throw new DriverRegistroServiziNotFound("Servizi non trovato che implementano l'accordo di servizio "+idAccordo.toString());
}
else{
return idServizi;
}
}catch(DriverRegistroServiziNotFound dNot){
throw dNot;
}catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziException::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
} finally {
// Chiudo statement and resultset
JDBCUtilities.closeResources(rs, stmt);
this.driver.closeConnection(con);
}
}
protected void validaStatoAccordoServizio(AccordoServizioParteComune as,boolean utilizzoAzioniDiretteInAccordoAbilitato) throws ValidazioneStatoPackageException{
ValidazioneStatoPackageException erroreValidazione =
new ValidazioneStatoPackageException("AccordoServizio",as.getStatoPackage(),null);
try{
// Controlli di visibilita
if(as.getPrivato()==null || as.getPrivato()==false){
if(as.getSoggettoReferente()!=null){
IDSoggetto idS = new IDSoggetto(as.getSoggettoReferente().getTipo(),as.getSoggettoReferente().getNome());
try{
Soggetto s = this.driver.getSoggetto(idS);
if(s.getPrivato()!=null && s.getPrivato()){
erroreValidazione.addErroreValidazione("soggetto referente ["+idS+"] con visibilita' privata, in un accordo di servizio con visibilita' pubblica");
}
}catch(DriverRegistroServiziNotFound dNot){}
}
}
if(as.getServizioComposto()!=null){
if(as.getServizioComposto().getIdAccordoCooperazione()>0){
try{
AccordoCooperazione ac = this.driver.getAccordoCooperazione(as.getServizioComposto().getIdAccordoCooperazione());
if(as.getPrivato()==null || as.getPrivato()==false){
if(ac.getPrivato()!=null && ac.getPrivato()){
erroreValidazione.addErroreValidazione("accordo di cooperazione ["+this.driver.idAccordoCooperazioneFactory.getUriFromAccordo(ac)+"] con visibilita' privata, in un accordo di servizio con visibilita' pubblica");
}
}
}catch(DriverRegistroServiziNotFound dNot){}
}
if(as.getServizioComposto().sizeServizioComponenteList()>=2){
for(int i=0; i<as.getServizioComposto().sizeServizioComponenteList(); i++){
if(as.getServizioComposto().getServizioComponente(i).getId()>0){
try{
AccordoServizioParteSpecifica sc = this.driver.getAccordoServizioParteSpecifica(as.getServizioComposto().getServizioComponente(i).getId());
if(as.getPrivato()==null || as.getPrivato()==false){
if(sc.getPrivato()!=null && sc.getPrivato()){
String uriServizioComponente = this.driver.idServizioFactory.getUriFromAccordo(sc);
erroreValidazione.addErroreValidazione("servizio componente ["+uriServizioComponente+"] con visibilita' privata, in un accordo di servizio con visibilita' pubblica");
}
}
}catch(DriverRegistroServiziNotFound dNot){}
}
}
}
}
if(ServiceBinding.SOAP.equals(as.getServiceBinding())) {
// Controlli di stato
if(StatiAccordo.bozza.toString().equals(as.getStatoPackage()) == false){
// Validazione necessaria sia ad uno stato operativo che finale
if(utilizzoAzioniDiretteInAccordoAbilitato==false){
if(as.sizePortTypeList()==0){
erroreValidazione.addErroreValidazione("non sono definiti Servizi");
}
for(int j=0; j<as.sizePortTypeList(); j++){
if(as.getPortType(j).sizeAzioneList()==0){
erroreValidazione.addErroreValidazione("servizio["+as.getPortType(j).getNome()+"] non possiede azioni");
}
}
}else{
if(as.sizePortTypeList()==0 && as.sizeAzioneList()==0 && as.getUtilizzoSenzaAzione()==false){
erroreValidazione.addErroreValidazione("non sono definite ne Azioni (utilizzoSenzaAzione=false) ne Servizi");
}
if(as.sizePortTypeList()!=0){
for(int j=0; j<as.sizePortTypeList(); j++){
if(as.getPortType(j).sizeAzioneList()==0){
erroreValidazione.addErroreValidazione("servizio["+as.getPortType(j).getNome()+"] non possiede azioni");
}
}
}
if(as.sizePortTypeList()!=0){
for(int j=0; j<as.sizePortTypeList(); j++){
PortType pt = as.getPortType(j);
for(int k=0;k<pt.sizeAzioneList();k++){
Operation op = pt.getAzione(k);
ProfiloCollaborazione profiloCollaborazioneOP = op.getProfiloCollaborazione();
if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(op.getProfAzione())){
profiloCollaborazioneOP = pt.getProfiloCollaborazione();
if(CostantiRegistroServizi.PROFILO_AZIONE_DEFAULT.equals(pt.getProfiloPT())){
profiloCollaborazioneOP = as.getProfiloCollaborazione();
}
}
if(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazioneOP) ||
CostantiRegistroServizi.ASINCRONO_SIMMETRICO.equals(profiloCollaborazioneOP) ){
if(op.getCorrelata()==null){
// Verifico che esista un altra azione correlata a questa.
boolean trovataCorrelazione = false;
for(int verificaPTIndex=0; verificaPTIndex<as.sizePortTypeList(); verificaPTIndex++){
PortType ptVerifica = as.getPortType(verificaPTIndex);
for(int verificaOPIndex=0; verificaOPIndex<ptVerifica.sizeAzioneList(); verificaOPIndex++){
Operation opVerifica = ptVerifica.getAzione(verificaOPIndex);
if(opVerifica.getCorrelata()!=null && opVerifica.getCorrelata().equals(op.getNome())){
// potenziale correlazione, verifico servizio
if(opVerifica.getCorrelataServizio()==null){
if(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazioneOP) && ptVerifica.getNome().equals(pt.getNome())){
// la correlazione per l'asincrono asimmetrico puo' avvenire sullo stesso port type
trovataCorrelazione = true;
break;
}
}
else if(opVerifica.getCorrelataServizio().equals(pt.getNome())){
trovataCorrelazione = true;
break;
}
}
}
}
if(trovataCorrelazione==false){
erroreValidazione.addErroreValidazione("L'azione ["+op.getNome()+"] del servizio["+as.getPortType(j).getNome()+"] non risulta correlata da altre azioni");
}
}
}
}
}
}
}
if(StatiAccordo.finale.toString().equals(as.getStatoPackage())){
String wsdlConcettuale = (as.getByteWsdlConcettuale()!=null ? new String(as.getByteWsdlConcettuale()) : null);
String wsdlLogicoErogatore = (as.getByteWsdlLogicoErogatore()!=null ? new String(as.getByteWsdlLogicoErogatore()) : null);
wsdlConcettuale = wsdlConcettuale!=null && !"".equals(wsdlConcettuale.trim().replaceAll("\n", "")) ? wsdlConcettuale : null;
wsdlLogicoErogatore = wsdlLogicoErogatore!=null && !"".equals(wsdlLogicoErogatore.trim().replaceAll("\n", "")) ? wsdlLogicoErogatore : null;
if( wsdlConcettuale == null){
erroreValidazione.addErroreValidazione("interfaccia WSDL Concettuale non definita");
}
if( wsdlLogicoErogatore == null){
erroreValidazione.addErroreValidazione("interfaccia WSDL LogicoErogatore non definita");
}
if(as.getServizioComposto()!=null){
if(as.getServizioComposto().getIdAccordoCooperazione()<=0){
erroreValidazione.addErroreValidazione("accordo di cooperazione (id) non definito");
}else{
try{
AccordoCooperazione ac = this.driver.getAccordoCooperazione(as.getServizioComposto().getIdAccordoCooperazione());
if(StatiAccordo.finale.toString().equals(ac.getStatoPackage())==false){
erroreValidazione.addErroreValidazione("accordo di cooperazione ["+this.driver.idAccordoCooperazioneFactory.getUriFromAccordo(ac)+"] in uno stato non finale ["+ac.getStatoPackage()+"]");
}
}catch(DriverRegistroServiziNotFound dNot){
erroreValidazione.addErroreValidazione("accordo di cooperazione non definito");
}
}
if(as.getServizioComposto().sizeSpecificaCoordinamentoList()<=0){
erroreValidazione.addErroreValidazione("specifica di coordinamento non definita");
}
if(as.getServizioComposto().sizeServizioComponenteList()<=0){
erroreValidazione.addErroreValidazione("servizi componenti non definiti");
}else{
if(as.getServizioComposto().sizeServizioComponenteList()<2){
erroreValidazione.addErroreValidazione("almeno 2 servizi componenti sono necessari per realizzare un servizio composto");
}else{
for(int i=0; i<as.getServizioComposto().sizeServizioComponenteList(); i++){
if(as.getServizioComposto().getServizioComponente(i).getIdServizioComponente()<=0){
erroreValidazione.addErroreValidazione("servizio componente ["+i+"] (id) non definito");
}else{
try{
AccordoServizioParteSpecifica sc = this.driver.getAccordoServizioParteSpecifica(as.getServizioComposto().getServizioComponente(i).getIdServizioComponente());
if(StatiAccordo.finale.toString().equals(sc.getStatoPackage())==false){
String uriServizioComponente = this.driver.idServizioFactory.getUriFromAccordo(sc);
erroreValidazione.addErroreValidazione("servizio componente ["+uriServizioComponente+"] in uno stato non finale ["+sc.getStatoPackage()+"]");
}
}catch(DriverRegistroServiziNotFound dNot){
erroreValidazione.addErroreValidazione("servizio componente ["+i+"] non definito");
}
}
}
}
}
}
}
}
}
else {
// REST
// Controlli di stato
if(StatiAccordo.bozza.toString().equals(as.getStatoPackage()) == false){
if(as.sizeResourceList()==0){
erroreValidazione.addErroreValidazione("non sono definite alcune risorse");
}
}
if(StatiAccordo.finale.toString().equals(as.getStatoPackage())){
String wsdlConcettuale = (as.getByteWsdlConcettuale()!=null ? new String(as.getByteWsdlConcettuale()) : null);
wsdlConcettuale = wsdlConcettuale!=null && !"".equals(wsdlConcettuale.trim().replaceAll("\n", "")) ? wsdlConcettuale : null;
if( wsdlConcettuale == null){
erroreValidazione.addErroreValidazione("Specifica di interfaccia non definita");
}
}
}
}catch(Exception e){
throw new ValidazioneStatoPackageException(e);
}
if(erroreValidazione.sizeErroriValidazione()>0){
throw erroreValidazione;
}
}
protected void controlloUnicitaImplementazioneAccordoPerSoggetto(String portType,
IDSoggetto idSoggettoErogatore, long idSoggettoErogatoreLong,
IDAccordo idAccordoServizioParteComune, long idAccordoServizioParteComuneLong,
IDServizio idAccordoServizioParteSpecifica, long idAccordoServizioParteSpecificaLong,
boolean isUpdate,boolean isServizioCorrelato,
boolean isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto,
boolean isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto) throws DriverRegistroServiziException{
/*
* Controllo che non esistano 2 servizi con stesso soggetto erogatore e accordo di servizio
* che siano entrambi correlati o non correlati.
* Al massimo possono esistere 2 servizi di uno stesso accordo erogati da uno stesso soggetto,
* purche' siano uno correlato e uno no.
* Se tipoOp = change, devo fare attenzione a non escludere il servizio selezionato che sto
* cambiando
*/
String tmpServCorr = CostantiRegistroServizi.DISABILITATO.toString();
if(isServizioCorrelato){
tmpServCorr = CostantiRegistroServizi.ABILITATO.toString();
}
String s = "servizio";
if (isServizioCorrelato) {
s = "servizio correlato";
}
// se il servizio non definisce port type effettuo controllo che non
// esistano 2 servizi con stesso soggetto,
// accordo e servizio correlato
if (portType == null || "-".equals(portType)) {
if(isAbilitatoControlloUnicitaImplementazioneAccordoPerSoggetto){
// Controllo che non esistano 2 servizi con stesso soggetto,
// accordo e servizio correlato
// Se tipoOp = change, devo fare attenzione a non escludere il servizio selezionato
long idAccordoServizioParteSpecificaAlreadyExists =
this.driver.getServizioWithSoggettoAccordoServCorr(idSoggettoErogatoreLong, idAccordoServizioParteComuneLong,
tmpServCorr);
boolean addError = ((!isUpdate) && (idAccordoServizioParteSpecificaAlreadyExists > 0));
boolean changeError = false;
if (isUpdate && (idAccordoServizioParteSpecificaAlreadyExists > 0)) {
changeError = (idAccordoServizioParteSpecificaLong != idAccordoServizioParteSpecificaAlreadyExists);
}
if (addError || changeError) {
throw new DriverRegistroServiziException("Esiste già un " + s + " del Soggetto "+idSoggettoErogatore+
" che implementa l'accordo selezionato ["+IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordoServizioParteComune)+"]");
}
}
} else {
if(isAbilitatoControlloUnicitaImplementazionePortTypePerSoggetto){
// Controllo che non esistano 2 servizi con stesso soggetto,
// accordo e servizio correlato e port-type
long idAccordoServizioParteSpecificaAlreadyExists =
this.driver.getServizioWithSoggettoAccordoServCorrPt(idSoggettoErogatoreLong, idAccordoServizioParteComuneLong,
tmpServCorr, portType);
boolean addError = ((!isUpdate) && (idAccordoServizioParteSpecificaAlreadyExists > 0));
boolean changeError = false;
if (isUpdate && (idAccordoServizioParteSpecificaAlreadyExists > 0)) {
changeError = (idAccordoServizioParteSpecificaLong != idAccordoServizioParteSpecificaAlreadyExists);
}
if (addError || changeError) {
throw new DriverRegistroServiziException("Esiste già un " + s + " del Soggetto "+idSoggettoErogatore+
" che implementa il servizio "+portType+" dell'accordo selezionato ["+IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordoServizioParteComune)+"]");
}
}
}
}
}