UtentiChange.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.web.ctrlstat.servlet.utenti;

  21. import java.util.ArrayList;
  22. import java.util.Date;
  23. import java.util.Iterator;
  24. import java.util.List;

  25. import javax.servlet.http.HttpServletRequest;
  26. import javax.servlet.http.HttpServletResponse;
  27. import javax.servlet.http.HttpSession;

  28. import org.apache.struts.action.Action;
  29. import org.apache.struts.action.ActionForm;
  30. import org.apache.struts.action.ActionForward;
  31. import org.apache.struts.action.ActionMapping;
  32. import org.openspcoop2.core.commons.Liste;
  33. import org.openspcoop2.utils.crypt.PasswordVerifier;
  34. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  35. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  36. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  37. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  38. import org.openspcoop2.web.ctrlstat.servlet.OggettoDialogEnum;
  39. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  40. import org.openspcoop2.web.ctrlstat.servlet.login.LoginSessionUtilities;
  41. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  42. import org.openspcoop2.web.lib.mvc.Costanti;
  43. import org.openspcoop2.web.lib.mvc.DataElement;
  44. import org.openspcoop2.web.lib.mvc.ForwardParams;
  45. import org.openspcoop2.web.lib.mvc.GeneralData;
  46. import org.openspcoop2.web.lib.mvc.MessageType;
  47. import org.openspcoop2.web.lib.mvc.PageData;
  48. import org.openspcoop2.web.lib.mvc.Parameter;
  49. import org.openspcoop2.web.lib.mvc.ServletUtils;
  50. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  51. import org.openspcoop2.web.lib.users.dao.InterfaceType;
  52. import org.openspcoop2.web.lib.users.dao.Permessi;
  53. import org.openspcoop2.web.lib.users.dao.PermessiUtente;
  54. import org.openspcoop2.web.lib.users.dao.Stato;
  55. import org.openspcoop2.web.lib.users.dao.User;
  56. import org.openspcoop2.web.lib.users.dao.UserObjects;

  57. /**
  58.  * suChange
  59.  *
  60.  * @author Andrea Poli (apoli@link.it)
  61.  * @author Stefano Corallo (corallo@link.it)
  62.  * @author Sandra Giangrandi (sandra@link.it)
  63.  * @author $Author$
  64.  * @version $Rev$, $Date$
  65.  *
  66.  */
  67. public final class UtentiChange extends Action {

  68.     @Override
  69.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

  70.         HttpSession session = request.getSession(true);

  71.         // Inizializzo PageData
  72.         PageData pd = new PageData();

  73.         GeneralHelper generalHelper = new GeneralHelper(session);

  74.         // Inizializzo GeneralData
  75.         GeneralData gd = generalHelper.initGeneralData(request);

  76.         String userLogin = ServletUtils.getUserLoginFromSession(session);

  77.         try {
  78.             UtentiHelper utentiHelper = new UtentiHelper(request, pd, session);

  79.             UtentiCore utentiCore = new UtentiCore();
  80.             SoggettiCore soggettiCore = new SoggettiCore(utentiCore);
  81.            
  82.             String nomesu = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_USERNAME);
  83.             String pwsu = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_PW);
  84.             String confpwsu = null;
  85.             String tipoGui = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_TIPO_GUI);

  86.             String isServizi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_SERVIZI);
  87.             String isDiagnostica = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_DIAGNOSTICA);
  88.             String isReportistica = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_REPORTISTICA);
  89.             String isSistema = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_SISTEMA);
  90.             String isMessaggi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_MESSAGGI);
  91.             String isUtenti = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_UTENTI);
  92.             String isAuditing = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_AUDITING);
  93.             String isAccordiCooperazione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_IS_ACCORDI_COOPERAZIONE);

  94.             String singleSuServizi = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SINGLE_SU_SERVIZI);
  95.             String singleSuAccordiCooperazione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SINGLE_SU_ACCORDI_COOPERAZIONE);
  96.             String changepwd = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_CHANGE_PW);

  97.             String isSoggettiAll = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_ABILITAZIONI_SOGGETTI_ALL);
  98.             String isServiziAll = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_ABILITAZIONI_SERVIZI_ALL);
  99.            
  100.             String tipoModalitaConsoleGestione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA);
  101.             String idSoggettoConsoleGestione = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_ID_SOGGETTO);
  102.            
  103.             String tipoModalitaConsoleMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA_MONITOR);
  104.             String idSoggettoConsoleMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_ID_SOGGETTO_MONITOR);
  105.            
  106.             String homePageMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_HOME_PAGE_MONITORAGGIO);
  107.             String intervalloTemporaleHomePageConsoleMonitoraggio = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_INTERVALLO_TEMPORALE_HOME_PAGE_MONITORAGGIO);
  108.            
  109.             String scadenza = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_SCADENZA);
  110.            
  111.             Boolean singlePdD = ServletUtils.getBooleanAttributeFromSession(CostantiControlStation.SESSION_PARAMETRO_SINGLE_PDD, session, request).getValue();
  112.            
  113.             List<String> protocolliRegistratiConsole = utentiCore.getProtocolli();
  114.            
  115.             String [] modalitaScelte = new String[protocolliRegistratiConsole.size()];
  116.             for (int i = 0; i < protocolliRegistratiConsole.size() ; i++) {
  117.                 String protocolloName = protocolliRegistratiConsole.get(i);
  118.                 modalitaScelte[i] = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTI_MODALITA_PREFIX + protocolloName);
  119.             }
  120.            
  121.             // Prendo l'utente
  122.             User user = utentiCore.getUser(nomesu);
  123.             Date dataUltimoAggiornamentoPassword = user.getLastUpdatePassword();
  124.             boolean oldScadenza = user.isCheckLastUpdatePassword();
  125.             //Prendo i vecchi dati dell'utente
  126.            
  127.             // Check multitenant
  128.                        
  129.             List<String> oldProtocolliSupportati = user.getProtocolliSupportati();
  130.             boolean oldHasOnlyPermessiUtenti = user.hasOnlyPermessiUtenti();
  131.             List<String> protocolliSupportati = null;
  132.             boolean first = false;
  133.             if(tipoGui == null) {
  134.                 tipoGui = user.getInterfaceType().toString();
  135.                
  136.                 if(!oldHasOnlyPermessiUtenti) {
  137.                     oldProtocolliSupportati = user.getProtocolliSupportati();
  138.                     // dal db ho letto un utente che non ha associato nessun protocollo, glieli associo tutti di default
  139.                     if(oldProtocolliSupportati == null) {
  140.                         oldProtocolliSupportati = new ArrayList<>();
  141.                         for (int i = 0; i < protocolliRegistratiConsole.size() ; i++) {
  142.                             String protocolloName = protocolliRegistratiConsole.get(i);
  143.                             oldProtocolliSupportati.add(protocolloName);
  144.                             modalitaScelte[i] = Costanti.CHECK_BOX_ENABLED;
  145.                         }
  146.                     }
  147.                 } else {
  148.                     // utente configurato solo per gestire gli utenti
  149.                     oldProtocolliSupportati = new ArrayList<>();
  150.                 }
  151.                 protocolliSupportati  = oldProtocolliSupportati;
  152.                 first = true;
  153.                
  154.                 if(tipoModalitaConsoleGestione == null) {
  155.                     tipoModalitaConsoleGestione =  user.getProtocolloSelezionatoPddConsole();
  156.                 }
  157.                
  158.                 // nessun profilo selezionato imposto all
  159.                 if(tipoModalitaConsoleGestione == null) {
  160.                     tipoModalitaConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  161.                 }
  162.                
  163.                
  164.                 if(idSoggettoConsoleGestione == null) {
  165.                     idSoggettoConsoleGestione = user.getSoggettoSelezionatoPddConsole();
  166.                 }
  167.                
  168.                 // nessun soggetto selezionato imposto all
  169.                 if(idSoggettoConsoleGestione == null) {
  170.                     idSoggettoConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  171.                 }
  172.                
  173.                 if(tipoModalitaConsoleMonitoraggio == null) {
  174.                     tipoModalitaConsoleMonitoraggio =  user.getProtocolloSelezionatoPddMonitor();
  175.                 }
  176.                
  177.                 // nessun profilo selezionato imposto all
  178.                 if(tipoModalitaConsoleMonitoraggio == null) {
  179.                     tipoModalitaConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  180.                 }
  181.                
  182.                
  183.                 if(idSoggettoConsoleMonitoraggio == null) {
  184.                     idSoggettoConsoleMonitoraggio = user.getSoggettoSelezionatoPddMonitor();
  185.                 }
  186.                
  187.                 // nessun soggetto selezionato imposto all
  188.                 if(idSoggettoConsoleMonitoraggio == null) {
  189.                     idSoggettoConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  190.                 }
  191.                
  192.                 List<Stato> stati = user.getStati();
  193.                
  194.                 if(homePageMonitoraggio == null) {
  195.                     for (Stato stato : stati) {
  196.                         if(stato.getOggetto().equals(UtentiCostanti.OGGETTO_STATO_UTENTE_HOME_PAGE)) {
  197.                             homePageMonitoraggio = utentiHelper.extractValoreStato(stato.getStato());
  198.                             break;
  199.                         }
  200.                     }
  201.                 }
  202.                
  203.                 // nessuna home page selezionata imposto transazioni
  204.                 if(homePageMonitoraggio == null) {
  205.                     homePageMonitoraggio = UtentiCostanti.VALUE_PARAMETRO_UTENTI_HOME_PAGE_MONITORAGGIO_TRANSAZIONI;
  206.                 }
  207.                
  208.                 if(intervalloTemporaleHomePageConsoleMonitoraggio == null) {
  209.                     for (Stato stato : stati) {
  210.                         if(stato.getOggetto().equals(UtentiCostanti.OGGETTO_STATO_UTENTE_INTERVALLO_TEMPORALE_HOME_PAGE)) {
  211.                             intervalloTemporaleHomePageConsoleMonitoraggio = utentiHelper.extractValoreStato(stato.getStato());
  212.                             break;
  213.                         }
  214.                     }
  215.                 }
  216.                
  217.                 // nessuna home page selezionata imposto transazioni
  218.                 if(intervalloTemporaleHomePageConsoleMonitoraggio == null) {
  219.                     intervalloTemporaleHomePageConsoleMonitoraggio = UtentiCostanti.VALUE_PARAMETRO_UTENTI_INTERVALLO_TEMPORALE_HOME_PAGE_MONITORAGGIO_ULTIMI_7_GIORNI;
  220.                 }
  221.             }
  222.            
  223.             InterfaceType interfaceType = InterfaceType.convert(tipoGui, true);
  224.            
  225.             String postBackElementName = utentiHelper.getPostBackElementName();
  226.            
  227.             if (postBackElementName != null) {
  228.                
  229.                 // selezione modalita'
  230.                 if(postBackElementName.startsWith(UtentiCostanti.PARAMETRO_UTENTI_MODALITA_PREFIX)) {
  231.                     tipoModalitaConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  232.                     idSoggettoConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  233.                     tipoModalitaConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  234.                     idSoggettoConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  235.                 }
  236.                
  237.                 // cambio del profilo, reset del valore del soggetto
  238.                 if(postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA)) {
  239.                     idSoggettoConsoleGestione = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  240.                 }
  241.                
  242.                 // cambio del profilo, reset del valore del soggetto
  243.                 if(postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA_MONITOR)) {
  244.                     idSoggettoConsoleMonitoraggio = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  245.                 }
  246.                
  247.                 // cambio della home page, reset del valore del grafico
  248.                 if(postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTI_HOME_PAGE_MONITORAGGIO)) {
  249.                     intervalloTemporaleHomePageConsoleMonitoraggio = UtentiCostanti.VALUE_PARAMETRO_UTENTI_INTERVALLO_TEMPORALE_HOME_PAGE_MONITORAGGIO_ULTIMI_7_GIORNI;
  250.                 }
  251.             }
  252.            
  253.             // Preparo il menu
  254.             utentiHelper.makeMenu();

  255.             // Se nomehid = null, devo visualizzare la pagina per l'inserimento dati
  256.             if(utentiHelper.isEditModeInProgress()){

  257.                 // setto la barra del titolo

  258.                 ServletUtils.setPageDataTitle(pd,
  259.                         new Parameter(UtentiCostanti.LABEL_UTENTI ,UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
  260.                         new Parameter(nomesu,null));


  261.                 PermessiUtente pu = user.getPermessi();

  262.                 isServizi = (isServizi==null) ? (pu.isServizi() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isServizi;
  263.                 isDiagnostica = (isDiagnostica==null) ? (pu.isDiagnostica() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isDiagnostica;
  264.                 isReportistica = (isReportistica==null) ? (pu.isReportistica() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isReportistica;
  265.                 isSistema = (isSistema==null) ? (pu.isSistema() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isSistema;
  266.                 isMessaggi = (isMessaggi==null) ? (pu.isCodeMessaggi() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isMessaggi;
  267.                 isUtenti = (isUtenti==null) ? (pu.isUtenti() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isUtenti;
  268.                 isAuditing = (isAuditing==null) ? (pu.isAuditing() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isAuditing;
  269.                 isAccordiCooperazione = (isAccordiCooperazione==null) ? (pu.isAccordiCooperazione() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isAccordiCooperazione;
  270.                
  271.                 isSoggettiAll = (isSoggettiAll==null) ? (user.isPermitAllSoggetti() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isSoggettiAll;
  272.                 isServiziAll = (isServiziAll==null) ? (user.isPermitAllServizi() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : isServiziAll;
  273.                                
  274.                 scadenza = (scadenza == null) ? (user.isCheckLastUpdatePassword() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED) : scadenza;
  275.                
  276.                 if(first) {
  277.                     for (int i = 0; i < protocolliRegistratiConsole.size() ; i++) {
  278.                         String protocolloName = protocolliRegistratiConsole.get(i);
  279.                         if(modalitaScelte[i] == null &&
  280.                             protocolliSupportati.contains(protocolloName)) {
  281.                             modalitaScelte[i] = Costanti.CHECK_BOX_ENABLED;
  282.                         }
  283.                     }
  284.                 }


  285.                 // preparo i campi
  286.                 List<DataElement> dati = new ArrayList<>();

  287.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  288.                 utentiHelper.addUtentiToDati(dati, TipoOperazione.CHANGE, singlePdD,
  289.                         nomesu,pwsu,confpwsu,interfaceType,
  290.                         isServizi,isDiagnostica,isReportistica,isSistema,isMessaggi,isUtenti,isAuditing,isAccordiCooperazione,
  291.                         changepwd,modalitaScelte, isSoggettiAll, isServiziAll, user, scadenza, dataUltimoAggiornamentoPassword, oldScadenza,
  292.                         tipoModalitaConsoleGestione, idSoggettoConsoleGestione, tipoModalitaConsoleMonitoraggio, idSoggettoConsoleMonitoraggio,
  293.                         homePageMonitoraggio, intervalloTemporaleHomePageConsoleMonitoraggio);

  294.                 pd.setDati(dati);

  295.                 if(first &&
  296.                     !user.isConfigurazioneValidaAbilitazioni()) {
  297.                     if(!user.isConfigurazioneValidaSoggettiAbilitati()) {
  298.                         pd.setMessage(UtentiCostanti.LABEL_ABILITAZIONI_PUNTUALI_SOGGETTI_DEFINIZIONE_UPDATE_NOTE,MessageType.INFO);
  299.                     }
  300.                     else if(!user.isConfigurazioneValidaServiziAbilitati()) {
  301.                         pd.setMessage(UtentiCostanti.LABEL_ABILITAZIONI_PUNTUALI_SERVIZI_DEFINIZIONE_UPDATE_NOTE,MessageType.INFO);
  302.                     }
  303.                 }
  304.                
  305.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  306.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());

  307.             }

  308.             // Controlli sui campi immessi
  309.             boolean isOk = utentiHelper.utentiCheckData(TipoOperazione.CHANGE,singlePdD,oldProtocolliSupportati,oldHasOnlyPermessiUtenti);
  310.             if (!isOk) {

  311.                 // setto la barra del titolo

  312.                 ServletUtils.setPageDataTitle(pd,
  313.                         new Parameter(UtentiCostanti.LABEL_UTENTI, UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
  314.                         new Parameter(nomesu,null));

  315.                 // preparo i campi
  316.                 List<DataElement> dati = new ArrayList<>();

  317.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  318.                 utentiHelper.addUtentiToDati(dati, TipoOperazione.CHANGE, singlePdD,
  319.                         nomesu,pwsu,confpwsu,interfaceType,
  320.                         isServizi,isDiagnostica,isReportistica,isSistema,isMessaggi,isUtenti,isAuditing,isAccordiCooperazione,
  321.                         changepwd,modalitaScelte, isSoggettiAll, isServiziAll, user, scadenza, dataUltimoAggiornamentoPassword, oldScadenza,
  322.                         tipoModalitaConsoleGestione, idSoggettoConsoleGestione, tipoModalitaConsoleMonitoraggio, idSoggettoConsoleMonitoraggio,
  323.                         homePageMonitoraggio, intervalloTemporaleHomePageConsoleMonitoraggio);

  324.                 pd.setDati(dati);

  325.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  326.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
  327.             }
  328.            

  329.             // Se singleSuServizi != null, controllo che il superutente non sia
  330.             // quello che sto modificando
  331.             // Se singleSu = null, controllo se l'utente aveva permessi S
  332.             List<String> usersWithS = utentiCore.getUsersWithType(Permessi.SERVIZI.toString());

  333.             String[] uws = null;
  334.             if (usersWithS != null && !usersWithS.isEmpty()) {
  335.                 List<String> usersWithPermessoS = new ArrayList<>();
  336.                 Iterator<String> itUWS = usersWithS.iterator();
  337.                 while (itUWS.hasNext()) {
  338.                     String singleUWS = itUWS.next();
  339.                     if (!nomesu.equals(singleUWS)) {
  340.                         usersWithPermessoS.add(singleUWS);
  341.                     }
  342.                 }
  343.                 if(!usersWithPermessoS.isEmpty()){
  344.                     uws = new String[1];
  345.                     uws = usersWithPermessoS.toArray(uws);
  346.                 }
  347.             }

  348.             // Se singleSuAccordi = null, controllo se l'utente aveva permessi P
  349.             List<String> usersWithP = utentiCore.getUsersWithType(Permessi.ACCORDI_COOPERAZIONE.toString());

  350.             String[] uwp = null;
  351.             if (usersWithP != null && !usersWithP.isEmpty()) {
  352.                 List<String> usersWithPermessoP = new ArrayList<>();
  353.                 Iterator<String> itUWS = usersWithP.iterator();
  354.                 while (itUWS.hasNext()) {
  355.                     String singleUWP = itUWS.next();
  356.                     if (!nomesu.equals(singleUWP)) {
  357.                         usersWithPermessoP.add(singleUWP);
  358.                     }
  359.                 }
  360.                 if(!usersWithPermessoP.isEmpty()){
  361.                     uwp = new String[1];
  362.                     uwp = usersWithPermessoP.toArray(uwp);
  363.                 }
  364.             }

  365.             // check input relativo ai servizi
  366.             String msgServizi = "";
  367.             boolean paginaSuServizi = false;

  368.             if(!utentiCore.isVisioneOggettiGlobaleIndipendenteUtente()) {
  369.                 if (singleSuServizi != null) {
  370.                     if (nomesu.equals(singleSuServizi)) {
  371.                         paginaSuServizi = true;
  372.                         msgServizi = "Scegliere un utente con il permesso 'Servizi' che non sia quello che sto modificando<br>";
  373.                     }
  374.                 } else {
  375.                     if ((isServizi == null || !isServizi.equals("yes")) &&
  376.                             usersWithS.contains(nomesu)) {
  377.                         if(uws==null){
  378.    
  379.                             List<DataElement> dati = new ArrayList<>();
  380.    
  381.                             dati.add(ServletUtils.getDataElementForEditModeFinished());
  382.    
  383.                             pd.disableEditMode();
  384.    
  385.                             pd.setDati(dati);
  386.    
  387.                             // Preparo il menu
  388.                             pd.setMessage("Non è possibile eliminare il permesso 'Servizi', poichè non esistono altri utenti con tale permesso");
  389.    
  390.                             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  391.    
  392.                             return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());  
  393.    
  394.                         }else{
  395.                             paginaSuServizi = true;
  396.                             msgServizi = "Scegliere un utente a cui verranno assegnati tutti gli oggetti appartenenti all'utente '"+nomesu+
  397.                                     "'.<br>L'operazione si è resa necessaria in seguito all'eliminazione del permesso di gestione 'Servizi' (S).<br>";
  398.                         }
  399.                     }
  400.                 }
  401.             }

  402.             String msgAccordi = "";
  403.             boolean paginaSuAccordi = false;
  404.             boolean checkOggettiAccordi = false;
  405.             if(!utentiCore.isVisioneOggettiGlobaleIndipendenteUtente()) {
  406.                 if (singleSuAccordiCooperazione != null) {
  407.                     if (nomesu.equals(singleSuAccordiCooperazione)) {
  408.                         paginaSuAccordi = true;
  409.                         msgAccordi = "Scegliere un utente con il permesso 'Accordi Cooperazione' che non sia quello che sto modificando<br>";
  410.                     }
  411.                 } else {
  412.                     if ((isAccordiCooperazione == null || !isAccordiCooperazione.equals("yes")) &&
  413.                             usersWithP.contains(nomesu)) {
  414.                         if(uwp==null){
  415.                             // controllare che l'utente possieda degli oggetti
  416.                             checkOggettiAccordi = true;
  417.                         }else{
  418.                             paginaSuAccordi = true;
  419.                             msgAccordi = (!msgServizi.contains("Scegliere un utente")
  420.                                     ? ("Scegliere un utente a cui verranno assegnati tutti gli oggetti appartenenti all'utente '"+nomesu+   "'.<br>") : "")
  421.                                     +"L'operazione si è resa necessaria in seguito all'eliminazione del permesso di gestione 'Accordi Cooperazione' (P).<br>";
  422.                         }
  423.                     }
  424.                 }
  425.             }


  426.             boolean paginaSu = paginaSuAccordi || paginaSuServizi;
  427.             // CHECK
  428.             String msg = msgServizi + msgAccordi;

  429.             // Se paginaSu = true, propongo una pagina in cui faccio scegliere
  430.             // un superutente con permessi S e/o P a cui assegnare gli oggetti
  431.             // dell'utente che sto modificando
  432.             // In caso contrario, modifico l'utente, assegnando gli eventuali
  433.             // oggetti a singleSu
  434.             if (paginaSu) {
  435.                 // Faccio scegliere il superutente a cui assegnare gli oggetti

  436.                 // Preparo il menu
  437.                 utentiHelper.makeMenu();

  438.                 // setto la barra del titolo

  439.                 ServletUtils.setPageDataTitle(pd,
  440.                         new Parameter(UtentiCostanti.LABEL_UTENTI, UtentiCostanti.SERVLET_NAME_UTENTI_LIST),
  441.                         new Parameter(nomesu,null));

  442.                 // preparo i campi
  443.                 List<DataElement> dati = new ArrayList<>();

  444.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  445.                 utentiHelper.addChangeUtenteInfoToDati(dati, nomesu, changepwd, pwsu, confpwsu, interfaceType,
  446.                         isServizi, isDiagnostica, isReportistica, isSistema, isMessaggi, isUtenti, isAuditing,isAccordiCooperazione,paginaSuServizi,
  447.                         uws, paginaSuAccordi, uwp,modalitaScelte, tipoModalitaConsoleGestione, idSoggettoConsoleGestione, tipoModalitaConsoleMonitoraggio, idSoggettoConsoleMonitoraggio,
  448.                         homePageMonitoraggio, intervalloTemporaleHomePageConsoleMonitoraggio);

  449.                 pd.setDati(dati);
  450.                 pd.setMessage(msg,Costanti.MESSAGE_TYPE_INFO);

  451.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  452.                 return ServletUtils.getStrutsForward(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE(),UtentiCostanti.STRUTS_FORWARD_INFO);    

  453.             } else {

  454.                 boolean secret = false;
  455.                 String secretPassword  = pwsu;
  456.                 String secretUser = nomesu;
  457.                 boolean secretAppId = false;
  458.                
  459.                 // Modifico l'utente
  460.                 PasswordVerifier passwordVerifier = utentiCore.getUtenzePasswordVerifier();
  461.                 if(utentiCore.isCheckPasswordExpire(passwordVerifier)) {
  462.                     user.setCheckLastUpdatePassword(ServletUtils.isCheckBoxEnabled(scadenza));
  463.                 } else {
  464.                     user.setCheckLastUpdatePassword(false);
  465.                 }
  466.                
  467.                 // Cripto la password
  468.                 boolean cpwd = ServletUtils.isCheckBoxEnabled(changepwd);
  469.                 if(cpwd && !"".equals(pwsu)){
  470.                     if(utentiCore.isUtenzePasswordEncryptEnabled()) {
  471.                         secret = true;
  472.                         pwsu = utentiCore.getUtenzePasswordManager().crypt(pwsu);
  473.                     }
  474.                    
  475.                     user.setLastUpdatePassword(new Date());
  476.                     user.setPassword(pwsu);
  477.                 }

  478.                 // Modifico i dati dell'utente
  479.                 user.setInterfaceType(InterfaceType.valueOf(tipoGui));
  480.                 user.setProtocolloSelezionatoPddConsole(!tipoModalitaConsoleGestione.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? tipoModalitaConsoleGestione : null);
  481.                 user.setSoggettoSelezionatoPddConsole(!idSoggettoConsoleGestione.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? idSoggettoConsoleGestione : null);
  482.                 user.setProtocolloSelezionatoPddMonitor(!tipoModalitaConsoleMonitoraggio.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? tipoModalitaConsoleMonitoraggio : null);
  483.                 user.setSoggettoSelezionatoPddMonitor(!idSoggettoConsoleMonitoraggio.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? idSoggettoConsoleMonitoraggio : null);
  484.                    
  485.                 String puString = "";

  486.                 if (isServizi != null && ServletUtils.isCheckBoxEnabled(isServizi))
  487.                     puString = Permessi.SERVIZI.toString();

  488.                 if (isDiagnostica != null && ServletUtils.isCheckBoxEnabled(isDiagnostica)) {
  489.                     if (puString.equals(""))
  490.                         puString = Permessi.DIAGNOSTICA.toString();
  491.                     else
  492.                         puString = puString+","+Permessi.DIAGNOSTICA.toString();
  493.                 }
  494.                
  495.                 if (isReportistica != null && ServletUtils.isCheckBoxEnabled(isReportistica)) {
  496.                     if (puString.equals(""))
  497.                         puString = Permessi.REPORTISTICA.toString();
  498.                     else
  499.                         puString = puString+","+Permessi.REPORTISTICA.toString();
  500.                 }

  501.                 if (isSistema != null && ServletUtils.isCheckBoxEnabled(isSistema)) {
  502.                     if (puString.equals(""))
  503.                         puString = Permessi.SISTEMA.toString();
  504.                     else
  505.                         puString = puString+","+Permessi.SISTEMA.toString();
  506.                 }

  507.                 if (isMessaggi != null && ServletUtils.isCheckBoxEnabled(isMessaggi)) {
  508.                     if (puString.equals(""))
  509.                         puString = Permessi.CODE_MESSAGGI.toString();
  510.                     else
  511.                         puString = puString+","+Permessi.CODE_MESSAGGI.toString();
  512.                 }

  513.                 if (isUtenti != null && ServletUtils.isCheckBoxEnabled(isUtenti)) {
  514.                     if (puString.equals(""))
  515.                         puString = Permessi.UTENTI.toString();
  516.                     else
  517.                         puString = puString+","+Permessi.UTENTI.toString();
  518.                 }

  519.                 if (isAuditing != null && ServletUtils.isCheckBoxEnabled(isAuditing)) {
  520.                     if (puString.equals(""))
  521.                         puString = Permessi.AUDITING.toString();
  522.                     else
  523.                         puString = puString+","+Permessi.AUDITING.toString();
  524.                 }
  525.                 if (isAccordiCooperazione != null && ServletUtils.isCheckBoxEnabled(isAccordiCooperazione)) {
  526.                     if (puString.equals(""))
  527.                         puString = Permessi.ACCORDI_COOPERAZIONE.toString();
  528.                     else
  529.                         puString = puString+","+Permessi.ACCORDI_COOPERAZIONE.toString();
  530.                 }

  531.                 user.setPermessi(PermessiUtente.toPermessiUtente(puString));
  532.                
  533.                 user.clearProtocolliSupportati();
  534.                 if(user.hasOnlyPermessiUtenti()) {
  535.                     user.setProtocolloSelezionatoPddConsole(null);
  536.                     user.setInterfaceType(InterfaceType.STANDARD);
  537.                 }
  538.                 else {
  539.                     // modalita gateway
  540.                     for (int i = 0; i < protocolliRegistratiConsole.size() ; i++) {
  541.                         String protocolloName = protocolliRegistratiConsole.get(i);
  542.                         if(ServletUtils.isCheckBoxEnabled(modalitaScelte[i])) {
  543.                             user.addProtocolloSupportato(protocolloName);
  544.                         }
  545.                     }
  546.                     if(user.getProtocolloSelezionatoPddConsole() != null &&
  547.                         !user.getProtocolliSupportati().contains(user.getProtocolloSelezionatoPddConsole())) {
  548.                         user.setProtocolloSelezionatoPddConsole(null);
  549.                     }
  550.                 }
  551.                
  552.                 if (ServletUtils.isCheckBoxEnabled(isDiagnostica) || ServletUtils.isCheckBoxEnabled(isReportistica)) {
  553.                     user.setPermitAllSoggetti(ServletUtils.isCheckBoxEnabled(isSoggettiAll));
  554.                     // se seleziono il permitall devo cancellare i soggetti selezionati
  555.                     if(user.isPermitAllSoggetti() &&
  556.                         user.getSoggetti() != null && !user.getSoggetti().isEmpty()) {
  557.                         user.getSoggetti().clear();
  558.                     }
  559.                     user.setPermitAllServizi(ServletUtils.isCheckBoxEnabled(isServiziAll));
  560.                     // se seleziono il permitall devo cancellare i servizi selezionati
  561.                     if(user.isPermitAllServizi() &&
  562.                         user.getServizi() != null && !user.getServizi().isEmpty()) {
  563.                         user.getServizi().clear();
  564.                     }
  565.                    
  566.                     // salvataggio homepage e grafico della console di monitoraggio
  567.                     boolean homePageFound = false;
  568.                     for (Stato stato : user.getStati()) {
  569.                         if(stato.getOggetto().equals(UtentiCostanti.OGGETTO_STATO_UTENTE_HOME_PAGE)) {
  570.                             stato.setStato(utentiHelper.incapsulaValoreStato(homePageMonitoraggio));
  571.                             homePageFound = true;
  572.                             break;
  573.                         }
  574.                     }
  575.                    
  576.                     if(!homePageFound) {
  577.                         Stato statoHomePage = new Stato();
  578.                         statoHomePage.setOggetto(UtentiCostanti.OGGETTO_STATO_UTENTE_HOME_PAGE);
  579.                         statoHomePage.setStato(utentiHelper.incapsulaValoreStato(homePageMonitoraggio));
  580.                        
  581.                         user.getStati().add(statoHomePage);
  582.                     }
  583.                    
  584.                     boolean statoIntevalloTemporaleHomePageFound = false;
  585.                    
  586.                     for (Stato stato : user.getStati()) {
  587.                         if(stato.getOggetto().equals(UtentiCostanti.OGGETTO_STATO_UTENTE_INTERVALLO_TEMPORALE_HOME_PAGE)) {
  588.                             stato.setStato(utentiHelper.incapsulaValoreStato(intervalloTemporaleHomePageConsoleMonitoraggio));
  589.                             statoIntevalloTemporaleHomePageFound = true;
  590.                             break;
  591.                         }
  592.                     }
  593.                    
  594.                     if(!statoIntevalloTemporaleHomePageFound) {
  595.                         Stato statoIntevalloTemporaleHomePage = new Stato();
  596.                         statoIntevalloTemporaleHomePage.setOggetto(UtentiCostanti.OGGETTO_STATO_UTENTE_INTERVALLO_TEMPORALE_HOME_PAGE);
  597.                         statoIntevalloTemporaleHomePage.setStato(utentiHelper.incapsulaValoreStato(intervalloTemporaleHomePageConsoleMonitoraggio));
  598.                        
  599.                         user.getStati().add(statoIntevalloTemporaleHomePage);
  600.                     }
  601.                 }

  602.                 // Se singleSu != null, devo recuperare gli oggetti
  603.                 // dell'utente ed assegnarli a singleSu
  604.                 List<Object> oggetti = new ArrayList<>();
  605.                 List<Integer> tipoModifica = new ArrayList<>();
  606.                 if(soggettiCore.isRegistroServiziLocale() &&
  607.                     singleSuServizi != null && !singleSuServizi.equals("")) {
  608.                     UserObjects results = utentiCore.updateUserServizi(nomesu, singleSuServizi);
  609.                     ControlStationCore.logInfo("Modificata utenza ["+nomesu+"]->["+singleSuServizi+"] per permesso relativo ai servizi (L'utenza '"+nomesu+"' verrà modificata per non avere più la gestione dei servizi). Risultati modifica: "+results.toString(false));
  610.                 }

  611.                 if(soggettiCore.isRegistroServiziLocale() &&
  612.                     (singleSuAccordiCooperazione != null && !singleSuAccordiCooperazione.equals("")) || checkOggettiAccordi) {
  613.                        
  614.                     if(checkOggettiAccordi){
  615.                         UserObjects results = utentiCore.countUserCooperazione(nomesu);
  616.                         if(results.accordi_accoperazione>0 || results.accordi_parte_comune>0) {
  617.                             List<DataElement> dati = new ArrayList<>();
  618.                            
  619.                             dati.add(ServletUtils.getDataElementForEditModeFinished());

  620.                             pd.disableEditMode();

  621.                             pd.setDati(dati);

  622.                             // Preparo il menu
  623.                             pd.setMessage("Non è possibile eliminare il permesso 'Accordi Cooperazione', poichè non esistono altri utenti con tale permesso");

  624.                             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  625.                             return ServletUtils.getStrutsForwardGeneralError(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
  626.                         }
  627.                     }
  628.                    
  629.                     UserObjects results = utentiCore.updateUserCooperazione(nomesu, singleSuAccordiCooperazione);
  630.                     ControlStationCore.logInfo("Modificata utenza ["+nomesu+"]->["+singleSuAccordiCooperazione+"] per permesso relativo agli accordi di cooperazione (L'utenza '"+nomesu+"' verrà modificata per non avere più la gestione degli accordi di cooperazione). Risultati modifica: "+results.toString(true));
  631.                 }

  632.                 // Alla fine, modifico l'utente
  633.                 oggetti.add(user);
  634.                 tipoModifica.add(org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation.PERFORM_OPERATION_UPDATE);
  635.                 int[] operationTypes = new int[tipoModifica.size()];
  636.                 for (int cO = 0; cO < tipoModifica.size(); cO++)
  637.                     operationTypes[cO] = tipoModifica.get(cO);
  638.                 utentiCore.performOperationMultiTypes(userLogin, utentiHelper.smista(), operationTypes, oggetti.toArray());



  639.                 // Se sto modificando l'utente che è anche quello connesso
  640.                 if(userLogin.equals(user.getLogin())){

  641.                     if(utentiCore.isUtenzeModificaProfiloUtenteDaFormAggiornaSessione()) {
  642.                         LoginSessionUtilities.cleanLoginParametersSession(request, session);

  643.                         ServletUtils.setUserIntoSession(request, session, user); // update in sessione.
  644. //                      utentiHelper.setTipoInterfaccia(user.getInterfaceType()); // update InterfaceType
  645.                         LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userLogin);
  646.                     } else {
  647.                         ServletUtils.setUserIntoSession(request, session, user); // update in sessione.
  648.                     }
  649.                 }

  650.                 boolean isLoggedUser = userLogin.equals(user.getLogin());
  651.                
  652.                 // Messaggio 'Please Copy'
  653.                 if(!isLoggedUser && secret) {
  654.                     utentiHelper.setSecretPleaseCopy(secretPassword, secretUser, secretAppId, ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC, OggettoDialogEnum.UTENTE, nomesu);
  655.                 }

  656.                 // Se ho modificato l'utente loggato non faccio caricare la lista, degli utente ma una
  657.                 // pagina di info che indica che l'utente e' stato modificato con successo
  658.                 // MOTIVO: Viene effettuato il refresh della colonna a sinistra, se per caso sono cambiati i diritti
  659.                 if (isLoggedUser){

  660.                     // Reinit general data per aggiornare lo stato della barra dell'header a dx.
  661.                     gd = generalHelper.initGeneralData(request);
  662.                    
  663.                     utentiHelper.makeMenu();

  664.                     pd.setMessage("Utente '"+userLogin+"' modificato con successo", Costanti.MESSAGE_TYPE_INFO);
  665.                    
  666.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  667.                     return ServletUtils.getStrutsForward(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE(),UtentiCostanti.STRUTS_FORWARD_PERMESSI_OK);

  668.                 } else {

  669.                     if(!user.isConfigurazioneValidaSoggettiAbilitati()) {
  670.                         pd.setMessage(UtentiCostanti.LABEL_ABILITAZIONI_PUNTUALI_SOGGETTI_DEFINIZIONE_UPDATE_NOTE, MessageType.INFO);
  671.                     }
  672.                     else if(!user.isConfigurazioneValidaServiziAbilitati()) {
  673.                         pd.setMessage(UtentiCostanti.LABEL_ABILITAZIONI_PUNTUALI_SERVIZI_DEFINIZIONE_UPDATE_NOTE, MessageType.INFO);
  674.                     }
  675.                    
  676.                     // Preparo la lista
  677.                     int idLista = Liste.SU;

  678.                     ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session,ConsoleSearch.class);

  679.                     ricerca = utentiHelper.checkSearchParameters(idLista, ricerca);

  680.                     List<User> lista = utentiCore.userList(ricerca);

  681.                     utentiHelper.prepareUtentiList(ricerca, lista, singlePdD);

  682.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  683.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
  684.                 }
  685.             }
  686.         } catch (Exception e) {
  687.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  688.                     UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
  689.         }
  690.     }
  691. }