DriverConfigurazioneDBSoggettiLib.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.config.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 org.openspcoop2.core.commons.DBUtils;
import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.utils.jdbc.JDBCUtilities;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.SQLObjectFactory;
/**
* DriverConfigurazioneDB_soggettiLIB
*
* @author Stefano Corallo - corallo@link.it
* @author $Author$
* @version $Rev$, $Date$
*/
public class DriverConfigurazioneDBSoggettiLib {
private DriverConfigurazioneDBSoggettiLib() {}
private static String buildCrudSoggettoMessage(int type, int n) {
return "CRUDSoggetto type = " + type + " row affected =" + n;
}
/**
* CRUD oggetto Soggetto Non si occupa di chiudere la connessione con
* il db in caso di errore in quanto verra' gestita dal metodo chiamante
*
* @param type
* Tipo operazione {1 (CREATE),2 (UPDATE),3 (DELETE)}
* @param soggetto
* @return L'ID dell'oggetto creato in caso di CREATE, altrimenti il numero
* di righe che sono state modificate/cancellate
* @throws DriverConfigurazioneException
*/
public static long CRUDSoggetto(int type, org.openspcoop2.core.config.Soggetto soggetto, Connection con) throws DriverConfigurazioneException {
if (soggetto == null)
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Parametro non valido.");
String nome = soggetto.getNome();
String tipo = soggetto.getTipo();
if (nome == null || nome.equals(""))
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Parametro Nome non valido.");
if (tipo == null || tipo.equals(""))
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Parametro Tipo non valido.");
String descrizione = soggetto.getDescrizione();
String identificativoPorta = soggetto.getIdentificativoPorta();
String superuser = soggetto.getSuperUser();
boolean router = soggetto.getRouter();
boolean isDefault = soggetto.isDominioDefault();
String pdUrlPrefixRewriter = soggetto.getPdUrlPrefixRewriter();
String paUrlPrefixRewriter = soggetto.getPaUrlPrefixRewriter();
PreparedStatement updateStmt = null;
PreparedStatement selectStmt = null;
String updateQuery = "";
String selectQuery = "";
ResultSet selectRS = null;
int n = 0;
try {
// preparo lo statement in base al tipo di operazione
switch (type) {
case CREATE:
// CREATE
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addInsertTable(DriverConfigurazioneDBLib.tabellaSoggetti);
sqlQueryObject.addInsertField("nome_soggetto", "?");
sqlQueryObject.addInsertField("descrizione", "?");
sqlQueryObject.addInsertField("identificativo_porta", "?");
sqlQueryObject.addInsertField("tipo_soggetto", "?");
sqlQueryObject.addInsertField("is_router", "?");
sqlQueryObject.addInsertField("is_default", "?");
sqlQueryObject.addInsertField("superuser", "?");
sqlQueryObject.addInsertField("pd_url_prefix_rewriter", "?");
sqlQueryObject.addInsertField("pa_url_prefix_rewriter", "?");
updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
int index = 1;
updateStmt.setString(index++, nome);
updateStmt.setString(index++, descrizione);
updateStmt.setString(index++, identificativoPorta);
updateStmt.setString(index++, tipo);
updateStmt.setInt(index++, (router ? CostantiDB.TRUE : CostantiDB.FALSE));
updateStmt.setInt(index++, (isDefault ? CostantiDB.TRUE : CostantiDB.FALSE));
updateStmt.setString(index++, superuser);
updateStmt.setString(index++, pdUrlPrefixRewriter);
updateStmt.setString(index++, paUrlPrefixRewriter);
// eseguo lo statement
n = updateStmt.executeUpdate();
DriverConfigurazioneDBLib.logDebug("CRUDSoggetto CREATE : \n" + DBUtils.formatSQLString(updateQuery, nome, descrizione, identificativoPorta, tipo, router, superuser));
DriverConfigurazioneDBLib.logDebug(buildCrudSoggettoMessage(type, n));
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addFromTable(DriverConfigurazioneDBLib.tabellaSoggetti);
sqlQueryObject.addSelectField("id");
sqlQueryObject.addWhereCondition("tipo_soggetto = ?");
sqlQueryObject.addWhereCondition("nome_soggetto = ?");
sqlQueryObject.setANDLogicOperator(true);
selectQuery = sqlQueryObject.createSQLQuery();
selectStmt = con.prepareStatement(selectQuery);
selectStmt.setString(1, tipo);
selectStmt.setString(2, nome);
break;
case UPDATE:
// UPDATE
String oldNomeSoggetto = null;
String oldTipoSoggetto = null;
if(soggetto.getOldIDSoggettoForUpdate()!=null){
oldNomeSoggetto = soggetto.getOldIDSoggettoForUpdate().getNome();
oldTipoSoggetto = soggetto.getOldIDSoggettoForUpdate().getTipo();
}
// controllo se sono presenti i campi necessari per
// l'aggiornamento
if (oldNomeSoggetto == null || oldNomeSoggetto.equals(""))
oldNomeSoggetto = nome;
if (oldTipoSoggetto == null || oldTipoSoggetto.equals(""))
oldTipoSoggetto = tipo;
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addUpdateTable(DriverConfigurazioneDBLib.tabellaSoggetti);
sqlQueryObject.addUpdateField("nome_soggetto", "?");
sqlQueryObject.addUpdateField("descrizione", "?");
sqlQueryObject.addUpdateField("identificativo_porta", "?");
sqlQueryObject.addUpdateField("tipo_soggetto", "?");
sqlQueryObject.addUpdateField("is_router", "?");
sqlQueryObject.addUpdateField("is_default", "?");
sqlQueryObject.addUpdateField("superuser", "?");
sqlQueryObject.addUpdateField("pd_url_prefix_rewriter", "?");
sqlQueryObject.addUpdateField("pa_url_prefix_rewriter", "?");
sqlQueryObject.addWhereCondition("nome_soggetto=?");
sqlQueryObject.addWhereCondition("tipo_soggetto=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLUpdate();
updateStmt = con.prepareStatement(updateQuery);
index = 1;
updateStmt.setString(index++, nome);
updateStmt.setString(index++, descrizione);
updateStmt.setString(index++, identificativoPorta);
updateStmt.setString(index++, tipo);
updateStmt.setInt(index++, (router ? CostantiDB.TRUE : CostantiDB.FALSE));
updateStmt.setInt(index++, (isDefault ? CostantiDB.TRUE : CostantiDB.FALSE));
updateStmt.setString(index++, superuser);
updateStmt.setString(index++, pdUrlPrefixRewriter);
updateStmt.setString(index++, paUrlPrefixRewriter);
updateStmt.setString(index++, oldNomeSoggetto);
updateStmt.setString(index++, oldTipoSoggetto);
// eseguo lo statement
n = updateStmt.executeUpdate();
updateStmt.close();
DriverConfigurazioneDBLib.logDebug("CRUDSoggetto UPDATE : \n" + DBUtils.formatSQLString(updateQuery, nome, descrizione, identificativoPorta, tipo, router, soggetto.getId()));
DriverConfigurazioneDBLib.logDebug(buildCrudSoggettoMessage(type, n));
break;
case DELETE:
// DELETE
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addDeleteTable(DriverConfigurazioneDBLib.tabellaSoggetti);
sqlQueryObject.addWhereCondition("nome_soggetto=?");
sqlQueryObject.addWhereCondition("tipo_soggetto=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setString(1, soggetto.getNome());
updateStmt.setString(2, soggetto.getTipo());
n = updateStmt.executeUpdate();
updateStmt.close();
DriverConfigurazioneDBLib.logDebug(buildCrudSoggettoMessage(type, n));
DriverConfigurazioneDBLib.logDebug("CRUDSoggetto DELETE : \n" + DBUtils.formatSQLString(updateQuery, soggetto.getNome(), soggetto.getTipo()));
break;
default:
break;
}
// in caso di create eseguo la select e ritorno l'id dell'oggetto
// creato
if (type == CostantiDB.CREATE &&
selectStmt!=null) {
selectRS = selectStmt.executeQuery();
if (selectRS.next()) {
soggetto.setId(selectRS.getLong("id"));
return soggetto.getId();
}
}
return n;
} catch (SQLException se) {
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] SQLException [" + se.getMessage() + "].",se);
}catch (Exception se) {
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Exception [" + se.getMessage() + "].",se);
} finally {
JDBCUtilities.closeResources(selectRS, selectStmt);
JDBCUtilities.closeResources(updateStmt);
}
}
}