JDBCFruitoreServiceSearchImpl.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.commons.search.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.commons.search.Fruitore;
  26. import org.openspcoop2.core.commons.search.IdAccordoServizioParteSpecifica;
  27. import org.openspcoop2.core.commons.search.IdFruitore;
  28. import org.openspcoop2.core.commons.search.IdSoggetto;
  29. import org.openspcoop2.core.commons.search.dao.IDBAccordoServizioParteSpecificaServiceSearch;
  30. import org.openspcoop2.core.commons.search.dao.IDBSoggettoServiceSearch;
  31. import org.openspcoop2.core.commons.search.dao.jdbc.converter.FruitoreFieldConverter;
  32. import org.openspcoop2.core.commons.search.dao.jdbc.fetch.FruitoreFetch;
  33. import org.openspcoop2.generic_project.beans.AliasField;
  34. import org.openspcoop2.generic_project.beans.CustomField;
  35. import org.openspcoop2.generic_project.beans.FunctionField;
  36. import org.openspcoop2.generic_project.beans.IField;
  37. import org.openspcoop2.generic_project.beans.InUse;
  38. import org.openspcoop2.generic_project.beans.NonNegativeNumber;
  39. import org.openspcoop2.generic_project.beans.Union;
  40. import org.openspcoop2.generic_project.beans.UnionExpression;
  41. import org.openspcoop2.generic_project.dao.jdbc.IJDBCServiceSearchWithId;
  42. import org.openspcoop2.generic_project.dao.jdbc.JDBCExpression;
  43. import org.openspcoop2.generic_project.dao.jdbc.JDBCPaginatedExpression;
  44. import org.openspcoop2.generic_project.dao.jdbc.JDBCServiceManagerProperties;
  45. import org.openspcoop2.generic_project.dao.jdbc.utils.IJDBCFetch;
  46. import org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject;
  47. import org.openspcoop2.generic_project.exception.MultipleResultException;
  48. import org.openspcoop2.generic_project.exception.NotFoundException;
  49. import org.openspcoop2.generic_project.exception.NotImplementedException;
  50. import org.openspcoop2.generic_project.exception.ServiceException;
  51. import org.openspcoop2.generic_project.expression.IExpression;
  52. import org.openspcoop2.generic_project.expression.impl.sql.ISQLFieldConverter;
  53. import org.openspcoop2.generic_project.utils.UtilsTemplate;
  54. import org.openspcoop2.utils.sql.ISQLQueryObject;
  55. import org.slf4j.Logger;

  56. /**    
  57.  * JDBCFruitoreServiceSearchImpl
  58.  *
  59.  * @author Poli Andrea (poli@link.it)
  60.  * @author $Author$
  61.  * @version $Rev$, $Date$
  62.  */
  63. public class JDBCFruitoreServiceSearchImpl implements IJDBCServiceSearchWithId<Fruitore, IdFruitore, JDBCServiceManager> {

  64.     private FruitoreFieldConverter _fruitoreFieldConverter = null;
  65.     public FruitoreFieldConverter getFruitoreFieldConverter() {
  66.         if(this._fruitoreFieldConverter==null){
  67.             this._fruitoreFieldConverter = new FruitoreFieldConverter(this.jdbcServiceManager.getJdbcProperties().getDatabaseType());
  68.         }      
  69.         return this._fruitoreFieldConverter;
  70.     }
  71.     @Override
  72.     public ISQLFieldConverter getFieldConverter() {
  73.         return this.getFruitoreFieldConverter();
  74.     }
  75.    
  76.     private FruitoreFetch fruitoreFetch = new FruitoreFetch();
  77.     public FruitoreFetch getFruitoreFetch() {
  78.         return this.fruitoreFetch;
  79.     }
  80.     @Override
  81.     public IJDBCFetch getFetch() {
  82.         return getFruitoreFetch();
  83.     }
  84.    
  85.    
  86.     private JDBCServiceManager jdbcServiceManager = null;

  87.     @Override
  88.     public void setServiceManager(JDBCServiceManager serviceManager) throws ServiceException{
  89.         this.jdbcServiceManager = serviceManager;
  90.     }
  91.    
  92.     @Override
  93.     public JDBCServiceManager getServiceManager() throws ServiceException{
  94.         return this.jdbcServiceManager;
  95.     }
  96.     public JDBCServiceManager getServiceManager(Connection connection, JDBCServiceManagerProperties jdbcProperties, Logger log) throws ServiceException{
  97.         return new JDBCServiceManager(connection, jdbcProperties, log);
  98.     }
  99.    

  100.     @Override
  101.     public IdFruitore convertToId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Fruitore fruitore) throws NotImplementedException, ServiceException, Exception{
  102.    
  103.         IdFruitore idFruitore = new IdFruitore();
  104.         idFruitore.setIdAccordoServizioParteSpecifica(fruitore.getIdAccordoServizioParteSpecifica());
  105.         idFruitore.setIdFruitore(fruitore.getIdFruitore());
  106.         return idFruitore;
  107.     }
  108.    
  109.     @Override
  110.     public Fruitore get(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException,Exception {
  111.         Long id_fruitore = ( (id!=null && id.getId()!=null && id.getId()>0) ? id.getId() : this.findIdFruitore(jdbcProperties, log, connection, sqlQueryObject, id, true));
  112.         return this.getEngine(jdbcProperties, log, connection, sqlQueryObject, id_fruitore,idMappingResolutionBehaviour);
  113.        
  114.        
  115.     }
  116.    
  117.     @Override
  118.     public boolean exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id) throws MultipleResultException, NotImplementedException, ServiceException,Exception {

  119.         Long id_fruitore = this.findIdFruitore(jdbcProperties, log, connection, sqlQueryObject, id, false);
  120.         return id_fruitore != null && id_fruitore > 0;
  121.        
  122.     }
  123.    
  124.     @Override
  125.     public List<IdFruitore> findAllIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotImplementedException, ServiceException,Exception {

  126.         List<IdFruitore> list = new ArrayList<IdFruitore>();

  127.         // TODO: implementazione non efficiente.
  128.         // Per ottenere una implementazione efficiente:
  129.         // 1. Usare metodo select di questa classe indirizzando esattamente i field necessari a create l'ID logico
  130.         // 2. Usare metodo getFruitoreFetch() sul risultato della select per ottenere un oggetto Fruitore
  131.         //    La fetch con la map inserirĂ  nell'oggetto solo i valori estratti
  132.         // 3. Usare metodo convertToId per ottenere l'id

  133.         List<Long> ids = this.findAllTableIds(jdbcProperties, log, connection, sqlQueryObject, expression);
  134.        
  135.         for(Long id: ids) {
  136.             Fruitore fruitore = this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour);
  137.             IdFruitore idFruitore = this.convertToId(jdbcProperties,log,connection,sqlQueryObject,fruitore);
  138.             list.add(idFruitore);
  139.         }

  140.         return list;
  141.        
  142.     }
  143.    
  144.     private static boolean efficiente = true;
  145.    
  146.     @Override
  147.     public List<Fruitore> findAll(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotImplementedException, ServiceException,Exception {

  148.         List<Fruitore> list = new ArrayList<Fruitore>();
  149.        
  150.         if(efficiente){
  151.            
  152.             List<IField> fields = new ArrayList<IField>();
  153.             String aliasAccordoTipo = "accordoTipo";
  154.             fields.add(new AliasField(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.TIPO, aliasAccordoTipo));
  155.             String aliasAccordoNome = "accordoNome";
  156.             fields.add(new AliasField(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.NOME, aliasAccordoNome));
  157.             String aliasAccordoVersione = "accordoVersione";
  158.             fields.add(new AliasField(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.VERSIONE, aliasAccordoVersione));
  159.             String aliasAccordoSoggettoErogatoreTipo = "accordoSoggettoReferenteTipo";
  160.             fields.add(new AliasField(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE.TIPO, aliasAccordoSoggettoErogatoreTipo));
  161.             String aliasAccordoSoggettoErogatoreNome = "accordoSoggettoReferenteNome";
  162.             fields.add(new AliasField(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE.NOME, aliasAccordoSoggettoErogatoreNome));
  163.             String aliasSoggettoFruitoreTipo = "accordoSoggettoErogatoreTipo";
  164.             fields.add(new AliasField(Fruitore.model().ID_FRUITORE.TIPO, aliasSoggettoFruitoreTipo));
  165.             String aliasSoggettoFruitoreNome = "accordoSoggettoErogatoreNome";
  166.             fields.add(new AliasField(Fruitore.model().ID_FRUITORE.NOME, aliasSoggettoFruitoreNome));
  167.            
  168.             List<Map<String, Object>> returnMap = null;
  169.             try{
  170.                 // non usare true altrimenti non funzionano alcuni meccanismi di ricerca, ad es. la valorizzazione dei select field nel servizio della govwayMonitor.
  171.                 // Tanto le join non comportano righe multiple uguali
  172.                 boolean distinct = false;
  173.                 returnMap = this.select(jdbcProperties, log, connection, sqlQueryObject, expression, distinct, fields.toArray(new IField[1]));
  174.                
  175.                 for(Map<String, Object> map: returnMap) {
  176.                    
  177.                     Fruitore fruitore = (Fruitore) this.getFruitoreFetch().fetch(jdbcProperties.getDatabase(), Fruitore.model(), map);
  178.                    
  179.                     Object apcTipo = this.getObjectFromMap(map, aliasAccordoTipo);
  180.                     Object apcNome = this.getObjectFromMap(map, aliasAccordoNome);
  181.                     Object apcVersione = this.getObjectFromMap(map, aliasAccordoVersione);
  182.                     Object apcSoggettoErogatoreTipo = this.getObjectFromMap(map, aliasAccordoSoggettoErogatoreTipo);
  183.                     Object apcSoggettoErogatoreNome = this.getObjectFromMap(map, aliasAccordoSoggettoErogatoreNome);
  184.                     Object soggettoFruitoreTipo = this.getObjectFromMap(map, aliasSoggettoFruitoreTipo);
  185.                     Object soggettoFruitoreNome = this.getObjectFromMap(map, aliasSoggettoFruitoreNome);
  186.                     if(apcTipo!=null && apcNome!=null && apcVersione!=null) {
  187.                         IdAccordoServizioParteSpecifica idAccordoServizioParteSpecifica = new IdAccordoServizioParteSpecifica();
  188.                         if(apcTipo!=null && apcTipo instanceof String) {
  189.                             idAccordoServizioParteSpecifica.setTipo((String) apcTipo);
  190.                         }
  191.                         if(apcNome!=null && apcNome instanceof String) {
  192.                             idAccordoServizioParteSpecifica.setNome((String) apcNome);
  193.                         }
  194.                         if(apcVersione!=null && apcVersione instanceof Integer) {
  195.                             idAccordoServizioParteSpecifica.setVersione((Integer) apcVersione);
  196.                         }
  197.                         if(apcSoggettoErogatoreTipo!=null && apcSoggettoErogatoreNome!=null) {
  198.                             IdSoggetto idSoggetto = new IdSoggetto();
  199.                             if(apcSoggettoErogatoreTipo!=null && apcSoggettoErogatoreTipo instanceof String) {
  200.                                 idSoggetto.setTipo((String) apcSoggettoErogatoreTipo);
  201.                             }
  202.                             if(apcSoggettoErogatoreNome!=null && apcSoggettoErogatoreNome instanceof String) {
  203.                                 idSoggetto.setNome((String) apcSoggettoErogatoreNome);
  204.                             }
  205.                             idAccordoServizioParteSpecifica.setIdErogatore(idSoggetto);
  206.                         }
  207.                         fruitore.setIdAccordoServizioParteSpecifica(idAccordoServizioParteSpecifica);
  208.                     }
  209.                     if(soggettoFruitoreTipo!=null && soggettoFruitoreNome!=null) {
  210.                         IdSoggetto idSoggetto = new IdSoggetto();
  211.                         if(soggettoFruitoreTipo!=null && soggettoFruitoreTipo instanceof String) {
  212.                             idSoggetto.setTipo((String) soggettoFruitoreTipo);
  213.                         }
  214.                         if(soggettoFruitoreNome!=null && soggettoFruitoreNome instanceof String) {
  215.                             idSoggetto.setNome((String) soggettoFruitoreNome);
  216.                         }
  217.                         fruitore.setIdFruitore(idSoggetto);
  218.                     }          
  219.                    
  220.                     list.add(fruitore);
  221.                 }
  222.             }catch(NotFoundException notFound){}
  223.         }

  224.         else{
  225.        
  226.             // TODO: implementazione non efficiente.
  227.             // Per ottenere una implementazione efficiente:
  228.             // 1. Usare metodo select di questa classe indirizzando esattamente i field necessari
  229.             // 2. Usare metodo getFruitoreFetch() sul risultato della select per ottenere un oggetto Fruitore
  230.             //    La fetch con la map inserirĂ  nell'oggetto solo i valori estratti
  231.    
  232.             List<Long> ids = this.findAllTableIds(jdbcProperties, log, connection, sqlQueryObject, expression);
  233.            
  234.             for(Long id: ids) {
  235.                 list.add(this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour));
  236.             }
  237.            
  238.         }

  239.         return list;      
  240.        
  241.     }
  242.    
  243.     private Object getObjectFromMap(Map<String,Object> map,String name){
  244.         if(map==null){
  245.             return null;
  246.         }
  247.         else if(map.containsKey(name)){
  248.             Object o = map.get(name);
  249.             if(o instanceof org.apache.commons.lang.ObjectUtils.Null){
  250.                 return null;
  251.             }
  252.             else{
  253.                 return o;
  254.             }
  255.         }
  256.         else{
  257.             return null;
  258.         }
  259.     }
  260.    
  261.     @Override
  262.     public Fruitore find(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour)
  263.         throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException,Exception {

  264.         long id = this.findTableId(jdbcProperties, log, connection, sqlQueryObject, expression);
  265.         if(id>0){
  266.             return this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour);
  267.         }else{
  268.             throw new NotFoundException("Entry with id["+id+"] not found");
  269.         }
  270.        
  271.     }
  272.    
  273.     @Override
  274.     public NonNegativeNumber count(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression) throws NotImplementedException, ServiceException,Exception {
  275.        
  276.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareCount(jdbcProperties, log, connection, sqlQueryObject, expression,
  277.                                                 this.getFruitoreFieldConverter(), Fruitore.model());
  278.        
  279.         sqlQueryObject.addSelectCountField(this.getFruitoreFieldConverter().toTable(Fruitore.model())+".id","tot",true);
  280.        
  281.         joinEngine(expression,sqlQueryObject);
  282.        
  283.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.count(jdbcProperties, log, connection, sqlQueryObject, expression,
  284.                                                                             this.getFruitoreFieldConverter(), Fruitore.model(),listaQuery);
  285.     }

  286.     @Override
  287.     public InUse inUse(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id) throws NotFoundException, NotImplementedException, ServiceException,Exception {
  288.        
  289.         Long id_fruitore = this.findIdFruitore(jdbcProperties, log, connection, sqlQueryObject, id, true);
  290.         return this.inUseEngine(jdbcProperties, log, connection, sqlQueryObject, id_fruitore);
  291.        
  292.     }

  293.     @Override
  294.     public List<Object> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  295.                                                     JDBCPaginatedExpression paginatedExpression, IField field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  296.         return this.select(jdbcProperties, log, connection, sqlQueryObject,
  297.                                 paginatedExpression, false, field);
  298.     }
  299.    
  300.     @Override
  301.     public List<Object> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  302.                                                     JDBCPaginatedExpression paginatedExpression, boolean distinct, IField field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  303.         List<Map<String,Object>> map =
  304.             this.select(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression, distinct, new IField[]{field});
  305.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.selectSingleObject(map);
  306.     }
  307.    
  308.     @Override
  309.     public List<Map<String,Object>> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  310.                                                     JDBCPaginatedExpression paginatedExpression, IField ... field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  311.         return this.select(jdbcProperties, log, connection, sqlQueryObject,
  312.                                 paginatedExpression, false, field);
  313.     }
  314.    
  315.     @Override
  316.     public List<Map<String,Object>> select(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  317.                                                     JDBCPaginatedExpression paginatedExpression, boolean distinct, IField ... field) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  318.        
  319.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,paginatedExpression,field);
  320.         try{
  321.        
  322.             ISQLQueryObject sqlQueryObjectDistinct =
  323.                         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareSqlQueryObjectForSelectDistinct(distinct,sqlQueryObject, paginatedExpression, log,
  324.                                                 this.getFruitoreFieldConverter(), field);

  325.             return selectEngine(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression, sqlQueryObjectDistinct);
  326.            
  327.         }finally{
  328.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,paginatedExpression,field);
  329.         }
  330.     }

  331.     @Override
  332.     public Object aggregate(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  333.                                                     JDBCExpression expression, FunctionField functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  334.         Map<String,Object> map =
  335.             this.aggregate(jdbcProperties, log, connection, sqlQueryObject, expression, new FunctionField[]{functionField});
  336.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.selectAggregateObject(map,functionField);
  337.     }
  338.    
  339.     @Override
  340.     public Map<String,Object> aggregate(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  341.                                                     JDBCExpression expression, FunctionField ... functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {                                                  
  342.        
  343.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,expression,functionField);
  344.         try{
  345.             List<Map<String,Object>> list = selectEngine(jdbcProperties, log, connection, sqlQueryObject, expression);
  346.             return list.get(0);
  347.         }finally{
  348.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,expression,functionField);
  349.         }
  350.     }

  351.     @Override
  352.     public List<Map<String,Object>> groupBy(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  353.                                                     JDBCExpression expression, FunctionField ... functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  354.        
  355.         if(expression.getGroupByFields().isEmpty()){
  356.             throw new ServiceException("GroupBy conditions not found in expression");
  357.         }
  358.        
  359.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,expression,functionField);
  360.         try{
  361.             return selectEngine(jdbcProperties, log, connection, sqlQueryObject, expression);
  362.         }finally{
  363.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,expression,functionField);
  364.         }
  365.     }
  366.    

  367.     @Override
  368.     public List<Map<String,Object>> groupBy(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  369.                                                     JDBCPaginatedExpression paginatedExpression, FunctionField ... functionField) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  370.        
  371.         if(paginatedExpression.getGroupByFields().isEmpty()){
  372.             throw new ServiceException("GroupBy conditions not found in expression");
  373.         }
  374.        
  375.         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.setFields(sqlQueryObject,paginatedExpression,functionField);
  376.         try{
  377.             return selectEngine(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression);
  378.         }finally{
  379.             org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.removeFields(sqlQueryObject,paginatedExpression,functionField);
  380.         }
  381.     }
  382.    
  383.     protected List<Map<String,Object>> selectEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  384.                                                 IExpression expression) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  385.         return selectEngine(jdbcProperties, log, connection, sqlQueryObject, expression, null);
  386.     }
  387.     protected List<Map<String,Object>> selectEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  388.                                                 IExpression expression, ISQLQueryObject sqlQueryObjectDistinct) throws ServiceException,NotFoundException,NotImplementedException,Exception {
  389.        
  390.         List<Object> listaQuery = new ArrayList<>();
  391.         List<JDBCObject> listaParams = new ArrayList<>();
  392.         List<Object> returnField = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareSelect(jdbcProperties, log, connection, sqlQueryObject,
  393.                                 expression, this.getFruitoreFieldConverter(), Fruitore.model(),
  394.                                 listaQuery,listaParams);
  395.        
  396.         joinEngine(expression,sqlQueryObject);
  397.        
  398.         List<Map<String,Object>> list = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.select(jdbcProperties, log, connection,
  399.                                         org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareSqlQueryObjectForSelectDistinct(sqlQueryObject,sqlQueryObjectDistinct),
  400.                                         expression, this.getFruitoreFieldConverter(), Fruitore.model(),
  401.                                         listaQuery,listaParams,returnField);
  402.         if(list!=null && !list.isEmpty()){
  403.             return list;
  404.         }
  405.         else{
  406.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  407.         }
  408.     }
  409.    
  410.     @Override
  411.     public List<Map<String,Object>> union(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  412.                                                 Union union, UnionExpression ... unionExpression) throws ServiceException,NotFoundException,NotImplementedException,Exception {    
  413.        
  414.         List<ISQLQueryObject> sqlQueryObjectInnerList = new ArrayList<>();
  415.         List<JDBCObject> jdbcObjects = new ArrayList<>();
  416.         List<Class<?>> returnClassTypes = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareUnion(jdbcProperties, log, connection, sqlQueryObject,
  417.                                 this.getFruitoreFieldConverter(), Fruitore.model(),
  418.                                 sqlQueryObjectInnerList, jdbcObjects, union, unionExpression);
  419.        
  420.         if(unionExpression!=null){
  421.             for (int i = 0; i < unionExpression.length; i++) {
  422.                 UnionExpression ue = unionExpression[i];
  423.                 IExpression expression = ue.getExpression();
  424.                 joinEngine(expression,sqlQueryObjectInnerList.get(i));
  425.             }
  426.         }
  427.        
  428.         List<Map<String,Object>> list = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.union(jdbcProperties, log, connection, sqlQueryObject,
  429.                                         this.getFruitoreFieldConverter(), Fruitore.model(),
  430.                                         sqlQueryObjectInnerList, jdbcObjects, returnClassTypes, union, unionExpression);
  431.         if(list!=null && !list.isEmpty()){
  432.             return list;
  433.         }
  434.         else{
  435.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  436.         }                              
  437.     }
  438.    
  439.     @Override
  440.     public NonNegativeNumber unionCount(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  441.                                                 Union union, UnionExpression ... unionExpression) throws ServiceException,NotFoundException,NotImplementedException,Exception {    
  442.        
  443.         List<ISQLQueryObject> sqlQueryObjectInnerList = new ArrayList<>();
  444.         List<JDBCObject> jdbcObjects = new ArrayList<>();
  445.         List<Class<?>> returnClassTypes = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareUnionCount(jdbcProperties, log, connection, sqlQueryObject,
  446.                                 this.getFruitoreFieldConverter(), Fruitore.model(),
  447.                                 sqlQueryObjectInnerList, jdbcObjects, union, unionExpression);
  448.        
  449.         if(unionExpression!=null){
  450.             for (int i = 0; i < unionExpression.length; i++) {
  451.                 UnionExpression ue = unionExpression[i];
  452.                 IExpression expression = ue.getExpression();
  453.                 joinEngine(expression,sqlQueryObjectInnerList.get(i));
  454.             }
  455.         }
  456.        
  457.         NonNegativeNumber number = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.unionCount(jdbcProperties, log, connection, sqlQueryObject,
  458.                                         this.getFruitoreFieldConverter(), Fruitore.model(),
  459.                                         sqlQueryObjectInnerList, jdbcObjects, returnClassTypes, union, unionExpression);
  460.         if(number!=null && number.longValue()>=0){
  461.             return number;
  462.         }
  463.         else{
  464.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  465.         }
  466.     }



  467.     // -- ConstructorExpression

  468.     @Override
  469.     public JDBCExpression newExpression(Logger log) throws NotImplementedException, ServiceException {
  470.         try{
  471.             return new JDBCExpression(this.getFruitoreFieldConverter());
  472.         }catch(Exception e){
  473.             throw new ServiceException(e);
  474.         }
  475.     }


  476.     @Override
  477.     public JDBCPaginatedExpression newPaginatedExpression(Logger log) throws NotImplementedException, ServiceException {
  478.         try{
  479.             return new JDBCPaginatedExpression(this.getFruitoreFieldConverter());
  480.         }catch(Exception e){
  481.             throw new ServiceException(e);
  482.         }
  483.     }
  484.    
  485.     @Override
  486.     public JDBCExpression toExpression(JDBCPaginatedExpression paginatedExpression, Logger log) throws NotImplementedException, ServiceException {
  487.         try{
  488.             return new JDBCExpression(paginatedExpression);
  489.         }catch(Exception e){
  490.             throw new ServiceException(e);
  491.         }
  492.     }

  493.     @Override
  494.     public JDBCPaginatedExpression toPaginatedExpression(JDBCExpression expression, Logger log) throws NotImplementedException, ServiceException {
  495.         try{
  496.             return new JDBCPaginatedExpression(expression);
  497.         }catch(Exception e){
  498.             throw new ServiceException(e);
  499.         }
  500.     }
  501.    
  502.    
  503.    
  504.     // -- DB

  505.     @Override
  506.     public void mappingTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id, Fruitore obj) throws NotFoundException,NotImplementedException,ServiceException,Exception{
  507.         _mappingTableIds(jdbcProperties,log,connection,sqlQueryObject,obj,
  508.                 this.get(jdbcProperties,log,connection,sqlQueryObject,id,null));
  509.     }
  510.    
  511.     @Override
  512.     public void mappingTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, Fruitore obj) throws NotFoundException,NotImplementedException,ServiceException,Exception{
  513.         _mappingTableIds(jdbcProperties,log,connection,sqlQueryObject,obj,
  514.                 this.get(jdbcProperties,log,connection,sqlQueryObject,tableId,null));
  515.     }
  516.     private void _mappingTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Fruitore obj, Fruitore imgSaved) throws NotFoundException,NotImplementedException,ServiceException,Exception{
  517.         if(imgSaved==null){
  518.             return;
  519.         }
  520.         obj.setId(imgSaved.getId());
  521.         if(obj.getIdFruitore()!=null &&
  522.                 imgSaved.getIdFruitore()!=null){
  523.             obj.getIdFruitore().setId(imgSaved.getIdFruitore().getId());
  524.         }
  525.         if(obj.getIdAccordoServizioParteSpecifica()!=null &&
  526.                 imgSaved.getIdAccordoServizioParteSpecifica()!=null){
  527.             obj.getIdAccordoServizioParteSpecifica().setId(imgSaved.getIdAccordoServizioParteSpecifica().getId());
  528.             if(obj.getIdAccordoServizioParteSpecifica().getIdErogatore()!=null &&
  529.                     imgSaved.getIdAccordoServizioParteSpecifica().getIdErogatore()!=null){
  530.                 obj.getIdAccordoServizioParteSpecifica().getIdErogatore().setId(imgSaved.getIdAccordoServizioParteSpecifica().getIdErogatore().getId());
  531.             }
  532.         }

  533.     }
  534.    
  535.     @Override
  536.     public Fruitore get(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException, Exception {
  537.         return this.getEngine(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId), idMappingResolutionBehaviour);
  538.     }
  539.    
  540.     private Fruitore getEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException, Exception {
  541.    
  542.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  543.                     new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);
  544.        
  545.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();
  546.                
  547.         Fruitore fruitore = new Fruitore();
  548.        

  549.         // Object fruitore
  550.         ISQLQueryObject sqlQueryObjectGet_fruitore = sqlQueryObjectGet.newSQLQueryObject();
  551.         sqlQueryObjectGet_fruitore.setANDLogicOperator(true);
  552.         sqlQueryObjectGet_fruitore.addFromTable(this.getFruitoreFieldConverter().toTable(Fruitore.model()));
  553.         sqlQueryObjectGet_fruitore.addSelectField("id");
  554.         sqlQueryObjectGet_fruitore.addSelectField(this.getFruitoreFieldConverter().toColumn(Fruitore.model().ORA_REGISTRAZIONE,true));
  555.         sqlQueryObjectGet_fruitore.addWhereCondition("id=?");

  556.         // Get fruitore
  557.         fruitore = (Fruitore) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_fruitore.createSQLQuery(), jdbcProperties.isShowSql(), Fruitore.model(), this.getFruitoreFetch(),
  558.             new JDBCObject(tableId,Long.class));


  559.         // Object _fruitore_soggetto (recupero id)
  560.         ISQLQueryObject sqlQueryObjectGet_fruitore_soggetto_readFkId = sqlQueryObjectGet.newSQLQueryObject();
  561.         sqlQueryObjectGet_fruitore_soggetto_readFkId.addFromTable("servizi_fruitori");
  562.         sqlQueryObjectGet_fruitore_soggetto_readFkId.addSelectField("id_soggetto");
  563.         sqlQueryObjectGet_fruitore_soggetto_readFkId.addWhereCondition("id=?");
  564.         sqlQueryObjectGet_fruitore_soggetto_readFkId.setANDLogicOperator(true);
  565.         Long idFK_fruitore_soggetto = (Long) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_fruitore_soggetto_readFkId.createSQLQuery(), jdbcProperties.isShowSql(),Long.class,
  566.                 new JDBCObject(fruitore.getId(),Long.class));
  567.        
  568.         // Object _fruitore_soggetto
  569.         ISQLQueryObject sqlQueryObjectGet_fruitore_soggetto = sqlQueryObjectGet.newSQLQueryObject();
  570.         sqlQueryObjectGet_fruitore_soggetto.addFromTable("soggetti");
  571.         sqlQueryObjectGet_fruitore_soggetto.addSelectField("tipo_soggetto");
  572.         sqlQueryObjectGet_fruitore_soggetto.addSelectField("nome_soggetto");
  573.         sqlQueryObjectGet_fruitore_soggetto.setANDLogicOperator(true);
  574.         sqlQueryObjectGet_fruitore_soggetto.addWhereCondition("id=?");

  575.         // Recupero _fruitore_soggetto
  576.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_fruitore_soggetto = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  577.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(idFK_fruitore_soggetto,Long.class)
  578.         };
  579.         List<Class<?>> listaFieldIdReturnType_fruitore_soggetto = new ArrayList<Class<?>>();
  580.         listaFieldIdReturnType_fruitore_soggetto.add(String.class);
  581.         listaFieldIdReturnType_fruitore_soggetto.add(String.class);
  582.         List<Object> listaFieldId_fruitore_soggetto = jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_fruitore_soggetto.createSQLQuery(), jdbcProperties.isShowSql(),
  583.                 listaFieldIdReturnType_fruitore_soggetto, searchParams_fruitore_soggetto);
  584.         // set _fruitore_soggetto
  585.         IdSoggetto id_fruitore_soggetto = new IdSoggetto();
  586.         id_fruitore_soggetto.setTipo((String)listaFieldId_fruitore_soggetto.get(0));
  587.         id_fruitore_soggetto.setNome((String)listaFieldId_fruitore_soggetto.get(1));
  588.         fruitore.setIdFruitore(id_fruitore_soggetto);

  589.         // Object _fruitore_accordoServizioParteSpecifica (recupero id)
  590.         ISQLQueryObject sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica_readFkId = sqlQueryObjectGet.newSQLQueryObject();
  591.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica_readFkId.addFromTable("servizi_fruitori");
  592.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica_readFkId.addSelectField("id_servizio");
  593.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica_readFkId.addWhereCondition("id=?");
  594.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica_readFkId.setANDLogicOperator(true);
  595.         Long idFK_fruitore_accordoServizioParteSpecifica = (Long) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica_readFkId.createSQLQuery(), jdbcProperties.isShowSql(),Long.class,
  596.                 new JDBCObject(fruitore.getId(),Long.class));
  597.        
  598.         // Object _fruitore_accordoServizioParteSpecifica
  599.         ISQLQueryObject sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica = sqlQueryObjectGet.newSQLQueryObject();
  600.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.addFromTable("servizi");
  601.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.addSelectField("tipo_servizio");
  602.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.addSelectField("nome_servizio");
  603.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.addSelectField("id_soggetto");
  604.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.setANDLogicOperator(true);
  605.         sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.addWhereCondition("id=?");

  606.         // Recupero _fruitore_accordoServizioParteSpecifica
  607.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_fruitore_accordoServizioParteSpecifica = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  608.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(idFK_fruitore_accordoServizioParteSpecifica,Long.class)
  609.         };
  610.         List<Class<?>> listaFieldIdReturnType_fruitore_accordoServizioParteSpecifica = new ArrayList<Class<?>>();
  611.         listaFieldIdReturnType_fruitore_accordoServizioParteSpecifica.add(String.class);
  612.         listaFieldIdReturnType_fruitore_accordoServizioParteSpecifica.add(String.class);
  613.         listaFieldIdReturnType_fruitore_accordoServizioParteSpecifica.add(Long.class);
  614.         List<Object> listaFieldId_fruitore_accordoServizioParteSpecifica = jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_fruitore_accordoServizioParteSpecifica.createSQLQuery(), jdbcProperties.isShowSql(),
  615.                 listaFieldIdReturnType_fruitore_accordoServizioParteSpecifica, searchParams_fruitore_accordoServizioParteSpecifica);
  616.         // set _fruitore_accordoServizioParteSpecifica
  617.         IdAccordoServizioParteSpecifica id_fruitore_accordoServizioParteSpecifica = new IdAccordoServizioParteSpecifica();
  618.         id_fruitore_accordoServizioParteSpecifica.setTipo((String)listaFieldId_fruitore_accordoServizioParteSpecifica.get(0));
  619.         id_fruitore_accordoServizioParteSpecifica.setNome((String)listaFieldId_fruitore_accordoServizioParteSpecifica.get(1));
  620.        
  621.         // Recupero IdSoggettoAPS
  622.         long idSoggettoAccordoParteSpecifica = (Long) listaFieldId_fruitore_accordoServizioParteSpecifica.get(2);
  623.        
  624.         // Recupero IdSoggettoAPS query
  625.         ISQLQueryObject sqlQueryObjectGet_erogatore_soggetto = sqlQueryObjectGet.newSQLQueryObject();
  626.         sqlQueryObjectGet_erogatore_soggetto.addFromTable("soggetti");
  627.         sqlQueryObjectGet_erogatore_soggetto.addSelectField("tipo_soggetto");
  628.         sqlQueryObjectGet_erogatore_soggetto.addSelectField("nome_soggetto");
  629.         sqlQueryObjectGet_erogatore_soggetto.setANDLogicOperator(true);
  630.         sqlQueryObjectGet_erogatore_soggetto.addWhereCondition("id=?");
  631.        
  632.         // Recupero IdSoggettoAPS execute
  633.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_erogatore_soggetto = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  634.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(idSoggettoAccordoParteSpecifica,Long.class)
  635.         };
  636.         List<Class<?>> listaFieldIdReturnType_erogatore_soggetto = new ArrayList<Class<?>>();
  637.         listaFieldIdReturnType_erogatore_soggetto.add(String.class);
  638.         listaFieldIdReturnType_erogatore_soggetto.add(String.class);
  639.         List<Object> listaFieldId_erogatore_soggetto = jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_fruitore_soggetto.createSQLQuery(), jdbcProperties.isShowSql(),
  640.                 listaFieldIdReturnType_erogatore_soggetto, searchParams_erogatore_soggetto);
  641.         // set _fruitore_soggetto
  642.         IdSoggetto id_erogatore_soggetto = new IdSoggetto();
  643.         id_erogatore_soggetto.setTipo((String)listaFieldId_erogatore_soggetto.get(0));
  644.         id_erogatore_soggetto.setNome((String)listaFieldId_erogatore_soggetto.get(1));
  645.         id_fruitore_accordoServizioParteSpecifica.setIdErogatore(id_erogatore_soggetto);
  646.        
  647.         // Set idAccordoServizioParteSpecifica nel fruitore
  648.         fruitore.setIdAccordoServizioParteSpecifica(id_fruitore_accordoServizioParteSpecifica);

  649.        
  650.         return fruitore;  
  651.    
  652.     }
  653.    
  654.     @Override
  655.     public boolean exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId) throws MultipleResultException, NotImplementedException, ServiceException, Exception {
  656.         return this._exists(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId));
  657.     }
  658.    
  659.     private boolean _exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId) throws MultipleResultException, NotImplementedException, ServiceException, Exception {
  660.    
  661.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  662.                     new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);
  663.                
  664.         boolean existsFruitore = false;

  665.         sqlQueryObject = sqlQueryObject.newSQLQueryObject();
  666.         sqlQueryObject.setANDLogicOperator(true);

  667.         sqlQueryObject.addFromTable(this.getFruitoreFieldConverter().toTable(Fruitore.model()));
  668.         sqlQueryObject.addSelectField(this.getFruitoreFieldConverter().toColumn(Fruitore.model().ORA_REGISTRAZIONE,true));
  669.         sqlQueryObject.addWhereCondition("id=?");


  670.         // Exists fruitore
  671.         existsFruitore = jdbcUtilities.exists(sqlQueryObject.createSQLQuery(), jdbcProperties.isShowSql(),
  672.             new JDBCObject(tableId,Long.class));

  673.        
  674.         return existsFruitore;
  675.    
  676.     }
  677.    
  678.     private void joinEngine(IExpression expression, ISQLQueryObject sqlQueryObject) throws NotImplementedException, ServiceException, Exception{
  679.    
  680.         if(expression.inUseModel(Fruitore.model().ID_FRUITORE,false)){
  681.             String tableName1 = this.getFruitoreFieldConverter().toTable(Fruitore.model());
  682.             //String tableName2 = "sfr";
  683.             String tableName2 =  this.getFruitoreFieldConverter().toAliasTable(Fruitore.model().ID_FRUITORE);
  684.             sqlQueryObject.addWhereCondition(tableName1+".id_soggetto="+tableName2+".id");
  685.         }
  686.         if(expression.inUseModel(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA,false)){
  687.             String tableName1 = this.getFruitoreFieldConverter().toTable(Fruitore.model());
  688.             String tableName2 = this.getFruitoreFieldConverter().toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  689.             sqlQueryObject.addWhereCondition(tableName1+".id_servizio="+tableName2+".id");
  690.         }
  691.         if(expression.inUseModel(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE,false)){
  692.             String tableName1 = this.getFruitoreFieldConverter().toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA);
  693.             String tableName2 = this.getFruitoreFieldConverter().toAliasTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE);
  694.             //String tableName2 = "ser";
  695.             sqlQueryObject.addWhereCondition(tableName1+".id_soggetto="+tableName2+".id");
  696.         }
  697.        
  698.        
  699.         if(expression.inUseModel(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE,false)){
  700.             if(expression.inUseModel(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA,false)==false){
  701.                 sqlQueryObject.addFromTable(this.getFruitoreFieldConverter().toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA));
  702.             }
  703.         }
  704.        
  705.     }
  706.    
  707.     protected java.util.List<Object> getRootTablePrimaryKeyValuesEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id) throws NotFoundException, ServiceException, NotImplementedException, Exception{
  708.         // Identificativi
  709.         java.util.List<Object> rootTableIdValues = new java.util.ArrayList<>();
  710.         Long longId = this.findIdFruitore(jdbcProperties, log, connection, sqlQueryObject.newSQLQueryObject(), id, true);
  711.         rootTableIdValues.add(longId);
  712.         return rootTableIdValues;
  713.     }
  714.    
  715.     protected Map<String, List<IField>> getMapTableToPKColumnEngine() throws NotImplementedException, Exception{
  716.    
  717.         FruitoreFieldConverter converter = this.getFruitoreFieldConverter();
  718.         Map<String, List<IField>> mapTableToPKColumn = new java.util.HashMap<>();
  719.         UtilsTemplate<IField> utilities = new UtilsTemplate<>();

  720.         // Fruitore.model()
  721.         mapTableToPKColumn.put(converter.toTable(Fruitore.model()),
  722.             utilities.newList(
  723.                 new CustomField("id", Long.class, "id", converter.toTable(Fruitore.model()))
  724.             ));

  725.         // Fruitore.model().ID_FRUITORE
  726.         mapTableToPKColumn.put(converter.toTable(Fruitore.model().ID_FRUITORE),
  727.             utilities.newList(
  728.                 new CustomField("id", Long.class, "id", converter.toTable(Fruitore.model().ID_FRUITORE))
  729.             ));

  730.         // Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA
  731.         mapTableToPKColumn.put(converter.toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA),
  732.             utilities.newList(
  733.                 new CustomField("id", Long.class, "id", converter.toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA))
  734.             ));

  735.         // Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE
  736.         mapTableToPKColumn.put(converter.toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE),
  737.             utilities.newList(
  738.                 new CustomField("id", Long.class, "id", converter.toTable(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE))
  739.             ));

  740.         return mapTableToPKColumn;      
  741.     }
  742.    
  743.     @Override
  744.     public List<Long> findAllTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression paginatedExpression) throws ServiceException, NotImplementedException, Exception {
  745.        
  746.         List<Long> list = new ArrayList<Long>();

  747.         sqlQueryObject.setSelectDistinct(true);
  748.         sqlQueryObject.setANDLogicOperator(true);
  749.         sqlQueryObject.addSelectField(this.getFruitoreFieldConverter().toTable(Fruitore.model())+".id");
  750.         Class<?> objectIdClass = Long.class;
  751.        
  752.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareFindAll(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression,
  753.                                                 this.getFruitoreFieldConverter(), Fruitore.model());
  754.        
  755.         joinEngine(paginatedExpression,sqlQueryObject);
  756.        
  757.         List<Object> listObjects = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.findAll(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression,
  758.                                                                             this.getFruitoreFieldConverter(), Fruitore.model(), objectIdClass, listaQuery);
  759.         for(Object object: listObjects) {
  760.             list.add((Long)object);
  761.         }

  762.         return list;
  763.        
  764.     }
  765.    
  766.     @Override
  767.     public long findTableId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression) throws ServiceException, NotFoundException, MultipleResultException, NotImplementedException, Exception {
  768.    
  769.         sqlQueryObject.setSelectDistinct(true);
  770.         sqlQueryObject.setANDLogicOperator(true);
  771.         sqlQueryObject.addSelectField(this.getFruitoreFieldConverter().toTable(Fruitore.model())+".id");
  772.         Class<?> objectIdClass = Long.class;
  773.        
  774.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareFind(jdbcProperties, log, connection, sqlQueryObject, expression,
  775.                                                 this.getFruitoreFieldConverter(), Fruitore.model());
  776.        
  777.         joinEngine(expression,sqlQueryObject);

  778.         Object res = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.find(jdbcProperties, log, connection, sqlQueryObject, expression,
  779.                                                         this.getFruitoreFieldConverter(), Fruitore.model(), objectIdClass, listaQuery);
  780.         if(res!=null && (((Long) res).longValue()>0) ){
  781.             return ((Long) res).longValue();
  782.         }
  783.         else{
  784.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  785.         }
  786.        
  787.     }

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

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

  793.         InUse inUse = new InUse();
  794.         inUse.setInUse(false);
  795.        
  796.         /*
  797.          * TODO: implement code that checks whether the object identified by the id parameter is used by other objects
  798.         */
  799.        
  800.         // Delete this line when you have implemented the method
  801.         int throwNotImplemented = 1;
  802.         if(throwNotImplemented==1){
  803.                 throw new NotImplementedException("NotImplemented");
  804.         }
  805.         // Delete this line when you have implemented the method

  806.         return inUse;

  807.     }
  808.    
  809.     @Override
  810.     public IdFruitore findId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, boolean throwNotFound)
  811.             throws NotFoundException, ServiceException, NotImplementedException, Exception {
  812.        
  813.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  814.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);

  815.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();
  816.          
  817.         // Object _fruitore
  818.         sqlQueryObjectGet.addFromTable(this.getFruitoreFieldConverter().toTable(Fruitore.model()));
  819.         sqlQueryObjectGet.addSelectField("id_soggetto");
  820.         sqlQueryObjectGet.addSelectField("id_servizio");
  821.         sqlQueryObjectGet.setANDLogicOperator(true);
  822.         sqlQueryObjectGet.addWhereCondition("id=?");

  823.         // Recupero _fruitore
  824.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_fruitore = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  825.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(tableId,Long.class)
  826.         };
  827.         List<Class<?>> listaFieldIdReturnType_fruitore = new ArrayList<Class<?>>();
  828.         listaFieldIdReturnType_fruitore.add(Long.class);
  829.         listaFieldIdReturnType_fruitore.add(Long.class);
  830.         org.openspcoop2.core.commons.search.IdFruitore id_fruitore = null;
  831.         List<Object> listaFieldId_fruitore = jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet.createSQLQuery(), jdbcProperties.isShowSql(),
  832.                 listaFieldIdReturnType_fruitore, searchParams_fruitore);
  833.         if(listaFieldId_fruitore==null || listaFieldId_fruitore.size()<=0){
  834.             if(throwNotFound){
  835.                 throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  836.             }
  837.         }
  838.         else{
  839.             // set _fruitore
  840.             id_fruitore = new org.openspcoop2.core.commons.search.IdFruitore();
  841.            
  842.             Long idSoggettoFK = (Long) listaFieldId_fruitore.get(0);
  843.             id_fruitore.
  844.                 setIdFruitore(((IDBSoggettoServiceSearch)this.getServiceManager(connection, jdbcProperties, log).
  845.                         getSoggettoServiceSearch()).findId(idSoggettoFK, true));
  846.            
  847.             Long idParteSpecificaFK = (Long) listaFieldId_fruitore.get(1);
  848.             id_fruitore.
  849.                 setIdAccordoServizioParteSpecifica(((IDBAccordoServizioParteSpecificaServiceSearch)this.getServiceManager(connection, jdbcProperties, log).
  850.                         getAccordoServizioParteSpecificaServiceSearch()).findId(idParteSpecificaFK, true));
  851.         }
  852.        
  853.         return id_fruitore;
  854.        
  855.     }

  856.     @Override
  857.     public Long findTableId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id, boolean throwNotFound)
  858.             throws NotFoundException, ServiceException, NotImplementedException, Exception {
  859.    
  860.         return this.findIdFruitore(jdbcProperties,log,connection,sqlQueryObject,id,throwNotFound);
  861.            
  862.     }
  863.    
  864.     @Override
  865.     public List<List<Object>> nativeQuery(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  866.                                             String sql,List<Class<?>> returnClassTypes,Object ... param) throws ServiceException,NotFoundException,NotImplementedException,Exception{
  867.        
  868.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.nativeQuery(jdbcProperties, log, connection, sqlQueryObject,
  869.                                                                                             sql,returnClassTypes,param);
  870.                                                        
  871.     }
  872.    
  873.     protected Long findIdFruitore(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdFruitore id, boolean throwNotFound) throws NotFoundException, ServiceException, NotImplementedException, Exception {

  874.         if(jdbcProperties==null) {
  875.             throw new ServiceException("Param jdbcProperties is null");
  876.         }
  877.         if(sqlQueryObject==null) {
  878.             throw new ServiceException("Param sqlQueryObject is null");
  879.         }
  880.         if(id==null) {
  881.             throw new ServiceException("Param id is null");
  882.         }
  883.        
  884.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  885.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);

  886.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();

  887.         IDBSoggettoServiceSearch soggettoServiceSearch = (IDBSoggettoServiceSearch) this.getServiceManager(connection, jdbcProperties, log).getSoggettoServiceSearch();
  888.         Long idSoggettoFruitore = soggettoServiceSearch.get(id.getIdFruitore()).getId();
  889.        
  890.         IDBAccordoServizioParteSpecificaServiceSearch accordoServizioParteSpecificaServiceSearch = (IDBAccordoServizioParteSpecificaServiceSearch) this.getServiceManager(connection, jdbcProperties, log).getAccordoServizioParteSpecificaServiceSearch();
  891.         Long idAccordoServizioParteSpecifica = accordoServizioParteSpecificaServiceSearch.get(id.getIdAccordoServizioParteSpecifica()).getId();
  892.        
  893.         // Object _fruitore
  894.         sqlQueryObjectGet.addFromTable(this.getFruitoreFieldConverter().toTable(Fruitore.model()));
  895.         sqlQueryObjectGet.addSelectField("id");
  896.         // Devono essere mappati nella where condition i metodi dell'oggetto id.getXXX
  897.         sqlQueryObjectGet.setANDLogicOperator(true);
  898.         sqlQueryObjectGet.setSelectDistinct(true);
  899.         sqlQueryObjectGet.addWhereCondition("id_soggetto=?");
  900.         sqlQueryObjectGet.addWhereCondition("id_servizio=?");

  901.         // Recupero _fruitore
  902.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_fruitore = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  903.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(idSoggettoFruitore,Long.class),
  904.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(idAccordoServizioParteSpecifica,Long.class)
  905.         };
  906.         Long id_fruitore = null;
  907.         try{
  908.             id_fruitore = (Long) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet.createSQLQuery(), jdbcProperties.isShowSql(),
  909.                         Long.class, searchParams_fruitore);
  910.         }catch(NotFoundException notFound){
  911.             if(throwNotFound){
  912.                 throw new NotFoundException(notFound);
  913.             }
  914.         }
  915.         if(id_fruitore==null || id_fruitore<=0){
  916.             if(throwNotFound){
  917.                 throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  918.             }
  919.         }
  920.        
  921.         return id_fruitore;
  922.     }
  923. }