DriverConfigurazioneDBSoggettiLib.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.core.config.driver.db;

  21. import static org.openspcoop2.core.constants.CostantiDB.CREATE;
  22. import static org.openspcoop2.core.constants.CostantiDB.DELETE;
  23. import static org.openspcoop2.core.constants.CostantiDB.UPDATE;

  24. import java.sql.Connection;
  25. import java.sql.PreparedStatement;
  26. import java.sql.ResultSet;
  27. import java.sql.SQLException;

  28. import org.openspcoop2.core.commons.DBUtils;
  29. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  30. import org.openspcoop2.core.constants.CostantiDB;
  31. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  32. import org.openspcoop2.utils.sql.ISQLQueryObject;
  33. import org.openspcoop2.utils.sql.SQLObjectFactory;

  34. /**
  35.  * DriverConfigurazioneDB_soggettiLIB
  36.  *
  37.  * @author Stefano Corallo - corallo@link.it
  38.  * @author $Author$
  39.  * @version $Rev$, $Date$
  40.  */
  41. public class DriverConfigurazioneDBSoggettiLib {
  42.    
  43.     private DriverConfigurazioneDBSoggettiLib() {}

  44.     private static String buildCrudSoggettoMessage(int type, int n) {
  45.         return "CRUDSoggetto type = " + type + " row affected =" + n;
  46.     }
  47.    
  48.     /**
  49.      * CRUD oggetto Soggetto Non si occupa di chiudere la connessione con
  50.      * il db in caso di errore in quanto verra' gestita dal metodo chiamante
  51.      *
  52.      * @param type
  53.      *            Tipo operazione {1 (CREATE),2 (UPDATE),3 (DELETE)}
  54.      * @param soggetto
  55.      * @return L'ID dell'oggetto creato in caso di CREATE, altrimenti il numero
  56.      *         di righe che sono state modificate/cancellate
  57.      * @throws DriverConfigurazioneException
  58.      */
  59.     public static long CRUDSoggetto(int type, org.openspcoop2.core.config.Soggetto soggetto, Connection con) throws DriverConfigurazioneException {
  60.         if (soggetto == null)
  61.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Parametro non valido.");

  62.         String nome = soggetto.getNome();
  63.         String tipo = soggetto.getTipo();

  64.         if (nome == null || nome.equals(""))
  65.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Parametro Nome non valido.");
  66.         if (tipo == null || tipo.equals(""))
  67.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Parametro Tipo non valido.");

  68.         String descrizione = soggetto.getDescrizione();
  69.         String identificativoPorta = soggetto.getIdentificativoPorta();
  70.         String superuser = soggetto.getSuperUser();

  71.         boolean router = soggetto.getRouter();
  72.         boolean isDefault = soggetto.isDominioDefault();
  73.        
  74.         String pdUrlPrefixRewriter = soggetto.getPdUrlPrefixRewriter();
  75.         String paUrlPrefixRewriter = soggetto.getPaUrlPrefixRewriter();
  76.        
  77.         PreparedStatement updateStmt = null;
  78.         PreparedStatement selectStmt = null;
  79.         String updateQuery = "";
  80.         String selectQuery = "";
  81.         ResultSet selectRS = null;
  82.         int n = 0;
  83.         try {

  84.             // preparo lo statement in base al tipo di operazione
  85.             switch (type) {
  86.             case CREATE:
  87.                 // CREATE
  88.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  89.                 sqlQueryObject.addInsertTable(DriverConfigurazioneDBLib.tabellaSoggetti);
  90.                 sqlQueryObject.addInsertField("nome_soggetto", "?");
  91.                 sqlQueryObject.addInsertField("descrizione", "?");
  92.                 sqlQueryObject.addInsertField("identificativo_porta", "?");
  93.                 sqlQueryObject.addInsertField("tipo_soggetto", "?");
  94.                 sqlQueryObject.addInsertField("is_router", "?");
  95.                 sqlQueryObject.addInsertField("is_default", "?");
  96.                 sqlQueryObject.addInsertField("superuser", "?");
  97.                 sqlQueryObject.addInsertField("pd_url_prefix_rewriter", "?");
  98.                 sqlQueryObject.addInsertField("pa_url_prefix_rewriter", "?");
  99.                 updateQuery = sqlQueryObject.createSQLInsert();
  100.                 updateStmt = con.prepareStatement(updateQuery);

  101.                 int index = 1;
  102.                 updateStmt.setString(index++, nome);
  103.                 updateStmt.setString(index++, descrizione);
  104.                 updateStmt.setString(index++, identificativoPorta);
  105.                 updateStmt.setString(index++, tipo);
  106.                 updateStmt.setInt(index++, (router ? CostantiDB.TRUE : CostantiDB.FALSE));
  107.                 updateStmt.setInt(index++, (isDefault ? CostantiDB.TRUE : CostantiDB.FALSE));
  108.                 updateStmt.setString(index++, superuser);
  109.                 updateStmt.setString(index++, pdUrlPrefixRewriter);
  110.                 updateStmt.setString(index++, paUrlPrefixRewriter);
  111.                 // eseguo lo statement
  112.                 n = updateStmt.executeUpdate();

  113.                 DriverConfigurazioneDBLib.logDebug("CRUDSoggetto CREATE : \n" + DBUtils.formatSQLString(updateQuery, nome, descrizione, identificativoPorta, tipo, router, superuser));
  114.                 DriverConfigurazioneDBLib.logDebug(buildCrudSoggettoMessage(type, n));

  115.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  116.                 sqlQueryObject.addFromTable(DriverConfigurazioneDBLib.tabellaSoggetti);
  117.                 sqlQueryObject.addSelectField("id");
  118.                 sqlQueryObject.addWhereCondition("tipo_soggetto = ?");
  119.                 sqlQueryObject.addWhereCondition("nome_soggetto = ?");
  120.                 sqlQueryObject.setANDLogicOperator(true);
  121.                 selectQuery = sqlQueryObject.createSQLQuery();
  122.                 selectStmt = con.prepareStatement(selectQuery);
  123.                 selectStmt.setString(1, tipo);
  124.                 selectStmt.setString(2, nome);

  125.                 break;

  126.             case UPDATE:
  127.                 // UPDATE
  128.                 String oldNomeSoggetto = null;
  129.                 String oldTipoSoggetto = null;
  130.                 if(soggetto.getOldIDSoggettoForUpdate()!=null){
  131.                     oldNomeSoggetto = soggetto.getOldIDSoggettoForUpdate().getNome();
  132.                     oldTipoSoggetto = soggetto.getOldIDSoggettoForUpdate().getTipo();
  133.                 }
  134.                 // controllo se sono presenti i campi necessari per
  135.                 // l'aggiornamento
  136.                 if (oldNomeSoggetto == null || oldNomeSoggetto.equals(""))
  137.                     oldNomeSoggetto = nome;
  138.                 if (oldTipoSoggetto == null || oldTipoSoggetto.equals(""))
  139.                     oldTipoSoggetto = tipo;

  140.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  141.                 sqlQueryObject.addUpdateTable(DriverConfigurazioneDBLib.tabellaSoggetti);
  142.                 sqlQueryObject.addUpdateField("nome_soggetto", "?");
  143.                 sqlQueryObject.addUpdateField("descrizione", "?");
  144.                 sqlQueryObject.addUpdateField("identificativo_porta", "?");
  145.                 sqlQueryObject.addUpdateField("tipo_soggetto", "?");
  146.                 sqlQueryObject.addUpdateField("is_router", "?");
  147.                 sqlQueryObject.addUpdateField("is_default", "?");
  148.                 sqlQueryObject.addUpdateField("superuser", "?");
  149.                 sqlQueryObject.addUpdateField("pd_url_prefix_rewriter", "?");
  150.                 sqlQueryObject.addUpdateField("pa_url_prefix_rewriter", "?");
  151.                 sqlQueryObject.addWhereCondition("nome_soggetto=?");
  152.                 sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  153.                 sqlQueryObject.setANDLogicOperator(true);
  154.                 updateQuery = sqlQueryObject.createSQLUpdate();
  155.                 updateStmt = con.prepareStatement(updateQuery);

  156.                 index = 1;
  157.                 updateStmt.setString(index++, nome);
  158.                 updateStmt.setString(index++, descrizione);
  159.                 updateStmt.setString(index++, identificativoPorta);
  160.                 updateStmt.setString(index++, tipo);
  161.                 updateStmt.setInt(index++, (router ? CostantiDB.TRUE : CostantiDB.FALSE));
  162.                 updateStmt.setInt(index++, (isDefault ? CostantiDB.TRUE : CostantiDB.FALSE));
  163.                 updateStmt.setString(index++, superuser);
  164.                 updateStmt.setString(index++, pdUrlPrefixRewriter);
  165.                 updateStmt.setString(index++, paUrlPrefixRewriter);
  166.                 updateStmt.setString(index++, oldNomeSoggetto);
  167.                 updateStmt.setString(index++, oldTipoSoggetto);
  168.                 // eseguo lo statement
  169.                 n = updateStmt.executeUpdate();
  170.                 updateStmt.close();

  171.                 DriverConfigurazioneDBLib.logDebug("CRUDSoggetto UPDATE : \n" + DBUtils.formatSQLString(updateQuery, nome, descrizione, identificativoPorta, tipo, router, soggetto.getId()));
  172.                 DriverConfigurazioneDBLib.logDebug(buildCrudSoggettoMessage(type, n));
  173.                 break;

  174.             case DELETE:
  175.                 // DELETE
  176.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  177.                 sqlQueryObject.addDeleteTable(DriverConfigurazioneDBLib.tabellaSoggetti);
  178.                 sqlQueryObject.addWhereCondition("nome_soggetto=?");
  179.                 sqlQueryObject.addWhereCondition("tipo_soggetto=?");
  180.                 sqlQueryObject.setANDLogicOperator(true);
  181.                 updateQuery = sqlQueryObject.createSQLDelete();
  182.                 updateStmt = con.prepareStatement(updateQuery);
  183.                 updateStmt.setString(1, soggetto.getNome());
  184.                 updateStmt.setString(2, soggetto.getTipo());
  185.                 n = updateStmt.executeUpdate();
  186.                 updateStmt.close();

  187.                 DriverConfigurazioneDBLib.logDebug(buildCrudSoggettoMessage(type, n));
  188.                 DriverConfigurazioneDBLib.logDebug("CRUDSoggetto DELETE : \n" + DBUtils.formatSQLString(updateQuery, soggetto.getNome(), soggetto.getTipo()));

  189.                 break;
  190.             default:
  191.                 break;
  192.             }

  193.             // in caso di create eseguo la select e ritorno l'id dell'oggetto
  194.             // creato
  195.             if (type == CostantiDB.CREATE &&
  196.                 selectStmt!=null) {
  197.                 selectRS = selectStmt.executeQuery();
  198.                 if (selectRS.next()) {
  199.                     soggetto.setId(selectRS.getLong("id"));
  200.                     return soggetto.getId();
  201.                 }
  202.             }

  203.             return n;

  204.         } catch (SQLException se) {
  205.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] SQLException [" + se.getMessage() + "].",se);
  206.         }catch (Exception se) {
  207.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDSoggetto] Exception [" + se.getMessage() + "].",se);
  208.         } finally {

  209.             JDBCUtilities.closeResources(selectRS, selectStmt);
  210.             JDBCUtilities.closeResources(updateStmt);
  211.            
  212.         }
  213.     }

  214.    
  215. }