DriverConfigurazioneDB_routingTableLIB.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 java.sql.Connection;
  23. import java.sql.PreparedStatement;
  24. import java.sql.ResultSet;
  25. import java.sql.SQLException;

  26. import org.openspcoop2.core.commons.DBUtils;
  27. import org.openspcoop2.core.config.Route;
  28. import org.openspcoop2.core.config.RouteGateway;
  29. import org.openspcoop2.core.config.RouteRegistro;
  30. import org.openspcoop2.core.config.RoutingTable;
  31. import org.openspcoop2.core.config.RoutingTableDefault;
  32. import org.openspcoop2.core.config.RoutingTableDestinazione;
  33. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  34. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  35. import org.openspcoop2.core.constants.CostantiDB;
  36. import org.openspcoop2.utils.jdbc.JDBCUtilities;
  37. import org.openspcoop2.utils.sql.ISQLQueryObject;
  38. import org.openspcoop2.utils.sql.SQLObjectFactory;

  39. /**
  40.  * DriverConfigurazioneDB_routingTableLIB
  41.  *
  42.  * @author Stefano Corallo - corallo@link.it
  43.  * @author $Author$
  44.  * @version $Rev$, $Date$
  45.  */
  46. public class DriverConfigurazioneDB_routingTableLIB {

  47.     public static void CRUDRoutingTable(int type, RoutingTable aRT, Connection con) throws DriverConfigurazioneException {
  48.         PreparedStatement updateStmt = null;
  49.         PreparedStatement insertStmt = null;
  50.         PreparedStatement updateStmtSelectRegistri = null;
  51.         ResultSet rsSelectRegistri = null;
  52.         String updateQuery = "";

  53.         int i = 0;

  54.         RoutingTableDestinazione rtd = null;
  55.         Route route = null;
  56.         RouteGateway gw = null;
  57.         RouteRegistro rg = null;
  58.         String tipo = null;
  59.         String nome = null;
  60.         long idRoute = 0;

  61.         try {

  62.             switch (type) {
  63.             case CREATE:

  64.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  65.                 sqlQueryObject.addUpdateTable(CostantiDB.CONFIGURAZIONE);
  66.                 sqlQueryObject.addUpdateField("routing_enabled", "?");
  67.                 updateQuery = sqlQueryObject.createSQLUpdate();
  68.                 updateStmt = con.prepareStatement(updateQuery);
  69.                 if(aRT.getAbilitata()!=null && aRT.getAbilitata())
  70.                     updateStmt.setString(1, CostantiConfigurazione.ABILITATO.toString());
  71.                 else
  72.                     updateStmt.setString(1, CostantiConfigurazione.DISABILITATO.toString());
  73.                 DriverConfigurazioneDBLib.log.debug("eseguo query :" + DBUtils.formatSQLString(updateQuery, (aRT.getAbilitata()!=null && aRT.getAbilitata())));
  74.                 updateStmt.executeUpdate();
  75.                 updateStmt.close();

  76.                 // CREATE
  77.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  78.                 sqlQueryObject.addInsertTable(CostantiDB.ROUTING);
  79.                 sqlQueryObject.addInsertField("tipo", "?");
  80.                 sqlQueryObject.addInsertField("nome", "?");
  81.                 sqlQueryObject.addInsertField("tiporotta", "?");
  82.                 sqlQueryObject.addInsertField("tiposoggrotta", "?");
  83.                 sqlQueryObject.addInsertField("nomesoggrotta", "?");
  84.                 sqlQueryObject.addInsertField("registrorotta", "?");
  85.                 sqlQueryObject.addInsertField("is_default", "?");
  86.                 updateQuery = sqlQueryObject.createSQLInsert();

  87.                 i = 0;
  88.                 if(aRT.getDefault()!=null){
  89.                     RoutingTableDefault rtDefault = aRT.getDefault();
  90.                     for (i = 0; i < rtDefault.sizeRouteList(); i++) {
  91.                         route = rtDefault.getRoute(i);
  92.    
  93.                         gw = route.getGateway();// rotta gateway
  94.                         rg = route.getRegistro();// rotta registro
  95.    
  96.                         updateStmt = con.prepareStatement(updateQuery);
  97.    
  98.                         updateStmt.setString(1, null);// nn ho tipo
  99.                         updateStmt.setString(2, null);// nn ho nome
  100.                         updateStmt.setString(3, (gw != null ? "gateway" : "registro"));
  101.                         updateStmt.setString(4, (gw != null ? gw.getTipo() : null));// se
  102.                         // rotta
  103.                         // gateway
  104.                         // setto
  105.                         // tiposoggrotta
  106.                         updateStmt.setString(5, (gw != null ? gw.getNome() : null));// se
  107.                         // rotta
  108.                         // gateway
  109.                         // setto
  110.                         // nomesoggrotta
  111.                         long registroRotta = 0;
  112.                         if(rg!=null){
  113.                             if(rg.getId()<=0){
  114.                                 if(rg.getNome()!=null && ("".equals(rg.getNome())==false)){
  115.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  116.                                     sqlQueryObject.addFromTable(CostantiDB.REGISTRI);
  117.                                     sqlQueryObject.addSelectField("id");
  118.                                     sqlQueryObject.addWhereCondition("nome = ?");
  119.                                     String selectQuery = sqlQueryObject.createSQLQuery();
  120.                                     updateStmtSelectRegistri = con.prepareStatement(selectQuery);
  121.                                     updateStmtSelectRegistri.setString(1, rg.getNome());
  122.                                     rsSelectRegistri = updateStmtSelectRegistri.executeQuery();
  123.                                     if(rsSelectRegistri!=null && rsSelectRegistri.next()){
  124.                                         registroRotta = rsSelectRegistri.getLong("id");
  125.                                     }
  126.                                     if(rsSelectRegistri!=null) {
  127.                                         rsSelectRegistri.close();
  128.                                     }
  129.                                     updateStmtSelectRegistri.close();
  130.                                 }
  131.                             }
  132.                         }
  133.                         updateStmt.setLong(6, registroRotta);
  134.    
  135.                         updateStmt.setInt(7, CostantiDB.TRUE);
  136.    
  137.                         updateStmt.executeUpdate();
  138.                         updateStmt.close();
  139.                     }
  140.                 }

  141.                 DriverConfigurazioneDBLib.log.debug("Inserted " + i + " Default route.");

  142.                 for (i = 0; i < aRT.sizeDestinazioneList(); i++) {
  143.                     rtd = aRT.getDestinazione(i);
  144.                     nome = rtd.getNome();
  145.                     tipo = rtd.getTipo();

  146.                     for (int j = 0; j < rtd.sizeRouteList(); j++) {
  147.                         route = rtd.getRoute(j);
  148.                         gw = route.getGateway();// rotta gateway
  149.                         rg = route.getRegistro();// rotta registro

  150.                         updateStmt = con.prepareStatement(updateQuery);

  151.                         updateStmt.setString(1, tipo);
  152.                         updateStmt.setString(2, nome);
  153.                         updateStmt.setString(3, (gw != null ? "gateway" : "registro"));
  154.                         updateStmt.setString(4, (gw != null ? gw.getTipo() : null));// se
  155.                         // rotta
  156.                         // gateway
  157.                         // setto
  158.                         // tiposoggrotta
  159.                         updateStmt.setString(5, (gw != null ? gw.getNome() : null));// se
  160.                         // rotta
  161.                         // gateway
  162.                         // setto
  163.                         // nomesoggrotta
  164.                         long registroRotta = 0;
  165.                         if(rg!=null){
  166.                             if(rg.getId()<=0){
  167.                                 if(rg.getNome()!=null && ("".equals(rg.getNome())==false)){
  168.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  169.                                     sqlQueryObject.addFromTable(CostantiDB.REGISTRI);
  170.                                     sqlQueryObject.addSelectField("id");
  171.                                     sqlQueryObject.addWhereCondition("nome = ?");
  172.                                     String selectQuery = sqlQueryObject.createSQLQuery();
  173.                                     updateStmtSelectRegistri = con.prepareStatement(selectQuery);
  174.                                     updateStmtSelectRegistri.setString(1, rg.getNome());
  175.                                     rsSelectRegistri = updateStmtSelectRegistri.executeQuery();
  176.                                     if(rsSelectRegistri!=null && rsSelectRegistri.next()){
  177.                                         registroRotta = rsSelectRegistri.getLong("id");
  178.                                     }
  179.                                     rsSelectRegistri.close();
  180.                                     updateStmtSelectRegistri.close();
  181.                                 }
  182.                             }
  183.                         }
  184.                         updateStmt.setLong(6, registroRotta);

  185.                         updateStmt.setInt(7, CostantiDB.FALSE);

  186.                         updateStmt.executeUpdate();
  187.                         updateStmt.close();
  188.                     }
  189.                 }

  190.                 DriverConfigurazioneDBLib.log.debug("Inserted " + i + " Destination route.");

  191.                 break;

  192.             case 2:
  193.                 // UPDATE

  194.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  195.                 sqlQueryObject.addUpdateTable(CostantiDB.CONFIGURAZIONE);
  196.                 sqlQueryObject.addUpdateField("routing_enabled", "?");
  197.                 updateQuery = sqlQueryObject.createSQLUpdate();
  198.                 updateStmt = con.prepareStatement(updateQuery);
  199.                 if(aRT.getAbilitata()!=null && aRT.getAbilitata())
  200.                     updateStmt.setString(1, CostantiConfigurazione.ABILITATO.toString());
  201.                 else
  202.                     updateStmt.setString(1, CostantiConfigurazione.DISABILITATO.toString());
  203.                 DriverConfigurazioneDBLib.log.debug("eseguo query :" + DBUtils.formatSQLString(updateQuery, aRT.getAbilitata()!=null && aRT.getAbilitata()));
  204.                 updateStmt.executeUpdate();
  205.                 updateStmt.close();

  206.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  207.                 sqlQueryObject.addUpdateTable(CostantiDB.ROUTING);
  208.                 sqlQueryObject.addUpdateField("tipo", "?");
  209.                 sqlQueryObject.addUpdateField("nome", "?");
  210.                 sqlQueryObject.addUpdateField("tiporotta", "?");
  211.                 sqlQueryObject.addUpdateField("tiposoggrotta", "?");
  212.                 sqlQueryObject.addUpdateField("nomesoggrotta", "?");
  213.                 sqlQueryObject.addUpdateField("registrorotta", "?");
  214.                 sqlQueryObject.addUpdateField("is_default", "?");
  215.                 sqlQueryObject.addWhereCondition("id = ?");
  216.                 updateQuery = sqlQueryObject.createSQLUpdate();

  217.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  218.                 sqlQueryObject.addInsertTable(CostantiDB.ROUTING);
  219.                 sqlQueryObject.addInsertField("tipo", "?");
  220.                 sqlQueryObject.addInsertField("nome", "?");
  221.                 sqlQueryObject.addInsertField("tiporotta", "?");
  222.                 sqlQueryObject.addInsertField("tiposoggrotta", "?");
  223.                 sqlQueryObject.addInsertField("nomesoggrotta", "?");
  224.                 sqlQueryObject.addInsertField("registrorotta", "?");
  225.                 sqlQueryObject.addInsertField("is_default", "?");
  226.                 String insertQuery = sqlQueryObject.createSQLInsert();

  227.                 /**
  228.                  * La lista contiene tutte e sole le entry necessarie
  229.                  */
  230.                 sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  231.                 sqlQueryObject.setANDLogicOperator(true);
  232.                 sqlQueryObject.addDeleteTable(CostantiDB.ROUTING);
  233.                 //sqlQueryObject.addWhereCondition("is_default<>?");//cancello le rotte non di default
  234.                 String queryDelete = sqlQueryObject.createSQLDelete();
  235.                 DriverConfigurazioneDBLib.log.debug("DELETING Destination Route : "+queryDelete);
  236.                 updateStmt = con.prepareStatement(queryDelete);
  237.                 //updateStmt.setInt(1, CostantiDB.TRUE);
  238.                 int n = updateStmt.executeUpdate();
  239.                 updateStmt.close();
  240.                 DriverConfigurazioneDBLib.log.debug("Deleted " + n + " Destination route.");

  241.                 i = 0;
  242.                 if(aRT.getDefault()!=null){
  243.                     RoutingTableDefault rtDefault = aRT.getDefault();
  244.                     for (i = 0; i < rtDefault.sizeRouteList(); i++) {
  245.                         route = rtDefault.getRoute(i);

  246.                         idRoute = route.getId();
  247.    
  248.                         gw = route.getGateway();// rotta gateway
  249.                         rg = route.getRegistro();// rotta registro
  250.    
  251.                         long registroRotta = 0;
  252.                         if(rg!=null){
  253.                             if(rg.getId()<=0){
  254.                                 if(rg.getNome()!=null && ("".equals(rg.getNome())==false)){
  255.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  256.                                     sqlQueryObject.addFromTable(CostantiDB.REGISTRI);
  257.                                     sqlQueryObject.addSelectField("id");
  258.                                     sqlQueryObject.addWhereCondition("nome = ?");
  259.                                     String selectQuery = sqlQueryObject.createSQLQuery();
  260.                                     updateStmtSelectRegistri = con.prepareStatement(selectQuery);
  261.                                     updateStmtSelectRegistri.setString(1, rg.getNome());
  262.                                     rsSelectRegistri = updateStmtSelectRegistri.executeQuery();
  263.                                     if(rsSelectRegistri!=null && rsSelectRegistri.next()){
  264.                                         registroRotta = rsSelectRegistri.getLong("id");
  265.                                     }
  266.                                     rsSelectRegistri.close();
  267.                                     updateStmtSelectRegistri.close();
  268.                                 }
  269.                             }
  270.                         }
  271.    
  272.                         insertStmt = con.prepareStatement(insertQuery);
  273.    
  274.                         insertStmt.setString(1, null);// nn ho tipo
  275.                         insertStmt.setString(2, null);// nn ho nome
  276.                         insertStmt.setString(3, (gw != null ? "gateway" : "registro"));
  277.                         insertStmt.setString(4, (gw != null ? gw.getTipo() : null));// se
  278.                         // rotta
  279.                         // gateway
  280.                         // setto
  281.                         // tiposoggrotta
  282.                         insertStmt.setString(5, (gw != null ? gw.getNome() : null));// se
  283.                         // rotta
  284.                         // gateway
  285.                         // setto
  286.                         // nomesoggrotta
  287.    
  288.                         insertStmt.setLong(6, registroRotta);
  289.    
  290.                         insertStmt.setInt(7, CostantiDB.TRUE);
  291.                         insertStmt.executeUpdate();
  292.                         insertStmt.close();
  293.    
  294.                     }
  295.                 }

  296.                 DriverConfigurazioneDBLib.log.debug("Updated " + i + " Default route.");

  297.                 for (i = 0; i < aRT.sizeDestinazioneList(); i++) {
  298.                     rtd = aRT.getDestinazione(i);
  299.                     nome = rtd.getNome();
  300.                     tipo = rtd.getTipo();

  301.                     for (int j = 0; j < rtd.sizeRouteList(); j++) {
  302.                         route = rtd.getRoute(j);

  303.                         idRoute = route.getId();

  304.                         gw = route.getGateway();// rotta gateway
  305.                         rg = route.getRegistro();// rotta registro

  306.                         long registroRotta = 0;
  307.                         if(rg!=null){
  308.                             if(rg.getId()<=0){
  309.                                 if(rg.getNome()!=null && ("".equals(rg.getNome())==false)){
  310.                                     sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  311.                                     sqlQueryObject.addFromTable(CostantiDB.REGISTRI);
  312.                                     sqlQueryObject.addSelectField("id");
  313.                                     sqlQueryObject.addWhereCondition("nome = ?");
  314.                                     String selectQuery = sqlQueryObject.createSQLQuery();
  315.                                     updateStmtSelectRegistri = con.prepareStatement(selectQuery);
  316.                                     updateStmtSelectRegistri.setString(1, rg.getNome());
  317.                                     rsSelectRegistri = updateStmtSelectRegistri.executeQuery();
  318.                                     if(rsSelectRegistri!=null && rsSelectRegistri.next()){
  319.                                         registroRotta = rsSelectRegistri.getLong("id");
  320.                                     }
  321.                                     rsSelectRegistri.close();
  322.                                     updateStmtSelectRegistri.close();
  323.                                 }
  324.                             }
  325.                         }


  326.                         insertStmt = con.prepareStatement(insertQuery);

  327.                         insertStmt.setString(1, tipo);
  328.                         insertStmt.setString(2, nome);
  329.                         insertStmt.setString(3, (gw != null ? "gateway" : "registro"));
  330.                         insertStmt.setString(4, (gw != null ? gw.getTipo() : null));
  331.                         insertStmt.setString(5, (gw != null ? gw.getNome() : null));

  332.                         insertStmt.setLong(6, registroRotta);

  333.                         insertStmt.setInt(7, CostantiDB.FALSE);
  334.                         insertStmt.executeUpdate();
  335.                         insertStmt.close();

  336.                     }
  337.                 }

  338.                 DriverConfigurazioneDBLib.log.debug("Updated " + i + " Destination route.");



  339.                 break;

  340.             case 3:
  341.                 // DELETE
  342.                 i = 0;
  343.                 if(aRT.getDefault()!=null){
  344.                     RoutingTableDefault rtDefault = aRT.getDefault();
  345.                     for (i = 0; i < rtDefault.sizeRouteList(); i++) {
  346.                         route = rtDefault.getRoute(i);

  347.                         if (route.getId() == null || route.getId() <= 0)
  348.                             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDRoutingTable(DELETE)] id route non valida.");
  349.                         idRoute = route.getId();
  350.                         sqlQueryObject = SQLObjectFactory.createSQLQueryObject(DriverConfigurazioneDBLib.tipoDB);
  351.                         sqlQueryObject.addDeleteTable(CostantiDB.ROUTING);
  352.                         sqlQueryObject.addWhereCondition("id=?");
  353.                         String sqlQuery = sqlQueryObject.createSQLDelete();
  354.                         updateStmt = con.prepareStatement(sqlQuery);
  355.                         updateStmt.setLong(1, idRoute);
  356.                         updateStmt.executeUpdate();
  357.                         updateStmt.close();
  358.    
  359.                         DriverConfigurazioneDBLib.log.debug("Deleted " + i + " Destination route.");
  360.                     }
  361.                 }
  362.                 break;
  363.             }

  364.         } catch (SQLException se) {
  365.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDRoutingTable] SQLException [" + se.getMessage() + "].",se);
  366.         }catch (Exception se) {
  367.             throw new DriverConfigurazioneException("[DriverConfigurazioneDB_LIB::CRUDRoutingTable] Exception [" + se.getMessage() + "].",se);
  368.         } finally {

  369.             JDBCUtilities.closeResources(updateStmt);
  370.             JDBCUtilities.closeResources(insertStmt);
  371.             JDBCUtilities.closeResources(rsSelectRegistri, updateStmtSelectRegistri);
  372.            
  373.         }
  374.     }
  375.    
  376. }