DriverRegistroServiziDB_accordiCooperazioneLIB.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 static org.openspcoop2.core.constants.CostantiDB.CREATE;
import static org.openspcoop2.core.constants.CostantiDB.DELETE;
import static org.openspcoop2.core.constants.CostantiDB.UPDATE;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.byok.IDriverBYOK;
import org.openspcoop2.core.commons.CoreException;
import org.openspcoop2.core.commons.DBUtils;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.core.constants.ProprietariProtocolProperty;
import org.openspcoop2.core.id.IDAccordoCooperazione;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.AccordoCooperazionePartecipanti;
import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioComposto;
import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioCompostoServizioComponente;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.IdSoggetto;
import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
import org.openspcoop2.core.registry.constants.ProprietariDocumento;
import org.openspcoop2.core.registry.constants.RuoliDocumento;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
import org.openspcoop2.core.registry.driver.IDAccordoCooperazioneFactory;
import org.openspcoop2.utils.jdbc.JDBCUtilities;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.SQLObjectFactory;
/**
* Classe utilizzata per effettuare query ad un registro dei servizi openspcoop
* formato db.
*
*
* @author Sandra Giangrandi (sandra@link.it)
* @author Stefano Corallo (corallo@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class DriverRegistroServiziDB_accordiCooperazioneLIB {
public static void CRUDAccordoServizioParteComuneServizioComposto(int type, AccordoServizioParteComuneServizioComposto asServComposto, Connection con, long idAccordo) throws DriverRegistroServiziException {
PreparedStatement updateStmt = null;
String updateQuery;
PreparedStatement selectStmt = null;
ResultSet selectRS = null;
if (idAccordo <= 0)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID Accordo non valido.");
// if(asServComposto!=null){
// if (asServComposto.getIdAccordoCooperazione() <= 0 && (type==CostantiDB.CREATE || type==CostantiDB.UPDATE)){
//
// }
// new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID Accordo Cooperazione non valido.");
// }
try {
switch (type) {
case CREATE:
// create
if (asServComposto == null)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] Accordo Cooperazione non valido.");
long idAccordoCooperazione = -1;
if(asServComposto.getIdAccordoCooperazione()!=null){
idAccordoCooperazione = asServComposto.getIdAccordoCooperazione();
}
//if(idAccordoCooperazione<=0){
// Necessario sempre per la sincronizzazione
if(asServComposto.getAccordoCooperazione()!=null){
idAccordoCooperazione =
DBUtils.getIdAccordoCooperazione(IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromUri(asServComposto.getAccordoCooperazione()),
con, DriverRegistroServiziDB_LIB.tipoDB);
}
//}
if(idAccordoCooperazione<=0){
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] idAccordoCooperazione non fornito");
}
// Servizio composto
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObject.addInsertField("id_accordo", "?");
sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordo);
updateStmt.setLong(2, idAccordoCooperazione);
updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("Aggiungo acc servizio composto");
// Recupero id
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObject.addSelectField("id");
sqlQueryObject.addWhereCondition("id_accordo=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLQuery();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordo);
selectRS = updateStmt.executeQuery();
long idAccServComposto = -1;
if(selectRS.next()){
idAccServComposto = selectRS.getLong("id");
asServComposto.setId(idAccServComposto);
}else{
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto inserito non recuperato.");
}
selectRS.close();
updateStmt.close();
// Servizio componenti
for(int i=0; i< asServComposto.sizeServizioComponenteList(); i++){
AccordoServizioParteComuneServizioCompostoServizioComponente tmp = asServComposto.getServizioComponente(i);
long idServizioComponente = -1;
//if(idServizioComponente<=0){
// Necessario sempre per la sincronizzazione
// Provo a prenderlo attraverso la uri dell'accordo
if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null && tmp.getNome()!=null){
// Provo a prenderlo attraverso la uri dell'accordo
DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del servizio con tipo/nome soggetto erogatore ["+tmp.getTipoSoggetto()+"/"+tmp.getNomeSoggetto()
+"] e tipo/nome servizio ["+tmp.getTipo()+"/"+tmp.getNome()+"]");
if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null && tmp.getNome()!=null)
idServizioComponente = DBUtils.getIdServizio(tmp.getNome(), tmp.getTipo(), tmp.getVersione(), tmp.getNomeSoggetto(), tmp.getTipoSoggetto(), con, DriverRegistroServiziDB_LIB.tipoDB);
}
if(idServizioComponente<=0){
idServizioComponente = tmp.getIdServizioComponente();
}
//}
if(idServizioComponente <=0 )
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID ServizioComponente non definito.");
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
sqlQueryObject.addInsertField("id_servizio_composto", "?");
sqlQueryObject.addInsertField("id_servizio_componente", "?");
sqlQueryObject.addInsertField("azione", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccServComposto);
updateStmt.setLong(2, idServizioComponente);
updateStmt.setString(3, tmp.getAzione());
updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("Aggiunto acc servizio componente");
}
break;
case UPDATE:
// update
if (asServComposto == null)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] Accordo Cooperazione non valido.");
idAccServComposto = asServComposto.getId();
if(idAccServComposto <=0 )
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto non definito.");
idAccordoCooperazione = -1;
if(asServComposto.getIdAccordoCooperazione()!=null){
idAccordoCooperazione = asServComposto.getIdAccordoCooperazione();
}
//if(idAccordoCooperazione<=0){
// Necessario sempre per la sincronizzazione
if(asServComposto.getAccordoCooperazione()!=null){
idAccordoCooperazione =
DBUtils.getIdAccordoCooperazione(IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromUri(asServComposto.getAccordoCooperazione()),
con, DriverRegistroServiziDB_LIB.tipoDB);
}
//}
if(idAccordoCooperazione<=0){
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] idAccordoCooperazione non fornito");
}
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addUpdateTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObject.addUpdateField("id_accordo_cooperazione", "?");
sqlQueryObject.addWhereCondition("id=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLUpdate();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoCooperazione);
updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("Aggiornato acc servizio composto");
// Elimino vecchi servizi componenti
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
sqlQueryObject.addWhereCondition("id_servizio_composto=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccServComposto);
updateStmt.executeUpdate();
updateStmt.close();
// Inserisco nuovi servizi componenti
for(int i=0; i< asServComposto.sizeServizioComponenteList(); i++){
AccordoServizioParteComuneServizioCompostoServizioComponente tmp = asServComposto.getServizioComponente(i);
long idServizioComponente = -1;
//if(idServizioComponente<=0){
// Necessario sempre per la sincronizzazione
// Provo a prenderlo attraverso la uri dell'accordo
if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null && tmp.getNome()!=null){
// Provo a prenderlo attraverso la uri dell'accordo
DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del servizio con tipo/nome soggetto erogatore ["+tmp.getTipoSoggetto()+"/"+tmp.getNomeSoggetto()
+"] e tipo/nome servizio ["+tmp.getTipo()+"/"+tmp.getNome()+"]");
if(tmp.getTipoSoggetto()!=null && tmp.getNomeSoggetto()!=null && tmp.getTipo()!=null && tmp.getNome()!=null)
idServizioComponente = DBUtils.getIdServizio(tmp.getNome(), tmp.getTipo(), tmp.getVersione(), tmp.getNomeSoggetto(), tmp.getTipoSoggetto(), con, DriverRegistroServiziDB_LIB.tipoDB);
}
if(idServizioComponente<=0){
idServizioComponente = tmp.getIdServizioComponente();
}
if(idServizioComponente <=0 )
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID ServizioComponente non definito.");
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
sqlQueryObject.addInsertField("id_servizio_composto", "?");
sqlQueryObject.addInsertField("id_servizio_componente", "?");
sqlQueryObject.addInsertField("azione", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccServComposto);
updateStmt.setLong(2, idServizioComponente);
updateStmt.setString(3, tmp.getAzione());
updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("Aggiungo acc servizio componente");
}
break;
case DELETE:
// delete
idAccServComposto = -1;
if(asServComposto!=null){
idAccServComposto = asServComposto.getId();
if(idAccServComposto <=0 ){
//throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto non definito.");
// lo cerco
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObject.addSelectField("id");
sqlQueryObject.addWhereCondition("id_accordo=?");
updateQuery = sqlQueryObject.createSQLQuery();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordo);
selectRS = updateStmt.executeQuery();
if(selectRS.next()){
idAccServComposto = selectRS.getLong("id");
}
selectRS.close();
updateStmt.close();
if(idAccServComposto <=0 ){
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] ID AccordoServizioComposto non definito e non recuperabile.");
}
}
}else{
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObject.addSelectField("id");
sqlQueryObject.addWhereCondition("id_accordo=?");
updateQuery = sqlQueryObject.createSQLQuery();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordo);
selectRS = updateStmt.executeQuery();
if(selectRS.next()){
idAccServComposto = selectRS.getLong("id");
}
selectRS.close();
updateStmt.close();
}
if(idAccServComposto>0){
// Elimino vecchi servizi componenti
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_SERVIZI_COMPONENTI);
sqlQueryObject.addWhereCondition("id_servizio_composto=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccServComposto);
updateStmt.executeUpdate();
updateStmt.close();
// Elimino servizio composto
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_SERVIZI_COMPOSTO);
sqlQueryObject.addWhereCondition("id=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccServComposto);
updateStmt.executeUpdate();
updateStmt.close();
}
break;
}
} catch (SQLException se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] SQLException : " + se.getMessage(),se);
} catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoServizioServizioComposto] Exception : " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(selectRS, selectStmt);
JDBCUtilities.closeResources(updateStmt);
}
}
/**
* Accordo di Cooperazione CRUD
*/
public static void CRUDAccordoCooperazione(int type, org.openspcoop2.core.registry.AccordoCooperazione accordoCooperazione,
Connection con, String tipoDatabase, IDriverBYOK driverBYOK) throws DriverRegistroServiziException {
if (accordoCooperazione == null)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] Accordo di Cooperazione non valido.");
String nome = accordoCooperazione.getNome();
String descrizione = accordoCooperazione.getDescrizione();
String stato = accordoCooperazione.getStatoPackage();
boolean privato = accordoCooperazione.getPrivato()!=null && accordoCooperazione.getPrivato();
String superUser = accordoCooperazione.getSuperUser();
if (nome == null || nome.equals(""))
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] Parametro Nome non valido.");
IDSoggetto soggettoReferente = null;
if(accordoCooperazione.getSoggettoReferente()!=null){
soggettoReferente = new IDSoggetto(accordoCooperazione.getSoggettoReferente().getTipo(), accordoCooperazione.getSoggettoReferente().getNome());
}
PreparedStatement updateStmt = null;
ResultSet updateRS = null;
try {
switch (type) {
case CREATE:
// CREATE
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE);
sqlQueryObject.addInsertField("nome", "?");
sqlQueryObject.addInsertField("descrizione", "?");
sqlQueryObject.addInsertField("versione", "?");
sqlQueryObject.addInsertField("privato", "?");
sqlQueryObject.addInsertField("superuser", "?");
if(stato!=null)
sqlQueryObject.addInsertField("stato", "?");
if(accordoCooperazione.getSoggettoReferente()!=null)
sqlQueryObject.addInsertField("id_referente", "?");
if(accordoCooperazione.getOraRegistrazione()!=null)
sqlQueryObject.addInsertField("ora_registrazione", "?");
String updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setString(1, nome);
updateStmt.setString(2, descrizione);
updateStmt.setInt(3, accordoCooperazione.getVersione());
if(privato)
updateStmt.setInt(4, 1);
else
updateStmt.setInt(4, 0);
updateStmt.setString(5, superUser);
int index = 6;
if(stato!=null){
updateStmt.setString(index, stato);
index++;
}
if(accordoCooperazione.getSoggettoReferente()!=null){
long idReferente = DBUtils.getIdSoggetto(accordoCooperazione.getSoggettoReferente().getNome(), accordoCooperazione.getSoggettoReferente().getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
if(idReferente<=0){
throw new DriverRegistroServiziException("Soggetto Referente ["+accordoCooperazione.getSoggettoReferente().getTipo()+"/"+accordoCooperazione.getSoggettoReferente().getNome()+"] non trovato");
}
updateStmt.setLong(index, idReferente);
index++;
}
if(accordoCooperazione.getOraRegistrazione()!=null){
updateStmt.setTimestamp(index, new Timestamp(accordoCooperazione.getOraRegistrazione().getTime()));
index++;
}
// eseguo lo statement
int n = updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoServizioParteSpecifica CREATE : \n" + DriverRegistroServiziDB_LIB.formatSQLString(updateQuery, nome, descrizione));
DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoServizioParteSpecifica type = " + type + " row affected =" + n);
// recupero l-id dell'accordo appena inserito
IDAccordoCooperazione idAccordoObject = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromValues(accordoCooperazione.getNome(),
soggettoReferente, accordoCooperazione.getVersione());
long idAccordoCooperazione = DBUtils.getIdAccordoCooperazione(idAccordoObject, con, DriverRegistroServiziDB_LIB.tipoDB);
if (idAccordoCooperazione<=0) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] non riesco a trovare l'id del'Accordo inserito");
}
accordoCooperazione.setId(idAccordoCooperazione);
// aggiungo partecipanti
if(accordoCooperazione.getElencoPartecipanti()!=null){
AccordoCooperazionePartecipanti partecipanti = accordoCooperazione.getElencoPartecipanti();
for(int i=0; i<partecipanti.sizeSoggettoPartecipanteList(); i++){
IdSoggetto soggettoPartecipante = partecipanti.getSoggettoPartecipante(i);
long idSoggettoPartecipante = -1;
if(idSoggettoPartecipante <=0 ){
// Provo a prenderlo attraverso il tipo/nome
DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del soggetto con tipo/nome ["+soggettoPartecipante.getTipo()+"]/["+soggettoPartecipante.getNome()+"]");
if(soggettoPartecipante.getTipo()!=null && soggettoPartecipante.getNome()!=null)
idSoggettoPartecipante = DBUtils.getIdSoggetto(soggettoPartecipante.getNome(),soggettoPartecipante.getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
}
if(idSoggettoPartecipante<=0){
idSoggettoPartecipante = soggettoPartecipante.getIdSoggetto();
}
if(idSoggettoPartecipante<=0)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] idSoggettoPartecipante non presente");
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
sqlQueryObject.addInsertField("id_soggetto", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoCooperazione);
updateStmt.setLong(2, idSoggettoPartecipante);
n = updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione (servizioComposto) type = " + type + " row affected =" + n);
}
}
// Documenti generici servizio
List<Documento> documenti = new ArrayList<Documento>();
// Allegati
for(int i=0; i<accordoCooperazione.sizeAllegatoList(); i++){
Documento doc = accordoCooperazione.getAllegato(i);
doc.setRuolo(RuoliDocumento.allegato.toString());
documenti.add(doc);
}
// Specifiche Semiformali
for(int i=0; i<accordoCooperazione.sizeSpecificaSemiformaleList(); i++){
Documento doc = accordoCooperazione.getSpecificaSemiformale(i);
doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
documenti.add(doc);
}
// CRUD
DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.CREATE, documenti, idAccordoCooperazione, ProprietariDocumento.accordoCooperazione, con, tipoDatabase);
// ProtocolProperties
DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.CREATE, accordoCooperazione.getProtocolPropertyList(),
idAccordoCooperazione, ProprietariProtocolProperty.ACCORDO_COOPERAZIONE, con, tipoDatabase, driverBYOK);
break;
case UPDATE:
// UPDATE
IDAccordoCooperazione idAccordoAttualeInseritoDB = null;
if(accordoCooperazione.getOldIDAccordoForUpdate()!=null){
idAccordoAttualeInseritoDB = accordoCooperazione.getOldIDAccordoForUpdate();
}else{
idAccordoAttualeInseritoDB = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromAccordo(accordoCooperazione);
}
long idAccordoLong = DBUtils.getIdAccordoCooperazione(idAccordoAttualeInseritoDB, con,DriverRegistroServiziDB_LIB.tipoDB);
if (idAccordoLong <= 0)
throw new DriverRegistroServiziException("Impossibile recuperare l'id dell'Accordo di Cooperazione : " + nome);
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addUpdateTable(CostantiDB.ACCORDI_COOPERAZIONE);
sqlQueryObject.addUpdateField("nome", "?");
sqlQueryObject.addUpdateField("descrizione", "?");
sqlQueryObject.addUpdateField("versione", "?");
sqlQueryObject.addUpdateField("privato", "?");
sqlQueryObject.addUpdateField("superuser", "?");
sqlQueryObject.addUpdateField("id_referente", "?");
if(stato!=null)
sqlQueryObject.addUpdateField("stato", "?");
if(accordoCooperazione.getOraRegistrazione()!=null)
sqlQueryObject.addUpdateField("ora_registrazione", "?");
sqlQueryObject.addWhereCondition("id=?");
updateQuery = sqlQueryObject.createSQLUpdate();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setString(1, nome);
updateStmt.setString(2, descrizione);
updateStmt.setInt(3, accordoCooperazione.getVersione());
if(privato)
updateStmt.setInt(4, 1);
else
updateStmt.setInt(4, 0);
updateStmt.setString(5, superUser);
index = 6;
if(accordoCooperazione.getSoggettoReferente()!=null) {
long idSRef = DBUtils.getIdSoggetto(accordoCooperazione.getSoggettoReferente().getNome(),
accordoCooperazione.getSoggettoReferente().getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
updateStmt.setLong(index, idSRef);
}else{
updateStmt.setLong(index, CostantiRegistroServizi.SOGGETTO_REFERENTE_DEFAULT);
}
index++;
if(stato!=null){
updateStmt.setString(index, stato);
index++;
}
if(accordoCooperazione.getOraRegistrazione()!=null){
updateStmt.setTimestamp(index, new Timestamp(accordoCooperazione.getOraRegistrazione().getTime()));
index++;
}
updateStmt.setLong(index, idAccordoLong);
n = updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione type = " + type + " row affected =" + n);
/*
// update servizi componenti, elimino i vecchi e riaggiungo i nuovi
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_SERVIZI_COMPOSTI);
sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.executeUpdate();
updateStmt.close();
// aggiungo servizi componenti
for(int i=0; i<accordoCooperazione.sizeServizioCompostoList(); i++){
AccordoCooperazioneServizioComposto sComposto = accordoCooperazione.getServizioComposto(i);
long idAccordoServizioComposto = sComposto.getIdAccordo();
if(idAccordoServizioComposto <=0 ){
// Provo a prenderlo attraverso la uri dell'accordo
DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id dell'accordo di servizio con uri ["+sComposto.getNomeAccordoServizio()+"]");
if(sComposto.getNomeAccordoServizio()!=null)
idAccordoServizioComposto = DBUtils.getIdAccordoServizio(IDAccordo.getIDAccordoFromUri(sComposto.getNomeAccordoServizio()), con, DriverRegistroServiziDB_LIB.tipoDB);
}
if(idAccordoServizioComposto<=0)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] idAccordoServizio composto non presente");
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE_SERVIZI_COMPOSTI);
sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
sqlQueryObject.addInsertField("id_accordo_servizio", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.setLong(2, idAccordoServizioComposto);
n = updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione (Partecipante) type = " + type + " row affected =" + n);
}*/
// update partecipanti, elimino i vecchi e riaggiungo i nuovi
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.executeUpdate();
updateStmt.close();
// aggiungo partecipanti
if(accordoCooperazione.getElencoPartecipanti()!=null){
AccordoCooperazionePartecipanti partecipanti = accordoCooperazione.getElencoPartecipanti();
for(int i=0; i<partecipanti.sizeSoggettoPartecipanteList(); i++){
IdSoggetto soggettoPartecipante = partecipanti.getSoggettoPartecipante(i);
Long idSoggettoPartecipante = -1L;
if(idSoggettoPartecipante==null || idSoggettoPartecipante <=0 ){
// Provo a prenderlo attraverso il tipo/nome
DriverRegistroServiziDB_LIB.log.debug("Provo a recuperare l'id del soggetto con tipo/nome ["+soggettoPartecipante.getTipo()+"]/["+soggettoPartecipante.getNome()+"]");
if(soggettoPartecipante.getTipo()!=null && soggettoPartecipante.getNome()!=null)
idSoggettoPartecipante = DBUtils.getIdSoggetto(soggettoPartecipante.getNome(),soggettoPartecipante.getTipo(), con, DriverRegistroServiziDB_LIB.tipoDB);
}
if(idSoggettoPartecipante<=0){
idSoggettoPartecipante = soggettoPartecipante.getIdSoggetto();
}
if(idSoggettoPartecipante<=0)
throw new DriverRegistroServiziException("[DriverRegistroServiziDB::CRUDAccordoCooperazione] idSoggettoPartecipante non presente");
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
sqlQueryObject.addInsertField("id_accordo_cooperazione", "?");
sqlQueryObject.addInsertField("id_soggetto", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.setLong(2, idSoggettoPartecipante);
n = updateStmt.executeUpdate();
updateStmt.close();
DriverRegistroServiziDB_LIB.log.debug("CRUDAccordoCooperazione (servizioComposto) type = " + type + " row affected =" + n);
}
}
// Documenti generici servizio
documenti = new ArrayList<Documento>();
// Allegati
for(int i=0; i<accordoCooperazione.sizeAllegatoList(); i++){
Documento doc = accordoCooperazione.getAllegato(i);
doc.setRuolo(RuoliDocumento.allegato.toString());
documenti.add(doc);
}
// Specifiche Semiformali
for(int i=0; i<accordoCooperazione.sizeSpecificaSemiformaleList(); i++){
Documento doc = accordoCooperazione.getSpecificaSemiformale(i);
doc.setRuolo(RuoliDocumento.specificaSemiformale.toString());
documenti.add(doc);
}
// CRUD
DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.UPDATE, documenti, idAccordoLong, ProprietariDocumento.accordoCooperazione, con,tipoDatabase);
// ProtocolProperties
DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.UPDATE, accordoCooperazione.getProtocolPropertyList(),
idAccordoLong, ProprietariProtocolProperty.ACCORDO_COOPERAZIONE, con, tipoDatabase, driverBYOK);
break;
case DELETE:
// DELETE
IDAccordoCooperazione idAccordo = IDAccordoCooperazioneFactory.getInstance().getIDAccordoFromValues(nome,soggettoReferente,accordoCooperazione.getVersione());
idAccordoLong = DBUtils.getIdAccordoCooperazione(idAccordo, con, DriverRegistroServiziDB_LIB.tipoDB);
if (idAccordoLong <= 0)
throw new DriverRegistroServiziException("Impossibile recuperare l'id dell'Accordo di Cooperazione : " + nome);
/*
// delete servizi componenti
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_SERVIZI_COMPOSTI);
sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.executeUpdate();
updateStmt.close();
*/
// delete partecipanti
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE_PARTECIPANTI);
sqlQueryObject.addWhereCondition("id_accordo_cooperazione=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.executeUpdate();
updateStmt.close();
// Documenti generici accordo di servizio
// Allegati
// Specifiche Semiformali
DriverRegistroServiziDB_documentiLIB.CRUDDocumento(CostantiDB.DELETE, null, idAccordoLong, ProprietariDocumento.accordoCooperazione, con,tipoDatabase);
// ProtocolProperties
DriverRegistroServiziDB_LIB.CRUDProtocolProperty(CostantiDB.DELETE, null,
idAccordoLong, ProprietariProtocolProperty.ACCORDO_COOPERAZIONE, con, tipoDatabase, driverBYOK);
// delete Accordo di Cooperazione
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverRegistroServiziDB_LIB.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.ACCORDI_COOPERAZIONE);
sqlQueryObject.addWhereCondition("id=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, idAccordoLong);
updateStmt.executeUpdate();
updateStmt.close();
break;
}
} catch (CoreException e) {
throw new DriverRegistroServiziException(e);
} catch (SQLException se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] SQLException [" + se.getMessage() + "].", se);
} catch (Exception se) {
throw new DriverRegistroServiziException("[DriverRegistroServiziDB_LIB::CRUDAccordoCooperazione] Exception [" + se.getMessage() + "].", se);
} finally {
JDBCUtilities.closeResources(updateRS, updateStmt);
}
}
}