DriverConfigurazioneDB_dumpLIB.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 java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.config.DumpConfigurazione;
import org.openspcoop2.core.config.DumpConfigurazioneRegola;
import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.utils.TipiDatabase;
import org.openspcoop2.utils.jdbc.CustomKeyGeneratorObject;
import org.openspcoop2.utils.jdbc.InsertAndGeneratedKey;
import org.openspcoop2.utils.jdbc.InsertAndGeneratedKeyJDBCType;
import org.openspcoop2.utils.jdbc.InsertAndGeneratedKeyObject;
import org.openspcoop2.utils.jdbc.JDBCUtilities;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.SQLObjectFactory;
/**
* DriverConfigurazioneDB_configDumpLIB
*
* @author Stefano Corallo - corallo@link.it
* @author $Author$
* @version $Rev$, $Date$
*/
public class DriverConfigurazioneDB_dumpLIB {
static void CRUDDumpConfigurazione(int type, Connection con, DumpConfigurazione dumpConfig,
Long idProprietario, String tipoProprietario) throws DriverConfigurazioneException {
PreparedStatement updateStmt = null;
try {
switch (type) {
case CREATE:
if(dumpConfig==null) {
break;
}
long idRequestIn = -1;
if(dumpConfig.getRichiestaIngresso()!=null) {
idRequestIn = createDumpConfigurazioneRegola(dumpConfig.getRichiestaIngresso(), con);
}
long idRequestOut = -1;
if(dumpConfig.getRichiestaUscita()!=null) {
idRequestOut = createDumpConfigurazioneRegola(dumpConfig.getRichiestaUscita(), con);
}
long idResponseIn = -1;
if(dumpConfig.getRispostaIngresso()!=null) {
idResponseIn = createDumpConfigurazioneRegola(dumpConfig.getRispostaIngresso(), con);
}
long idResponseOut = -1;
if(dumpConfig.getRispostaUscita()!=null) {
idResponseOut = createDumpConfigurazioneRegola(dumpConfig.getRispostaUscita(), con);
}
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addInsertTable(CostantiDB.DUMP_CONFIGURAZIONE);
sqlQueryObject.addInsertField("proprietario", "?");
sqlQueryObject.addInsertField("id_proprietario", "?");
sqlQueryObject.addInsertField("dump_realtime", "?");
sqlQueryObject.addInsertField("id_richiesta_ingresso", "?");
sqlQueryObject.addInsertField("id_richiesta_uscita", "?");
sqlQueryObject.addInsertField("id_risposta_ingresso", "?");
sqlQueryObject.addInsertField("id_risposta_uscita", "?");
String updateQuery = sqlQueryObject.createSQLInsert();
updateStmt = con.prepareStatement(updateQuery);
int index = 1;
updateStmt.setString(index++, tipoProprietario);
updateStmt.setLong(index++, idProprietario!=null ? idProprietario : -1);
updateStmt.setString(index++, DriverConfigurazioneDBLib.getValue(dumpConfig.getRealtime()));
updateStmt.setLong(index++, idRequestIn);
updateStmt.setLong(index++, idRequestOut);
updateStmt.setLong(index++, idResponseIn);
updateStmt.setLong(index++, idResponseOut);
updateStmt.executeUpdate();
updateStmt.close();
break;
case UPDATE:
// Per la delete recupero l'immagine attuale del confi
DumpConfigurazione dumpConfigOld = DriverConfigurazioneDB_dumpLIB.readDumpConfigurazione(con, idProprietario, tipoProprietario);
if(dumpConfigOld!=null) {
CRUDDumpConfigurazione(DELETE, con, dumpConfigOld, idProprietario, tipoProprietario);
}
// Creo la nuova immagine
if(dumpConfig!=null) {
CRUDDumpConfigurazione(CREATE, con, dumpConfig, idProprietario, tipoProprietario);
}
break;
case DELETE:
if(dumpConfig==null) {
break;
}
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.DUMP_CONFIGURAZIONE_REGOLA);
sqlQueryObject.addWhereCondition("id=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
if(dumpConfig.getRichiestaIngresso()!=null) {
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, dumpConfig.getRichiestaIngresso().getId());
updateStmt.executeUpdate();
updateStmt.close();
}
if(dumpConfig.getRichiestaUscita()!=null) {
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, dumpConfig.getRichiestaUscita().getId());
updateStmt.executeUpdate();
updateStmt.close();
}
if(dumpConfig.getRispostaIngresso()!=null) {
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, dumpConfig.getRispostaIngresso().getId());
updateStmt.executeUpdate();
updateStmt.close();
}
if(dumpConfig.getRispostaUscita()!=null) {
updateStmt = con.prepareStatement(updateQuery);
updateStmt.setLong(1, dumpConfig.getRispostaUscita().getId());
updateStmt.executeUpdate();
updateStmt.close();
}
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addDeleteTable(CostantiDB.DUMP_CONFIGURAZIONE);
if(!CostantiDB.OLD_BACKWARD_COMPATIBILITY_DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PD.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PA.equals(tipoProprietario)) {
sqlQueryObject.addWhereCondition("id_proprietario=?");
}
sqlQueryObject.addWhereCondition("proprietario=?");
sqlQueryObject.setANDLogicOperator(true);
updateQuery = sqlQueryObject.createSQLDelete();
updateStmt = con.prepareStatement(updateQuery);
index = 1;
if(!CostantiDB.OLD_BACKWARD_COMPATIBILITY_DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PD.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PA.equals(tipoProprietario)) {
updateStmt.setLong(index++, idProprietario);
}
updateStmt.setString(index++, tipoProprietario);
updateStmt.executeUpdate();
break;
}
} catch (SQLException se) {
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDDumpConfigurazione] SQLException [" + se.getMessage() + "].",se);
}catch (Exception se) {
throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDDumpConfigurazione] Exception [" + se.getMessage() + "].",se);
} finally {
JDBCUtilities.closeResources(updateStmt);
}
}
private static long createDumpConfigurazioneRegola(DumpConfigurazioneRegola dumpRegola, Connection con) throws Exception {
List<InsertAndGeneratedKeyObject> listInsertAndGeneratedKeyObject = new ArrayList<>();
listInsertAndGeneratedKeyObject.add( new InsertAndGeneratedKeyObject("body", DriverConfigurazioneDBLib.getValue(dumpRegola.getBody()) , InsertAndGeneratedKeyJDBCType.STRING) );
listInsertAndGeneratedKeyObject.add( new InsertAndGeneratedKeyObject("payload", DriverConfigurazioneDBLib.getValue(dumpRegola.getPayload()) , InsertAndGeneratedKeyJDBCType.STRING) );
listInsertAndGeneratedKeyObject.add( new InsertAndGeneratedKeyObject("payload_parsing", DriverConfigurazioneDBLib.getValue(dumpRegola.getPayloadParsing()) , InsertAndGeneratedKeyJDBCType.STRING) );
listInsertAndGeneratedKeyObject.add( new InsertAndGeneratedKeyObject("attachments", DriverConfigurazioneDBLib.getValue(dumpRegola.getAttachments()) , InsertAndGeneratedKeyJDBCType.STRING) );
listInsertAndGeneratedKeyObject.add( new InsertAndGeneratedKeyObject("headers", DriverConfigurazioneDBLib.getValue(dumpRegola.getHeaders()) , InsertAndGeneratedKeyJDBCType.STRING) );
long idDumpconfigurazioneRegola = InsertAndGeneratedKey.insertAndReturnGeneratedKey(con, TipiDatabase.toEnumConstant(DriverConfigurazioneDBLib.tipoDB),
new CustomKeyGeneratorObject(CostantiDB.DUMP_CONFIGURAZIONE_REGOLA, CostantiDB.DUMP_CONFIGURAZIONE_REGOLA_COLUMN_ID,
CostantiDB.DUMP_CONFIGURAZIONE_REGOLA_SEQUENCE, CostantiDB.DUMP_CONFIGURAZIONE_REGOLA_TABLE_FOR_ID),
listInsertAndGeneratedKeyObject.toArray(new InsertAndGeneratedKeyObject[1]));
if(idDumpconfigurazioneRegola<=0){
throw new Exception("ID (dump configurazione regola) autoincrementale non ottenuto");
}
return idDumpconfigurazioneRegola;
}
protected static DumpConfigurazione readDumpConfigurazione(Connection con, Long idProprietario, String tipoProprietario) throws Exception {
PreparedStatement stm1=null;
ResultSet rs1= null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.DUMP_CONFIGURAZIONE);
sqlQueryObject.addSelectField("*");
if(!CostantiDB.OLD_BACKWARD_COMPATIBILITY_DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PD.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PA.equals(tipoProprietario)) {
sqlQueryObject.addWhereCondition("id_proprietario=?");
}
sqlQueryObject.addWhereCondition("proprietario=?");
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stm1 = con.prepareStatement(sqlQuery);
int index = 1;
if(!CostantiDB.OLD_BACKWARD_COMPATIBILITY_DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PD.equals(tipoProprietario) &&
!CostantiDB.DUMP_CONFIGURAZIONE_PROPRIETARIO_CONFIG_PA.equals(tipoProprietario)) {
stm1.setLong(index++, idProprietario);
}
stm1.setString(index++, tipoProprietario);
rs1 = stm1.executeQuery();
//recuper tutti gli appender e le prop di ogni appender
DumpConfigurazione dumpConfig = null;
if(rs1.next()){
dumpConfig = new DumpConfigurazione();
dumpConfig.setId(rs1.getLong("id"));
dumpConfig.setRealtime(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs1.getString("dump_realtime")));
long idRequestIn = rs1.getLong("id_richiesta_ingresso");
if(idRequestIn>0) {
dumpConfig.setRichiestaIngresso(readDumpConfigurazioneRegola(con, idRequestIn));
}
long idRequestOut = rs1.getLong("id_richiesta_uscita");
if(idRequestOut>0) {
dumpConfig.setRichiestaUscita(readDumpConfigurazioneRegola(con, idRequestOut));
}
long idResponseIn = rs1.getLong("id_risposta_ingresso");
if(idResponseIn>0) {
dumpConfig.setRispostaIngresso(readDumpConfigurazioneRegola(con, idResponseIn));
}
long idResponseOut = rs1.getLong("id_risposta_uscita");
if(idResponseOut>0) {
dumpConfig.setRispostaUscita(readDumpConfigurazioneRegola(con, idResponseOut));
}
}
return dumpConfig;
}finally {
JDBCUtilities.closeResources(rs1, stm1);
}
}
private static DumpConfigurazioneRegola readDumpConfigurazioneRegola(Connection con, long idRegola) throws Exception {
PreparedStatement stm1=null;
ResultSet rs1= null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
sqlQueryObject.addFromTable(CostantiDB.DUMP_CONFIGURAZIONE_REGOLA);
sqlQueryObject.addSelectField("*");
sqlQueryObject.addWhereCondition("id=?");
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stm1 = con.prepareStatement(sqlQuery);
stm1.setLong(1, idRegola);
rs1 = stm1.executeQuery();
//recuper tutti gli appender e le prop di ogni appender
DumpConfigurazioneRegola dumpConfig = new DumpConfigurazioneRegola(); // ci sono i default
if(rs1.next()){
dumpConfig.setId(rs1.getLong("id"));
dumpConfig.setBody(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs1.getString("body")));
dumpConfig.setPayload(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs1.getString("payload")));
dumpConfig.setPayloadParsing(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs1.getString("payload_parsing")));
dumpConfig.setAttachments(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs1.getString("attachments")));
dumpConfig.setHeaders(DriverConfigurazioneDBLib.getEnumStatoFunzionalita(rs1.getString("headers")));
}
return dumpConfig;
}finally {
JDBCUtilities.closeResources(rs1, stm1);
}
}
}