JDBCStatisticaSettimanaleServiceSearchImpl.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.statistiche.dao.jdbc;

  21. import java.sql.Connection;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. import java.util.Map;

  25. import org.openspcoop2.core.statistiche.StatisticaContenuti;
  26. import org.openspcoop2.core.statistiche.StatisticaSettimanale;
  27. import org.openspcoop2.core.statistiche.dao.jdbc.converter.StatisticaSettimanaleFieldConverter;
  28. import org.openspcoop2.core.statistiche.dao.jdbc.fetch.StatisticaSettimanaleFetch;
  29. import org.openspcoop2.core.statistiche.utils.AliasTableRicerchePersonalizzate;
  30. import org.openspcoop2.core.statistiche.utils.StatisticheIndexUtils;
  31. import org.openspcoop2.generic_project.beans.CustomField;
  32. import org.openspcoop2.generic_project.beans.FunctionField;
  33. import org.openspcoop2.generic_project.beans.IField;
  34. import org.openspcoop2.generic_project.beans.InUse;
  35. import org.openspcoop2.generic_project.beans.NonNegativeNumber;
  36. import org.openspcoop2.generic_project.beans.Union;
  37. import org.openspcoop2.generic_project.beans.UnionExpression;
  38. import org.openspcoop2.generic_project.dao.jdbc.IJDBCServiceSearchWithoutId;
  39. import org.openspcoop2.generic_project.dao.jdbc.JDBCExpression;
  40. import org.openspcoop2.generic_project.dao.jdbc.JDBCPaginatedExpression;
  41. import org.openspcoop2.generic_project.dao.jdbc.JDBCServiceManagerProperties;
  42. import org.openspcoop2.generic_project.dao.jdbc.utils.IJDBCFetch;
  43. import org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject;
  44. import org.openspcoop2.generic_project.exception.MultipleResultException;
  45. import org.openspcoop2.generic_project.exception.NotFoundException;
  46. import org.openspcoop2.generic_project.exception.NotImplementedException;
  47. import org.openspcoop2.generic_project.exception.ServiceException;
  48. import org.openspcoop2.generic_project.expression.IExpression;
  49. import org.openspcoop2.generic_project.expression.impl.sql.ISQLFieldConverter;
  50. import org.openspcoop2.generic_project.utils.UtilsTemplate;
  51. import org.openspcoop2.utils.sql.ISQLQueryObject;
  52. import org.openspcoop2.utils.sql.SQLQueryObjectCore;
  53. import org.slf4j.Logger;

  54. /**    
  55.  * JDBCStatisticaSettimanaleServiceSearchImpl
  56.  *
  57.  * @author Poli Andrea (poli@link.it)
  58.  * @author $Author$
  59.  * @version $Rev$, $Date$
  60.  */
  61. public class JDBCStatisticaSettimanaleServiceSearchImpl implements IJDBCServiceSearchWithoutId<StatisticaSettimanale, JDBCServiceManager> {

  62.     private StatisticaSettimanaleFieldConverter _statisticaSettimanaleFieldConverter = null;
  63.     public StatisticaSettimanaleFieldConverter getStatisticaSettimanaleFieldConverter() {
  64.         if(this._statisticaSettimanaleFieldConverter==null){
  65.             this._statisticaSettimanaleFieldConverter = new StatisticaSettimanaleFieldConverter(this.jdbcServiceManager.getJdbcProperties().getDatabaseType());
  66.         }      
  67.         return this._statisticaSettimanaleFieldConverter;
  68.     }
  69.     @Override
  70.     public ISQLFieldConverter getFieldConverter() {
  71.         return this.getStatisticaSettimanaleFieldConverter();
  72.     }
  73.    
  74.     private StatisticaSettimanaleFetch statisticaSettimanaleFetch = new StatisticaSettimanaleFetch();
  75.     public StatisticaSettimanaleFetch getStatisticaSettimanaleFetch() {
  76.         return this.statisticaSettimanaleFetch;
  77.     }
  78.     @Override
  79.     public IJDBCFetch getFetch() {
  80.         return getStatisticaSettimanaleFetch();
  81.     }
  82.    
  83.    
  84.     private JDBCServiceManager jdbcServiceManager = null;

  85.     @Override
  86.     public void setServiceManager(JDBCServiceManager serviceManager) throws ServiceException{
  87.         this.jdbcServiceManager = serviceManager;
  88.     }
  89.    
  90.     @Override
  91.     public JDBCServiceManager getServiceManager() throws ServiceException{
  92.         return this.jdbcServiceManager;
  93.     }
  94.    

  95.    
  96.    
  97.    
  98.    
  99.     @Override
  100.     public List<StatisticaSettimanale> findAll(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotImplementedException, ServiceException,Exception {

  101.         List<StatisticaSettimanale> list = new ArrayList<StatisticaSettimanale>();
  102.        
  103.         boolean soloColonneIndicizzateFullIndex = StatisticheIndexUtils.isEnabledSoloColonneIndicizzateFullIndex(expression);
  104.        
  105.         if(soloColonneIndicizzateFullIndex) {
  106.             List<IField> fields = StatisticheIndexUtils.LISTA_COLONNE_INDEX_STAT_SETTIMANALE;
  107.             List<Map<String, Object>> returnMap = null;
  108.             try{
  109.                  // Il distinct serve solo se ci sono le ricerche con contenuto.
  110.                 // NOTA: il distinct rende le ricerce inefficenti (ed inoltre non e' utilizzabile con campi clob in oracle)
  111.                 boolean distinct = false;
  112.                 ISQLQueryObject sqlQueryObjectCheckJoin = sqlQueryObject.newSQLQueryObject();
  113.                 joinEngine(expression, sqlQueryObjectCheckJoin);
  114.                 distinct = ((SQLQueryObjectCore)sqlQueryObjectCheckJoin).sizeConditions()>0;
  115.                
  116.                 // BUG FIX: Siccome tra le colonne lette ci sono dei CLOB, in oracle non e' consentito utilizzare il DISTINCT.
  117.                 // Per questo motivo se c'e' da usare il distinct viene utilizzato il vecchio metodo
  118.                 if(distinct) {
  119.                     //System.out.println("NON EFFICIENTE");
  120.                    
  121.                     List<Long> ids = this.findAllTableIds(jdbcProperties, log, connection, sqlQueryObject, expression);
  122.                    
  123.                     for(Long id: ids) {
  124.                         list.add(this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour));
  125.                     }
  126.                    
  127.                 }
  128.                 else {
  129.                
  130.                     //System.out.println("EFFICIENTE");
  131.                    
  132.                     returnMap = this.select(jdbcProperties, log, connection, sqlQueryObject, expression, distinct, fields.toArray(new IField[1]));
  133.        
  134.                     for(Map<String, Object> map: returnMap) {
  135.                         list.add((StatisticaSettimanale)this.getStatisticaSettimanaleFetch().fetch(jdbcProperties.getDatabase(), StatisticaSettimanale.model(), map));
  136.                     }
  137.                    
  138.                 }
  139.                    
  140.             }catch(NotFoundException notFound){}
  141.         }
  142.         else {
  143.        
  144.             // TODO: implementazione non efficiente.
  145.             // Per ottenere una implementazione efficiente:
  146.             // 1. Usare metodo select di questa classe indirizzando esattamente i field necessari
  147.             // 2. Usare metodo getStatisticaSettimanaleFetch() sul risultato della select per ottenere un oggetto StatisticaSettimanale
  148.             //    La fetch con la map inserirà nell'oggetto solo i valori estratti
  149.    
  150.             List<Long> ids = this.findAllTableIds(jdbcProperties, log, connection, sqlQueryObject, expression);
  151.            
  152.             for(Long id: ids) {
  153.                 list.add(this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour));
  154.             }
  155.         }

  156.         return list;      
  157.        
  158.     }
  159.    
  160.     @Override
  161.     public StatisticaSettimanale find(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour)
  162.         throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException,Exception {

  163.         long id = this.findTableId(jdbcProperties, log, connection, sqlQueryObject, expression);
  164.         if(id>0){
  165.             return this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour);
  166.         }else{
  167.             throw new NotFoundException("Entry with id["+id+"] not found");
  168.         }
  169.        
  170.     }
  171.    
  172.     @Override
  173.     public NonNegativeNumber count(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression) throws NotImplementedException, ServiceException,Exception {
  174.        
  175.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareCount(jdbcProperties, log, connection, sqlQueryObject, expression,
  176.                                                 this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model());
  177.        
  178.         // Il distinct serve solo se ci sono le statistiche con contenuto.
  179.         // NOTA: il distinct rende le ricerce inefficenti (ed inoltre non e' utilizzabile con campi clob in oracle)
  180.         boolean distinct = false;
  181.         ISQLQueryObject sqlQueryObjectCheckJoin = sqlQueryObject.newSQLQueryObject();
  182.         joinEngine(expression, sqlQueryObjectCheckJoin);
  183.         distinct = ((SQLQueryObjectCore)sqlQueryObjectCheckJoin).sizeConditions()>0;
  184.        
  185.         if(!distinct && expression.inUseField(StatisticaSettimanale.model().STATISTICA_BASE.DATA, true)){
  186.             // uso la prima colonna dell'indice (se c'è la data e non è distinct)
  187.             sqlQueryObject.addSelectCountField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.DATA, true),"tot",distinct);
  188.         }
  189.         else{
  190.             sqlQueryObject.addSelectCountField(this.getStatisticaSettimanaleFieldConverter().toTable(StatisticaSettimanale.model())+".id","tot",distinct);
  191.         }
  192.        
  193.         joinEngine(expression,sqlQueryObject);
  194.        
  195.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.count(jdbcProperties, log, connection, sqlQueryObject, expression,
  196.                                                                             this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),listaQuery);
  197.     }


  198.     @Override
  199.     public List<Object> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  200.                                                     JDBCPaginatedExpression paginatedExpression, IField field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  201.         return this.select(jdbcProperties, log, connection, sqlQueryObject,
  202.                                 paginatedExpression, false, field);
  203.     }
  204.    
  205.     @Override
  206.     public List<Object> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  207.                                                     JDBCPaginatedExpression paginatedExpression, boolean distinct, IField field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  208.         List<Map<String,Object>> map =
  209.             this.select(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression, distinct, new IField[]{field});
  210.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.selectSingleObject(map);
  211.     }
  212.    
  213.     @Override
  214.     public List<Map<String,Object>> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  215.                                                     JDBCPaginatedExpression paginatedExpression, IField ... field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  216.         return this.select(jdbcProperties, log, connection, sqlQueryObject,
  217.                                 paginatedExpression, false, field);
  218.     }
  219.    
  220.     @Override
  221.     public List<Map<String,Object>> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  222.                                                     JDBCPaginatedExpression paginatedExpression, boolean distinct, IField ... field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  223.        
  224.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,paginatedExpression,field);
  225.         try{
  226.        
  227.             ISQLQueryObject sqlQueryObjectDistinct =
  228.                         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareSqlQueryObjectForSelectDistinct(distinct,sqlQueryObject, paginatedExpression, log,
  229.                                                 this.getStatisticaSettimanaleFieldConverter(), field);

  230.             return selectEngine(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression, sqlQueryObjectDistinct);
  231.            
  232.         }finally{
  233.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,paginatedExpression,field);
  234.         }
  235.     }

  236.     @Override
  237.     public Object aggregate(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  238.                                                     JDBCExpression expression, FunctionField functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  239.         Map<String,Object> map =
  240.             this.aggregate(jdbcProperties, log, connection, sqlQueryObject, expression, new FunctionField[]{functionField});
  241.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.selectAggregateObject(map,functionField);
  242.     }
  243.    
  244.     @Override
  245.     public Map<String,Object> aggregate(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  246.                                                     JDBCExpression expression, FunctionField ... functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {                                                  
  247.        
  248.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,expression,functionField);
  249.         try{
  250.             List<Map<String,Object>> list = selectEngine(jdbcProperties, log, connection, sqlQueryObject, expression);
  251.             return list.get(0);
  252.         }finally{
  253.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,expression,functionField);
  254.         }
  255.     }

  256.     @Override
  257.     public List<Map<String,Object>> groupBy(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  258.                                                     JDBCExpression expression, FunctionField ... functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  259.        
  260.         if(expression.getGroupByFields().isEmpty()){
  261.             throw new ServiceException("GroupBy conditions not found in expression");
  262.         }
  263.        
  264.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,expression,functionField);
  265.         try{
  266.             return selectEngine(jdbcProperties, log, connection, sqlQueryObject, expression);
  267.         }finally{
  268.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,expression,functionField);
  269.         }
  270.     }
  271.    

  272.     @Override
  273.     public List<Map<String,Object>> groupBy(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  274.                                                     JDBCPaginatedExpression paginatedExpression, FunctionField ... functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  275.        
  276.         if(paginatedExpression.getGroupByFields().isEmpty()){
  277.             throw new ServiceException("GroupBy conditions not found in expression");
  278.         }
  279.        
  280.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,paginatedExpression,functionField);
  281.         try{
  282.             return selectEngine(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression);
  283.         }finally{
  284.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,paginatedExpression,functionField);
  285.         }
  286.     }
  287.    
  288.     protected List<Map<String,Object>> selectEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  289.                                                 IExpression expression) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  290.         return selectEngine(jdbcProperties, log, connection, sqlQueryObject, expression, null);
  291.     }
  292.     protected List<Map<String,Object>> selectEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  293.                                                 IExpression expression, ISQLQueryObject sqlQueryObjectDistinct) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  294.        
  295.         List<Object> listaQuery = new ArrayList<>();
  296.         List<JDBCObject> listaParams = new ArrayList<>();
  297.         List<Object> returnField = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareSelect(jdbcProperties, log, connection, sqlQueryObject,
  298.                                 expression, this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),
  299.                                 listaQuery,listaParams);
  300.        
  301.         joinEngine(expression,sqlQueryObject);
  302.        
  303.         List<Map<String,Object>> list = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.select(jdbcProperties, log, connection,
  304.                                         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareSqlQueryObjectForSelectDistinct(sqlQueryObject,sqlQueryObjectDistinct),
  305.                                         expression, this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),
  306.                                         listaQuery,listaParams,returnField);
  307.         if(list!=null && !list.isEmpty()){
  308.             return list;
  309.         }
  310.         else{
  311.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  312.         }
  313.     }
  314.    
  315.     @Override
  316.     public List<Map<String,Object>> union(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  317.                                                 Union union, UnionExpression ... unionExpression) throws ServiceException,NotFoundException,NotImplementedException,Exception {    
  318.        
  319.         List<ISQLQueryObject> sqlQueryObjectInnerList = new ArrayList<>();
  320.         List<JDBCObject> jdbcObjects = new ArrayList<>();
  321.         List<Class<?>> returnClassTypes = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareUnion(jdbcProperties, log, connection, sqlQueryObject,
  322.                                 this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),
  323.                                 sqlQueryObjectInnerList, jdbcObjects, union, unionExpression);
  324.        
  325.         if(unionExpression!=null){
  326.             for (int i = 0; i < unionExpression.length; i++) {
  327.                 UnionExpression ue = unionExpression[i];
  328.                 IExpression expression = ue.getExpression();
  329.                 joinEngine(expression,sqlQueryObjectInnerList.get(i));
  330.             }
  331.         }
  332.        
  333.         List<Map<String,Object>> list = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.union(jdbcProperties, log, connection, sqlQueryObject,
  334.                                         this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),
  335.                                         sqlQueryObjectInnerList, jdbcObjects, returnClassTypes, union, unionExpression);
  336.         if(list!=null && !list.isEmpty()){
  337.             return list;
  338.         }
  339.         else{
  340.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  341.         }                              
  342.     }
  343.    
  344.     @Override
  345.     public NonNegativeNumber unionCount(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  346.                                                 Union union, UnionExpression ... unionExpression) throws ServiceException,NotFoundException,NotImplementedException,Exception {    
  347.        
  348.         List<ISQLQueryObject> sqlQueryObjectInnerList = new ArrayList<>();
  349.         List<JDBCObject> jdbcObjects = new ArrayList<>();
  350.         List<Class<?>> returnClassTypes = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareUnionCount(jdbcProperties, log, connection, sqlQueryObject,
  351.                                 this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),
  352.                                 sqlQueryObjectInnerList, jdbcObjects, union, unionExpression);
  353.        
  354.         if(unionExpression!=null){
  355.             for (int i = 0; i < unionExpression.length; i++) {
  356.                 UnionExpression ue = unionExpression[i];
  357.                 IExpression expression = ue.getExpression();
  358.                 joinEngine(expression,sqlQueryObjectInnerList.get(i));
  359.             }
  360.         }
  361.        
  362.         NonNegativeNumber number = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.unionCount(jdbcProperties, log, connection, sqlQueryObject,
  363.                                         this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(),
  364.                                         sqlQueryObjectInnerList, jdbcObjects, returnClassTypes, union, unionExpression);
  365.         if(number!=null && number.longValue()>=0){
  366.             return number;
  367.         }
  368.         else{
  369.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  370.         }
  371.     }



  372.     // -- ConstructorExpression

  373.     @Override
  374.     public JDBCExpression newExpression(Logger log) throws NotImplementedException, ServiceException {
  375.         try{
  376.             return new JDBCExpression(this.getStatisticaSettimanaleFieldConverter());
  377.         }catch(Exception e){
  378.             throw new ServiceException(e);
  379.         }
  380.     }


  381.     @Override
  382.     public JDBCPaginatedExpression newPaginatedExpression(Logger log) throws NotImplementedException, ServiceException {
  383.         try{
  384.             return new JDBCPaginatedExpression(this.getStatisticaSettimanaleFieldConverter());
  385.         }catch(Exception e){
  386.             throw new ServiceException(e);
  387.         }
  388.     }
  389.    
  390.     @Override
  391.     public JDBCExpression toExpression(JDBCPaginatedExpression paginatedExpression, Logger log) throws NotImplementedException, ServiceException {
  392.         try{
  393.             return new JDBCExpression(paginatedExpression);
  394.         }catch(Exception e){
  395.             throw new ServiceException(e);
  396.         }
  397.     }

  398.     @Override
  399.     public JDBCPaginatedExpression toPaginatedExpression(JDBCExpression expression, Logger log) throws NotImplementedException, ServiceException {
  400.         try{
  401.             return new JDBCPaginatedExpression(expression);
  402.         }catch(Exception e){
  403.             throw new ServiceException(e);
  404.         }
  405.     }
  406.    
  407.    
  408.    
  409.     // -- DB

  410.    
  411.     @Override
  412.     public StatisticaSettimanale get(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException, Exception {
  413.         return this.getEngine(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId), idMappingResolutionBehaviour);
  414.     }
  415.    
  416.     private StatisticaSettimanale getEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException, Exception {
  417.    
  418.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  419.                     new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);
  420.        
  421.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();
  422.                
  423.         StatisticaSettimanale statisticaSettimanale = new StatisticaSettimanale();
  424.        

  425.         // Object statisticaSettimanale
  426.         sqlQueryObjectGet.setANDLogicOperator(true);
  427.         sqlQueryObjectGet.addFromTable(this.getStatisticaSettimanaleFieldConverter().toTable(StatisticaSettimanale.model().STATISTICA_BASE));
  428.         sqlQueryObjectGet.addSelectField("id");
  429.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.DATA,true));
  430.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.STATO_RECORD,true));
  431.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.ID_PORTA,true));
  432.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_PORTA,true));
  433.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_MITTENTE,true));
  434.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.MITTENTE,true));
  435.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_DESTINATARIO,true));
  436.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.DESTINATARIO,true));
  437.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TIPO_SERVIZIO,true));
  438.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.SERVIZIO,true));
  439.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.VERSIONE_SERVIZIO,true));
  440.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.AZIONE,true));
  441.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.SERVIZIO_APPLICATIVO,true));
  442.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TRASPORTO_MITTENTE,true));
  443.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_ISSUER,true));
  444.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_CLIENT_ID,true));
  445.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_SUBJECT,true));
  446.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_USERNAME,true));
  447.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.TOKEN_MAIL,true));
  448.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.ESITO,true));
  449.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.ESITO_CONTESTO,true));
  450.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.CLIENT_ADDRESS,true));
  451.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.GRUPPI,true));
  452.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.URI_API,true));
  453.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.CLUSTER_ID,true));
  454.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.NUMERO_TRANSAZIONI,true));
  455.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_COMPLESSIVA,true));
  456.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_INTERNA,true));
  457.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.DIMENSIONI_BYTES_BANDA_ESTERNA,true));
  458.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.LATENZA_TOTALE,true));
  459.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.LATENZA_PORTA,true));
  460.         sqlQueryObjectGet.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_BASE.LATENZA_SERVIZIO,true));
  461.         sqlQueryObjectGet.addWhereCondition("id=?");

  462.         // Get statisticaSettimanale
  463.         statisticaSettimanale = (StatisticaSettimanale) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet.createSQLQuery(), jdbcProperties.isShowSql(), StatisticaSettimanale.model(), this.getStatisticaSettimanaleFetch(),
  464.             new JDBCObject(tableId,Long.class));



  465.         // Object statisticaSettimanale_statisticaContenuti
  466.         ISQLQueryObject sqlQueryObjectGet_statisticaSettimanaleContenuti = sqlQueryObjectGet.newSQLQueryObject();
  467.         sqlQueryObjectGet_statisticaSettimanaleContenuti.setANDLogicOperator(true);
  468.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addFromTable(this.getStatisticaSettimanaleFieldConverter().toTable(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI));
  469.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField("id");
  470.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.DATA,true));
  471.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.RISORSA_NOME,true));
  472.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.RISORSA_VALORE,true));
  473.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_1,true));
  474.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_1,true));
  475.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_2,true));
  476.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_2,true));
  477.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_3,true));
  478.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_3,true));
  479.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_4,true));
  480.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_4,true));
  481.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_5,true));
  482.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_5,true));
  483.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_6,true));
  484.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_6,true));
  485.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_7,true));
  486.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_7,true));
  487.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_8,true));
  488.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_8,true));
  489.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_9,true));
  490.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_9,true));
  491.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_NOME_10,true));
  492.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.FILTRO_VALORE_10,true));
  493.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.NUMERO_TRANSAZIONI,true));
  494.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.DIMENSIONI_BYTES_BANDA_COMPLESSIVA,true));
  495.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.DIMENSIONI_BYTES_BANDA_INTERNA,true));
  496.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.DIMENSIONI_BYTES_BANDA_ESTERNA,true));
  497.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.LATENZA_TOTALE,true));
  498.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.LATENZA_PORTA,true));
  499.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addSelectField(this.getStatisticaSettimanaleFieldConverter().toColumn(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI.LATENZA_SERVIZIO,true));
  500.         sqlQueryObjectGet_statisticaSettimanaleContenuti.addWhereCondition("id_stat=?");

  501.         // Get statisticaSettimanale_statisticaContenuti
  502.         java.util.List<Object> statisticaSettimanale_statisticaContenuti_list = jdbcUtilities.executeQuery(sqlQueryObjectGet_statisticaSettimanaleContenuti.createSQLQuery(), jdbcProperties.isShowSql(), StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI, this.getStatisticaSettimanaleFetch(),
  503.             new JDBCObject(statisticaSettimanale.getId(),Long.class));

  504.         if(statisticaSettimanale_statisticaContenuti_list != null) {
  505.             for (Object statisticaSettimanale_statisticaContenuti_object: statisticaSettimanale_statisticaContenuti_list) {
  506.                 StatisticaContenuti statisticaSettimanale_statisticaContenuti = (StatisticaContenuti) statisticaSettimanale_statisticaContenuti_object;


  507.                 statisticaSettimanale.addStatisticaSettimanaleContenuti(statisticaSettimanale_statisticaContenuti);
  508.             }
  509.         }

  510.        
  511.         return statisticaSettimanale;  
  512.    
  513.     }
  514.    
  515.     @Override
  516.     public boolean exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId) throws MultipleResultException, NotImplementedException, ServiceException, Exception {
  517.         return this._exists(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId));
  518.     }
  519.    
  520.     private boolean _exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId) throws MultipleResultException, NotImplementedException, ServiceException, Exception {
  521.    
  522.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  523.                     new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);
  524.                
  525.         boolean existsStatisticaSettimanale = false;

  526.         sqlQueryObject = sqlQueryObject.newSQLQueryObject();
  527.         sqlQueryObject.setANDLogicOperator(true);

  528.         sqlQueryObject.addWhereCondition("id=?");


  529.         // Exists statisticaSettimanale
  530.         existsStatisticaSettimanale = jdbcUtilities.exists(sqlQueryObject.createSQLQuery(), jdbcProperties.isShowSql(),
  531.             new JDBCObject(tableId,Long.class));

  532.        
  533.         return existsStatisticaSettimanale;
  534.    
  535.     }
  536.    
  537.     private void joinEngine(IExpression expression, ISQLQueryObject sqlQueryObject) throws NotImplementedException, ServiceException, Exception{
  538.    
  539.         AliasTableRicerchePersonalizzate.join(expression, sqlQueryObject, StatisticaSettimanale.model().STATISTICA_BASE,
  540.                 StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI, this.getFieldConverter());
  541.        
  542.     }
  543.    
  544.     protected java.util.List<Object> getRootTablePrimaryKeyValuesEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, StatisticaSettimanale statisticaSettimanale) throws NotFoundException, ServiceException, NotImplementedException, Exception{
  545.         // Identificativi
  546.         java.util.List<Object> rootTableIdValues = new java.util.ArrayList<>();
  547.         rootTableIdValues.add(statisticaSettimanale.getId());
  548.         return rootTableIdValues;
  549.     }
  550.    
  551.     protected Map<String, List<IField>> getMapTableToPKColumnEngine() throws NotImplementedException, Exception{
  552.    
  553.         StatisticaSettimanaleFieldConverter converter = this.getStatisticaSettimanaleFieldConverter();
  554.         Map<String, List<IField>> mapTableToPKColumn = new java.util.HashMap<>();
  555.         UtilsTemplate<IField> utilities = new UtilsTemplate<>();

  556.         // StatisticaSettimanale.model()
  557.         mapTableToPKColumn.put(converter.toTable(StatisticaSettimanale.model()),
  558.             utilities.newList(
  559.                 new CustomField("id", Long.class, "id", converter.toTable(StatisticaSettimanale.model()))
  560.             ));

  561.         // StatisticaSettimanale.model().STATISTICA_BASE
  562.         mapTableToPKColumn.put(converter.toTable(StatisticaSettimanale.model().STATISTICA_BASE),
  563.             utilities.newList(
  564.                 new CustomField("id", Long.class, "id", converter.toTable(StatisticaSettimanale.model().STATISTICA_BASE))
  565.             ));

  566.         // StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI
  567.         mapTableToPKColumn.put(converter.toTable(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI),
  568.             utilities.newList(
  569.                 new CustomField("id", Long.class, "id", converter.toTable(StatisticaSettimanale.model().STATISTICA_SETTIMANALE_CONTENUTI))
  570.             ));
  571.        
  572.         return mapTableToPKColumn;      
  573.     }
  574.    
  575.     @Override
  576.     public List<Long> findAllTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression paginatedExpression) throws ServiceException, NotImplementedException, Exception {
  577.        
  578.         List<Long> list = new ArrayList<Long>();

  579.         // Il distinct serve solo se ci sono le statistiche con contenuto.
  580.         // NOTA: il distinct rende le ricerce inefficenti (ed inoltre non e' utilizzabile con campi clob in oracle)
  581.         boolean distinct = false;
  582.         ISQLQueryObject sqlQueryObjectCheckJoin = sqlQueryObject.newSQLQueryObject();
  583.         joinEngine(paginatedExpression, sqlQueryObjectCheckJoin);
  584.         distinct = ((SQLQueryObjectCore)sqlQueryObjectCheckJoin).sizeConditions()>0;
  585.        
  586.         sqlQueryObject.setSelectDistinct(distinct);
  587.         sqlQueryObject.setANDLogicOperator(true);
  588.         sqlQueryObject.addSelectField(this.getStatisticaSettimanaleFieldConverter().toTable(StatisticaSettimanale.model())+".id");
  589.         Class<?> objectIdClass = Long.class;
  590.        
  591.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareFindAll(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression,
  592.                                                 this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model());
  593.        
  594.         joinEngine(paginatedExpression,sqlQueryObject);
  595.        
  596.         List<Object> listObjects = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.findAll(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression,
  597.                                                                             this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(), objectIdClass, listaQuery);
  598.         for(Object object: listObjects) {
  599.             list.add((Long)object);
  600.         }

  601.         return list;
  602.        
  603.     }
  604.    
  605.     @Override
  606.     public long findTableId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression) throws ServiceException, NotFoundException, MultipleResultException, NotImplementedException, Exception {
  607.    
  608.         // Il distinct serve solo se ci sono le statistiche con contenuto.
  609.         // NOTA: il distinct rende le ricerce inefficenti (ed inoltre non e' utilizzabile con campi clob in oracle)
  610.         boolean distinct = false;
  611.         ISQLQueryObject sqlQueryObjectCheckJoin = sqlQueryObject.newSQLQueryObject();
  612.         joinEngine(expression, sqlQueryObjectCheckJoin);
  613.         distinct = ((SQLQueryObjectCore)sqlQueryObjectCheckJoin).sizeConditions()>0;
  614.        
  615.         sqlQueryObject.setSelectDistinct(distinct);
  616.         sqlQueryObject.setANDLogicOperator(true);
  617.         sqlQueryObject.addSelectField(this.getStatisticaSettimanaleFieldConverter().toTable(StatisticaSettimanale.model())+".id");
  618.         Class<?> objectIdClass = Long.class;
  619.        
  620.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareFind(jdbcProperties, log, connection, sqlQueryObject, expression,
  621.                                                 this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model());
  622.        
  623.         joinEngine(expression,sqlQueryObject);

  624.         Object res = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.find(jdbcProperties, log, connection, sqlQueryObject, expression,
  625.                                                         this.getStatisticaSettimanaleFieldConverter(), StatisticaSettimanale.model(), objectIdClass, listaQuery);
  626.         if(res!=null && (((Long) res).longValue()>0) ){
  627.             return ((Long) res).longValue();
  628.         }
  629.         else{
  630.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  631.         }
  632.        
  633.     }

  634.     @Override
  635.     public InUse inUse(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId) throws ServiceException, NotFoundException, NotImplementedException, Exception {
  636.         return this.inUseEngine(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId));
  637.     }

  638.     private InUse inUseEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId) throws ServiceException, NotFoundException, NotImplementedException, Exception {

  639.         InUse inUse = new InUse();
  640.         inUse.setInUse(false);
  641.        
  642.         /*
  643.          * TODO: implement code that checks whether the object identified by the id parameter is used by other objects
  644.         */
  645.        
  646.         // Delete this line when you have implemented the method
  647.         int throwNotImplemented = 1;
  648.         if(throwNotImplemented==1){
  649.                 throw new NotImplementedException("NotImplemented");
  650.         }
  651.         // Delete this line when you have implemented the method

  652.         return inUse;

  653.     }
  654.    

  655.    
  656.     @Override
  657.     public List<List<Object>> nativeQuery(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  658.                                             String sql,List<Class<?>> returnClassTypes,Object ... param) throws ServiceException,NotFoundException,NotImplementedException,Exception{
  659.        
  660.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.nativeQuery(jdbcProperties, log, connection, sqlQueryObject,
  661.                                                                                             sql,returnClassTypes,param);
  662.                                                        
  663.     }
  664.    
  665. }