DriverAudit.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.web.lib.audit;

  21. import java.sql.Connection;
  22. import java.sql.PreparedStatement;
  23. import java.sql.ResultSet;
  24. import java.sql.SQLException;
  25. import java.util.ArrayList;
  26. import java.util.List;


  27. import org.openspcoop2.core.commons.ISearch;
  28. import org.openspcoop2.utils.sql.ISQLQueryObject;
  29. import org.openspcoop2.utils.sql.SQLObjectFactory;
  30. import org.openspcoop2.web.lib.audit.costanti.Costanti;
  31. import org.openspcoop2.web.lib.audit.dao.Appender;
  32. import org.openspcoop2.web.lib.audit.dao.AppenderProperty;
  33. import org.openspcoop2.web.lib.audit.dao.Configurazione;
  34. import org.openspcoop2.web.lib.audit.dao.Filtro;
  35. import org.openspcoop2.web.lib.audit.log.constants.Stato;
  36. import org.openspcoop2.web.lib.audit.log.constants.Tipologia;

  37. /**
  38.  * Sono forniti metodi per la lettura dei dati di Users
  39.  *
  40.  *
  41.  * @author Andrea Poli (apoli@link.it)
  42.  * @author Stefano Corallo (corallo@link.it)
  43.  * @author Sandra Giangrandi (sandra@link.it)
  44.  * @author $Author$
  45.  * @version $Rev$, $Date$
  46.  *
  47.  */
  48. public class DriverAudit {

  49.     /** Connessione al Database */
  50.     private Connection connectionDB;

  51.     // Tipo database passato al momento della creazione dell'oggetto
  52.     private String tipoDB = null;

  53.     public DriverAudit(Connection con, String tipoDB) throws AuditException {
  54.         this.connectionDB = con;
  55.         if (con == null)
  56.             throw new AuditException("Connessione al Database non definita");

  57.         this.tipoDB = tipoDB;
  58.         if (tipoDB == null)
  59.             throw new AuditException("Il tipoDatabase non puo essere null.");
  60.     }

  61.    
  62.    
  63.    
  64.     public Configurazione getConfigurazione() throws AuditException {
  65.        
  66.         Configurazione configurazione = null;
  67.         PreparedStatement stm = null;
  68.         ResultSet rs = null;

  69.         try {
  70.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  71.             sqlQueryObject.addFromTable(Costanti.DB_AUDIT_CONFIGURAZIONE);
  72.             sqlQueryObject.addSelectField("*");
  73.             String sqlQuery = sqlQueryObject.createSQLQuery();
  74.             stm = this.connectionDB.prepareStatement(sqlQuery);
  75.             rs = stm.executeQuery();
  76.             if (rs.next()) {
  77.                 configurazione = new Configurazione();
  78.                 if(rs.getInt("audit_engine")==1)
  79.                     configurazione.setAuditEngineEnabled(true);
  80.                 else
  81.                     configurazione.setAuditEngineEnabled(false);
  82.                 if(rs.getInt("enabled")==1)
  83.                     configurazione.setAuditEnabled(true);
  84.                 else
  85.                     configurazione.setAuditEnabled(false);
  86.                 if(rs.getInt("dump")==1)
  87.                     configurazione.setDumpEnabled(true);
  88.                 else
  89.                     configurazione.setDumpEnabled(false);
  90.                 configurazione.setDumpFormat(rs.getString("dump_format"));

  91.                 configurazione.setAppender(this.getAppender());
  92.                 configurazione.setFiltri(this.getFiltri());    
  93.                
  94.             }else{
  95.                 throw new AuditException("[DriverAudit::getConfigurazione] Configurazione non presente");
  96.             }
  97.             rs.close();
  98.             stm.close();
  99.        
  100.             return configurazione;
  101.         } catch (SQLException se) {
  102.             throw new AuditException("[DriverAudit::getConfigurazione] SqlException: " + se.getMessage(),se);
  103.         } catch (Exception ex) {
  104.             throw new AuditException("[DriverAudit::getConfigurazione] Exception: " + ex.getMessage(),ex);
  105.         } finally {
  106.             try {
  107.                 if(rs!=null)
  108.                     rs.close();
  109.             } catch (Exception e) {
  110.                 // ignore exception
  111.             }
  112.             try {
  113.                 if(stm!=null)
  114.                     stm.close();
  115.             } catch (Exception e) {
  116.                 // ignore exception
  117.             }
  118.         }
  119.     }
  120.    
  121.     public ArrayList<Filtro> getFiltri() throws AuditException {
  122.        
  123.         ArrayList<Filtro> filtri = new ArrayList<Filtro>();
  124.         PreparedStatement stm = null;
  125.         ResultSet rs = null;

  126.         try {
  127.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  128.             sqlQueryObject.addFromTable(Costanti.DB_AUDIT_FILTRI);
  129.             sqlQueryObject.addSelectField("id");
  130.             sqlQueryObject.addSelectField("ora_registrazione");
  131.             sqlQueryObject.addOrderBy("ora_registrazione");
  132.             sqlQueryObject.setSortType(true);
  133.             String sqlQuery = sqlQueryObject.createSQLQuery();
  134.             stm = this.connectionDB.prepareStatement(sqlQuery);
  135.             rs = stm.executeQuery();
  136.             while (rs.next()) {
  137.                 filtri.add(this.getFiltro(rs.getLong("id")));
  138.             }
  139.             rs.close();
  140.             stm.close();
  141.        
  142.             return filtri;
  143.         } catch (SQLException se) {
  144.             throw new AuditException("[DriverAudit::::getFiltri] SqlException: " + se.getMessage(),se);
  145.         } catch (Exception ex) {
  146.             throw new AuditException("[DriverAudit::::getFiltri] Exception: " + ex.getMessage(),ex);
  147.         } finally {
  148.             try {
  149.                 if(rs!=null)
  150.                     rs.close();
  151.             } catch (Exception e) {
  152.                 // ignore exception
  153.             }
  154.             try {
  155.                 if(stm!=null)
  156.                     stm.close();
  157.             } catch (Exception e) {
  158.                 // ignore exception
  159.             }
  160.         }
  161.     }

  162.     public List<Filtro> filtriList(ISearch ricerca, int idLista) throws AuditException {
  163.         String nomeMetodo = "filtriList";
  164.         int offset;
  165.         int limit;
  166.         String search;
  167.         String queryString;

  168.         limit = ricerca.getPageSize(idLista);
  169.         offset = ricerca.getIndexIniziale(idLista);
  170.         search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));

  171.         PreparedStatement stmt=null;
  172.         ResultSet risultato=null;
  173.         ArrayList<Filtro> lista = new ArrayList<Filtro>();

  174.         try {

  175.             if (!search.equals("")) {
  176.                 //query con search
  177.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  178.                 sqlQueryObject.addFromTable(Costanti.DB_AUDIT_FILTRI);
  179.                 sqlQueryObject.addSelectCountField("*", "cont");
  180.                 sqlQueryObject.addWhereCondition(false, sqlQueryObject.getWhereLikeCondition("username",search,true,true),
  181.                         sqlQueryObject.getWhereLikeCondition("tipo_operazione",search,true,true),
  182.                         sqlQueryObject.getWhereLikeCondition("tipo",search,true,true),
  183.                         sqlQueryObject.getWhereLikeCondition("stato",search,true,true),
  184.                         sqlQueryObject.getWhereLikeCondition("dump_search",search,true,true));
  185.                 queryString = sqlQueryObject.createSQLQuery();
  186.             } else {
  187.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  188.                 sqlQueryObject.addFromTable(Costanti.DB_AUDIT_FILTRI);
  189.                 sqlQueryObject.addSelectCountField("*", "cont");
  190.                 queryString = sqlQueryObject.createSQLQuery();
  191.             }
  192.             stmt = this.connectionDB.prepareStatement(queryString);
  193.             risultato = stmt.executeQuery();
  194.             if (risultato.next())
  195.                 ricerca.setNumEntries(idLista,risultato.getInt(1));
  196.             risultato.close();
  197.             stmt.close();

  198.             // ricavo le entries
  199.             if (limit == 0) // con limit
  200.                 limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;

  201.             if (!search.equals("")) { // con search
  202.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  203.                 sqlQueryObject.addFromTable(Costanti.DB_AUDIT_FILTRI);
  204.                 sqlQueryObject.addSelectField("id");
  205.                 sqlQueryObject.addSelectField("username");
  206.                 sqlQueryObject.addSelectField("tipo_operazione");
  207.                 sqlQueryObject.addSelectField("tipo");
  208.                 sqlQueryObject.addSelectField("stato");
  209.                 sqlQueryObject.addSelectField("dump_search");
  210.                 sqlQueryObject.addSelectField("ora_registrazione");
  211.                 sqlQueryObject.addWhereCondition(false, sqlQueryObject.getWhereLikeCondition("username",search,true,true),
  212.                         sqlQueryObject.getWhereLikeCondition("tipo_operazione",search,true,true),
  213.                         sqlQueryObject.getWhereLikeCondition("tipo",search,true,true),
  214.                         sqlQueryObject.getWhereLikeCondition("stato",search,true,true),
  215.                         sqlQueryObject.getWhereLikeCondition("dump_search",search,true,true));
  216.                 sqlQueryObject.addOrderBy("ora_registrazione");
  217.                 sqlQueryObject.setSortType(true);
  218.                 sqlQueryObject.setLimit(limit);
  219.                 sqlQueryObject.setOffset(offset);
  220.                 queryString = sqlQueryObject.createSQLQuery();
  221.             } else {
  222.                 // senza search
  223.                 ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  224.                 sqlQueryObject.addFromTable(Costanti.DB_AUDIT_FILTRI);
  225.                 sqlQueryObject.addSelectField("id");
  226.                 sqlQueryObject.addSelectField("username");
  227.                 sqlQueryObject.addSelectField("tipo_operazione");
  228.                 sqlQueryObject.addSelectField("tipo");
  229.                 sqlQueryObject.addSelectField("stato");
  230.                 sqlQueryObject.addSelectField("dump_search");
  231.                 sqlQueryObject.addSelectField("ora_registrazione");
  232.                 sqlQueryObject.addOrderBy("ora_registrazione");
  233.                 sqlQueryObject.setSortType(true);
  234.                 sqlQueryObject.setLimit(limit);
  235.                 sqlQueryObject.setOffset(offset);
  236.                 queryString = sqlQueryObject.createSQLQuery();
  237.             }
  238.             stmt = this.connectionDB.prepareStatement(queryString);
  239.             risultato = stmt.executeQuery();

  240.             while (risultato.next()) {
  241.                 lista.add(this.getFiltro(risultato.getLong("id")));
  242.             }

  243.             return lista;

  244.         } catch (Exception qe) {
  245.             throw new AuditException("[DriverAudit::" + nomeMetodo + "] Errore : " + qe.getMessage());
  246.         } finally {
  247.             try {
  248.                 if(risultato!=null)
  249.                     risultato.close();
  250.             } catch (Exception e) {
  251.                 // ignore exception
  252.             }
  253.             try {
  254.                 if(stmt!=null)
  255.                     stmt.close();
  256.             } catch (Exception e) {
  257.                 // ignore exception
  258.             }
  259.         }
  260.     }
  261.    
  262.     public Filtro getFiltro(long id) throws AuditException {
  263.        
  264.         Filtro filtro = null;
  265.         PreparedStatement stm = null;
  266.         ResultSet rs = null;

  267.         try {
  268.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  269.             sqlQueryObject.addFromTable(Costanti.DB_AUDIT_FILTRI);
  270.             sqlQueryObject.addSelectField("*");
  271.             sqlQueryObject.addWhereCondition("id=?");
  272.             String sqlQuery = sqlQueryObject.createSQLQuery();
  273.             stm = this.connectionDB.prepareStatement(sqlQuery);
  274.             stm.setLong(1, id);
  275.             rs = stm.executeQuery();
  276.             if (rs.next()) {
  277.                 filtro = new Filtro();
  278.                 filtro.setUsername(rs.getString("username"));
  279.                 filtro.setTipoOperazione(Tipologia.toEnumConstant(rs.getString("tipo_operazione")));
  280.                 filtro.setTipoOggettoInModifica(rs.getString("tipo"));
  281.                 filtro.setStatoOperazione(Stato.toEnumConstant(rs.getString("stato")));
  282.                 filtro.setDump(rs.getString("dump_search"));
  283.                 if(rs.getInt("dump_expr")==1)
  284.                     filtro.setDumpExprRegular(true);
  285.                 else
  286.                     filtro.setDumpExprRegular(false);
  287.                
  288.                 if(rs.getInt("enabled")==1)
  289.                     filtro.setAuditEnabled(true);
  290.                 else
  291.                     filtro.setAuditEnabled(false);
  292.                 if(rs.getInt("dump")==1)
  293.                     filtro.setDumpEnabled(true);
  294.                 else
  295.                     filtro.setDumpEnabled(false);
  296.                
  297.                 filtro.setId(rs.getLong("id"));
  298.             }else{
  299.                 throw new Exception("Filtro con id["+id+"] non trovato");
  300.             }
  301.             rs.close();
  302.             stm.close();
  303.        
  304.             return filtro;
  305.         } catch (SQLException se) {
  306.             throw new AuditException("[DriverAudit::::getFiltri] SqlException: " + se.getMessage(),se);
  307.         } catch (Exception ex) {
  308.             throw new AuditException("[DriverAudit::::getFiltri] Exception: " + ex.getMessage(),ex);
  309.         } finally {
  310.             try {
  311.                 if(rs!=null)
  312.                     rs.close();
  313.             } catch (Exception e) {
  314.                 // ignore exception
  315.             }
  316.             try {
  317.                 if(stm!=null)
  318.                     stm.close();
  319.             } catch (Exception e) {
  320.                 // ignore exception
  321.             }
  322.         }
  323.     }
  324.    
  325.     public ArrayList<Appender> getAppender() throws AuditException {
  326.        
  327.         ArrayList<Appender> appender = new ArrayList<Appender>();
  328.         PreparedStatement stm = null;
  329.         ResultSet rs = null;

  330.         try {
  331.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  332.             sqlQueryObject.addFromTable(Costanti.DB_AUDIT_APPENDER);
  333.             sqlQueryObject.addSelectField("id");
  334.             String sqlQuery = sqlQueryObject.createSQLQuery();
  335.             stm = this.connectionDB.prepareStatement(sqlQuery);
  336.             rs = stm.executeQuery();
  337.             while (rs.next()) {
  338.                 appender.add(this.getAppender(rs.getLong("id")));
  339.             }
  340.             rs.close();
  341.             stm.close();
  342.        
  343.             return appender;
  344.         } catch (SQLException se) {
  345.             throw new AuditException("[DriverAudit::getAppender] SqlException: " + se.getMessage(),se);
  346.         } catch (Exception ex) {
  347.             throw new AuditException("[DriverAudit::getAppender] Exception: " + ex.getMessage(),ex);
  348.         } finally {
  349.             try {
  350.                 if(rs!=null)
  351.                     rs.close();
  352.             } catch (Exception e) {
  353.                 // ignore exception
  354.             }
  355.             try {
  356.                 if(stm!=null)
  357.                     stm.close();
  358.             } catch (Exception e) {
  359.                 // ignore exception
  360.             }
  361.         }
  362.     }
  363.    
  364.    
  365.     public Appender getAppender(String nome) throws AuditException {
  366.         PreparedStatement stm = null;
  367.         ResultSet rs = null;
  368.        
  369.         try {
  370.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  371.             sqlQueryObject.addFromTable(Costanti.DB_AUDIT_APPENDER);
  372.             sqlQueryObject.addSelectField("id");
  373.             sqlQueryObject.addWhereCondition("name=?");
  374.             String sqlQuery = sqlQueryObject.createSQLQuery();
  375.             stm = this.connectionDB.prepareStatement(sqlQuery);
  376.             stm.setString(1, nome);
  377.             rs = stm.executeQuery();
  378.             if (rs.next()) {
  379.            
  380.                 return this.getAppender(rs.getLong("id"));
  381.                
  382.             }else{
  383.                 throw new Exception("Appender con nome["+nome+"] non trovato");
  384.             }
  385.        
  386.         } catch (SQLException se) {
  387.             throw new AuditException("[DriverAudit::getAppender] SqlException: " + se.getMessage(),se);
  388.         } catch (Exception ex) {
  389.             throw new AuditException("[DriverAudit::getAppender] Exception: " + ex.getMessage(),ex);
  390.         } finally {
  391.             try {
  392.                 if(rs!=null)
  393.                     rs.close();
  394.             } catch (Exception e) {
  395.                 // ignore exception
  396.             }
  397.             try {
  398.                 if(stm!=null)
  399.                     stm.close();
  400.             } catch (Exception e) {
  401.                 // ignore exception
  402.             }
  403.         }
  404.     }
  405.    
  406.     public Appender getAppender(long id) throws AuditException {
  407.        
  408.         Appender appender = null;
  409.         PreparedStatement stm = null;
  410.         ResultSet rs = null;
  411.         PreparedStatement stmProperties = null;
  412.         ResultSet rsProperties = null;

  413.         try {
  414.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  415.             sqlQueryObject.addFromTable(Costanti.DB_AUDIT_APPENDER);
  416.             sqlQueryObject.addSelectField("*");
  417.             sqlQueryObject.addWhereCondition("id=?");
  418.             String sqlQuery = sqlQueryObject.createSQLQuery();
  419.             stm = this.connectionDB.prepareStatement(sqlQuery);
  420.             stm.setLong(1, id);
  421.             rs = stm.executeQuery();
  422.             if (rs.next()) {
  423.                
  424.                 appender = new Appender();
  425.                
  426.                 appender.setNome(rs.getString("name"));
  427.                 appender.setClassName(rs.getString("class"));
  428.                 appender.setId(rs.getLong("id"));
  429.                
  430.                 ISQLQueryObject sqlQueryObjectProperties = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  431.                 sqlQueryObjectProperties.addFromTable(Costanti.DB_AUDIT_APPENDER_PROPERTIES);
  432.                 sqlQueryObjectProperties.addSelectField("*");
  433.                 sqlQueryObjectProperties.addWhereCondition("id_audit_appender=?");
  434.                 String sqlQueryProperties = sqlQueryObjectProperties.createSQLQuery();
  435.                 stmProperties = this.connectionDB.prepareStatement(sqlQueryProperties);
  436.                 stmProperties.setLong(1, appender.getId());
  437.                 rsProperties = stmProperties.executeQuery();
  438.                 while (rsProperties.next()) {
  439.                    
  440.                     AppenderProperty ap = new AppenderProperty();
  441.                     ap.setId(rsProperties.getLong("id"));
  442.                     ap.setIdAppender(appender.getId());
  443.                     ap.setName(rsProperties.getString("name"));
  444.                     ap.setValue(rsProperties.getString("value"));
  445.                     appender.addProperty(ap);
  446.                    
  447.                 }
  448.                
  449.             }else{
  450.                 throw new Exception("Appender con id["+id+"] non trovato");
  451.             }
  452.             rs.close();
  453.             stm.close();
  454.        
  455.             return appender;
  456.         } catch (SQLException se) {
  457.             throw new AuditException("[DriverAudit::getAppender] SqlException: " + se.getMessage(),se);
  458.         } catch (Exception ex) {
  459.             throw new AuditException("[DriverAudit::getAppender] Exception: " + ex.getMessage(),ex);
  460.         } finally {
  461.             try {
  462.                 if(rsProperties!=null)
  463.                     rsProperties.close();
  464.             } catch (Exception e) {
  465.                 // ignore exception
  466.             }
  467.             try {
  468.                 if(stmProperties!=null)
  469.                     stmProperties.close();
  470.             } catch (Exception e) {
  471.                 // ignore exception
  472.             }
  473.             try {
  474.                 if(rs!=null)
  475.                     rs.close();
  476.             } catch (Exception e) {
  477.                 // ignore exception
  478.             }
  479.             try {
  480.                 if(stm!=null)
  481.                     stm.close();
  482.             } catch (Exception e) {
  483.                 // ignore exception
  484.             }
  485.         }
  486.     }
  487.    
  488.    

  489.    
  490.    
  491.     public void createConfigurazione(Configurazione configurazione) throws AuditException {
  492.         PreparedStatement stm = null;
  493.         String sqlQuery = "";

  494.         if (configurazione == null)
  495.             throw new AuditException("[DriverAudit::createConfigurazione] Parametro non valido.");

  496.        
  497.         try {
  498.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  499.             sqlQueryObject.addInsertTable(Costanti.DB_AUDIT_CONFIGURAZIONE);
  500.             sqlQueryObject.addInsertField("audit_engine", "?");
  501.             sqlQueryObject.addInsertField("enabled", "?");
  502.             sqlQueryObject.addInsertField("dump", "?");
  503.             sqlQueryObject.addInsertField("dump_format", "?");
  504.             sqlQuery = sqlQueryObject.createSQLInsert();
  505.             stm = this.connectionDB.prepareStatement(sqlQuery);
  506.             if(configurazione.isAuditEngineEnabled())
  507.                 stm.setInt(1, 1);
  508.             else
  509.                 stm.setInt(1, 0);
  510.             if(configurazione.isAuditEnabled())
  511.                 stm.setInt(2, 1);
  512.             else
  513.                 stm.setInt(2, 0);
  514.             if(configurazione.isDumpEnabled())
  515.                 stm.setInt(3, 1);
  516.             else
  517.                 stm.setInt(3, 0);
  518.             stm.setString(4, configurazione.getDumpFormat());
  519.             stm.executeUpdate();
  520.             stm.close();
  521.            
  522.             // Filtri
  523.             for(int i=0; i<configurazione.sizeFiltri(); i++){
  524.                 Filtro filtro = configurazione.getFiltro(i);
  525.                 this.createFiltro(filtro);
  526.             }
  527.            
  528.             // Appender
  529.             for(int i=0; i<configurazione.sizeAppender(); i++){
  530.                 Appender appender = configurazione.getAppender(i);
  531.                 this.createAppender(appender);
  532.             }
  533.            
  534.         } catch (Exception qe) {
  535.             throw new AuditException(qe.getMessage(),qe);
  536.         } finally {
  537.             try {
  538.                 if(stm!=null)
  539.                     stm.close();
  540.             } catch (Exception e) {
  541.                 // ignore exception
  542.             }
  543.         }
  544.     }
  545.    
  546.     public void createFiltro(Filtro filtro) throws AuditException {
  547.         PreparedStatement stm = null;
  548.         String sqlQuery = "";

  549.         if (filtro == null)
  550.             throw new AuditException("[DriverAudit::createFiltro] Parametro non valido.");

  551.        
  552.         try {
  553.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  554.             sqlQueryObject.addInsertTable(Costanti.DB_AUDIT_FILTRI);
  555.             sqlQueryObject.addInsertField("username", "?");
  556.             sqlQueryObject.addInsertField("tipo_operazione", "?");
  557.             sqlQueryObject.addInsertField("tipo", "?");
  558.             sqlQueryObject.addInsertField("stato", "?");
  559.             sqlQueryObject.addInsertField("dump_search", "?");
  560.             sqlQueryObject.addInsertField("dump_expr", "?");
  561.             sqlQueryObject.addInsertField("enabled", "?");
  562.             sqlQueryObject.addInsertField("dump", "?");
  563.                
  564.             sqlQuery = sqlQueryObject.createSQLInsert();
  565.             stm = this.connectionDB.prepareStatement(sqlQuery);
  566.             stm.setString(1, filtro.getUsername());
  567.             stm.setString(2, filtro.getTipoOperazione() != null ?
  568.                     filtro.getTipoOperazione().toString() : null);
  569.             stm.setString(3, filtro.getTipoOggettoInModifica());
  570.             stm.setString(4, filtro.getStatoOperazione() != null ?
  571.                     filtro.getStatoOperazione().toString() : null);
  572.             stm.setString(5, filtro.getDump());
  573.             if(filtro.isDumpExprRegular())
  574.                 stm.setInt(6, 1);
  575.             else
  576.                 stm.setInt(6, 0);
  577.             if(filtro.isAuditEnabled())
  578.                 stm.setInt(7, 1);
  579.             else
  580.                 stm.setInt(7, 0);
  581.             if(filtro.isDumpEnabled())
  582.                 stm.setInt(8, 1);
  583.             else
  584.                 stm.setInt(8, 0);
  585.             stm.executeUpdate();
  586.             stm.close();
  587.            
  588.         } catch (Exception qe) {
  589.             throw new AuditException(qe.getMessage(),qe);
  590.         } finally {
  591.             try {
  592.                 if(stm!=null)
  593.                     stm.close();
  594.             } catch (Exception e) {
  595.                 // ignore exception
  596.             }
  597.         }
  598.     }
  599.    
  600.     public void createAppender(Appender appender) throws AuditException {
  601.         PreparedStatement stm = null;
  602.         String sqlQuery = "";

  603.         if (appender == null)
  604.             throw new AuditException("[DriverAudit::createAppender] Parametro non valido.");

  605.        
  606.         try {
  607.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  608.             sqlQueryObject.addInsertTable(Costanti.DB_AUDIT_APPENDER);
  609.             sqlQueryObject.addInsertField("name", "?");
  610.             sqlQueryObject.addInsertField("class", "?");
  611.                
  612.             sqlQuery = sqlQueryObject.createSQLInsert();
  613.             stm = this.connectionDB.prepareStatement(sqlQuery);
  614.             stm.setString(1, appender.getNome());
  615.             stm.setString(2, appender.getClassName());
  616.             stm.executeUpdate();
  617.             stm.close();
  618.            
  619.             // Recupero id dell'appender appena inserito
  620.             long idAppender = this.getAppender(appender.getNome()).getId();
  621.             appender.setId(idAppender);
  622.            
  623.             // Inserisco proprieta
  624.             for(int i=0; i<appender.sizeProperties(); i++){
  625.                
  626.                 AppenderProperty ap = appender.getProperty(i);
  627.                 ap.setIdAppender(idAppender);
  628.                
  629.                 this.createAppenderProperty(ap);
  630.             }
  631.            
  632.         } catch (Exception qe) {
  633.             throw new AuditException(qe.getMessage(),qe);
  634.         } finally {
  635.             try {
  636.                 if(stm!=null)
  637.                     stm.close();
  638.             } catch (Exception e) {
  639.                 // ignore exception
  640.             }
  641.         }
  642.     }
  643.    
  644.     public void createAppenderProperty(AppenderProperty appender) throws AuditException {
  645.         PreparedStatement stm = null;
  646.         String sqlQuery = "";

  647.         if (appender == null)
  648.             throw new AuditException("[DriverAudit::createAppender] Parametro non valido.");
  649.        
  650.         if (appender.getIdAppender() <=0 )
  651.             throw new AuditException("[DriverAudit::createAppender] IdAppender ["+appender.getIdAppender()+"] non valido.");

  652.        
  653.         try {
  654.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  655.             sqlQueryObject.addInsertTable(Costanti.DB_AUDIT_APPENDER_PROPERTIES);
  656.             sqlQueryObject.addInsertField("name", "?");
  657.             sqlQueryObject.addInsertField("value", "?");
  658.             sqlQueryObject.addInsertField("id_audit_appender", "?");
  659.            
  660.             sqlQuery = sqlQueryObject.createSQLInsert();
  661.             stm = this.connectionDB.prepareStatement(sqlQuery);
  662.             stm.setString(1, appender.getName());
  663.             stm.setString(2, appender.getValue());
  664.             stm.setLong(3, appender.getIdAppender());
  665.             stm.executeUpdate();
  666.             stm.close();
  667.                        
  668.         } catch (Exception qe) {
  669.             throw new AuditException(qe.getMessage(),qe);
  670.         } finally {
  671.             try {
  672.                 if(stm!=null)
  673.                     stm.close();
  674.             } catch (Exception e) {
  675.                 // ignore exception
  676.             }
  677.         }
  678.     }
  679.    
  680.    

  681.     public void updateConfigurazione(Configurazione configurazione) throws AuditException {
  682.         PreparedStatement stm = null;
  683.         String sqlQuery = "";

  684.         if (configurazione == null)
  685.             throw new AuditException("[DriverAudit::updateConfigurazione] Parametro non valido.");

  686.        
  687.         try {
  688.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  689.             sqlQueryObject.addUpdateTable(Costanti.DB_AUDIT_CONFIGURAZIONE);
  690.             sqlQueryObject.addUpdateField("audit_engine", "?");
  691.             sqlQueryObject.addUpdateField("enabled", "?");
  692.             sqlQueryObject.addUpdateField("dump", "?");
  693.             sqlQueryObject.addUpdateField("dump_format", "?");
  694.             sqlQuery = sqlQueryObject.createSQLUpdate();
  695.             stm = this.connectionDB.prepareStatement(sqlQuery);
  696.             if(configurazione.isAuditEngineEnabled())
  697.                 stm.setInt(1, 1);
  698.             else
  699.                 stm.setInt(1, 0);
  700.             if(configurazione.isAuditEnabled())
  701.                 stm.setInt(2, 1);
  702.             else
  703.                 stm.setInt(2, 0);
  704.             if(configurazione.isDumpEnabled())
  705.                 stm.setInt(3, 1);
  706.             else
  707.                 stm.setInt(3, 0);
  708.             stm.setString(4, configurazione.getDumpFormat());
  709.             stm.executeUpdate();
  710.             stm.close();
  711.            
  712.             // Elimino tutti i filtri presenti
  713.             this.deleteFiltri();
  714.                        
  715.             // Aggiungo quelli presenti
  716.             for(int i=0; i<configurazione.sizeFiltri(); i++){
  717.                 Filtro filtro = configurazione.getFiltro(i);
  718.                 this.createFiltro(filtro);
  719.             }
  720.            
  721.             // Elimino tutti gli appender presenti
  722.             this.deleteAppenders();
  723.            
  724.             // Appender
  725.             for(int i=0; i<configurazione.sizeAppender(); i++){
  726.                 Appender appender = configurazione.getAppender(i);
  727.                 this.createAppender(appender);
  728.             }
  729.            
  730.         } catch (Exception qe) {
  731.             throw new AuditException(qe.getMessage(),qe);
  732.         } finally {
  733.             try {
  734.                 if(stm!=null)
  735.                     stm.close();
  736.             } catch (Exception e) {
  737.                 // ignore exception
  738.             }
  739.         }
  740.     }
  741.    
  742.    
  743.     public void updateFiltro(Filtro filtro) throws AuditException {
  744.         PreparedStatement stm = null;
  745.         String sqlQuery = "";

  746.         if (filtro == null)
  747.             throw new AuditException("[DriverAudit::updateFiltro] Parametro non valido.");

  748.         if (filtro.getId()<=0)
  749.             throw new AuditException("[DriverAudit::updateFiltro] Id ["+filtro.getId()+"] non valido.");
  750.        
  751.         try {
  752.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  753.             sqlQueryObject.addUpdateTable(Costanti.DB_AUDIT_FILTRI);
  754.             sqlQueryObject.addUpdateField("username", "?");
  755.             sqlQueryObject.addUpdateField("tipo_operazione", "?");
  756.             sqlQueryObject.addUpdateField("tipo", "?");
  757.             sqlQueryObject.addUpdateField("stato", "?");
  758.             sqlQueryObject.addUpdateField("dump_search", "?");
  759.             sqlQueryObject.addUpdateField("dump_expr", "?");
  760.             sqlQueryObject.addUpdateField("enabled", "?");
  761.             sqlQueryObject.addUpdateField("dump", "?");
  762.             sqlQueryObject.addWhereCondition("id=?");
  763.                
  764.             sqlQuery = sqlQueryObject.createSQLUpdate();
  765.             stm = this.connectionDB.prepareStatement(sqlQuery);
  766.             stm.setString(1, filtro.getUsername());
  767.             stm.setString(2, filtro.getTipoOperazione() != null ?
  768.                     filtro.getTipoOperazione().toString() : null);
  769.             stm.setString(3, filtro.getTipoOggettoInModifica());
  770.             stm.setString(4, filtro.getStatoOperazione() != null ?
  771.                     filtro.getStatoOperazione().toString() : null);
  772.             stm.setString(5, filtro.getDump());
  773.             if(filtro.isDumpExprRegular())
  774.                 stm.setInt(6, 1);
  775.             else
  776.                 stm.setInt(6, 0);
  777.             if(filtro.isAuditEnabled())
  778.                 stm.setInt(7, 1);
  779.             else
  780.                 stm.setInt(7, 0);
  781.             if(filtro.isDumpEnabled())
  782.                 stm.setInt(8, 1);
  783.             else
  784.                 stm.setInt(8, 0);
  785.             stm.setLong(9, filtro.getId());
  786.             stm.executeUpdate();
  787.             stm.close();
  788.            
  789.         } catch (Exception qe) {
  790.             throw new AuditException(qe.getMessage(),qe);
  791.         } finally {
  792.             try {
  793.                 if(stm!=null)
  794.                     stm.close();
  795.             } catch (Exception e) {
  796.                 // ignore exception
  797.             }
  798.         }
  799.     }
  800.    
  801.     public void updateAppender(Appender appender) throws AuditException {
  802.         PreparedStatement stm = null;
  803.         String sqlQuery = "";

  804.         if (appender == null)
  805.             throw new AuditException("[DriverAudit::updateAppender] Parametro non valido.");
  806.        
  807.         if (appender.getId()<=0)
  808.             throw new AuditException("[DriverAudit::updateAppender] Id ["+appender.getId()+"] non valido.");
  809.        
  810.        
  811.         try {
  812.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  813.             sqlQueryObject.addUpdateTable(Costanti.DB_AUDIT_APPENDER);
  814.             sqlQueryObject.addUpdateField("name", "?");
  815.             sqlQueryObject.addUpdateField("class", "?");
  816.             sqlQueryObject.addWhereCondition("id=?");
  817.                
  818.             sqlQuery = sqlQueryObject.createSQLUpdate();
  819.             stm = this.connectionDB.prepareStatement(sqlQuery);
  820.             stm.setString(1, appender.getNome());
  821.             stm.setString(2, appender.getClassName());
  822.             stm.setLong(3, appender.getId());
  823.             stm.executeUpdate();
  824.             stm.close();
  825.            
  826.             // Delete appenderProperties
  827.             deleteAppenderProperties(appender);
  828.            
  829.             // Inserisco le proprieta
  830.             for(int i=0; i<appender.sizeProperties(); i++){
  831.                
  832.                 AppenderProperty ap = appender.getProperty(i);
  833.                 ap.setIdAppender(appender.getId());
  834.                
  835.                 this.createAppenderProperty(ap);
  836.             }
  837.            
  838.         } catch (Exception qe) {
  839.             throw new AuditException(qe.getMessage(),qe);
  840.         } finally {
  841.             try {
  842.                 if(stm!=null)
  843.                     stm.close();
  844.             } catch (Exception e) {
  845.                 // ignore exception
  846.             }
  847.         }
  848.     }
  849.    
  850.    
  851.     public void updateAppenderProperty(AppenderProperty appender) throws AuditException {
  852.         PreparedStatement stm = null;
  853.         String sqlQuery = "";

  854.         if (appender == null)
  855.             throw new AuditException("[DriverAudit::updateAppenderProperty] Parametro non valido.");
  856.        
  857.         if (appender.getIdAppender() <=0 )
  858.             throw new AuditException("[DriverAudit::updateAppenderProperty] IdAppender ["+appender.getIdAppender()+"] non valido.");

  859.         if (appender.getId() <=0 )
  860.             throw new AuditException("[DriverAudit::updateAppenderProperty] Id ["+appender.getId()+"] non valido.");

  861.        
  862.         try {
  863.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  864.             sqlQueryObject.addUpdateTable(Costanti.DB_AUDIT_APPENDER_PROPERTIES);
  865.             sqlQueryObject.addUpdateField("name", "?");
  866.             sqlQueryObject.addUpdateField("value", "?");
  867.             sqlQueryObject.addUpdateField("id_audit_appender", "?");
  868.             sqlQueryObject.addWhereCondition("id=?");
  869.            
  870.             sqlQuery = sqlQueryObject.createSQLUpdate();
  871.             stm = this.connectionDB.prepareStatement(sqlQuery);
  872.             stm.setString(1, appender.getName());
  873.             stm.setString(2, appender.getValue());
  874.             stm.setLong(3, appender.getIdAppender());
  875.             stm.executeUpdate();
  876.             stm.close();
  877.                        
  878.         } catch (Exception qe) {
  879.             throw new AuditException(qe.getMessage(),qe);
  880.         } finally {
  881.             try {
  882.                 if(stm!=null)
  883.                     stm.close();
  884.             } catch (Exception e) {
  885.                 // ignore exception
  886.             }
  887.         }
  888.     }
  889.    
  890.    
  891.    
  892.     public void deleteConfigurazione() throws AuditException {
  893.         PreparedStatement stm = null;
  894.         String sqlQuery = "";

  895.         try {
  896.             // Elimino tutti i filtri presenti
  897.             this.deleteFiltri();
  898.                        
  899.             // Elimino tutti gli appender presenti
  900.             this.deleteAppenders();
  901.            
  902.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  903.             sqlQueryObject.addDeleteTable(Costanti.DB_AUDIT_CONFIGURAZIONE);
  904.             sqlQuery = sqlQueryObject.createSQLDelete();
  905.             stm = this.connectionDB.prepareStatement(sqlQuery);
  906.             stm.executeUpdate();
  907.             stm.close();
  908.            
  909.         } catch (Exception qe) {
  910.             throw new AuditException(qe.getMessage(),qe);
  911.         } finally {
  912.             try {
  913.                 if(stm!=null)
  914.                     stm.close();
  915.             } catch (Exception e) {
  916.                 // ignore exception
  917.             }
  918.         }
  919.     }
  920.    
  921.    
  922.     public void deleteFiltri() throws AuditException {
  923.         PreparedStatement stm = null;
  924.         String sqlQuery = "";

  925.         try {
  926.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  927.             sqlQueryObject.addDeleteTable(Costanti.DB_AUDIT_FILTRI);
  928.             sqlQuery = sqlQueryObject.createSQLDelete();
  929.             stm = this.connectionDB.prepareStatement(sqlQuery);
  930.             stm.executeUpdate();
  931.             stm.close();
  932.            
  933.         } catch (Exception qe) {
  934.             throw new AuditException(qe.getMessage(),qe);
  935.         } finally {
  936.             try {
  937.                 if(stm!=null)
  938.                     stm.close();
  939.             } catch (Exception e) {
  940.                 // ignore exception
  941.             }
  942.         }
  943.     }
  944.    
  945.     public void deleteFiltro(Filtro f) throws AuditException {
  946.         PreparedStatement stm = null;
  947.         String sqlQuery = "";

  948.         try {
  949.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  950.             sqlQueryObject.addDeleteTable(Costanti.DB_AUDIT_FILTRI);
  951.             sqlQueryObject.addWhereCondition("id=?");
  952.             sqlQuery = sqlQueryObject.createSQLDelete();
  953.             stm = this.connectionDB.prepareStatement(sqlQuery);
  954.             stm.setLong(1, f.getId());
  955.             stm.executeUpdate();
  956.             stm.close();
  957.            
  958.         } catch (Exception qe) {
  959.             throw new AuditException(qe.getMessage(),qe);
  960.         } finally {
  961.             try {
  962.                 if(stm!=null)
  963.                     stm.close();
  964.             } catch (Exception e) {
  965.                 // ignore exception
  966.             }
  967.         }
  968.     }
  969.    
  970.     public void deleteAppenders() throws AuditException {
  971.         PreparedStatement stm = null;
  972.         String sqlQuery = "";

  973.         try {
  974.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  975.             sqlQueryObject.addDeleteTable(Costanti.DB_AUDIT_APPENDER_PROPERTIES);
  976.             sqlQuery = sqlQueryObject.createSQLDelete();
  977.             stm = this.connectionDB.prepareStatement(sqlQuery);
  978.             stm.executeUpdate();
  979.             stm.close();
  980.            
  981.             sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  982.             sqlQueryObject.addDeleteTable(Costanti.DB_AUDIT_APPENDER);
  983.             sqlQuery = sqlQueryObject.createSQLDelete();
  984.             stm = this.connectionDB.prepareStatement(sqlQuery);
  985.             stm.executeUpdate();
  986.             stm.close();
  987.            
  988.         } catch (Exception qe) {
  989.             throw new AuditException(qe.getMessage(),qe);
  990.         } finally {
  991.             try {
  992.                 if(stm!=null)
  993.                     stm.close();
  994.             } catch (Exception e) {
  995.                 // ignore exception
  996.             }
  997.         }
  998.     }
  999.    
  1000.     public void deleteAppenderProperties(Appender appender) throws AuditException {
  1001.         PreparedStatement stm = null;
  1002.         String sqlQuery = "";

  1003.         if (appender == null)
  1004.             throw new AuditException("[DriverAudit::deleteAppenderProperties] Parametro non valido.");
  1005.        
  1006.         if (appender.getId() <=0 )
  1007.             throw new AuditException("[DriverAudit::deleteAppenderProperties] Id ["+appender.getId()+"] non valido.");

  1008.        
  1009.         try {
  1010.             ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDB);
  1011.             sqlQueryObject.addDeleteTable(Costanti.DB_AUDIT_APPENDER_PROPERTIES);
  1012.             sqlQueryObject.addWhereCondition("id_audit_appender=?");
  1013.             sqlQuery = sqlQueryObject.createSQLDelete();
  1014.             stm = this.connectionDB.prepareStatement(sqlQuery);
  1015.             stm.setLong(1, appender.getId());
  1016.             stm.executeUpdate();
  1017.             stm.close();
  1018.            
  1019.         } catch (Exception qe) {
  1020.             throw new AuditException(qe.getMessage(),qe);
  1021.         } finally {
  1022.             try {
  1023.                 if(stm!=null)
  1024.                     stm.close();
  1025.             } catch (Exception e) {
  1026.                 // ignore exception
  1027.             }
  1028.         }
  1029.     }
  1030. }