JDBCServizioApplicativoServiceSearchImpl.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.util.List;
  22. import java.util.ArrayList;
  23. import java.util.Map;

  24. import java.sql.Connection;

  25. import org.slf4j.Logger;

  26. import org.openspcoop2.utils.sql.ISQLQueryObject;

  27. import org.openspcoop2.generic_project.expression.impl.sql.ISQLFieldConverter;
  28. import org.openspcoop2.generic_project.dao.jdbc.utils.IJDBCFetch;
  29. import org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject;
  30. import org.openspcoop2.generic_project.dao.jdbc.IJDBCServiceSearchWithId;
  31. import org.openspcoop2.core.commons.search.IdServizioApplicativo;
  32. import org.openspcoop2.core.commons.search.IdSoggetto;
  33. import org.openspcoop2.generic_project.utils.UtilsTemplate;
  34. import org.openspcoop2.generic_project.beans.CustomField;
  35. import org.openspcoop2.generic_project.beans.InUse;
  36. import org.openspcoop2.generic_project.beans.IField;
  37. import org.openspcoop2.generic_project.beans.NonNegativeNumber;
  38. import org.openspcoop2.generic_project.beans.UnionExpression;
  39. import org.openspcoop2.generic_project.beans.Union;
  40. import org.openspcoop2.generic_project.beans.FunctionField;
  41. import org.openspcoop2.generic_project.exception.MultipleResultException;
  42. import org.openspcoop2.generic_project.exception.NotFoundException;
  43. import org.openspcoop2.generic_project.exception.NotImplementedException;
  44. import org.openspcoop2.generic_project.exception.ServiceException;
  45. import org.openspcoop2.generic_project.expression.IExpression;
  46. import org.openspcoop2.generic_project.dao.jdbc.JDBCExpression;
  47. import org.openspcoop2.generic_project.dao.jdbc.JDBCPaginatedExpression;

  48. import org.openspcoop2.generic_project.dao.jdbc.JDBCServiceManagerProperties;
  49. import org.openspcoop2.core.commons.search.dao.jdbc.converter.ServizioApplicativoFieldConverter;
  50. import org.openspcoop2.core.commons.search.dao.jdbc.fetch.ServizioApplicativoFetch;
  51. import org.openspcoop2.core.constants.CostantiDB;
  52. import org.openspcoop2.core.constants.ProprietariProtocolProperty;
  53. import org.openspcoop2.core.commons.search.dao.IDBSoggettoServiceSearch;
  54. import org.openspcoop2.core.commons.search.dao.ISoggettoServiceSearch;
  55. import org.openspcoop2.core.commons.search.ServizioApplicativoProprietaProtocollo;
  56. import org.openspcoop2.core.commons.search.ServizioApplicativo;
  57. import org.openspcoop2.core.commons.search.Soggetto;
  58. import org.openspcoop2.core.commons.search.ServizioApplicativoRuolo;

  59. /**    
  60.  * JDBCServizioApplicativoServiceSearchImpl
  61.  *
  62.  * @author Poli Andrea (poli@link.it)
  63.  * @author $Author$
  64.  * @version $Rev$, $Date$
  65.  */
  66. public class JDBCServizioApplicativoServiceSearchImpl implements IJDBCServiceSearchWithId<ServizioApplicativo, IdServizioApplicativo, JDBCServiceManager> {

  67.     private ServizioApplicativoFieldConverter _servizioApplicativoFieldConverter = null;
  68.     public ServizioApplicativoFieldConverter getServizioApplicativoFieldConverter() {
  69.         if(this._servizioApplicativoFieldConverter==null){
  70.             this._servizioApplicativoFieldConverter = new ServizioApplicativoFieldConverter(this.jdbcServiceManager.getJdbcProperties().getDatabaseType());
  71.         }      
  72.         return this._servizioApplicativoFieldConverter;
  73.     }
  74.     @Override
  75.     public ISQLFieldConverter getFieldConverter() {
  76.         return this.getServizioApplicativoFieldConverter();
  77.     }
  78.    
  79.     private ServizioApplicativoFetch servizioApplicativoFetch = new ServizioApplicativoFetch();
  80.     public ServizioApplicativoFetch getServizioApplicativoFetch() {
  81.         return this.servizioApplicativoFetch;
  82.     }
  83.     @Override
  84.     public IJDBCFetch getFetch() {
  85.         return getServizioApplicativoFetch();
  86.     }
  87.    
  88.    
  89.     private JDBCServiceManager jdbcServiceManager = null;

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

  103.     @Override
  104.     public IdServizioApplicativo convertToId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, ServizioApplicativo servizioApplicativo) throws NotImplementedException, ServiceException, Exception{
  105.    
  106.         IdServizioApplicativo idServizioApplicativo = new IdServizioApplicativo();
  107.         idServizioApplicativo.setNome(servizioApplicativo.getNome());
  108.         idServizioApplicativo.setIdSoggetto(servizioApplicativo.getIdSoggetto());
  109.         return idServizioApplicativo;

  110.     }
  111.    
  112.     @Override
  113.     public ServizioApplicativo get(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException,Exception {
  114.         Long id_servizioApplicativo = ( (id!=null && id.getId()!=null && id.getId()>0) ? id.getId() : this.findIdServizioApplicativo(jdbcProperties, log, connection, sqlQueryObject, id, true));
  115.         return this.getEngine(jdbcProperties, log, connection, sqlQueryObject, id_servizioApplicativo,idMappingResolutionBehaviour);
  116.        
  117.        
  118.     }
  119.    
  120.     @Override
  121.     public boolean exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id) throws MultipleResultException, NotImplementedException, ServiceException,Exception {

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

  129.         List<IdServizioApplicativo> list = new ArrayList<IdServizioApplicativo>();

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

  136.         List<Long> ids = this.findAllTableIds(jdbcProperties, log, connection, sqlQueryObject, expression);
  137.        
  138.         for(Long id: ids) {
  139.             ServizioApplicativo servizioApplicativo = this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour);
  140.             IdServizioApplicativo idServizioApplicativo = this.convertToId(jdbcProperties,log,connection,sqlQueryObject,servizioApplicativo);
  141.             list.add(idServizioApplicativo);
  142.         }

  143.         return list;
  144.        
  145.     }
  146.    
  147.     @Override
  148.     public List<ServizioApplicativo> findAll(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotImplementedException, ServiceException,Exception {

  149.         List<ServizioApplicativo> list = new ArrayList<ServizioApplicativo>();
  150.        
  151.         // TODO: implementazione non efficiente.
  152.         // Per ottenere una implementazione efficiente:
  153.         // 1. Usare metodo select di questa classe indirizzando esattamente i field necessari
  154.         // 2. Usare metodo getServizioApplicativoFetch() sul risultato della select per ottenere un oggetto ServizioApplicativo
  155.         //    La fetch con la map inserirĂ  nell'oggetto solo i valori estratti

  156.         List<Long> ids = this.findAllTableIds(jdbcProperties, log, connection, sqlQueryObject, expression);
  157.        
  158.         for(Long id: ids) {
  159.             list.add(this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour));
  160.         }

  161.         return list;      
  162.        
  163.     }
  164.    
  165.     @Override
  166.     public ServizioApplicativo find(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour)
  167.         throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException,Exception {

  168.         long id = this.findTableId(jdbcProperties, log, connection, sqlQueryObject, expression);
  169.         if(id>0){
  170.             return this.get(jdbcProperties, log, connection, sqlQueryObject, id, idMappingResolutionBehaviour);
  171.         }else{
  172.             throw new NotFoundException("Entry with id["+id+"] not found");
  173.         }
  174.        
  175.     }
  176.    
  177.     @Override
  178.     public NonNegativeNumber count(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression) throws NotImplementedException, ServiceException,Exception {
  179.        
  180.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareCount(jdbcProperties, log, connection, sqlQueryObject, expression,
  181.                                                 this.getServizioApplicativoFieldConverter(), ServizioApplicativo.model());
  182.        
  183.         sqlQueryObject.addSelectCountField(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model())+".id","tot",true);
  184.        
  185.         joinEngine(expression,sqlQueryObject);
  186.        
  187.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.count(jdbcProperties, log, connection, sqlQueryObject, expression,
  188.                                                                             this.getServizioApplicativoFieldConverter(), ServizioApplicativo.model(),listaQuery);
  189.     }

  190.     @Override
  191.     public InUse inUse(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id) throws NotFoundException, NotImplementedException, ServiceException,Exception {
  192.        
  193.         Long id_servizioApplicativo = this.findIdServizioApplicativo(jdbcProperties, log, connection, sqlQueryObject, id, true);
  194.         return this.inUseEngine(jdbcProperties, log, connection, sqlQueryObject, id_servizioApplicativo);
  195.        
  196.     }

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

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

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

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

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



  371.     // -- ConstructorExpression

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


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

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

  409.     @Override
  410.     public void mappingTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id, ServizioApplicativo obj) throws NotFoundException,NotImplementedException,ServiceException,Exception{
  411.         _mappingTableIds(jdbcProperties,log,connection,sqlQueryObject,obj,
  412.                 this.get(jdbcProperties,log,connection,sqlQueryObject,id,null));
  413.     }
  414.    
  415.     @Override
  416.     public void mappingTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, ServizioApplicativo obj) throws NotFoundException,NotImplementedException,ServiceException,Exception{
  417.         _mappingTableIds(jdbcProperties,log,connection,sqlQueryObject,obj,
  418.                 this.get(jdbcProperties,log,connection,sqlQueryObject,tableId,null));
  419.     }
  420.     private void _mappingTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, ServizioApplicativo obj, ServizioApplicativo imgSaved) throws NotFoundException,NotImplementedException,ServiceException,Exception{
  421.         if(imgSaved==null){
  422.             return;
  423.         }
  424.         obj.setId(imgSaved.getId());
  425.         if(obj.getIdSoggetto()!=null &&
  426.                 imgSaved.getIdSoggetto()!=null){
  427.             obj.getIdSoggetto().setId(imgSaved.getIdSoggetto().getId());
  428.         }
  429.         if(obj.getServizioApplicativoRuoloList()!=null){
  430.             List<org.openspcoop2.core.commons.search.ServizioApplicativoRuolo> listObj_ = obj.getServizioApplicativoRuoloList();
  431.             for(org.openspcoop2.core.commons.search.ServizioApplicativoRuolo itemObj_ : listObj_){
  432.                 org.openspcoop2.core.commons.search.ServizioApplicativoRuolo itemAlreadySaved_ = null;
  433.                 if(imgSaved.getServizioApplicativoRuoloList()!=null){
  434.                     List<org.openspcoop2.core.commons.search.ServizioApplicativoRuolo> listImgSaved_ = imgSaved.getServizioApplicativoRuoloList();
  435.                     for(org.openspcoop2.core.commons.search.ServizioApplicativoRuolo itemImgSaved_ : listImgSaved_){
  436.                         boolean objEqualsToImgSaved_ = false;
  437.                         objEqualsToImgSaved_ = org.openspcoop2.generic_project.utils.Utilities.equals(itemObj_.getNome(),itemImgSaved_.getNome());
  438.                         if(objEqualsToImgSaved_){
  439.                             itemAlreadySaved_=itemImgSaved_;
  440.                             break;
  441.                         }
  442.                     }
  443.                 }
  444.                 if(itemAlreadySaved_!=null){
  445.                     itemObj_.setId(itemAlreadySaved_.getId());
  446.                 }
  447.             }
  448.         }
  449.         if(obj.getServizioApplicativoProprietaProtocolloList()!=null){
  450.             List<org.openspcoop2.core.commons.search.ServizioApplicativoProprietaProtocollo> listObj_ = obj.getServizioApplicativoProprietaProtocolloList();
  451.             for(org.openspcoop2.core.commons.search.ServizioApplicativoProprietaProtocollo itemObj_ : listObj_){
  452.                 org.openspcoop2.core.commons.search.ServizioApplicativoProprietaProtocollo itemAlreadySaved_ = null;
  453.                 if(imgSaved.getServizioApplicativoProprietaProtocolloList()!=null){
  454.                     List<org.openspcoop2.core.commons.search.ServizioApplicativoProprietaProtocollo> listImgSaved_ = imgSaved.getServizioApplicativoProprietaProtocolloList();
  455.                     for(org.openspcoop2.core.commons.search.ServizioApplicativoProprietaProtocollo itemImgSaved_ : listImgSaved_){
  456.                         boolean objEqualsToImgSaved_ = false;
  457.                         objEqualsToImgSaved_ = org.openspcoop2.generic_project.utils.Utilities.equals(itemObj_.getName(),itemImgSaved_.getName());
  458.                         if(objEqualsToImgSaved_){
  459.                             itemAlreadySaved_=itemImgSaved_;
  460.                             break;
  461.                         }
  462.                     }
  463.                 }
  464.                 if(itemAlreadySaved_!=null){
  465.                     itemObj_.setId(itemAlreadySaved_.getId());
  466.                 }
  467.             }
  468.         }

  469.     }
  470.    
  471.     @Override
  472.     public ServizioApplicativo get(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException, Exception {
  473.         return this.getEngine(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId), idMappingResolutionBehaviour);
  474.     }
  475.    
  476.     private ServizioApplicativo getEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId, org.openspcoop2.generic_project.beans.IDMappingBehaviour idMappingResolutionBehaviour) throws NotFoundException, MultipleResultException, NotImplementedException, ServiceException, Exception {
  477.    
  478.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  479.                     new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);
  480.        
  481.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();
  482.                
  483.         ServizioApplicativo servizioApplicativo = new ServizioApplicativo();
  484.        

  485.         // Object servizioApplicativo
  486.         ISQLQueryObject sqlQueryObjectGet_servizioApplicativo = sqlQueryObjectGet.newSQLQueryObject();
  487.         sqlQueryObjectGet_servizioApplicativo.setANDLogicOperator(true);
  488.         sqlQueryObjectGet_servizioApplicativo.addFromTable(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model()));
  489.         sqlQueryObjectGet_servizioApplicativo.addSelectField("id");
  490.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().NOME,true));
  491.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().TIPOLOGIA_FRUIZIONE,true));
  492.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().TIPOLOGIA_EROGAZIONE,true));
  493.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().TIPO,true));
  494.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().AS_CLIENT,true));
  495.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().TIPOAUTH,true));
  496.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().UTENTE,true));
  497.         sqlQueryObjectGet_servizioApplicativo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().TOKEN_POLICY,true));
  498.         sqlQueryObjectGet_servizioApplicativo.addWhereCondition("id=?");

  499.         // Get servizioApplicativo
  500.         servizioApplicativo = (ServizioApplicativo) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_servizioApplicativo.createSQLQuery(), jdbcProperties.isShowSql(), ServizioApplicativo.model(), this.getServizioApplicativoFetch(),
  501.             new JDBCObject(tableId,Long.class));


  502.         // Object _servizioApplicativo_soggetto (recupero id)
  503.         ISQLQueryObject sqlQueryObjectGet_servizioApplicativo_soggetto_readFkId = sqlQueryObjectGet.newSQLQueryObject();
  504.         sqlQueryObjectGet_servizioApplicativo_soggetto_readFkId.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
  505.         sqlQueryObjectGet_servizioApplicativo_soggetto_readFkId.addSelectField("id_soggetto");
  506.         sqlQueryObjectGet_servizioApplicativo_soggetto_readFkId.addWhereCondition("id=?");
  507.         sqlQueryObjectGet_servizioApplicativo_soggetto_readFkId.setANDLogicOperator(true);
  508.         Long idFK_servizioApplicativo_soggetto = (Long) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_servizioApplicativo_soggetto_readFkId.createSQLQuery(), jdbcProperties.isShowSql(),Long.class,
  509.                 new JDBCObject(servizioApplicativo.getId(),Long.class));
  510.        
  511.         // Object _servizioApplicativo_soggetto
  512.         ISQLQueryObject sqlQueryObjectGet_servizioApplicativo_soggetto = sqlQueryObjectGet.newSQLQueryObject();
  513.         sqlQueryObjectGet_servizioApplicativo_soggetto.addFromTable(CostantiDB.SOGGETTI);
  514.         sqlQueryObjectGet_servizioApplicativo_soggetto.addSelectField("tipo_soggetto");
  515.         sqlQueryObjectGet_servizioApplicativo_soggetto.addSelectField("nome_soggetto");
  516.         sqlQueryObjectGet_servizioApplicativo_soggetto.setANDLogicOperator(true);
  517.         sqlQueryObjectGet_servizioApplicativo_soggetto.addWhereCondition("id=?");

  518.         // Recupero _servizioApplicativo_soggetto
  519.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_servizioApplicativo_soggetto = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  520.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(idFK_servizioApplicativo_soggetto,Long.class)
  521.         };
  522.         List<Class<?>> listaFieldIdReturnType_servizioApplicativo_soggetto = new ArrayList<Class<?>>();
  523.         listaFieldIdReturnType_servizioApplicativo_soggetto.add(String.class);
  524.         listaFieldIdReturnType_servizioApplicativo_soggetto.add(String.class);
  525.         List<Object> listaFieldId_servizioApplicativo_soggetto = jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet_servizioApplicativo_soggetto.createSQLQuery(), jdbcProperties.isShowSql(),
  526.                 listaFieldIdReturnType_servizioApplicativo_soggetto, searchParams_servizioApplicativo_soggetto);
  527.         // set _servizioApplicativo_soggetto
  528.         IdSoggetto id_servizioApplicativo_soggetto = new IdSoggetto();
  529.         id_servizioApplicativo_soggetto.setTipo((String)listaFieldId_servizioApplicativo_soggetto.get(0));
  530.         id_servizioApplicativo_soggetto.setNome((String)listaFieldId_servizioApplicativo_soggetto.get(1));
  531.         servizioApplicativo.setIdSoggetto(id_servizioApplicativo_soggetto);

  532.         // Object servizioApplicativo_servizioApplicativoRuolo
  533.         ISQLQueryObject sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo = sqlQueryObjectGet.newSQLQueryObject();
  534.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo.setANDLogicOperator(true);
  535.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo.addFromTable(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO));
  536.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo.addSelectField("id");
  537.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO.NOME,true));
  538.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo.addWhereCondition("id_servizio_applicativo=?");

  539.         // Get servizioApplicativo_servizioApplicativoRuolo
  540.         java.util.List<Object> servizioApplicativo_servizioApplicativoRuolo_list = (java.util.List<Object>) jdbcUtilities.executeQuery(sqlQueryObjectGet_servizioApplicativo_servizioApplicativoRuolo.createSQLQuery(), jdbcProperties.isShowSql(), ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO, this.getServizioApplicativoFetch(),
  541.             new JDBCObject(servizioApplicativo.getId(),Long.class));

  542.         if(servizioApplicativo_servizioApplicativoRuolo_list != null) {
  543.             for (Object servizioApplicativo_servizioApplicativoRuolo_object: servizioApplicativo_servizioApplicativoRuolo_list) {
  544.                 ServizioApplicativoRuolo servizioApplicativo_servizioApplicativoRuolo = (ServizioApplicativoRuolo) servizioApplicativo_servizioApplicativoRuolo_object;


  545.                 servizioApplicativo.addServizioApplicativoRuolo(servizioApplicativo_servizioApplicativoRuolo);
  546.             }
  547.         }

  548.         // Object servizioApplicativo_servizioApplicativoProprietaProtocollo
  549.         ISQLQueryObject sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo = sqlQueryObjectGet.newSQLQueryObject();
  550.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.setANDLogicOperator(true);
  551.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addFromTable(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO));
  552.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addSelectField("id");
  553.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO.NAME,true));
  554.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO.VALUE_STRING,true));
  555.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO.VALUE_NUMBER,true));
  556.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO.VALUE_BOOLEAN,true));
  557.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addWhereCondition("id_proprietario=?");
  558.         sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.addWhereCondition("tipo_proprietario=?");

  559.         // Get servizioApplicativo_servizioApplicativoProprietaProtocollo
  560.         java.util.List<Object> servizioApplicativo_servizioApplicativoProprietaProtocollo_list = (java.util.List<Object>) jdbcUtilities.executeQuery(sqlQueryObjectGet_servizioApplicativo_servizioApplicativoProprietaProtocollo.createSQLQuery(), jdbcProperties.isShowSql(), ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO, this.getServizioApplicativoFetch(),
  561.             new JDBCObject(servizioApplicativo.getId(),Long.class),
  562.             new JDBCObject(ProprietariProtocolProperty.SERVIZIO_APPLICATIVO.name(),String.class));

  563.         if(servizioApplicativo_servizioApplicativoProprietaProtocollo_list != null) {
  564.             for (Object servizioApplicativo_servizioApplicativoProprietaProtocollo_object: servizioApplicativo_servizioApplicativoProprietaProtocollo_list) {
  565.                 ServizioApplicativoProprietaProtocollo servizioApplicativo_servizioApplicativoProprietaProtocollo = (ServizioApplicativoProprietaProtocollo) servizioApplicativo_servizioApplicativoProprietaProtocollo_object;


  566.                 servizioApplicativo.addServizioApplicativoProprietaProtocollo(servizioApplicativo_servizioApplicativoProprietaProtocollo);
  567.             }
  568.         }              
  569.        
  570.         return servizioApplicativo;  
  571.    
  572.     }
  573.    
  574.     @Override
  575.     public boolean exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId) throws MultipleResultException, NotImplementedException, ServiceException, Exception {
  576.         return this._exists(jdbcProperties, log, connection, sqlQueryObject, Long.valueOf(tableId));
  577.     }
  578.    
  579.     private boolean _exists(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, Long tableId) throws MultipleResultException, NotImplementedException, ServiceException, Exception {
  580.    
  581.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  582.                     new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);
  583.                
  584.         boolean existsServizioApplicativo = false;

  585.         sqlQueryObject = sqlQueryObject.newSQLQueryObject();
  586.         sqlQueryObject.setANDLogicOperator(true);

  587.         sqlQueryObject.addFromTable(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model()));
  588.         sqlQueryObject.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().NOME,true));
  589.         sqlQueryObject.addWhereCondition("id=?");


  590.         // Exists servizioApplicativo
  591.         existsServizioApplicativo = jdbcUtilities.exists(sqlQueryObject.createSQLQuery(), jdbcProperties.isShowSql(),
  592.             new JDBCObject(tableId,Long.class));

  593.        
  594.         return existsServizioApplicativo;
  595.    
  596.     }
  597.    
  598.     private void joinEngine(IExpression expression, ISQLQueryObject sqlQueryObject) throws NotImplementedException, ServiceException, Exception{
  599.    
  600.         if(expression.inUseModel(ServizioApplicativo.model().ID_SOGGETTO,false)){
  601.             String tableName1 = this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model());
  602.             String tableName2 = this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model().ID_SOGGETTO);
  603.             sqlQueryObject.addWhereCondition(tableName1+".id_soggetto="+tableName2+".id");
  604.         }
  605.         if(expression.inUseModel(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO,false)){
  606.             String tableName1 = this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model());
  607.             String tableName2 = this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO);
  608.             sqlQueryObject.addWhereCondition(tableName1+".id="+tableName2+".id_servizio_applicativo");
  609.         }
  610.         if(expression.inUseModel(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO,false)){
  611.             String tableName1 = this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model());
  612.             String tableName2 = this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO);
  613.             sqlQueryObject.addWhereCondition(tableName1+".id="+tableName2+".id_proprietario");
  614.             sqlQueryObject.addWhereCondition(tableName2+".tipo_proprietario='"+ProprietariProtocolProperty.SERVIZIO_APPLICATIVO.name()+"'");
  615.         }
  616.     }
  617.    
  618.     protected java.util.List<Object> getRootTablePrimaryKeyValuesEngine(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id) throws NotFoundException, ServiceException, NotImplementedException, Exception{
  619.         // Identificativi
  620.         java.util.List<Object> rootTableIdValues = new java.util.ArrayList<>();
  621.         Long longId = this.findIdServizioApplicativo(jdbcProperties, log, connection, sqlQueryObject.newSQLQueryObject(), id, true);
  622.         rootTableIdValues.add(longId);
  623.         return rootTableIdValues;
  624.     }
  625.    
  626.     protected Map<String, List<IField>> getMapTableToPKColumnEngine() throws NotImplementedException, Exception{
  627.    
  628.         ServizioApplicativoFieldConverter converter = this.getServizioApplicativoFieldConverter();
  629.         Map<String, List<IField>> mapTableToPKColumn = new java.util.HashMap<>();
  630.         UtilsTemplate<IField> utilities = new UtilsTemplate<>();

  631.         // ServizioApplicativo.model()
  632.         mapTableToPKColumn.put(converter.toTable(ServizioApplicativo.model()),
  633.             utilities.newList(
  634.                 new CustomField("id", Long.class, "id", converter.toTable(ServizioApplicativo.model()))
  635.             ));

  636.         // ServizioApplicativo.model().ID_SOGGETTO
  637.         mapTableToPKColumn.put(converter.toTable(ServizioApplicativo.model().ID_SOGGETTO),
  638.             utilities.newList(
  639.                 new CustomField("id", Long.class, "id", converter.toTable(ServizioApplicativo.model().ID_SOGGETTO))
  640.             ));

  641.         // ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO
  642.         mapTableToPKColumn.put(converter.toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO),
  643.             utilities.newList(
  644.                 new CustomField("id", Long.class, "id", converter.toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_RUOLO))
  645.             ));

  646.         // ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA
  647.         mapTableToPKColumn.put(converter.toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO),
  648.             utilities.newList(
  649.                 new CustomField("id", Long.class, "id", converter.toTable(ServizioApplicativo.model().SERVIZIO_APPLICATIVO_PROPRIETA_PROTOCOLLO))
  650.             ));

  651.         return mapTableToPKColumn;      
  652.     }
  653.    
  654.     @Override
  655.     public List<Long> findAllTableIds(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCPaginatedExpression paginatedExpression) throws ServiceException, NotImplementedException, Exception {
  656.        
  657.         List<Long> list = new ArrayList<Long>();

  658.         sqlQueryObject.setSelectDistinct(true);
  659.         sqlQueryObject.setANDLogicOperator(true);
  660.         sqlQueryObject.addSelectField(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model())+".id");
  661.         Class<?> objectIdClass = Long.class;
  662.        
  663.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareFindAll(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression,
  664.                                                 this.getServizioApplicativoFieldConverter(), ServizioApplicativo.model());
  665.        
  666.         joinEngine(paginatedExpression,sqlQueryObject);
  667.        
  668.         List<Object> listObjects = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.findAll(jdbcProperties, log, connection, sqlQueryObject, paginatedExpression,
  669.                                                                             this.getServizioApplicativoFieldConverter(), ServizioApplicativo.model(), objectIdClass, listaQuery);
  670.         for(Object object: listObjects) {
  671.             list.add((Long)object);
  672.         }

  673.         return list;
  674.        
  675.     }
  676.    
  677.     @Override
  678.     public long findTableId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, JDBCExpression expression) throws ServiceException, NotFoundException, MultipleResultException, NotImplementedException, Exception {
  679.    
  680.         sqlQueryObject.setSelectDistinct(true);
  681.         sqlQueryObject.setANDLogicOperator(true);
  682.         sqlQueryObject.addSelectField(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model())+".id");
  683.         Class<?> objectIdClass = Long.class;
  684.        
  685.         List<Object> listaQuery = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.prepareFind(jdbcProperties, log, connection, sqlQueryObject, expression,
  686.                                                 this.getServizioApplicativoFieldConverter(), ServizioApplicativo.model());
  687.        
  688.         joinEngine(expression,sqlQueryObject);

  689.         Object res = org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.find(jdbcProperties, log, connection, sqlQueryObject, expression,
  690.                                                         this.getServizioApplicativoFieldConverter(), ServizioApplicativo.model(), objectIdClass, listaQuery);
  691.         if(res!=null && (((Long) res).longValue()>0) ){
  692.             return ((Long) res).longValue();
  693.         }
  694.         else{
  695.             throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  696.         }
  697.        
  698.     }

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

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

  704.         InUse inUse = new InUse();
  705.         inUse.setInUse(false);
  706.        
  707.         /*
  708.          * TODO: implement code that checks whether the object identified by the id parameter is used by other objects
  709.         */
  710.        
  711.         // Delete this line when you have implemented the method
  712.         int throwNotImplemented = 1;
  713.         if(throwNotImplemented==1){
  714.                 throw new NotImplementedException("NotImplemented");
  715.         }
  716.         // Delete this line when you have implemented the method

  717.         return inUse;

  718.     }
  719.    
  720.     @Override
  721.     public IdServizioApplicativo findId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, long tableId, boolean throwNotFound)
  722.             throws NotFoundException, ServiceException, NotImplementedException, Exception {
  723.        
  724.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  725.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);

  726.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();              

  727.         // Object _servizioApplicativo
  728.         sqlQueryObjectGet.addFromTable(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model()));
  729.         sqlQueryObjectGet.addSelectField(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().NOME,true));
  730.         sqlQueryObjectGet.addSelectField("id_soggetto");
  731.         sqlQueryObjectGet.setANDLogicOperator(true);
  732.         sqlQueryObjectGet.addWhereCondition("id=?");

  733.         // Recupero _servizioApplicativo
  734.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_servizioApplicativo = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  735.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(tableId,Long.class)
  736.         };
  737.         List<Class<?>> listaFieldIdReturnType_servizioApplicativo = new ArrayList<Class<?>>();
  738.         listaFieldIdReturnType_servizioApplicativo.add(String.class);
  739.         listaFieldIdReturnType_servizioApplicativo.add(Long.class);
  740.         org.openspcoop2.core.commons.search.IdServizioApplicativo id_servizioApplicativo = null;
  741.         List<Object> listaFieldId_servizioApplicativo = jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet.createSQLQuery(), jdbcProperties.isShowSql(),
  742.                 listaFieldIdReturnType_servizioApplicativo, searchParams_servizioApplicativo);
  743.         if(listaFieldId_servizioApplicativo==null || listaFieldId_servizioApplicativo.size()<=0){
  744.             if(throwNotFound){
  745.                 throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  746.             }
  747.         }
  748.         else{
  749.             // set _servizioApplicativo
  750.             id_servizioApplicativo = new org.openspcoop2.core.commons.search.IdServizioApplicativo();
  751.             id_servizioApplicativo.setNome((String)listaFieldId_servizioApplicativo.get(0));
  752.            
  753.             Long idSoggettoFK = (Long) listaFieldId_servizioApplicativo.get(1);
  754.             id_servizioApplicativo.
  755.                 setIdSoggetto(((IDBSoggettoServiceSearch)this.getServiceManager(connection, jdbcProperties, log).
  756.                         getSoggettoServiceSearch()).findId(idSoggettoFK, true));
  757.         }
  758.        
  759.         return id_servizioApplicativo;
  760.        
  761.     }

  762.     @Override
  763.     public Long findTableId(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id, boolean throwNotFound)
  764.             throws NotFoundException, ServiceException, NotImplementedException, Exception {
  765.    
  766.         return this.findIdServizioApplicativo(jdbcProperties,log,connection,sqlQueryObject,id,throwNotFound);
  767.            
  768.     }
  769.    
  770.     @Override
  771.     public List<List<Object>> nativeQuery(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject,
  772.                                             String sql,List<Class<?>> returnClassTypes,Object ... param) throws ServiceException,NotFoundException,NotImplementedException,Exception{
  773.        
  774.         return org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.nativeQuery(jdbcProperties, log, connection, sqlQueryObject,
  775.                                                                                             sql,returnClassTypes,param);
  776.                                                        
  777.     }
  778.    
  779.     protected Long findIdServizioApplicativo(JDBCServiceManagerProperties jdbcProperties, Logger log, Connection connection, ISQLQueryObject sqlQueryObject, IdServizioApplicativo id, boolean throwNotFound) throws NotFoundException, ServiceException, NotImplementedException, Exception {

  780.         if(jdbcProperties==null) {
  781.             throw new ServiceException("Param jdbcProperties is null");
  782.         }
  783.         if(sqlQueryObject==null) {
  784.             throw new ServiceException("Param sqlQueryObject is null");
  785.         }
  786.         if(id==null) {
  787.             throw new ServiceException("Param id is null");
  788.         }
  789.        
  790.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities jdbcUtilities =
  791.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCPreparedStatementUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2(), log, connection);

  792.         ISQLQueryObject sqlQueryObjectGet = sqlQueryObject.newSQLQueryObject();

  793.         if(id.getIdSoggetto()==null){
  794.             throw new ServiceException("IdSoggetto non fornito");
  795.         }
  796.        
  797.         // Recupero id soggetto
  798.         ISoggettoServiceSearch soggettoServiceSearch = this.getServiceManager(connection, jdbcProperties, log).getSoggettoServiceSearch();
  799.         Soggetto sa_id_soggetto = ((IDBSoggettoServiceSearch)soggettoServiceSearch).get(id.getIdSoggetto());
  800.        
  801.         // Object _servizioApplicativo
  802.         sqlQueryObjectGet.addFromTable(this.getServizioApplicativoFieldConverter().toTable(ServizioApplicativo.model()));
  803.         sqlQueryObjectGet.addSelectField("id");
  804.         // Devono essere mappati nella where condition i metodi dell'oggetto id.getXXX
  805.         sqlQueryObjectGet.setANDLogicOperator(true);
  806.         sqlQueryObjectGet.setSelectDistinct(true);
  807.         sqlQueryObjectGet.addWhereCondition(this.getServizioApplicativoFieldConverter().toColumn(ServizioApplicativo.model().NOME,true)+"=?");
  808.         sqlQueryObjectGet.addWhereCondition("id_soggetto=?");

  809.         // Recupero _servizioApplicativo
  810.         org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] searchParams_servizioApplicativo = new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject [] {
  811.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(id.getNome(),String.class),
  812.             new org.openspcoop2.generic_project.dao.jdbc.utils.JDBCObject(sa_id_soggetto.getId(),Long.class)
  813.         };
  814.         Long id_servizioApplicativo = null;
  815.         try{
  816.             id_servizioApplicativo = (Long) jdbcUtilities.executeQuerySingleResult(sqlQueryObjectGet.createSQLQuery(), jdbcProperties.isShowSql(),
  817.                         Long.class, searchParams_servizioApplicativo);
  818.         }catch(NotFoundException notFound){
  819.             if(throwNotFound){
  820.                 throw new NotFoundException(notFound);
  821.             }
  822.         }
  823.         if(id_servizioApplicativo==null || id_servizioApplicativo<=0){
  824.             if(throwNotFound){
  825.                 throw org.openspcoop2.generic_project.dao.jdbc.utils.GenericJDBCUtilities.newNotFoundException();
  826.             }
  827.         }
  828.        
  829.         return id_servizioApplicativo;
  830.     }
  831. }