StatoServiziPdD.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.pdd.core;

  21. import java.util.ArrayList;
  22. import java.util.List;

  23. import org.openspcoop2.core.config.StatoServiziPdd;
  24. import org.openspcoop2.core.config.StatoServiziPddIntegrationManager;
  25. import org.openspcoop2.core.config.StatoServiziPddPortaApplicativa;
  26. import org.openspcoop2.core.config.StatoServiziPddPortaDelegata;
  27. import org.openspcoop2.core.config.TipoFiltroAbilitazioneServizi;
  28. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  29. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  30. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  31. import org.openspcoop2.core.id.IDServizio;
  32. import org.openspcoop2.core.id.IDSoggetto;
  33. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  34. import org.openspcoop2.utils.SemaphoreLock;

  35. /**
  36.  * StatoServiziPdD
  37.  *
  38.  * @author Poli Andrea (apoli@link.it)
  39.  * @author $Author$
  40.  * @version $Rev$, $Date$
  41.  */
  42. public class StatoServiziPdD {
  43.    
  44.     private static ConfigurazionePdDManager configPdDReader = ConfigurazionePdDManager.getInstance();
  45.    
  46.    
  47.     /* **************** INIT ***************** */
  48.    
  49.     public static void initialize() throws DriverConfigurazioneException {
  50.        
  51.         StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  52.        
  53.         // *** aggiorno stato in ram ***
  54.        
  55.         // -- portaDelegata --
  56.         if(statoServiziPdd!=null && statoServiziPdd.getPortaDelegata()!=null){
  57.             if(CostantiConfigurazione.DISABILITATO.equals(statoServiziPdd.getPortaDelegata().getStato())){
  58.                 activePDService = false;
  59.             }
  60.             else{
  61.                 activePDService = true;
  62.             }
  63.             listaAbilitazioniPDService = statoServiziPdd.getPortaDelegata().getFiltroAbilitazioneList();
  64.             listaDisabilitazioniPDService = statoServiziPdd.getPortaDelegata().getFiltroDisabilitazioneList();
  65.         }
  66.         // se non si inizializza, tutte le transazioni effettuano un nuovo accesso al db
  67.         if(activePDService==null){
  68.             activePDService = true;
  69.         }
  70.         if(listaAbilitazioniPDService==null){
  71.             listaAbilitazioniPDService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  72.         }
  73.         if(listaDisabilitazioniPDService==null){
  74.             listaDisabilitazioniPDService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  75.         }
  76.        
  77.         // -- portaApplicativa --  
  78.         if(statoServiziPdd!=null && statoServiziPdd.getPortaApplicativa()!=null){
  79.             if(CostantiConfigurazione.DISABILITATO.equals(statoServiziPdd.getPortaApplicativa().getStato())){
  80.                 activePAService = false;
  81.             }
  82.             else{
  83.                 activePAService = true;
  84.             }
  85.             listaAbilitazioniPAService = statoServiziPdd.getPortaApplicativa().getFiltroAbilitazioneList();
  86.             listaDisabilitazioniPAService = statoServiziPdd.getPortaApplicativa().getFiltroDisabilitazioneList();
  87.         }
  88.         // se non si inizializza, tutte le transazioni effettuano un nuovo accesso al db
  89.         if(activePAService==null){
  90.             activePAService = true;
  91.         }
  92.         if(listaAbilitazioniPAService==null){
  93.             listaAbilitazioniPAService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  94.         }
  95.         if(listaDisabilitazioniPAService==null){
  96.             listaDisabilitazioniPAService = new ArrayList<TipoFiltroAbilitazioneServizi>();
  97.         }
  98.        
  99.         // -- integrationManager --
  100.         if(statoServiziPdd!=null && statoServiziPdd.getIntegrationManager()!=null){
  101.             if(CostantiConfigurazione.DISABILITATO.equals(statoServiziPdd.getIntegrationManager().getStato())){
  102.                 activeIMService = false;
  103.             }
  104.             else{
  105.                 activeIMService = true;
  106.             }
  107.         }
  108.         if(activeIMService==null){
  109.             activeIMService = true;
  110.         }


  111.     }
  112.    
  113.    
  114.    
  115.     /* **************** PORTA DELEGATA (GET) ***************** */
  116.    
  117.     public static boolean isPDServiceActive() {
  118.         if(activePDService!=null){
  119.             return activePDService;
  120.         }
  121.         else{
  122.             return configPdDReader.isPDServiceActive();
  123.         }
  124.     }
  125.    
  126.     public static List<TipoFiltroAbilitazioneServizi> getPDServiceFiltriAbilitazioneAttiviList() throws DriverConfigurazioneException {
  127.         List<TipoFiltroAbilitazioneServizi> list = null;
  128.         if(listaAbilitazioniPDService!=null){
  129.             list = listaAbilitazioniPDService;
  130.         }
  131.         else{
  132.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  133.             if(statoServiziPdd!=null && statoServiziPdd.getPortaDelegata()!=null){
  134.                 list = statoServiziPdd.getPortaDelegata().getFiltroAbilitazioneList();
  135.             }
  136.         }
  137.         return list;
  138.     }  
  139.     public static String getPDServiceFiltriAbilitazioneAttivi() throws DriverConfigurazioneException {
  140.        
  141.         List<TipoFiltroAbilitazioneServizi> list = getPDServiceFiltriAbilitazioneAttiviList();          
  142.         if(list==null || list.size()<=0){
  143.             return "";
  144.         }
  145.         else{
  146.             StringBuilder bf = new StringBuilder();
  147.             for (TipoFiltroAbilitazioneServizi tipo : list) {
  148.                 bf.append(StatoServiziPdD.toString(tipo));
  149.             }
  150.             return bf.toString();
  151.         }
  152.     }
  153.    
  154.     public static List<TipoFiltroAbilitazioneServizi> getPDServiceFiltriDisabilitazioneAttiviList() throws DriverConfigurazioneException {
  155.        
  156.         List<TipoFiltroAbilitazioneServizi> list = null;
  157.         if(listaDisabilitazioniPDService!=null){
  158.             list = listaDisabilitazioniPDService;
  159.         }
  160.         else{
  161.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  162.             if(statoServiziPdd!=null && statoServiziPdd.getPortaDelegata()!=null){
  163.                 list = statoServiziPdd.getPortaDelegata().getFiltroDisabilitazioneList();
  164.             }
  165.         }
  166.         return list;
  167.        
  168.     }
  169.     public static String getPDServiceFiltriDisabilitazioneAttivi() throws DriverConfigurazioneException {
  170.        
  171.         List<TipoFiltroAbilitazioneServizi> list = getPDServiceFiltriDisabilitazioneAttiviList();      
  172.         if(list==null || list.size()<=0){
  173.             return "";
  174.         }
  175.         else{
  176.             StringBuilder bf = new StringBuilder();
  177.             for (TipoFiltroAbilitazioneServizi tipo : list) {
  178.                 bf.append(StatoServiziPdD.toString(tipo));
  179.             }
  180.             return bf.toString();
  181.         }
  182.     }
  183.    
  184.     /* **************** PORTA DELEGATA (MODIFY) ***************** */
  185.    
  186.     //private static Integer semaphoreActivePDService = 1;
  187.     private static final org.openspcoop2.utils.Semaphore lockActivePDService = new org.openspcoop2.utils.Semaphore("StatoServiziFruizioni");
  188.    
  189.     private static Boolean activePDService = null;  
  190.     public static void setPDServiceActive(boolean stato) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  191.         //synchronized (semaphoreActivePDService) {
  192.         SemaphoreLock lock = StatoServiziPdD.lockActivePDService.acquireThrowRuntime("setPDServiceActive");
  193.         try {
  194.                        
  195.             // rendo persistente modifica
  196.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  197.             if(statoServiziPdd==null){
  198.                 statoServiziPdd = new StatoServiziPdd();
  199.             }
  200.             if(statoServiziPdd.getPortaDelegata()==null){
  201.                 statoServiziPdd.setPortaDelegata(new StatoServiziPddPortaDelegata());
  202.             }
  203.             if(stato){
  204.                 statoServiziPdd.getPortaDelegata().setStato(CostantiConfigurazione.ABILITATO);
  205.             }else{
  206.                 statoServiziPdd.getPortaDelegata().setStato(CostantiConfigurazione.DISABILITATO);
  207.             }
  208.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  209.            
  210.             // aggiorno stato in ram
  211.             activePDService = stato;
  212.         }finally {
  213.             StatoServiziPdD.lockActivePDService.release(lock, "setPDServiceActive");
  214.         }
  215.     }
  216.    
  217.     private static List<TipoFiltroAbilitazioneServizi> listaAbilitazioniPDService = null;
  218.     public static void addFiltroAbilitazionePD(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  219.         //synchronized (semaphoreActivePDService) {
  220.         SemaphoreLock lock = StatoServiziPdD.lockActivePDService.acquireThrowRuntime("addFiltroAbilitazionePD");
  221.         try {
  222.                    
  223.             // rendo persistente modifica
  224.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  225.             if(statoServiziPdd==null){
  226.                 statoServiziPdd = new StatoServiziPdd();
  227.             }
  228.             if(statoServiziPdd.getPortaDelegata()==null){
  229.                 statoServiziPdd.setPortaDelegata(new StatoServiziPddPortaDelegata());
  230.             }
  231.             statoServiziPdd.getPortaDelegata().addFiltroAbilitazione(tipo);
  232.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  233.            
  234.             // aggiorno stato in ram
  235.             listaAbilitazioniPDService = statoServiziPdd.getPortaDelegata().getFiltroAbilitazioneList();
  236.         }finally {
  237.             StatoServiziPdD.lockActivePDService.release(lock, "addFiltroAbilitazionePD");
  238.         }
  239.     }
  240.     public static void removeFiltroAbilitazionePD(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  241.         //synchronized (semaphoreActivePDService) {
  242.         SemaphoreLock lock = StatoServiziPdD.lockActivePDService.acquireThrowRuntime("removeFiltroAbilitazionePD");
  243.         try {
  244.            
  245.             // rendo persistente modifica
  246.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  247.             if(statoServiziPdd==null){
  248.                 statoServiziPdd = new StatoServiziPdd();
  249.             }
  250.             if(statoServiziPdd.getPortaDelegata()==null){
  251.                 statoServiziPdd.setPortaDelegata(new StatoServiziPddPortaDelegata());
  252.             }
  253.             String daEliminare = StatoServiziPdD.toString(tipo);
  254.             for (int i = 0; i < statoServiziPdd.getPortaDelegata().sizeFiltroAbilitazioneList(); i++) {
  255.                 String tmp = StatoServiziPdD.toString(statoServiziPdd.getPortaDelegata().getFiltroAbilitazione(i));
  256.                 if(tmp.equals(daEliminare)){
  257.                     statoServiziPdd.getPortaDelegata().removeFiltroAbilitazione(i);
  258.                     break;
  259.                 }
  260.             }
  261.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  262.            
  263.             // aggiorno stato in ram
  264.             listaAbilitazioniPDService = statoServiziPdd.getPortaDelegata().getFiltroAbilitazioneList();
  265.         }finally{
  266.             StatoServiziPdD.lockActivePDService.release(lock, "removeFiltroAbilitazionePD");
  267.         }
  268.     }
  269.    
  270.     private static List<TipoFiltroAbilitazioneServizi> listaDisabilitazioniPDService = null;
  271.     public static void addFiltroDisabilitazionePD(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  272.         //synchronized (semaphoreActivePDService) {
  273.         SemaphoreLock lock = StatoServiziPdD.lockActivePDService.acquireThrowRuntime("addFiltroDisabilitazionePD");
  274.         try {
  275.            
  276.             // rendo persistente modifica
  277.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  278.             if(statoServiziPdd==null){
  279.                 statoServiziPdd = new StatoServiziPdd();
  280.             }
  281.             if(statoServiziPdd.getPortaDelegata()==null){
  282.                 statoServiziPdd.setPortaDelegata(new StatoServiziPddPortaDelegata());
  283.             }
  284.             statoServiziPdd.getPortaDelegata().addFiltroDisabilitazione(tipo);
  285.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  286.            
  287.             // aggiorno stato in ram
  288.             listaDisabilitazioniPDService = statoServiziPdd.getPortaDelegata().getFiltroDisabilitazioneList();
  289.         }finally {
  290.             StatoServiziPdD.lockActivePDService.release(lock, "addFiltroDisabilitazionePD");
  291.         }
  292.     }
  293.     public static void removeFiltroDisabilitazionePD(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  294.         //synchronized (semaphoreActivePDService) {
  295.         SemaphoreLock lock = StatoServiziPdD.lockActivePDService.acquireThrowRuntime("removeFiltroDisabilitazionePD");
  296.         try {
  297.            
  298.             // rendo persistente modifica
  299.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  300.             if(statoServiziPdd==null){
  301.                 statoServiziPdd = new StatoServiziPdd();
  302.             }
  303.             if(statoServiziPdd.getPortaDelegata()==null){
  304.                 statoServiziPdd.setPortaDelegata(new StatoServiziPddPortaDelegata());
  305.             }
  306.             String daEliminare = StatoServiziPdD.toString(tipo);
  307.             for (int i = 0; i < statoServiziPdd.getPortaDelegata().sizeFiltroDisabilitazioneList(); i++) {
  308.                 String tmp = StatoServiziPdD.toString(statoServiziPdd.getPortaDelegata().getFiltroDisabilitazione(i));
  309.                 if(tmp.equals(daEliminare)){
  310.                     statoServiziPdd.getPortaDelegata().removeFiltroDisabilitazione(i);
  311.                     break;
  312.                 }
  313.             }
  314.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  315.            
  316.             // aggiorno stato in ram
  317.             listaDisabilitazioniPDService = statoServiziPdd.getPortaDelegata().getFiltroDisabilitazioneList();
  318.         }finally {
  319.             StatoServiziPdD.lockActivePDService.release(lock, "removeFiltroDisabilitazionePD");
  320.         }
  321.     }
  322.    
  323.    
  324.    
  325.    
  326.    
  327.     /* **************** PORTA APPLICATIVA (GET) ***************** */
  328.    
  329.     public static boolean isPAServiceActive() {
  330.         if(activePAService!=null){
  331.             return activePAService;
  332.         }
  333.         else{
  334.             return configPdDReader.isPAServiceActive();
  335.         }
  336.     }
  337.    
  338.     public static List<TipoFiltroAbilitazioneServizi> getPAServiceFiltriAbilitazioneAttiviList() throws DriverConfigurazioneException {
  339.         List<TipoFiltroAbilitazioneServizi> list = null;
  340.         if(listaAbilitazioniPAService!=null){
  341.             list = listaAbilitazioniPAService;
  342.         }
  343.         else{
  344.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  345.             if(statoServiziPdd!=null && statoServiziPdd.getPortaApplicativa()!=null){
  346.                 list = statoServiziPdd.getPortaApplicativa().getFiltroAbilitazioneList();
  347.             }
  348.         }
  349.         return list;
  350.     }  
  351.     public static String getPAServiceFiltriAbilitazioneAttivi() throws DriverConfigurazioneException {
  352.        
  353.         List<TipoFiltroAbilitazioneServizi> list = getPAServiceFiltriAbilitazioneAttiviList();          
  354.         if(list==null || list.size()<=0){
  355.             return "";
  356.         }
  357.         else{
  358.             StringBuilder bf = new StringBuilder();
  359.             for (TipoFiltroAbilitazioneServizi tipo : list) {
  360.                 bf.append(StatoServiziPdD.toString(tipo));
  361.             }
  362.             return bf.toString();
  363.         }
  364.     }
  365.    
  366.     public static List<TipoFiltroAbilitazioneServizi> getPAServiceFiltriDisabilitazioneAttiviList() throws DriverConfigurazioneException {
  367.        
  368.         List<TipoFiltroAbilitazioneServizi> list = null;
  369.         if(listaDisabilitazioniPAService!=null){
  370.             list = listaDisabilitazioniPAService;
  371.         }
  372.         else{
  373.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  374.             if(statoServiziPdd!=null && statoServiziPdd.getPortaApplicativa()!=null){
  375.                 list = statoServiziPdd.getPortaApplicativa().getFiltroDisabilitazioneList();
  376.             }
  377.         }
  378.         return list;
  379.        
  380.     }
  381.     public static String getPAServiceFiltriDisabilitazioneAttivi() throws DriverConfigurazioneException {
  382.        
  383.         List<TipoFiltroAbilitazioneServizi> list = getPAServiceFiltriDisabilitazioneAttiviList();      
  384.         if(list==null || list.size()<=0){
  385.             return "";
  386.         }
  387.         else{
  388.             StringBuilder bf = new StringBuilder();
  389.             for (TipoFiltroAbilitazioneServizi tipo : list) {
  390.                 bf.append(StatoServiziPdD.toString(tipo));
  391.             }
  392.             return bf.toString();
  393.         }
  394.     }
  395.    
  396.     /* **************** PORTA APPLICATIVA (MODIFY) ***************** */
  397.    
  398.     //private static Integer semaphoreActivePAService = 1;
  399.     private static final org.openspcoop2.utils.Semaphore lockActivePAService = new org.openspcoop2.utils.Semaphore("StatoServiziErogazioni");
  400.    
  401.     private static Boolean activePAService = null;  
  402.     public static void setPAServiceActive(boolean stato) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  403.         //synchronized (semaphoreActivePAService) {
  404.         SemaphoreLock lock = StatoServiziPdD.lockActivePAService.acquireThrowRuntime("setPAServiceActive");
  405.         try {
  406.                        
  407.             // rendo persistente modifica
  408.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  409.             if(statoServiziPdd==null){
  410.                 statoServiziPdd = new StatoServiziPdd();
  411.             }
  412.             if(statoServiziPdd.getPortaApplicativa()==null){
  413.                 statoServiziPdd.setPortaApplicativa(new StatoServiziPddPortaApplicativa());
  414.             }
  415.             if(stato){
  416.                 statoServiziPdd.getPortaApplicativa().setStato(CostantiConfigurazione.ABILITATO);
  417.             }else{
  418.                 statoServiziPdd.getPortaApplicativa().setStato(CostantiConfigurazione.DISABILITATO);
  419.             }
  420.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  421.            
  422.             // aggiorno stato in ram
  423.             activePAService = stato;
  424.         }finally {
  425.             StatoServiziPdD.lockActivePAService.release(lock, "setPAServiceActive");
  426.         }
  427.     }
  428.    
  429.     private static List<TipoFiltroAbilitazioneServizi> listaAbilitazioniPAService = null;
  430.     public static void addFiltroAbilitazionePA(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  431.         //synchronized (semaphoreActivePAService) {
  432.         SemaphoreLock lock = StatoServiziPdD.lockActivePAService.acquireThrowRuntime("addFiltroAbilitazionePA");
  433.         try {
  434.                    
  435.             // rendo persistente modifica
  436.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  437.             if(statoServiziPdd==null){
  438.                 statoServiziPdd = new StatoServiziPdd();
  439.             }
  440.             if(statoServiziPdd.getPortaApplicativa()==null){
  441.                 statoServiziPdd.setPortaApplicativa(new StatoServiziPddPortaApplicativa());
  442.             }
  443.             statoServiziPdd.getPortaApplicativa().addFiltroAbilitazione(tipo);
  444.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  445.            
  446.             // aggiorno stato in ram
  447.             listaAbilitazioniPAService = statoServiziPdd.getPortaApplicativa().getFiltroAbilitazioneList();
  448.         }finally {
  449.             StatoServiziPdD.lockActivePAService.release(lock, "addFiltroAbilitazionePA");
  450.         }
  451.     }
  452.     public static void removeFiltroAbilitazionePA(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  453.         //synchronized (semaphoreActivePAService) {
  454.         SemaphoreLock lock = StatoServiziPdD.lockActivePAService.acquireThrowRuntime("removeFiltroAbilitazionePA");
  455.         try {
  456.            
  457.             // rendo persistente modifica
  458.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  459.             if(statoServiziPdd==null){
  460.                 statoServiziPdd = new StatoServiziPdd();
  461.             }
  462.             if(statoServiziPdd.getPortaApplicativa()==null){
  463.                 statoServiziPdd.setPortaApplicativa(new StatoServiziPddPortaApplicativa());
  464.             }
  465.             String daEliminare = StatoServiziPdD.toString(tipo);
  466.             for (int i = 0; i < statoServiziPdd.getPortaApplicativa().sizeFiltroAbilitazioneList(); i++) {
  467.                 String tmp = StatoServiziPdD.toString(statoServiziPdd.getPortaApplicativa().getFiltroAbilitazione(i));
  468.                 if(tmp.equals(daEliminare)){
  469.                     statoServiziPdd.getPortaApplicativa().removeFiltroAbilitazione(i);
  470.                     break;
  471.                 }
  472.             }
  473.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  474.            
  475.             // aggiorno stato in ram
  476.             listaAbilitazioniPAService = statoServiziPdd.getPortaApplicativa().getFiltroAbilitazioneList();
  477.         }finally {
  478.             StatoServiziPdD.lockActivePAService.release(lock, "removeFiltroAbilitazionePA");
  479.         }
  480.     }
  481.    
  482.     private static List<TipoFiltroAbilitazioneServizi> listaDisabilitazioniPAService = null;
  483.     public static void addFiltroDisabilitazionePA(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  484.         //synchronized (semaphoreActivePAService) {
  485.         SemaphoreLock lock = StatoServiziPdD.lockActivePAService.acquireThrowRuntime("addFiltroDisabilitazionePA");
  486.         try {
  487.            
  488.             // rendo persistente modifica
  489.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  490.             if(statoServiziPdd==null){
  491.                 statoServiziPdd = new StatoServiziPdd();
  492.             }
  493.             if(statoServiziPdd.getPortaApplicativa()==null){
  494.                 statoServiziPdd.setPortaApplicativa(new StatoServiziPddPortaApplicativa());
  495.             }
  496.             statoServiziPdd.getPortaApplicativa().addFiltroDisabilitazione(tipo);
  497.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  498.            
  499.             // aggiorno stato in ram
  500.             listaDisabilitazioniPAService = statoServiziPdd.getPortaApplicativa().getFiltroDisabilitazioneList();
  501.         }finally {
  502.             StatoServiziPdD.lockActivePAService.release(lock, "addFiltroDisabilitazionePA");
  503.         }
  504.     }
  505.     public static void removeFiltroDisabilitazionePA(TipoFiltroAbilitazioneServizi tipo) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  506.         //synchronized (semaphoreActivePAService) {
  507.         SemaphoreLock lock = StatoServiziPdD.lockActivePAService.acquireThrowRuntime("removeFiltroDisabilitazionePA");
  508.         try {
  509.            
  510.             // rendo persistente modifica
  511.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  512.             if(statoServiziPdd==null){
  513.                 statoServiziPdd = new StatoServiziPdd();
  514.             }
  515.             if(statoServiziPdd.getPortaApplicativa()==null){
  516.                 statoServiziPdd.setPortaApplicativa(new StatoServiziPddPortaApplicativa());
  517.             }
  518.             String daEliminare = StatoServiziPdD.toString(tipo);
  519.             for (int i = 0; i < statoServiziPdd.getPortaApplicativa().sizeFiltroDisabilitazioneList(); i++) {
  520.                 String tmp = StatoServiziPdD.toString(statoServiziPdd.getPortaApplicativa().getFiltroDisabilitazione(i));
  521.                 if(tmp.equals(daEliminare)){
  522.                     statoServiziPdd.getPortaApplicativa().removeFiltroDisabilitazione(i);
  523.                     break;
  524.                 }
  525.             }
  526.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  527.            
  528.             // aggiorno stato in ram
  529.             listaDisabilitazioniPAService = statoServiziPdd.getPortaApplicativa().getFiltroDisabilitazioneList();
  530.         }finally {
  531.             StatoServiziPdD.lockActivePAService.release(lock, "removeFiltroDisabilitazionePA");
  532.         }
  533.     }
  534.    
  535.    
  536.    
  537.    
  538.    
  539.     /* **************** INTEGRATION MANAGER (GET) ***************** */
  540.    
  541.     public static boolean isIMServiceActive() {
  542.         if(activeIMService!=null){
  543.             return activeIMService;
  544.         }
  545.         else{
  546.             return configPdDReader.isIMServiceActive();
  547.         }
  548.     }
  549.    

  550.    
  551.    
  552.     /* **************** INTEGRATION MANAGER (MODIFY) ***************** */
  553.    
  554.     //private static Integer semaphoreActiveIMService = 1;
  555.     private static final org.openspcoop2.utils.Semaphore lockActiveIMService = new org.openspcoop2.utils.Semaphore("StatoServiziIntegrationManager");
  556.    
  557.     private static Boolean activeIMService = null;  
  558.     public static void setIMServiceActive(boolean stato) throws DriverConfigurazioneException, DriverConfigurazioneNotFound {
  559.         //synchronized (semaphoreActiveIMService) {
  560.         SemaphoreLock lock = StatoServiziPdD.lockActiveIMService.acquireThrowRuntime("setIMServiceActive");
  561.         try {
  562.                        
  563.             // rendo persistente modifica
  564.             StatoServiziPdd statoServiziPdd = StatoServiziPdD.configPdDReader.getStatoServiziPdD();
  565.             if(statoServiziPdd==null){
  566.                 statoServiziPdd = new StatoServiziPdd();
  567.             }
  568.             if(statoServiziPdd.getIntegrationManager()==null){
  569.                 statoServiziPdd.setIntegrationManager(new StatoServiziPddIntegrationManager());
  570.             }
  571.             if(stato){
  572.                 statoServiziPdd.getIntegrationManager().setStato(CostantiConfigurazione.ABILITATO);
  573.             }else{
  574.                 statoServiziPdd.getIntegrationManager().setStato(CostantiConfigurazione.DISABILITATO);
  575.             }
  576.             StatoServiziPdD.configPdDReader.updateStatoServiziPdD(statoServiziPdd);
  577.            
  578.             // aggiorno stato in ram
  579.             activeIMService = stato;
  580.         }finally {
  581.             StatoServiziPdD.lockActiveIMService.release(lock, "setIMServiceActive");
  582.         }
  583.     }


  584.    
  585.    

  586.    
  587.    
  588.    
  589.     /* **************** UTILITIES ***************** */
  590.    
  591.     private static String toString(TipoFiltroAbilitazioneServizi tipo){
  592.         StringBuilder bf = new StringBuilder();
  593.         bf.append("(");
  594.        
  595.         if(tipo.getTipoSoggettoFruitore()!=null){
  596.             bf.append(" TIPO_FRUITORE:");
  597.             bf.append(tipo.getTipoSoggettoFruitore());
  598.         }
  599.         if(tipo.getSoggettoFruitore()!=null){
  600.             bf.append(" FRUITORE:");
  601.             bf.append(tipo.getSoggettoFruitore());
  602.         }
  603.         if(tipo.getIdentificativoPortaFruitore()!=null){
  604.             bf.append(" PORTA_FRUITORE:");
  605.             bf.append(tipo.getSoggettoFruitore());
  606.         }
  607.        
  608.         if(tipo.getTipoSoggettoErogatore()!=null){
  609.             bf.append(" TIPO_EROGATORE:");
  610.             bf.append(tipo.getTipoSoggettoErogatore());
  611.         }
  612.         if(tipo.getSoggettoErogatore()!=null){
  613.             bf.append(" EROGATORE:");
  614.             bf.append(tipo.getSoggettoErogatore());
  615.         }
  616.         if(tipo.getIdentificativoPortaErogatore()!=null){
  617.             bf.append(" PORTA_EROGATORE:");
  618.             bf.append(tipo.getSoggettoErogatore());
  619.         }
  620.        
  621.         if(tipo.getTipoServizio()!=null){
  622.             bf.append(" TIPO_SERVIZIO:");
  623.             bf.append(tipo.getTipoServizio());
  624.         }
  625.         if(tipo.getServizio()!=null){
  626.             bf.append(" SERVIZIO:");
  627.             bf.append(tipo.getServizio());
  628.         }
  629.         if(tipo.getVersioneServizio()!=null){
  630.             bf.append(" VERSIONE_SERVIZIO:");
  631.             bf.append(tipo.getVersioneServizio());
  632.         }
  633.        
  634.         if(tipo.getAzione()!=null){
  635.             bf.append(" AZIONE:");
  636.             bf.append(tipo.getAzione());
  637.         }
  638.        
  639.         bf.append(" )");
  640.         return bf.toString();
  641.     }
  642.    
  643.    
  644.    
  645.    
  646.    
  647.    
  648.    
  649.     /* **************** IS ENALBED ***************** */
  650.    
  651.     public static boolean isEnabledPortaDelegata(IDSoggetto soggettoFruitore,IDServizio idServizio) throws DriverConfigurazioneException{
  652.         return _isEnabled(isPDServiceActive(),
  653.                 getPDServiceFiltriAbilitazioneAttiviList(),
  654.                 getPDServiceFiltriDisabilitazioneAttiviList(),
  655.                 soggettoFruitore, idServizio);
  656.     }
  657.     public static boolean isEnabledPortaApplicativa(IDSoggetto soggettoFruitore,IDServizio idServizio) throws DriverConfigurazioneException{
  658.         return _isEnabled(isPAServiceActive(),
  659.                 getPAServiceFiltriAbilitazioneAttiviList(),
  660.                 getPAServiceFiltriDisabilitazioneAttiviList(),
  661.                 soggettoFruitore, idServizio);
  662.     }
  663.     public static boolean isEnabledIntegrationManager() throws DriverConfigurazioneException{
  664.         return _isEnabled(isIMServiceActive(),
  665.                 null,null,null,null);
  666.     }
  667.     private static boolean _isEnabled(boolean statoServizioAbilitato,
  668.             List<TipoFiltroAbilitazioneServizi> filtriAbilitazioni,
  669.             List<TipoFiltroAbilitazioneServizi> filtriDisabilitazioni,
  670.             IDSoggetto soggettoFruitore,IDServizio idServizio){
  671.        
  672.         if(statoServizioAbilitato){
  673.            
  674.             // il servizio e' abilitato.
  675.             // Verifico se per caso esiste qualche regola puntuale di disabilitazione.
  676.             if(filtriDisabilitazioni!=null){
  677.                 for (TipoFiltroAbilitazioneServizi tipo : filtriDisabilitazioni) {          
  678.                     if(!StatoServiziPdD.isMatch(tipo, soggettoFruitore, idServizio)){
  679.                         continue;
  680.                     }
  681.                     return false; // la regola ha un match: disabilitato!
  682.                 }
  683.             }
  684.            
  685.             return true;
  686.            
  687.         }
  688.         else{
  689.            
  690.             // il servizio e' disabilitato.
  691.             // Verifico se per caso esiste qualche regola puntuale di abilitazione.
  692.             if(filtriAbilitazioni!=null){
  693.                 for (TipoFiltroAbilitazioneServizi tipo : filtriAbilitazioni) {        
  694.                     if(!StatoServiziPdD.isMatch(tipo, soggettoFruitore, idServizio)){
  695.                         continue;
  696.                     }
  697.                     return true; // la regola ha un match: abilitato!
  698.                 }
  699.             }      
  700.            
  701.             return false;
  702.            
  703.         }
  704.     }
  705.    
  706.     private static boolean isMatch(TipoFiltroAbilitazioneServizi tipo,IDSoggetto soggettoFruitore,IDServizio idServizio){
  707.         if(soggettoFruitore==null){
  708.             return false;
  709.         }
  710.         if(tipo.getTipoSoggettoFruitore()!=null){
  711.             if(!tipo.getTipoSoggettoFruitore().equals(soggettoFruitore.getTipo())){
  712.                 return false;
  713.             }
  714.         }
  715.         if(tipo.getSoggettoFruitore()!=null){
  716.             if(!tipo.getSoggettoFruitore().equals(soggettoFruitore.getNome())){
  717.                 return false;
  718.             }
  719.         }
  720.         if(tipo.getIdentificativoPortaFruitore()!=null){
  721.             if(!tipo.getIdentificativoPortaFruitore().equals(soggettoFruitore.getCodicePorta())){
  722.                 return false;
  723.             }
  724.         }

  725.         if(idServizio==null){
  726.             return false;
  727.         }
  728.        
  729.         if(idServizio.getSoggettoErogatore()==null){
  730.             return false;
  731.         }
  732.         if(tipo.getTipoSoggettoErogatore()!=null){
  733.             if(!tipo.getTipoSoggettoErogatore().equals(idServizio.getSoggettoErogatore().getTipo())){
  734.                 return false;
  735.             }
  736.         }
  737.         if(tipo.getSoggettoErogatore()!=null){
  738.             if(!tipo.getSoggettoErogatore().equals(idServizio.getSoggettoErogatore().getNome())){
  739.                 return false;
  740.             }
  741.         }
  742.         if(tipo.getIdentificativoPortaErogatore()!=null){
  743.             if(!tipo.getIdentificativoPortaErogatore().equals(idServizio.getSoggettoErogatore().getCodicePorta())){
  744.                 return false;
  745.             }
  746.         }
  747.        
  748.         if(tipo.getTipoServizio()!=null){
  749.             if(!tipo.getTipoServizio().equals(idServizio.getTipo())){
  750.                 return false;
  751.             }
  752.         }
  753.         if(tipo.getServizio()!=null){
  754.             if(!tipo.getServizio().equals(idServizio.getNome())){
  755.                 return false;
  756.             }
  757.         }
  758.         if(tipo.getVersioneServizio()!=null){
  759.             if(tipo.getVersioneServizio().intValue() != idServizio.getVersione().intValue() ){
  760.                 return false;
  761.             }
  762.         }
  763.         if(tipo.getAzione()!=null){
  764.             if(!tipo.getAzione().equals(idServizio.getAzione())){
  765.                 return false;
  766.             }
  767.         }
  768.        
  769.         return true;
  770.     }
  771. }