RegistroCore.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.utils;

  21. import java.sql.Connection;
  22. import java.util.ArrayList;
  23. import java.util.Collections;
  24. import java.util.Comparator;
  25. import java.util.HashMap;
  26. import java.util.LinkedHashMap;
  27. import java.util.LinkedList;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.Map.Entry;

  31. import org.apache.commons.lang.StringUtils;
  32. import org.openspcoop2.core.commons.ProtocolFactoryReflectionUtils;
  33. import org.openspcoop2.core.commons.search.AccordoServizioParteComune;
  34. import org.openspcoop2.core.commons.search.AccordoServizioParteComuneAzione;
  35. import org.openspcoop2.core.commons.search.AccordoServizioParteComuneGruppo;
  36. import org.openspcoop2.core.commons.search.AccordoServizioParteSpecifica;
  37. import org.openspcoop2.core.commons.search.Fruitore;
  38. import org.openspcoop2.core.commons.search.IdAccordoServizioParteComune;
  39. import org.openspcoop2.core.commons.search.IdAccordoServizioParteComuneGruppo;
  40. import org.openspcoop2.core.commons.search.IdPortType;
  41. import org.openspcoop2.core.commons.search.IdSoggetto;
  42. import org.openspcoop2.core.commons.search.Operation;
  43. import org.openspcoop2.core.commons.search.PortType;
  44. import org.openspcoop2.core.commons.search.PortaApplicativa;
  45. import org.openspcoop2.core.commons.search.PortaDelegata;
  46. import org.openspcoop2.core.commons.search.Resource;
  47. import org.openspcoop2.core.commons.search.ServizioApplicativo;
  48. import org.openspcoop2.core.commons.search.Soggetto;
  49. import org.openspcoop2.core.commons.search.dao.IAccordoServizioParteComuneAzioneServiceSearch;
  50. import org.openspcoop2.core.commons.search.dao.IAccordoServizioParteComuneGruppoServiceSearch;
  51. import org.openspcoop2.core.commons.search.dao.IAccordoServizioParteComuneServiceSearch;
  52. import org.openspcoop2.core.commons.search.dao.IAccordoServizioParteSpecificaServiceSearch;
  53. import org.openspcoop2.core.commons.search.dao.IFruitoreServiceSearch;
  54. import org.openspcoop2.core.commons.search.dao.IOperationServiceSearch;
  55. import org.openspcoop2.core.commons.search.dao.IPortaApplicativaServiceSearch;
  56. import org.openspcoop2.core.commons.search.dao.IPortaDelegataServiceSearch;
  57. import org.openspcoop2.core.commons.search.dao.IResourceServiceSearch;
  58. import org.openspcoop2.core.commons.search.dao.IServizioApplicativoServiceSearch;
  59. import org.openspcoop2.core.commons.search.dao.ISoggettoServiceSearch;
  60. import org.openspcoop2.core.commons.search.dao.jdbc.JDBCAccordoServizioParteComuneServiceSearch;
  61. import org.openspcoop2.core.commons.search.dao.jdbc.JDBCServiceManager;
  62. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  63. import org.openspcoop2.core.constants.CostantiDB;
  64. import org.openspcoop2.core.id.IDFruizione;
  65. import org.openspcoop2.core.id.IDServizio;
  66. import org.openspcoop2.core.id.IDServizioApplicativo;
  67. import org.openspcoop2.core.id.IDSoggetto;
  68. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  69. import org.openspcoop2.generic_project.beans.CustomField;
  70. import org.openspcoop2.generic_project.exception.ExpressionException;
  71. import org.openspcoop2.generic_project.exception.ExpressionNotImplementedException;
  72. import org.openspcoop2.generic_project.exception.MultipleResultException;
  73. import org.openspcoop2.generic_project.exception.NotFoundException;
  74. import org.openspcoop2.generic_project.exception.NotImplementedException;
  75. import org.openspcoop2.generic_project.exception.ServiceException;
  76. import org.openspcoop2.generic_project.expression.IExpression;
  77. import org.openspcoop2.generic_project.expression.IPaginatedExpression;
  78. import org.openspcoop2.generic_project.expression.LikeMode;
  79. import org.openspcoop2.generic_project.expression.SortOrder;
  80. import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
  81. import org.openspcoop2.message.constants.ServiceBinding;
  82. import org.slf4j.Logger;

  83. /**    
  84.  * RegistroCore
  85.  *
  86.  * @author Pintori Giuliano (pintori@link.it)
  87.  * @author $Author$
  88.  * @version $Rev$, $Date$
  89.  */
  90. public class RegistroCore {
  91.    
  92.     public static JDBCServiceManager getServiceManager(Logger log, String tipoDB, Connection con) throws Exception {
  93.         return getServiceManager(log, tipoDB, true, con);
  94.     }
  95.    
  96.     public static JDBCServiceManager getServiceManager(Logger log, String tipoDB, boolean showSql, Connection con) throws Exception {
  97.         ServiceManagerProperties properties = new ServiceManagerProperties();
  98.         properties.setDatabaseType(tipoDB);
  99.         properties.setShowSql(showSql);
  100.         JDBCServiceManager manager = new JDBCServiceManager(con, properties);
  101.        
  102.         return manager;
  103.     }

  104. //  public static List<String> getProtocolli() throws Exception{
  105. //      return ProtocolFactoryReflectionUtils.getProtocolli();
  106. //  }
  107. //  
  108.    
  109.     public static List<IDSoggetto> getSoggetti(JDBCServiceManager manager, String protocollo) throws Exception{
  110.         List<String> protocolli = null;
  111.         if(protocollo!=null) {
  112.             protocolli = new ArrayList<>();
  113.             protocolli.add(protocollo);
  114.         }
  115.         return getSoggetti(manager, protocolli);
  116.     }
  117.     public static List<IDSoggetto> getSoggetti(JDBCServiceManager manager, List<String> protocolli) throws Exception{
  118.        
  119.         List<IDSoggetto> list = new ArrayList<IDSoggetto>();
  120.        
  121.         ISoggettoServiceSearch soggettoServiceSearch = manager.getSoggettoServiceSearch();
  122.         IPaginatedExpression pag = soggettoServiceSearch.newPaginatedExpression();
  123.         pag.and();
  124.        
  125.         if(protocolli!=null && protocolli.size()>0){
  126.             List<String> types = new ArrayList<>();
  127.             for (String protocollo : protocolli) {
  128.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  129.             }
  130.             pag.in(Soggetto.model().TIPO_SOGGETTO, types);
  131.         }
  132.        
  133.         pag.addOrder(Soggetto.model().NOME_SOGGETTO,SortOrder.ASC);
  134.         pag.addOrder(Soggetto.model().TIPO_SOGGETTO,SortOrder.ASC);
  135.        
  136.         List<Map<String, Object>> result = null;
  137.         try{
  138.             result = soggettoServiceSearch.select(pag, true, Soggetto.model().TIPO_SOGGETTO, Soggetto.model().NOME_SOGGETTO);
  139.         }catch(NotFoundException notFound){}
  140.         if(result!=null && result.size()>0){
  141.             for (Map<String, Object> map : result) {
  142.                 String tipo = (String) map.get(Soggetto.model().TIPO_SOGGETTO.getFieldName());
  143.                 String nome = (String) map.get(Soggetto.model().NOME_SOGGETTO.getFieldName());
  144.                 list.add(new IDSoggetto(tipo, nome));
  145.             }
  146.         }
  147.        
  148.         return list;
  149.     }
  150.    
  151.     public static List<IDSoggetto> getSoggettiFruitori(JDBCServiceManager manager, String protocollo,
  152.             String tipoSoggettoErogatore,String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio) throws Exception{
  153.         List<String> protocolli = null;
  154.         if(protocollo!=null) {
  155.             protocolli = new ArrayList<>();
  156.             protocolli.add(protocollo);
  157.         }
  158.         return getSoggettiFruitori(manager, protocolli, tipoSoggettoErogatore, nomeSoggettoErogatore, tipoServizio, nomeServizio, versioneServizio);
  159.     }
  160.     public static List<IDSoggetto> getSoggettiFruitori(JDBCServiceManager manager, List<String> protocolli,
  161.             String tipoSoggettoErogatore,String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio) throws Exception{
  162.        
  163.         List<IDSoggetto> list = new ArrayList<IDSoggetto>();
  164.        
  165.         IFruitoreServiceSearch fruitoreServiceSearch = manager.getFruitoreServiceSearch();
  166.         IPaginatedExpression pag = fruitoreServiceSearch.newPaginatedExpression();
  167.         pag.and();
  168.        
  169.         if(protocolli!=null && protocolli.size()>0){
  170.             List<String> types = new ArrayList<>();
  171.             for (String protocollo : protocolli) {
  172.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  173.             }
  174.             pag.in(Fruitore.model().ID_FRUITORE.TIPO, types);
  175.         }
  176.         if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
  177.             pag.equals(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE.TIPO, tipoSoggettoErogatore);
  178.             pag.equals(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.ID_EROGATORE.NOME, nomeSoggettoErogatore);
  179.         }
  180.         if(tipoServizio!=null && nomeServizio!=null && versioneServizio!=null){
  181.             pag.equals(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.TIPO, tipoServizio);
  182.             pag.equals(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.NOME, nomeServizio);
  183.             pag.equals(Fruitore.model().ID_ACCORDO_SERVIZIO_PARTE_SPECIFICA.VERSIONE, versioneServizio);
  184.         }
  185.        
  186.         pag.addOrder(Fruitore.model().ID_FRUITORE.NOME,SortOrder.ASC);
  187.         pag.addOrder(Fruitore.model().ID_FRUITORE.TIPO,SortOrder.ASC);
  188.        
  189.         List<Map<String, Object>> result = null;
  190.         try{
  191.             result = fruitoreServiceSearch.select(pag, true, Fruitore.model().ID_FRUITORE.TIPO, Fruitore.model().ID_FRUITORE.NOME);
  192.         }catch(NotFoundException notFound){}
  193.         if(result!=null && result.size()>0){
  194.             for (Map<String, Object> map : result) {
  195.                 String tipo = (String) map.get(Fruitore.model().ID_FRUITORE.getBaseField().getFieldName()+"."+Fruitore.model().ID_FRUITORE.TIPO.getFieldName());
  196.                 String nome = (String) map.get(Fruitore.model().ID_FRUITORE.getBaseField().getFieldName()+"."+Fruitore.model().ID_FRUITORE.NOME.getFieldName());
  197.                 list.add(new IDSoggetto(tipo, nome));
  198.             }
  199.         }
  200.        
  201.         return list;
  202.     }
  203.    
  204.     public static List<IDSoggetto> getSoggettiErogatori(JDBCServiceManager manager, String protocollo) throws Exception{
  205.         List<String> protocolli = null;
  206.         if(protocollo!=null) {
  207.             protocolli = new ArrayList<>();
  208.             protocolli.add(protocollo);
  209.         }
  210.         return getSoggettiErogatori(manager, protocolli);
  211.     }
  212.     public static List<IDSoggetto> getSoggettiErogatori(JDBCServiceManager manager, List<String> protocolli) throws Exception{
  213.         List<IDSoggetto> list = new ArrayList<IDSoggetto>();
  214.        
  215.         IAccordoServizioParteSpecificaServiceSearch aspsServiceSearch = manager.getAccordoServizioParteSpecificaServiceSearch();
  216.         IPaginatedExpression pag = aspsServiceSearch.newPaginatedExpression();
  217.         pag.and();
  218.        
  219.         if(protocolli!=null && protocolli.size()>0){
  220.             List<String> types = new ArrayList<>();
  221.             for (String protocollo : protocolli) {
  222.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  223.             }
  224.             pag.in(AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO, types);
  225.         }

  226.         pag.addOrder(AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME,SortOrder.ASC);
  227.         pag.addOrder(AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO,SortOrder.ASC);
  228.        
  229.         List<Map<String, Object>> result = null;
  230.         try{
  231.             result = aspsServiceSearch.select(pag, true, AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO, AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME);
  232.         }catch(NotFoundException notFound){}
  233.         if(result!=null && result.size()>0){
  234.             for (Map<String, Object> map : result) {
  235.                 String tipo = (String) map.get(AccordoServizioParteSpecifica.model().ID_EROGATORE.getBaseField().getFieldName()+"."+AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO.getFieldName());
  236.                 String nome = (String) map.get(AccordoServizioParteSpecifica.model().ID_EROGATORE.getBaseField().getFieldName()+"."+AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME.getFieldName());
  237.                 list.add(new IDSoggetto(tipo, nome));
  238.             }
  239.         }
  240.        
  241.         return list;
  242.     }
  243.    
  244.     public static List<IDServizio> getServizi(JDBCServiceManager manager, String protocollo, String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tag) throws Exception{
  245.         List<String> protocolli = null;
  246.         if(protocollo!=null) {
  247.             protocolli = new ArrayList<>();
  248.             protocolli.add(protocollo);
  249.         }
  250.         return getServizi(manager, protocolli, tipoSoggettoErogatore, nomeSoggettoErogatore, tag);
  251.     }
  252.     public static List<IDServizio> getServizi(JDBCServiceManager manager,  List<String> protocolli, String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tag) throws Exception{
  253.         return getServizi(manager, protocolli, tipoSoggettoErogatore, nomeSoggettoErogatore, tag,
  254.                 null, null, null);
  255.     }
  256.    
  257.     public static List<IDServizio> getServizi(JDBCServiceManager manager, String protocollo, String tipoServizio, String nomeServizio, Integer versioneServizio, String tag) throws Exception{
  258.         List<String> protocolli = null;
  259.         if(protocollo!=null) {
  260.             protocolli = new ArrayList<>();
  261.             protocolli.add(protocollo);
  262.         }
  263.         return getServizi(manager, protocolli, tipoServizio, nomeServizio, versioneServizio, tag);
  264.     }
  265.     public static List<IDServizio> getServizi(JDBCServiceManager manager,  List<String> protocolli, String tipoServizio, String nomeServizio, Integer versioneServizio, String tag) throws Exception{
  266.         return getServizi(manager, protocolli, null, null, tag,
  267.                 tipoServizio, nomeServizio, versioneServizio);
  268.     }
  269.    
  270.     private static List<IDServizio> getServizi(JDBCServiceManager manager,  List<String> protocolli, String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tag,
  271.             String tipoServizio, String nomeServizio, Integer versioneServizio) throws Exception{
  272.         List<IDServizio> list = new ArrayList<IDServizio>();
  273.        
  274.         IAccordoServizioParteSpecificaServiceSearch aspsServiceSearch = manager.getAccordoServizioParteSpecificaServiceSearch();
  275.         IPaginatedExpression pag = aspsServiceSearch.newPaginatedExpression();
  276.         pag.and();
  277.        
  278.         if(protocolli!=null && protocolli.size()>0){
  279.             List<String> types = new ArrayList<>();
  280.             for (String protocollo : protocolli) {
  281.                 types.addAll(ProtocolFactoryReflectionUtils.getServiceTypes(protocollo));
  282.             }
  283.             pag.in(AccordoServizioParteSpecifica.model().TIPO, types);
  284.         }

  285.         if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
  286.             pag.equals(AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO, tipoSoggettoErogatore);
  287.             pag.equals(AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME, nomeSoggettoErogatore);
  288.         }
  289.        
  290.         if(tipoServizio!=null && nomeServizio!=null && versioneServizio!=null){
  291.             pag.equals(AccordoServizioParteSpecifica.model().TIPO, tipoServizio);
  292.             pag.equals(AccordoServizioParteSpecifica.model().NOME, nomeServizio);
  293.             pag.equals(AccordoServizioParteSpecifica.model().VERSIONE, versioneServizio);
  294.         }
  295.        
  296.         if(tag!=null) {
  297.             IAccordoServizioParteComuneGruppoServiceSearch gruppiServiceSearch = manager.getAccordoServizioParteComuneGruppoServiceSearch();
  298.             IPaginatedExpression pagGruppi = gruppiServiceSearch.newPaginatedExpression();
  299.             pagGruppi.and();
  300.             pagGruppi.equals(AccordoServizioParteComuneGruppo.model().ID_GRUPPO.NOME, tag);
  301.             List<AccordoServizioParteComuneGruppo> listGruppi = gruppiServiceSearch.findAll(pagGruppi);
  302.             List<Long> idAccordo = new ArrayList<Long>();
  303.             if(listGruppi!=null && !listGruppi.isEmpty()) {
  304.                 for (AccordoServizioParteComuneGruppo aspcGruppo : listGruppi) {
  305.                     idAccordo.add(aspcGruppo.getIdAccordoServizioParteComune().getId());
  306.                 }
  307.             }
  308.             else {
  309.                 idAccordo.add(-4l); // volutamente per non trovare alcun servizio
  310.             }
  311.            
  312.             CustomField cf = new CustomField("idAccordo", Long.class, "id_accordo", CostantiDB.SERVIZI);
  313.             pag.in(cf, idAccordo);
  314.         }
  315.        
  316.         pag.addOrder(AccordoServizioParteSpecifica.model().NOME,SortOrder.ASC);
  317.         pag.addOrder(AccordoServizioParteSpecifica.model().VERSIONE,SortOrder.ASC);
  318.         pag.addOrder(AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME,SortOrder.ASC);
  319.         pag.addOrder(AccordoServizioParteSpecifica.model().TIPO,SortOrder.ASC);
  320.         pag.addOrder(AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO,SortOrder.ASC);
  321.        
  322.         List<Map<String, Object>> result = null;
  323.         try{
  324.             result = aspsServiceSearch.select(pag, true,
  325.                     AccordoServizioParteSpecifica.model().TIPO,
  326.                     AccordoServizioParteSpecifica.model().NOME,
  327.                     AccordoServizioParteSpecifica.model().VERSIONE,
  328.                     AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO,
  329.                     AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME);
  330.         }catch(NotFoundException notFound){}
  331.         if(result!=null && result.size()>0){
  332.             for (Map<String, Object> map : result) {
  333.                 String tipo = (String) map.get(AccordoServizioParteSpecifica.model().TIPO.getFieldName());
  334.                 String nome = (String) map.get(AccordoServizioParteSpecifica.model().NOME.getFieldName());
  335.                 Integer versione = (Integer) map.get(AccordoServizioParteSpecifica.model().VERSIONE.getFieldName());
  336.                 String tipoSoggetto = (String) map.get(AccordoServizioParteSpecifica.model().ID_EROGATORE.getBaseField().getFieldName()+
  337.                         "."+
  338.                         AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO.getFieldName());
  339.                 String nomeSoggetto = (String) map.get(AccordoServizioParteSpecifica.model().ID_EROGATORE.getBaseField().getFieldName()+
  340.                         "."+
  341.                         AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME.getFieldName());
  342.                 IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(tipo, nome, tipoSoggetto, nomeSoggetto, versione);
  343.                 list.add(idServizio);
  344.             }
  345.         }
  346.        
  347.         return list;
  348.     }
  349.    
  350.     public static List<String> getAzioni(JDBCServiceManager manager, String protocollo,
  351.             String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio) throws Exception{
  352.         List<String> protocolli = null;
  353.         if(protocollo!=null) {
  354.             protocolli = new ArrayList<>();
  355.             protocolli.add(protocollo);
  356.         }
  357.         return getAzioni(manager, protocolli, tipoSoggettoErogatore, nomeSoggettoErogatore, tipoServizio, nomeServizio, versioneServizio);
  358.     }
  359.     public static List<String> getAzioni(JDBCServiceManager manager, List<String> protocolli,
  360.             String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio) throws Exception{
  361.         List<String> list = new ArrayList<>();
  362.         list.addAll(getEngineAzioni(manager, protocolli, tipoSoggettoErogatore, nomeSoggettoErogatore, tipoServizio, nomeServizio, versioneServizio,null).keySet());
  363.          
  364.         if(list!=null && !list.isEmpty()){
  365.             Collections.sort(list);
  366.         }
  367.          
  368.         return list;
  369.     }
  370.    
  371.     public static Map<String,String> getAzioniConLabel(JDBCServiceManager manager, String protocollo, String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio, String input) throws Exception{
  372.         List<String> protocolli = null;
  373.         if(protocollo!=null) {
  374.             protocolli = new ArrayList<>();
  375.             protocolli.add(protocollo);
  376.         }
  377.         Map<String,String> mapAzioni = getEngineAzioni(manager, protocolli, tipoSoggettoErogatore, nomeSoggettoErogatore, tipoServizio, nomeServizio, versioneServizio,input);
  378.        
  379.         //convert map to a List
  380.         List<Entry<String, String>> list = new LinkedList<Map.Entry<String, String>>(mapAzioni.entrySet());

  381.         //sorting the list with a comparator
  382.         Collections.sort(list, new Comparator<Entry<String, String>>() {
  383.             @Override
  384.             public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
  385.                 return (o1.getValue()).compareTo(o2.getValue());
  386.             }
  387.         });

  388.         //convert sortedMap back to Map
  389.         Map<String, String> sortedMap = new LinkedHashMap<String, String>();
  390.         for (Entry<String, String> entry : list) {
  391.             sortedMap.put(entry.getKey(), entry.getValue());
  392.         }
  393.        
  394.         return sortedMap;
  395.     }
  396.    
  397.     public static Map<String,String> getEngineAzioni(JDBCServiceManager manager, List<String> protocolli, String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio, String input) throws Exception{
  398.        
  399.        
  400.            
  401.         // Localizzo Accordi di Servizio Parte Comune dalle Parti Specifiche
  402.         List<IdPortType> idPortTypes = new ArrayList<>();
  403.         IAccordoServizioParteSpecificaServiceSearch aspsServiceSearch = manager.getAccordoServizioParteSpecificaServiceSearch();
  404.         IPaginatedExpression pag = aspsServiceSearch.newPaginatedExpression();
  405.         pag.and();
  406.        
  407.         if(protocolli!=null && !protocolli.isEmpty()){
  408.             List<String> types = new ArrayList<>();
  409.             for (String protocollo : protocolli) {
  410.                 types.addAll(ProtocolFactoryReflectionUtils.getServiceTypes(protocollo));
  411.             }
  412.             pag.in(AccordoServizioParteSpecifica.model().TIPO, types);
  413.         }
  414.        
  415.         if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
  416.             pag.equals(AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO, tipoSoggettoErogatore);
  417.             pag.equals(AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME, nomeSoggettoErogatore);
  418.         }
  419.         if(tipoServizio!=null && nomeServizio!=null && versioneServizio!=null){
  420.             pag.equals(AccordoServizioParteSpecifica.model().TIPO, tipoServizio);
  421.             pag.equals(AccordoServizioParteSpecifica.model().NOME, nomeServizio);
  422.             pag.equals(AccordoServizioParteSpecifica.model().VERSIONE, versioneServizio);
  423.         }      
  424.         List<Map<String, Object>> result = null;
  425.         try{
  426.             result = aspsServiceSearch.select(pag, true, AccordoServizioParteSpecifica.model().PORT_TYPE,
  427.                     AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME,
  428.                     AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO,
  429.                     AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME,
  430.                     AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE,
  431.                     AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.SERVICE_BINDING);
  432.         }catch(NotFoundException notFound){
  433.             //donothing
  434.         }
  435.         if(result!=null && !result.isEmpty()){
  436.             for (Map<String, Object> map : result) {
  437.                
  438.                 IdPortType idPortType = new IdPortType();
  439.                
  440.                 Object portType = map.get(AccordoServizioParteSpecifica.model().PORT_TYPE.getFieldName());
  441.                 if(portType!=null && (portType instanceof String)){
  442.                     idPortType.setNome((String)portType); // Può essere null
  443.                 }
  444.                
  445.                 String nomeAccordo = (String) map.get(AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.getBaseField().getFieldName()+
  446.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME.getFieldName());
  447.                
  448.                 Object tipoSoggettoReferenteAccordo = map.get(AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.getBaseField().getFieldName()+
  449.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.getBaseField().getFieldName()+
  450.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO.getFieldName());
  451.                 Object nomeSoggettoReferenteAccordo = map.get(AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.getBaseField().getFieldName()+
  452.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.getBaseField().getFieldName()+
  453.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME.getFieldName());
  454.                
  455.                 Object versioneAccordo = map.get(AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.getBaseField().getFieldName()+
  456.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE.getFieldName());
  457.                
  458.                 IdSoggetto idSoggettoReferente = null;
  459.                 if(tipoSoggettoReferenteAccordo!=null && (tipoSoggettoReferenteAccordo instanceof String) &&
  460.                         nomeSoggettoReferenteAccordo!=null && (nomeSoggettoReferenteAccordo instanceof String)){
  461.                     idSoggettoReferente = new IdSoggetto();
  462.                     idSoggettoReferente.setTipo((String)tipoSoggettoReferenteAccordo);
  463.                     idSoggettoReferente.setNome((String)nomeSoggettoReferenteAccordo);
  464.                 }
  465.                 Integer versione = null;
  466.                 if(versioneAccordo!=null && (versioneAccordo instanceof Integer)){
  467.                     versione = (Integer) versioneAccordo;
  468.                 }
  469.                
  470.                 String serviceBindingAccordo = (String) map.get(AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.getBaseField().getFieldName()+
  471.                         "."+AccordoServizioParteSpecifica.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.SERVICE_BINDING.getFieldName());
  472.                
  473.                 IdAccordoServizioParteComune idAccordo = new IdAccordoServizioParteComune();
  474.                 idAccordo.setNome(nomeAccordo);
  475.                 idAccordo.setVersione(versione);
  476.                 idAccordo.setIdSoggetto(idSoggettoReferente);
  477.                 idAccordo.setServiceBinding(serviceBindingAccordo);
  478.                 idPortType.setIdAccordoServizioParteComune(idAccordo);
  479.                
  480.                 idPortTypes.add(idPortType);
  481.             }
  482.         }
  483.        
  484.         return getEngineAzioni(manager, input, idPortTypes);
  485.     }

  486.     private static Map<String, String> getEngineAzioni(JDBCServiceManager manager, String input, List<IdPortType> idPortTypes)
  487.             throws ServiceException, NotImplementedException, ExpressionNotImplementedException, ExpressionException {
  488.         List<String> list = new ArrayList<>();
  489.         Map<String,String> mapAzioni = new HashMap<>();
  490.        
  491.         // Localizzo Azioni dagli Accordi Implementati
  492.         if(idPortTypes!=null && !idPortTypes.isEmpty()){
  493.             for (IdPortType idPortType : idPortTypes) {
  494.                
  495.                 ServiceBinding serviceBinding = ServiceBinding.valueOf(idPortType.getIdAccordoServizioParteComune().getServiceBinding().toUpperCase());
  496.                
  497.                 if(ServiceBinding.REST.equals(serviceBinding)) {
  498.                     IResourceServiceSearch aspcResourceServiceSearch = manager.getResourceServiceSearch();
  499.                     IPaginatedExpression pagResources = aspcResourceServiceSearch.newPaginatedExpression();
  500.                     pagResources.and();
  501.                     pagResources.equals(Resource.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME, idPortType.getIdAccordoServizioParteComune().getNome());
  502.                     if(idPortType.getIdAccordoServizioParteComune().getVersione()!=null){
  503.                         pagResources.equals(Resource.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE, idPortType.getIdAccordoServizioParteComune().getVersione());
  504.                     }
  505.                     if(idPortType.getIdAccordoServizioParteComune().getIdSoggetto()!=null){
  506.                         pagResources.equals(Resource.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO,
  507.                                 idPortType.getIdAccordoServizioParteComune().getIdSoggetto().getTipo());
  508.                         pagResources.equals(Resource.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME,
  509.                                 idPortType.getIdAccordoServizioParteComune().getIdSoggetto().getNome());
  510.                     }
  511.                    
  512.                     if(StringUtils.isNotEmpty(input)){
  513.                         IExpression exprOrMethod = aspcResourceServiceSearch.newExpression();
  514.                         exprOrMethod.ilike(Resource.model().HTTP_METHOD, input , LikeMode.ANYWHERE);
  515.                         IExpression exprOrPath = aspcResourceServiceSearch.newExpression();
  516.                         exprOrPath.ilike(Resource.model().PATH, input , LikeMode.ANYWHERE);
  517.                         pagResources.or(exprOrMethod,exprOrPath);
  518.                     }
  519.                     List<Map<String, Object>> resultAzioni = null;
  520.                     try{
  521.                         resultAzioni = aspcResourceServiceSearch.select(pagResources, true, Resource.model().NOME, Resource.model().HTTP_METHOD, Resource.model().PATH);
  522.                     }catch(NotFoundException notFound){
  523.                         //donothing
  524.                     }
  525.                     if(resultAzioni!=null && !resultAzioni.isEmpty()){
  526.                         for (Map<String, Object> azione : resultAzioni) {
  527.                             String az = (String) azione.get(Resource.model().NOME.getFieldName());
  528.                             String httpmethod = (String) azione.get(Resource.model().HTTP_METHOD.getFieldName());
  529.                             String path = (String) azione.get(Resource.model().PATH.getFieldName());
  530.                             String label = httpmethod + " " + path;
  531.                             if(!list.contains(az)){
  532.                                 list.add(az);
  533.                                 mapAzioni.put(az,label);
  534.                             }
  535.                         }
  536.                     }
  537.                    
  538.                 }
  539.                 else {
  540.                     if(idPortType.getNome()!=null){
  541.                        
  542.                         IOperationServiceSearch portTypeAzioneServiceSearch = manager.getOperationServiceSearch();
  543.                         IPaginatedExpression pagAzioni = portTypeAzioneServiceSearch.newPaginatedExpression();
  544.                         pagAzioni.and();
  545.                         pagAzioni.equals(Operation.model().ID_PORT_TYPE.NOME, idPortType.getNome());
  546.                         pagAzioni.equals(Operation.model().ID_PORT_TYPE.ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME, idPortType.getIdAccordoServizioParteComune().getNome());
  547.                         if(idPortType.getIdAccordoServizioParteComune().getVersione()!=null){
  548.                             pagAzioni.equals(Operation.model().ID_PORT_TYPE.ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE, idPortType.getIdAccordoServizioParteComune().getVersione());
  549.                         }
  550.                         if(idPortType.getIdAccordoServizioParteComune().getIdSoggetto()!=null){
  551.                             pagAzioni.equals(Operation.model().ID_PORT_TYPE.ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO,
  552.                                     idPortType.getIdAccordoServizioParteComune().getIdSoggetto().getTipo());
  553.                             pagAzioni.equals(Operation.model().ID_PORT_TYPE.ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME,
  554.                                     idPortType.getIdAccordoServizioParteComune().getIdSoggetto().getNome());
  555.                         }
  556.                         if(StringUtils.isNotEmpty(input)){
  557.                             pagAzioni.ilike(Operation.model().NOME,input,LikeMode.ANYWHERE);        
  558.                         }
  559.                         List<Object> resultAzioni = null;
  560.                         try{
  561.                             resultAzioni = portTypeAzioneServiceSearch.select(pagAzioni, true, Operation.model().NOME);
  562.                         }catch(NotFoundException notFound){
  563.                             //donothing
  564.                         }
  565.                         if(resultAzioni!=null && !resultAzioni.isEmpty()){
  566.                             for (Object azione : resultAzioni) {
  567.                                 String az = (String) azione;
  568.                                 if(!list.contains(az)){
  569.                                     list.add(az);
  570.                                     mapAzioni.put(az, az);
  571.                                 }
  572.                             }
  573.                         }
  574.                        
  575.                     }
  576.                     else{
  577.                         IAccordoServizioParteComuneAzioneServiceSearch aspcAzioneServiceSearch = manager.getAccordoServizioParteComuneAzioneServiceSearch();
  578.                         IPaginatedExpression pagAzioni = aspcAzioneServiceSearch.newPaginatedExpression();
  579.                         pagAzioni.and();
  580.                         pagAzioni.equals(AccordoServizioParteComuneAzione.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME, idPortType.getIdAccordoServizioParteComune().getNome());
  581.                         if(idPortType.getIdAccordoServizioParteComune().getVersione()!=null){
  582.                             pagAzioni.equals(AccordoServizioParteComuneAzione.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE, idPortType.getIdAccordoServizioParteComune().getVersione());
  583.                         }
  584.                         if(idPortType.getIdAccordoServizioParteComune().getIdSoggetto()!=null){
  585.                             pagAzioni.equals(AccordoServizioParteComuneAzione.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO,
  586.                                     idPortType.getIdAccordoServizioParteComune().getIdSoggetto().getTipo());
  587.                             pagAzioni.equals(AccordoServizioParteComuneAzione.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME,
  588.                                     idPortType.getIdAccordoServizioParteComune().getIdSoggetto().getNome());
  589.                         }
  590.                         if(StringUtils.isNotEmpty(input)){
  591.                             pagAzioni.ilike(AccordoServizioParteComuneAzione.model().NOME,input,LikeMode.ANYWHERE);    
  592.                         }
  593.                         List<Object> resultAzioni = null;
  594.                         try{
  595.                             resultAzioni = aspcAzioneServiceSearch.select(pagAzioni, true, AccordoServizioParteComuneAzione.model().NOME);
  596.                         }catch(NotFoundException notFound){
  597.                             //donothing
  598.                         }
  599.                         if(resultAzioni!=null && !resultAzioni.isEmpty()){
  600.                             for (Object azione : resultAzioni) {
  601.                                 String az = (String) azione;
  602.                                 if(!list.contains(az)){
  603.                                     list.add(az);
  604.                                     mapAzioni.put(az, az);
  605.                                 }
  606.                             }
  607.                         }
  608.                     }
  609.                 }
  610.                
  611.             }
  612.         }
  613.        
  614.         Map<String,String> mapAzioniReturn = new HashMap<>();
  615.        
  616.         if(list!=null && !list.isEmpty()){
  617.             Collections.sort(list);
  618.            
  619.             for (String key : list) {
  620.                 mapAzioniReturn.put(key, mapAzioni.get(key));
  621.             }
  622.         }
  623.        
  624.         return mapAzioniReturn;
  625.     }
  626.    
  627.     public static Map<String,String> getAzioniFromAPIConLabel(JDBCServiceManager manager, String protocollo, String nomeAccordo, String tipoReferente, String nomeReferente, Integer versioneAccordo, String input) throws Exception{
  628.         List<String> protocolli = null;
  629.         if(protocollo!=null) {
  630.             protocolli = new ArrayList<>();
  631.             protocolli.add(protocollo);
  632.         }
  633.         List<IdPortType> idPortTypes = new ArrayList<>();
  634.        
  635.         IAccordoServizioParteComuneServiceSearch accordoServizioParteComuneServiceSearch = manager.getAccordoServizioParteComuneServiceSearch();
  636.         IPaginatedExpression pagExpr = accordoServizioParteComuneServiceSearch.newPaginatedExpression();
  637.         pagExpr.and();

  638.         pagExpr.equals(AccordoServizioParteComune.model().ID_REFERENTE.TIPO, tipoReferente).and().equals(AccordoServizioParteComune.model().ID_REFERENTE.NOME, nomeReferente);
  639.         pagExpr.equals(AccordoServizioParteComune.model().VERSIONE, versioneAccordo).and().equals(AccordoServizioParteComune.model().NOME, nomeAccordo);
  640.        
  641.         pagExpr.sortOrder(SortOrder.ASC);
  642.         pagExpr.addOrder(AccordoServizioParteComune.model().ID_REFERENTE.TIPO);
  643.         pagExpr.addOrder(AccordoServizioParteComune.model().ID_REFERENTE.NOME);
  644.         pagExpr.addOrder(AccordoServizioParteComune.model().NOME);
  645.         pagExpr.addOrder(AccordoServizioParteComune.model().VERSIONE);

  646.         List<AccordoServizioParteComune> listAccordi = accordoServizioParteComuneServiceSearch.findAll(pagExpr);
  647.        
  648.         for (AccordoServizioParteComune accordoServizioParteComune : listAccordi) {
  649.             IdSoggetto idSoggettoReferente = new IdSoggetto();
  650.             idSoggettoReferente.setTipo(accordoServizioParteComune.getIdReferente().getTipo());
  651.             idSoggettoReferente.setNome(accordoServizioParteComune.getIdReferente().getNome());

  652.             String serviceBindingAccordo = accordoServizioParteComune.getServiceBinding();

  653.             IdAccordoServizioParteComune idAccordo = new IdAccordoServizioParteComune();
  654.             idAccordo.setNome(accordoServizioParteComune.getNome());
  655.             idAccordo.setVersione(accordoServizioParteComune.getVersione());
  656.             idAccordo.setIdSoggetto(idSoggettoReferente);
  657.             idAccordo.setServiceBinding(serviceBindingAccordo);
  658.            
  659.             List<PortType> portTypes = accordoServizioParteComune.getPortType();
  660.            
  661.             if(portTypes != null && !portTypes.isEmpty()) {
  662.                 for (PortType portType : portTypes) {
  663.                     IdPortType idPortType = new IdPortType();
  664.                     idPortType.setNome(portType.getNome());
  665.                     idPortType.setIdAccordoServizioParteComune(idAccordo);
  666.                     idPortTypes.add(idPortType);
  667.                 }
  668.             } else {
  669.                 IdPortType idPortType = new IdPortType();
  670.                 idPortType.setIdAccordoServizioParteComune(idAccordo);
  671.                 idPortTypes.add(idPortType);
  672.             }
  673.         }
  674.        
  675.         Map<String,String> mapAzioni = getEngineAzioni(manager, input, idPortTypes);
  676.        
  677.         //convert map to a List
  678.         List<Entry<String, String>> list = new LinkedList<>(mapAzioni.entrySet());

  679.         //sorting the list with a comparator
  680.         Collections.sort(list, new Comparator<Entry<String, String>>() {
  681.             @Override
  682.             public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
  683.                 return (o1.getValue()).compareTo(o2.getValue());
  684.             }
  685.         });

  686.         //convert sortedMap back to Map
  687.         Map<String, String> sortedMap = new LinkedHashMap<>();
  688.         for (Entry<String, String> entry : list) {
  689.             sortedMap.put(entry.getKey(), entry.getValue());
  690.         }
  691.        
  692.         return sortedMap;
  693.     }
  694.    
  695.    
  696.     public static List<IDServizioApplicativo> getServiziApplicativiErogatori(JDBCServiceManager manager, String protocollo,
  697.             String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio,
  698.             String azione) throws Exception{
  699.         List<String> protocolli = null;
  700.         if(protocollo!=null) {
  701.             protocolli = new ArrayList<>();
  702.             protocolli.add(protocollo);
  703.         }
  704.         return getServiziApplicativiErogatori(manager, protocolli,
  705.                 tipoSoggettoErogatore, nomeSoggettoErogatore, tipoServizio, nomeServizio, versioneServizio,
  706.                 azione);
  707.     }
  708.     public static List<IDServizioApplicativo> getServiziApplicativiErogatori(JDBCServiceManager manager,List<String> protocolli,
  709.             String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio,
  710.             String azione) throws Exception{
  711.         List<IDServizioApplicativo> list = new ArrayList<IDServizioApplicativo>();
  712.        
  713.         IPortaApplicativaServiceSearch paServiceSearch = manager.getPortaApplicativaServiceSearch();
  714.         IPaginatedExpression pag = paServiceSearch.newPaginatedExpression();
  715.         pag.and();
  716.        
  717.         if(protocolli!=null && protocolli.size()>0){
  718.             List<String> types = new ArrayList<>();
  719.             for (String protocollo : protocolli) {
  720.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  721.             }
  722.             pag.in(PortaApplicativa.model().ID_SOGGETTO.TIPO, types);
  723.         }
  724.        
  725.         if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
  726.             pag.equals(PortaApplicativa.model().ID_SOGGETTO.TIPO, tipoSoggettoErogatore);
  727.             pag.equals(PortaApplicativa.model().ID_SOGGETTO.NOME, nomeSoggettoErogatore);
  728.         }
  729.        
  730.         if(tipoServizio!=null && nomeServizio!=null && versioneServizio!=null){
  731.             pag.equals(PortaApplicativa.model().TIPO_SERVIZIO, tipoServizio);
  732.             pag.equals(PortaApplicativa.model().NOME_SERVIZIO, nomeServizio);
  733.             pag.equals(PortaApplicativa.model().VERSIONE_SERVIZIO, versioneServizio);
  734.         }
  735.        
  736.         if(azione!=null){
  737.             IExpression azioneExpr = paServiceSearch.newExpression();
  738.             azioneExpr.or();
  739.             azioneExpr.equals(PortaApplicativa.model().NOME_AZIONE, azione);
  740.             azioneExpr.isNull(PortaApplicativa.model().NOME_AZIONE);
  741.             azioneExpr.isEmpty(PortaApplicativa.model().NOME_AZIONE);
  742.             azioneExpr.equals(PortaApplicativa.model().PORTA_APPLICATIVA_AZIONE.NOME, azione);
  743.             pag.and(azioneExpr);
  744.         }
  745.        
  746.         pag.addOrder(PortaApplicativa.model().PORTA_APPLICATIVA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.NOME,SortOrder.ASC);
  747.         pag.addOrder(PortaApplicativa.model().ID_SOGGETTO.NOME,SortOrder.ASC);
  748.         pag.addOrder(PortaApplicativa.model().ID_SOGGETTO.TIPO,SortOrder.ASC);
  749.        
  750.         List<Map<String, Object>> result = null;
  751.         try{
  752.             result = paServiceSearch.select(pag, true,
  753.                     PortaApplicativa.model().PORTA_APPLICATIVA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.NOME,
  754.                     PortaApplicativa.model().ID_SOGGETTO.TIPO,
  755.                     PortaApplicativa.model().ID_SOGGETTO.NOME);
  756.         }catch(NotFoundException notFound){}
  757.         if(result!=null && result.size()>0){
  758.             for (Map<String, Object> map : result) {
  759.                
  760.                 String nomeSA = (String) map.get(PortaApplicativa.model().PORTA_APPLICATIVA_SERVIZIO_APPLICATIVO.getBaseField().getFieldName()+
  761.                         "."+
  762.                         PortaApplicativa.model().PORTA_APPLICATIVA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.getBaseField().getFieldName()+
  763.                         "."+
  764.                         PortaApplicativa.model().PORTA_APPLICATIVA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.NOME.getFieldName());
  765.                
  766.                 String tipoSoggetto = (String) map.get(PortaApplicativa.model().ID_SOGGETTO.getBaseField().getFieldName()+
  767.                         "."+
  768.                         PortaApplicativa.model().ID_SOGGETTO.TIPO.getFieldName());
  769.                 String nomeSoggetto = (String) map.get(PortaApplicativa.model().ID_SOGGETTO.getBaseField().getFieldName()+
  770.                         "."+
  771.                         PortaApplicativa.model().ID_SOGGETTO.NOME.getFieldName());
  772.        
  773.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  774.                 IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,nomeSoggetto);
  775.                 idSA.setIdSoggettoProprietario(idSoggetto);
  776.                 idSA.setNome(nomeSA);
  777.                
  778.                 list.add(idSA);
  779.             }  
  780.         }
  781.        
  782.         return list;
  783.     }
  784.    
  785.    
  786.     public static List<IDServizioApplicativo> getServiziApplicativiFruitore(JDBCServiceManager manager, String protocollo,
  787.             String tipoSoggettoFruitore, String nomeSoggettoFruitore,
  788.             String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio,
  789.             String azione) throws Exception{
  790.         List<String> protocolli = null;
  791.         if(protocollo!=null) {
  792.             protocolli = new ArrayList<>();
  793.             protocolli.add(protocollo);
  794.         }
  795.         return getServiziApplicativiFruitore(manager, protocolli,
  796.                 tipoSoggettoFruitore, nomeSoggettoFruitore,
  797.                 tipoSoggettoErogatore, nomeSoggettoErogatore, tipoServizio, nomeServizio, versioneServizio,
  798.                 azione);
  799.     }
  800.     public static List<IDServizioApplicativo> getServiziApplicativiFruitore(JDBCServiceManager manager, List<String> protocolli,
  801.             String tipoSoggettoFruitore, String nomeSoggettoFruitore,
  802.             String tipoSoggettoErogatore, String nomeSoggettoErogatore, String tipoServizio, String nomeServizio, Integer versioneServizio,
  803.             String azione) throws Exception{
  804.         List<IDServizioApplicativo> list = new ArrayList<IDServizioApplicativo>();
  805.            
  806.         IPortaDelegataServiceSearch pdServiceSearch = manager.getPortaDelegataServiceSearch();
  807.         IPaginatedExpression pag = pdServiceSearch.newPaginatedExpression();
  808.         pag.and();
  809.        
  810.         if(protocolli!=null && protocolli.size()>0){
  811.             List<String> types = new ArrayList<>();
  812.             for (String protocollo : protocolli) {
  813.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  814.             }
  815.             pag.in(PortaDelegata.model().ID_SOGGETTO.TIPO, types);
  816.         }
  817.        
  818.         if(tipoSoggettoFruitore!=null && nomeSoggettoFruitore!=null){
  819.             pag.equals(PortaDelegata.model().ID_SOGGETTO.TIPO, tipoSoggettoFruitore);
  820.             pag.equals(PortaDelegata.model().ID_SOGGETTO.NOME, nomeSoggettoFruitore);
  821.         }
  822.        
  823.         if(tipoSoggettoErogatore!=null && nomeSoggettoErogatore!=null){
  824.             pag.equals(PortaDelegata.model().TIPO_SOGGETTO_EROGATORE, tipoSoggettoErogatore);
  825.             pag.equals(PortaDelegata.model().NOME_SOGGETTO_EROGATORE, nomeSoggettoErogatore);
  826.         }
  827.        
  828.         if(tipoServizio!=null && nomeServizio!=null && versioneServizio!=null){
  829.             pag.equals(PortaDelegata.model().TIPO_SERVIZIO, tipoServizio);
  830.             pag.equals(PortaDelegata.model().NOME_SERVIZIO, nomeServizio);
  831.             pag.equals(PortaDelegata.model().VERSIONE_SERVIZIO, versioneServizio);
  832.         }
  833.        
  834.         if(azione!=null){
  835.             // L'azione può essere null se abbiamo modalità di riconoscimento differente da static
  836.             IExpression azioneExpr = pdServiceSearch.newExpression();
  837.             azioneExpr.or();
  838.             azioneExpr.equals(PortaDelegata.model().NOME_AZIONE, azione);
  839.             azioneExpr.isNull(PortaDelegata.model().NOME_AZIONE);
  840.             azioneExpr.isEmpty(PortaDelegata.model().NOME_AZIONE);
  841.             azioneExpr.equals(PortaDelegata.model().PORTA_DELEGATA_AZIONE.NOME, azione);
  842.             pag.and(azioneExpr);
  843.         }
  844.        
  845.         pag.addOrder(PortaDelegata.model().PORTA_DELEGATA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.NOME,SortOrder.ASC);
  846.         pag.addOrder(PortaDelegata.model().ID_SOGGETTO.NOME,SortOrder.ASC);
  847.         pag.addOrder(PortaDelegata.model().ID_SOGGETTO.TIPO,SortOrder.ASC);
  848.        
  849.         List<Map<String, Object>> result = null;
  850.         try{
  851.             result = pdServiceSearch.select(pag, true, PortaDelegata.model().PORTA_DELEGATA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.NOME,
  852.                     PortaDelegata.model().ID_SOGGETTO.TIPO,
  853.                     PortaDelegata.model().ID_SOGGETTO.NOME);
  854.         }catch(NotFoundException notFound){}
  855.         if(result!=null && result.size()>0){
  856.             for (Map<String, Object> map : result) {
  857.                
  858.                 String nomeSA = (String) map.get(PortaDelegata.model().PORTA_DELEGATA_SERVIZIO_APPLICATIVO.getBaseField().getFieldName()+
  859.                         "."+
  860.                         PortaDelegata.model().PORTA_DELEGATA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.getBaseField().getFieldName()+
  861.                         "."+
  862.                         PortaDelegata.model().PORTA_DELEGATA_SERVIZIO_APPLICATIVO.ID_SERVIZIO_APPLICATIVO.NOME.getFieldName());
  863.                
  864.                 String tipoSoggetto = (String) map.get(PortaDelegata.model().ID_SOGGETTO.getBaseField().getFieldName()+
  865.                         "."+
  866.                         PortaDelegata.model().ID_SOGGETTO.TIPO.getFieldName());
  867.                 String nomeSoggetto = (String) map.get(PortaDelegata.model().ID_SOGGETTO.getBaseField().getFieldName()+
  868.                         "."+
  869.                         PortaDelegata.model().ID_SOGGETTO.NOME.getFieldName());
  870.        
  871.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  872.                 IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,nomeSoggetto);
  873.                 idSA.setIdSoggettoProprietario(idSoggetto);
  874.                 idSA.setNome(nomeSA);
  875.                
  876.                 list.add(idSA);
  877.             }  
  878.         }
  879.        
  880.         return list;
  881.     }
  882.    
  883.    
  884.    
  885.     public static List<IDServizioApplicativo> getServiziApplicativiFruitore(JDBCServiceManager manager, String protocollo,
  886.             String tipoSoggettoFruitore, String nomeSoggettoFruitore) throws Exception{
  887.         List<String> protocolli = null;
  888.         if(protocollo!=null) {
  889.             protocolli = new ArrayList<>();
  890.             protocolli.add(protocollo);
  891.         }
  892.         return getServiziApplicativiFruitore(manager, protocolli,
  893.                 tipoSoggettoFruitore, nomeSoggettoFruitore);
  894.     }
  895.     public static List<IDServizioApplicativo> getServiziApplicativiFruitore(JDBCServiceManager manager, List<String> protocolli,
  896.             String tipoSoggettoFruitore, String nomeSoggettoFruitore) throws Exception{
  897.         return getEngineServiziApplicativi(manager, protocolli,
  898.                 tipoSoggettoFruitore, nomeSoggettoFruitore, true);
  899.     }
  900.    
  901.     public static List<IDServizioApplicativo> getServiziApplicativi(JDBCServiceManager manager, String protocollo,
  902.             String tipoSoggettoProprietario, String nomeSoggettoProprietario) throws Exception{
  903.         List<String> protocolli = null;
  904.         if(protocollo!=null) {
  905.             protocolli = new ArrayList<>();
  906.             protocolli.add(protocollo);
  907.         }
  908.         return getServiziApplicativi(manager, protocolli,
  909.                 tipoSoggettoProprietario, nomeSoggettoProprietario);
  910.     }
  911.     public static List<IDServizioApplicativo> getServiziApplicativi(JDBCServiceManager manager, List<String> protocolli,
  912.             String tipoSoggettoProprietario, String nomeSoggettoProprietario) throws Exception{
  913.         return getEngineServiziApplicativi(manager, protocolli,
  914.                 tipoSoggettoProprietario, nomeSoggettoProprietario, false);
  915.     }
  916.    
  917.     private static List<IDServizioApplicativo> getEngineServiziApplicativi(JDBCServiceManager manager, List<String> protocolli,
  918.             String tipoSoggettoProprietario, String nomeSoggettoProprietario, boolean onlyClient) throws Exception{
  919.         List<IDServizioApplicativo> list = new ArrayList<IDServizioApplicativo>();
  920.            
  921.         IServizioApplicativoServiceSearch saServiceSearch = manager.getServizioApplicativoServiceSearch();
  922.         IPaginatedExpression pag = saServiceSearch.newPaginatedExpression();
  923.         pag.and();
  924.        
  925.         if(protocolli!=null && protocolli.size()>0){
  926.             List<String> types = new ArrayList<>();
  927.             for (String protocollo : protocolli) {
  928.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  929.             }
  930.             pag.in(ServizioApplicativo.model().ID_SOGGETTO.TIPO, types);
  931.         }
  932.        
  933.         if(tipoSoggettoProprietario!=null && nomeSoggettoProprietario!=null){
  934.             pag.equals(ServizioApplicativo.model().ID_SOGGETTO.TIPO, tipoSoggettoProprietario);
  935.             pag.equals(ServizioApplicativo.model().ID_SOGGETTO.NOME, nomeSoggettoProprietario);
  936.         }
  937.        
  938.         if(onlyClient) {
  939.             // pag.notEquals(ServizioApplicativo.model().TIPOLOGIA_FRUIZIONE, TipologiaFruizione.DISABILITATO.getValue());
  940.             // pag.isNotNull(ServizioApplicativo.model().TIPOLOGIA_FRUIZIONE);
  941.             IExpression exprOr = saServiceSearch.newExpression();
  942.             exprOr.equals(ServizioApplicativo.model().TIPO, CostantiConfigurazione.CLIENT);
  943.             exprOr.or();
  944.             exprOr.equals(ServizioApplicativo.model().AS_CLIENT, CostantiDB.TRUE);
  945.             pag.and(exprOr);
  946.         }
  947.         else {
  948.             IExpression exprOr = saServiceSearch.newExpression();
  949.             exprOr.equals(ServizioApplicativo.model().TIPO, CostantiConfigurazione.CLIENT);
  950.             exprOr.or();
  951.             exprOr.equals(ServizioApplicativo.model().TIPO, CostantiConfigurazione.SERVER);
  952.             pag.and(exprOr);
  953.         }
  954.        
  955.         pag.addOrder(ServizioApplicativo.model().NOME,SortOrder.ASC);
  956.         pag.addOrder(ServizioApplicativo.model().ID_SOGGETTO.NOME,SortOrder.ASC);
  957.         pag.addOrder(ServizioApplicativo.model().ID_SOGGETTO.TIPO,SortOrder.ASC);
  958.        
  959.         List<Map<String, Object>> result = null;
  960.         try{
  961.             result = saServiceSearch.select(pag, true, ServizioApplicativo.model().NOME,
  962.                     ServizioApplicativo.model().ID_SOGGETTO.TIPO,
  963.                     ServizioApplicativo.model().ID_SOGGETTO.NOME);
  964.         }catch(NotFoundException notFound){}
  965.         if(result!=null && result.size()>0){
  966.             for (Map<String, Object> map : result) {
  967.                
  968.                 String nomeSA = (String) map.get(ServizioApplicativo.model().NOME.getFieldName());
  969.                
  970.                 String tipoSoggetto = (String) map.get(ServizioApplicativo.model().ID_SOGGETTO.getBaseField().getFieldName()+
  971.                         "."+
  972.                         PortaDelegata.model().ID_SOGGETTO.TIPO.getFieldName());
  973.                 String nomeSoggetto = (String) map.get(ServizioApplicativo.model().ID_SOGGETTO.getBaseField().getFieldName()+
  974.                         "."+
  975.                         PortaDelegata.model().ID_SOGGETTO.NOME.getFieldName());
  976.        
  977.                 IDServizioApplicativo idSA = new IDServizioApplicativo();
  978.                 IDSoggetto idSoggetto = new IDSoggetto(tipoSoggetto,nomeSoggetto);
  979.                 idSA.setIdSoggettoProprietario(idSoggetto);
  980.                 idSA.setNome(nomeSA);
  981.                
  982.                 list.add(idSA);
  983.             }  
  984.         }
  985.        
  986.         return list;
  987.     }
  988.    
  989.    
  990.    
  991.     // API
  992.    
  993.     public static AccordoServizioParteComune getAPIImplemented(JDBCServiceManager manager,
  994.             IDSoggetto idSoggetto, String tipoServizio, String nomeServizio, Integer versioneServizio) throws Exception {
  995.        
  996.         IAccordoServizioParteComuneServiceSearch aspcDAO = manager.getAccordoServizioParteComuneServiceSearch();
  997.         IAccordoServizioParteSpecificaServiceSearch aspsDAO = manager.getAccordoServizioParteSpecificaServiceSearch();
  998.         IExpression expr = aspsDAO.newExpression();

  999.         expr.equals(
  1000.             AccordoServizioParteSpecifica.model().ID_EROGATORE.TIPO,
  1001.                 idSoggetto.getTipo());
  1002.         expr.and()
  1003.             .equals(AccordoServizioParteSpecifica.model().ID_EROGATORE.NOME,
  1004.                 idSoggetto.getNome());

  1005.         expr.equals(AccordoServizioParteSpecifica.model().TIPO, tipoServizio);
  1006.         expr.and();
  1007.         expr.equals(AccordoServizioParteSpecifica.model().NOME, nomeServizio);
  1008.         expr.and();
  1009.         expr.equals(AccordoServizioParteSpecifica.model().VERSIONE, versioneServizio);
  1010.                    
  1011.         IPaginatedExpression pagExpr = aspsDAO
  1012.                 .toPaginatedExpression(expr);

  1013.         CustomField cf = new CustomField("idAccordo", Long.class, "id_accordo", "servizi");

  1014.         List<Object> list = aspsDAO.select(pagExpr,true,cf);

  1015.         if(list==null || list.isEmpty()) {
  1016.             throw new NotFoundException("NonPresente");
  1017.         }
  1018.         if(list.size()>1) {
  1019.             throw new MultipleResultException("Trovati '"+list.size()+"' api ?");
  1020.         }
  1021.        
  1022.         Long idAccordoLong = (Long) list.get(0);
  1023.         return ((JDBCAccordoServizioParteComuneServiceSearch)aspcDAO).get(idAccordoLong);

  1024.     }
  1025.    
  1026.    
  1027.    
  1028.    
  1029.     // Erogazioni
  1030.    
  1031.     public static List<IDServizio> getErogazioni(JDBCServiceManager manager, List<String> protocolli,
  1032.             String gruppo,
  1033.             String tipoSoggetto, String nomeSoggetto) throws Exception {
  1034.         return  getErogazioni(manager, protocolli,
  1035.                 gruppo,
  1036.                 tipoSoggetto, nomeSoggetto,
  1037.                 null, null, null,
  1038.                 null);
  1039.     }
  1040.     public static List<IDServizio> getErogazioni(JDBCServiceManager manager, List<String> protocolli,
  1041.             String gruppo,
  1042.             String tipoSoggetto, String nomeSoggetto,
  1043.             String tipoServizio, String nomeServizio, Integer versioneServizio,
  1044.             String nomeAzione) throws Exception {
  1045.         List<IDServizio> lista = new ArrayList<IDServizio>();

  1046.         IPortaApplicativaServiceSearch portaApplicativaDAO = manager.getPortaApplicativaServiceSearch();
  1047.         IAccordoServizioParteComuneGruppoServiceSearch aspcGruppiDAO = null;
  1048.         if(gruppo!=null && !"".equals(gruppo)) {
  1049.             aspcGruppiDAO = manager.getAccordoServizioParteComuneGruppoServiceSearch();
  1050.         }
  1051.        
  1052.         IExpression pAExpr = getExpressionPA(portaApplicativaDAO, protocolli,
  1053.                 tipoSoggetto, nomeSoggetto,
  1054.                 tipoServizio, nomeServizio, versioneServizio,
  1055.                 nomeAzione);
  1056.              
  1057.         List<PortaApplicativa> listaPorte = new ArrayList<PortaApplicativa>();
  1058.         IPaginatedExpression pagPaExpr = portaApplicativaDAO.toPaginatedExpression(pAExpr );
  1059.        
  1060.         pagPaExpr.addOrder(PortaApplicativa.model().ID_SOGGETTO.TIPO, SortOrder.ASC);
  1061.         pagPaExpr.addOrder(PortaApplicativa.model().ID_SOGGETTO.NOME, SortOrder.ASC);
  1062.         pagPaExpr.addOrder(PortaApplicativa.model().TIPO_SERVIZIO, SortOrder.ASC);
  1063.         pagPaExpr.addOrder(PortaApplicativa.model().NOME_SERVIZIO, SortOrder.ASC);
  1064.         pagPaExpr.addOrder(PortaApplicativa.model().VERSIONE_SERVIZIO, SortOrder.ASC);
  1065.        
  1066.         ExpressionProperties.enableSoloDatiIdentificativiServizio(pagPaExpr);
  1067.         listaPorte = portaApplicativaDAO.findAll(pagPaExpr);
  1068.        
  1069.         List<String> lstTmp = new ArrayList<>();
  1070.         for (PortaApplicativa portaApplicativa : listaPorte) {
  1071.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(portaApplicativa.getTipoServizio(), portaApplicativa.getNomeServizio(),
  1072.                         portaApplicativa.getIdSoggetto().getTipo(), portaApplicativa.getIdSoggetto().getNome(), portaApplicativa.getVersioneServizio());
  1073.             String uriFromIDServizio = IDServizioFactory.getInstance().getUriFromIDServizio(idServizio);
  1074.            
  1075.             if(gruppo!=null && !"".equals(gruppo)) {
  1076.                
  1077.                 AccordoServizioParteComune aspc =  getAPIImplemented(manager, idServizio.getSoggettoErogatore(), idServizio.getTipo(), idServizio.getNome(), idServizio.getVersione());

  1078.                 IPaginatedExpression gruppiExpr = aspcGruppiDAO.newPaginatedExpression();
  1079.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME, aspc.getNome());
  1080.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE, aspc.getVersione());
  1081.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME, aspc.getIdReferente().getNome());
  1082.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO, aspc.getIdReferente().getTipo());
  1083.                 List<IdAccordoServizioParteComuneGruppo> lGruppi = aspcGruppiDAO.findAllIds(gruppiExpr);
  1084.                 boolean found = false;
  1085.                 if(lGruppi!=null && !lGruppi.isEmpty()) {
  1086.                     for (IdAccordoServizioParteComuneGruppo gruppoCheck : lGruppi) {
  1087.                         if(gruppoCheck.getIdGruppo().getNome().equals(gruppo)) {
  1088.                             found = true;
  1089.                             break;
  1090.                         }
  1091.                     }
  1092.                 }
  1093.                 if(!found) {
  1094.                     continue;
  1095.                 }
  1096.             }
  1097.            
  1098.             // elimino duplicati
  1099.             if(!lstTmp.contains(uriFromIDServizio)) {
  1100.                 lstTmp.add(uriFromIDServizio);
  1101.                 lista.add(idServizio);
  1102.             }
  1103.         }

  1104.         return lista;
  1105.     }
  1106.    
  1107.     private static IExpression getExpressionPA(IPortaApplicativaServiceSearch portaApplicativaDAO, List<String> protocolli,
  1108.             String tipoSoggetto, String nomeSoggetto,
  1109.             String tipoServizio, String nomeServizio, Integer versioneServizio,
  1110.             String nomeAzione) throws Exception {
  1111.        
  1112.         IExpression paExpr = portaApplicativaDAO.newExpression();
  1113.        

  1114.         if(StringUtils.isNotEmpty(tipoSoggetto ))
  1115.             paExpr.equals(PortaApplicativa.model().ID_SOGGETTO.TIPO, tipoSoggetto);
  1116.         if(StringUtils.isNotEmpty(nomeSoggetto ))
  1117.             paExpr.and().equals(PortaApplicativa.model().ID_SOGGETTO.NOME, nomeSoggetto);
  1118.        
  1119.         // Se ho selezionato un servizio, oppure se non ho selezionato niente
  1120.         if(StringUtils.isNotEmpty(nomeServizio ))
  1121.             paExpr.equals(PortaApplicativa.model().NOME_SERVIZIO, nomeServizio).and();
  1122.         if(StringUtils.isNotEmpty(tipoServizio ))
  1123.             paExpr.equals(PortaApplicativa.model().TIPO_SERVIZIO, tipoServizio).and();
  1124.         if(versioneServizio != null)
  1125.             paExpr.equals(PortaApplicativa.model().VERSIONE_SERVIZIO, versioneServizio).and();

  1126.         if(StringUtils.isNotEmpty(nomeAzione )){
  1127.             IExpression azioneExpr =  portaApplicativaDAO.newExpression();
  1128.             azioneExpr.equals(PortaApplicativa.model().NOME_AZIONE, nomeAzione).or().isNull(PortaApplicativa.model().NOME_AZIONE);
  1129.             paExpr.and(azioneExpr);
  1130.         }

  1131.         if(protocolli!=null && protocolli.size()>0){
  1132.             List<String> types = new ArrayList<>();
  1133.             for (String protocollo : protocolli) {
  1134.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  1135.             }
  1136.             paExpr.in(PortaApplicativa.model().ID_SOGGETTO.TIPO, types);
  1137.         }
  1138.    
  1139.         paExpr.notEquals(PortaApplicativa.model().MODE_AZIONE, org.openspcoop2.core.config.constants.PortaApplicativaAzioneIdentificazione.DELEGATED_BY);
  1140.         return paExpr;
  1141.     }
  1142.    
  1143.    
  1144.    
  1145.    
  1146.     // Fruizioni
  1147.    
  1148.     public static List<IDFruizione> getFruizioni(JDBCServiceManager manager, List<String> protocolli,
  1149.             String gruppo,
  1150.             String tipoSoggetto, String nomeSoggetto) throws Exception {
  1151.         return getFruizioni(manager, protocolli,
  1152.                 gruppo,
  1153.                 tipoSoggetto, nomeSoggetto,
  1154.                 null, null,
  1155.                 null ,null, null,
  1156.                 null);
  1157.     }
  1158.     public static List<IDFruizione> getFruizioni(JDBCServiceManager manager, List<String> protocolli,
  1159.             String gruppo,
  1160.             String tipoSoggetto, String nomeSoggetto,
  1161.             String tipoErogatore, String nomeErogatore,
  1162.             String tipoServizio ,String nomeServizio, Integer versioneServizio,
  1163.             String nomeAzione) throws Exception {
  1164.         List<IDFruizione> lista = new ArrayList<IDFruizione>();

  1165.         IPortaDelegataServiceSearch portaDelegataDAO = manager.getPortaDelegataServiceSearch();
  1166.         IAccordoServizioParteComuneGruppoServiceSearch aspcGruppiDAO = null;
  1167.         if(gruppo!=null && !"".equals(gruppo)) {
  1168.             aspcGruppiDAO = manager.getAccordoServizioParteComuneGruppoServiceSearch();
  1169.         }
  1170.        
  1171.         IExpression pdExpr = getExpressionPD(portaDelegataDAO, protocolli,
  1172.                 tipoSoggetto, nomeSoggetto,
  1173.                 tipoErogatore, nomeErogatore,  
  1174.                 tipoServizio, nomeServizio, versioneServizio, nomeAzione);
  1175.        
  1176.         List<PortaDelegata> listaPorte = new ArrayList<PortaDelegata>();
  1177.         IPaginatedExpression pagPdExpr = portaDelegataDAO.toPaginatedExpression(pdExpr );
  1178.        
  1179.         pagPdExpr.addOrder(PortaDelegata.model().ID_SOGGETTO.TIPO, SortOrder.ASC);
  1180.         pagPdExpr.addOrder(PortaDelegata.model().ID_SOGGETTO.NOME, SortOrder.ASC);
  1181.         pagPdExpr.addOrder(PortaDelegata.model().TIPO_SOGGETTO_EROGATORE, SortOrder.ASC);
  1182.         pagPdExpr.addOrder(PortaDelegata.model().NOME_SOGGETTO_EROGATORE, SortOrder.ASC);
  1183.         pagPdExpr.addOrder(PortaDelegata.model().TIPO_SERVIZIO, SortOrder.ASC);
  1184.         pagPdExpr.addOrder(PortaDelegata.model().NOME_SERVIZIO, SortOrder.ASC);
  1185.         pagPdExpr.addOrder(PortaDelegata.model().VERSIONE_SERVIZIO, SortOrder.ASC);
  1186.        
  1187.         ExpressionProperties.enableSoloDatiIdentificativiServizio(pagPdExpr);
  1188.        
  1189.         listaPorte = portaDelegataDAO.findAll(pagPdExpr);
  1190.        
  1191.         List<String> lstTmp = new ArrayList<>();
  1192.         for (PortaDelegata portaDelegata : listaPorte) {
  1193.             IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(portaDelegata.getTipoServizio(), portaDelegata.getNomeServizio(), portaDelegata.getTipoSoggettoErogatore(), portaDelegata.getNomeSoggettoErogatore(), portaDelegata.getVersioneServizio());
  1194.             IDSoggetto idFruitore = new IDSoggetto(portaDelegata.getIdSoggetto().getTipo(), portaDelegata.getIdSoggetto().getNome());
  1195.             IDFruizione idFruizione = new IDFruizione();
  1196.             idFruizione.setIdServizio(idServizio);
  1197.             idFruizione.setIdFruitore(idFruitore);
  1198.             String uriFromIDServizio = IDServizioFactory.getInstance().getUriFromIDServizio(idServizio);
  1199.             String uriFruizione = idFruitore.toString()+"_"+uriFromIDServizio;
  1200.            
  1201.             if(gruppo!=null && !"".equals(gruppo)) {
  1202.                
  1203.                 AccordoServizioParteComune aspc =  getAPIImplemented(manager, idServizio.getSoggettoErogatore(), idServizio.getTipo(), idServizio.getNome(), idServizio.getVersione());

  1204.                 IPaginatedExpression gruppiExpr = aspcGruppiDAO.newPaginatedExpression();
  1205.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.NOME, aspc.getNome());
  1206.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.VERSIONE, aspc.getVersione());
  1207.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.NOME, aspc.getIdReferente().getNome());
  1208.                 gruppiExpr.equals(AccordoServizioParteComuneGruppo.model().ID_ACCORDO_SERVIZIO_PARTE_COMUNE.ID_SOGGETTO.TIPO, aspc.getIdReferente().getTipo());
  1209.                 List<IdAccordoServizioParteComuneGruppo> lGruppi = aspcGruppiDAO.findAllIds(gruppiExpr);
  1210.                 boolean found = false;
  1211.                 if(lGruppi!=null && !lGruppi.isEmpty()) {
  1212.                     for (IdAccordoServizioParteComuneGruppo gruppoCheck : lGruppi) {
  1213.                         if(gruppoCheck.getIdGruppo().getNome().equals(gruppo)) {
  1214.                             found = true;
  1215.                             break;
  1216.                         }
  1217.                     }
  1218.                 }
  1219.                 if(!found) {
  1220.                     continue;
  1221.                 }
  1222.             }
  1223.            
  1224.             // elimino duplicati
  1225.             if(!lstTmp.contains(uriFruizione)) {
  1226.                 lstTmp.add(uriFruizione);
  1227.                 lista.add(idFruizione);
  1228.             }
  1229.         }

  1230.         return lista;
  1231.     }
  1232.    
  1233.     private static IExpression getExpressionPD(IPortaDelegataServiceSearch portaDelegataDAO, List<String> protocolli,
  1234.             String tipoSoggetto, String nomeSoggetto,
  1235.             String tipoErogatore, String nomeErogatore,
  1236.             String tipoServizio, String nomeServizio, Integer versioneServizio,
  1237.             String nomeAzione) throws Exception {
  1238.        
  1239.         IExpression pdExpr = portaDelegataDAO.newExpression();

  1240.         // Se ho selezionato un servizio, oppure se non ho selezionato niente
  1241.         if(StringUtils.isNotEmpty(tipoSoggetto ))
  1242.             pdExpr.equals(PortaDelegata.model().ID_SOGGETTO.TIPO, tipoSoggetto);
  1243.         if(StringUtils.isNotEmpty(nomeSoggetto ))
  1244.             pdExpr.and().equals(PortaDelegata.model().ID_SOGGETTO.NOME, nomeSoggetto);
  1245.        
  1246.         if(StringUtils.isNotEmpty(nomeErogatore ))
  1247.             pdExpr.equals(PortaDelegata.model().NOME_SOGGETTO_EROGATORE, nomeErogatore).and();
  1248.         if(StringUtils.isNotEmpty(tipoErogatore ))
  1249.             pdExpr.equals(PortaDelegata.model().TIPO_SOGGETTO_EROGATORE, tipoErogatore).and();

  1250.         if(StringUtils.isNotEmpty(tipoServizio ))
  1251.             pdExpr.equals(PortaDelegata.model().TIPO_SERVIZIO,      tipoServizio);
  1252.         if(StringUtils.isNotEmpty(nomeServizio ))
  1253.             pdExpr.and().equals(PortaDelegata.model().NOME_SERVIZIO, nomeServizio);
  1254.         if(versioneServizio != null)
  1255.             pdExpr.equals(PortaDelegata.model().VERSIONE_SERVIZIO, versioneServizio).and();
  1256.        
  1257.         if(StringUtils.isNotEmpty(nomeAzione )){
  1258.             IExpression azioneExpr =  portaDelegataDAO.newExpression();
  1259.             azioneExpr.equals(PortaDelegata.model().NOME_AZIONE, nomeAzione).or().isNull(PortaDelegata.model().NOME_AZIONE);
  1260.             pdExpr.and(azioneExpr);
  1261.         }
  1262.        
  1263.         if(protocolli!=null && protocolli.size()>0){
  1264.             List<String> types = new ArrayList<>();
  1265.             for (String protocollo : protocolli) {
  1266.                 types.addAll(ProtocolFactoryReflectionUtils.getOrganizationTypes(protocollo));
  1267.             }
  1268.             pdExpr.in(PortaDelegata.model().ID_SOGGETTO.TIPO, types);
  1269.         }
  1270.        
  1271.         pdExpr.notEquals(PortaDelegata.model().MODE_AZIONE, org.openspcoop2.core.config.constants.PortaDelegataAzioneIdentificazione.DELEGATED_BY);
  1272.         return pdExpr;
  1273.     }
  1274.    
  1275. }