PorteApplicativeServizioApplicativoAdd.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.pa;

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

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

  27. import org.apache.struts.action.Action;
  28. import org.apache.struts.action.ActionForm;
  29. import org.apache.struts.action.ActionForward;
  30. import org.apache.struts.action.ActionMapping;
  31. import org.openspcoop2.core.commons.Liste;
  32. import org.openspcoop2.core.config.PortaApplicativa;
  33. import org.openspcoop2.core.config.PortaApplicativaAzione;
  34. import org.openspcoop2.core.config.PortaApplicativaServizio;
  35. import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
  36. import org.openspcoop2.core.config.PortaApplicativaSoggettoVirtuale;
  37. import org.openspcoop2.core.config.ServizioApplicativo;
  38. import org.openspcoop2.core.config.Soggetto;
  39. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  40. import org.openspcoop2.core.config.driver.db.IDServizioApplicativoDB;
  41. import org.openspcoop2.core.id.IDServizio;
  42. import org.openspcoop2.core.id.IDSoggetto;
  43. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  44. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  45. import org.openspcoop2.core.registry.beans.AzioneSintetica;
  46. import org.openspcoop2.core.registry.beans.OperationSintetica;
  47. import org.openspcoop2.core.registry.beans.PortTypeSintetico;
  48. import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
  49. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  50. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  51. import org.openspcoop2.core.registry.driver.IDServizioFactory;
  52. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  53. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  54. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  55. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  56. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  57. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  58. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiHelper;
  59. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  60. import org.openspcoop2.web.lib.mvc.Costanti;
  61. import org.openspcoop2.web.lib.mvc.DataElement;
  62. import org.openspcoop2.web.lib.mvc.ForwardParams;
  63. import org.openspcoop2.web.lib.mvc.GeneralData;
  64. import org.openspcoop2.web.lib.mvc.PageData;
  65. import org.openspcoop2.web.lib.mvc.Parameter;
  66. import org.openspcoop2.web.lib.mvc.ServletUtils;
  67. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  68. /**
  69.  * porteAppServizioApplicativoAdd
  70.  *
  71.  * @author Andrea Poli (apoli@link.it)
  72.  * @author Stefano Corallo (corallo@link.it)
  73.  * @author Sandra Giangrandi (sandra@link.it)
  74.  * @author $Author$
  75.  * @version $Rev$, $Date$
  76.  *
  77.  */
  78. public final class PorteApplicativeServizioApplicativoAdd extends Action {

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

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

  82.         // Inizializzo PageData
  83.         PageData pd = new PageData();

  84.         GeneralHelper generalHelper = new GeneralHelper(session);

  85.         // Inizializzo GeneralData
  86.         GeneralData gd = generalHelper.initGeneralData(request);

  87.         try {
  88.             PorteApplicativeHelper porteApplicativeHelper = new PorteApplicativeHelper(request, pd, session);
  89.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte applicative
  90.             Integer parentPA = ServletUtils.getIntegerAttributeFromSession(PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT, session, request);
  91.             if(parentPA == null) parentPA = PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_NONE;
  92.            
  93.             String idPorta = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID);
  94.             int idInt = Integer.parseInt(idPorta);
  95.             String idsogg = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO);
  96.             int soggInt = Integer.parseInt(idsogg);
  97.             String servizioApplicativo = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO);
  98.             String idAsps = porteApplicativeHelper.getParameter(PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_ASPS);
  99.             if(idAsps == null)
  100.                 idAsps = "";
  101.             PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore();
  102.             SoggettiCore soggettiCore = new SoggettiCore(porteApplicativeCore);
  103.             ServiziApplicativiCore saCore = new ServiziApplicativiCore(porteApplicativeCore);
  104.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(porteApplicativeCore);
  105.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(porteApplicativeCore);

  106.             // Preparo il menu
  107.             porteApplicativeHelper.makeMenu();

  108.             // Prendo nome, tipo e pdd del soggetto
  109.             String tipoSoggettoProprietario = null;
  110.             String nomeSoggettoProprietario = null;
  111.             if(porteApplicativeCore.isRegistroServiziLocale()){
  112.                 org.openspcoop2.core.registry.Soggetto soggetto = soggettiCore.getSoggettoRegistro(soggInt);
  113.                 tipoSoggettoProprietario = soggetto.getTipo();
  114.                 nomeSoggettoProprietario = soggetto.getNome();
  115.             }
  116.             else{
  117.                 org.openspcoop2.core.config.Soggetto soggetto = soggettiCore.getSoggetto(soggInt);
  118.                 tipoSoggettoProprietario = soggetto.getTipo();
  119.                 nomeSoggettoProprietario = soggetto.getNome();
  120.             }

  121.             // Prendo nome della porta applicativa
  122.             PortaApplicativa pa = porteApplicativeCore.getPortaApplicativa(idInt);
  123.             if(pa==null) {
  124.                 throw new Exception("PortaApplicativa con id '"+idInt+"' non trovata");
  125.             }
  126.             String nomePorta = pa.getNome();
  127.             PortaApplicativaServizio pas = pa.getServizio();
  128.             int idServizio = -1;
  129.             String tipoServizio = null;
  130.             String nomeServizio = null;
  131.             Integer versioneServizio = null;
  132.             if (pas != null) {
  133.                 idServizio = pas.getId().intValue();
  134.                 tipoServizio = pas.getTipo();
  135.                 nomeServizio = pas.getNome();
  136.                 versioneServizio = pas.getVersione();
  137.             }
  138.             PortaApplicativaSoggettoVirtuale pasv = pa.getSoggettoVirtuale();
  139.             long idSoggettoVirtuale = -1;
  140.             String tipoSoggettoVirtuale = null;
  141.             String nomeSoggettoVirtuale = null;
  142.             if (pasv != null) {
  143.                 idSoggettoVirtuale = pasv.getId();
  144.                 tipoSoggettoVirtuale = pasv.getTipo();
  145.                 nomeSoggettoVirtuale = pasv.getNome();
  146.             }
  147.             PortaApplicativaAzione paa = pa.getAzione();
  148.             String nomeAzione = "";
  149.             if (paa != null)
  150.                 nomeAzione = paa.getNome();
  151.            
  152.             boolean behaviourDefined = false;
  153.             if(pa!=null && pa.getBehaviour()!=null && pa.getBehaviour().getNome()!=null && !"".equals(pa.getBehaviour().getNome())) {
  154.                 behaviourDefined = true;
  155.             }

  156.             // Recupero eventuale idServizio mancante
  157.             if(porteApplicativeCore.isRegistroServiziLocale()){
  158.                 if (idServizio <= 0) {
  159.                     long idSoggettoServizio = -1;
  160.                     if (idSoggettoVirtuale > 0) {
  161.                         idSoggettoServizio = idSoggettoVirtuale;
  162.                     } else if (tipoSoggettoVirtuale != null && (!("".equals(tipoSoggettoVirtuale))) && nomeSoggettoVirtuale != null && (!("".equals(nomeSoggettoVirtuale)))) {
  163.                         idSoggettoServizio = soggettiCore.getIdSoggetto(nomeSoggettoVirtuale, tipoSoggettoVirtuale);
  164.                     } else {
  165.                         idSoggettoServizio = soggInt;
  166.                     }
  167.                     Soggetto soggServ = soggettiCore.getSoggetto(idSoggettoServizio);
  168.                     idServizio = (int) apsCore.getIdAccordoServizioParteSpecifica(nomeServizio, tipoServizio, versioneServizio, soggServ.getNome(), soggServ.getTipo());
  169.                 }
  170.             }
  171.            
  172.             List<Parameter> lstParam = porteApplicativeHelper.getTitoloPA(parentPA, idsogg, idAsps);
  173.            
  174.             String labelPerPorta = null;
  175.             if(parentPA!=null && (parentPA.intValue() == PorteApplicativeCostanti.ATTRIBUTO_PORTE_APPLICATIVE_PARENT_CONFIGURAZIONE)) {
  176.                 labelPerPorta = porteApplicativeCore.getLabelRegolaMappingErogazionePortaApplicativa(
  177.                         PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_CONFIG_DI,
  178.                         PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_CONFIG,
  179.                         pa);
  180.             }
  181.             else {
  182.                 labelPerPorta = PorteApplicativeCostanti.LABEL_PARAMETRO_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_CONFIG_DI+nomePorta;
  183.             }
  184.            
  185.             lstParam.add(new Parameter(labelPerPorta,
  186.                     PorteApplicativeCostanti.SERVLET_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO_LIST,
  187.                     new Parameter( PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID, idPorta),
  188.                     new Parameter( PorteApplicativeCostanti.PARAMETRO_PORTE_APPLICATIVE_ID_SOGGETTO, idsogg)
  189.                     ));
  190.             lstParam.add(ServletUtils.getParameterAggiungi());
  191.            
  192.             // Se servizioApplicativohid = null, devo visualizzare la pagina per
  193.             // l'inserimento dati
  194.             if (porteApplicativeHelper.isEditModeInProgress()) {
  195.                
  196.                 // setto la barra del titolo
  197.                 ServletUtils.setPageDataTitle(pd, lstParam);

  198.                 // preparo i campi
  199.                 List<DataElement> dati = new ArrayList<>();
  200.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  201.                 // Controllo vincolo profilo_collaborazione
  202.                 boolean isProfiloOneWay = true;

  203.                 AccordoServizioParteSpecifica servSp = null;
  204.                 if(porteApplicativeCore.isRegistroServiziLocale()){
  205.                     servSp = apsCore.getAccordoServizioParteSpecifica(idServizio);
  206.                     if(servSp==null) {
  207.                         throw new Exception("AccordoServizioParteSpecifica con id '"+idServizio+"' non trovato");
  208.                     }
  209.                 }else{
  210.                     IDSoggetto soggettoErogatoreServizio = null;
  211.                     if(pa.getSoggettoVirtuale()!=null){
  212.                         soggettoErogatoreServizio = new IDSoggetto(pa.getSoggettoVirtuale().getTipo(), pa.getSoggettoVirtuale().getNome());
  213.                     }else{
  214.                         soggettoErogatoreServizio = new IDSoggetto(tipoSoggettoProprietario,nomeSoggettoProprietario);
  215.                     }
  216.                     IDServizio idServ = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio,
  217.                             soggettoErogatoreServizio,
  218.                             versioneServizio);
  219.                     try{
  220.                         servSp = apsCore.getServizio(idServ);
  221.                     }catch(DriverRegistroServiziNotFound dNot){
  222.                         // ignore
  223.                     }
  224.                     if(servSp==null) {
  225.                         throw new Exception("AccordoServizioParteSpecifica con id '"+idServ+"' non trovato");
  226.                     }
  227.                 }
  228.                 AccordoServizioParteComuneSintetico as = null;
  229.                 if(porteApplicativeCore.isRegistroServiziLocale()){
  230.                     int idAcc = servSp.getIdAccordo().intValue();
  231.                     as = apcCore.getAccordoServizioSintetico(idAcc);
  232.                 }
  233.                 else{
  234.                     as = apcCore.getAccordoServizioSintetico(IDAccordoFactory.getInstance().getIDAccordoFromUri(servSp.getAccordoServizioParteComune()));
  235.                 }
  236.                 String nomeAccordo = as.getNome();
  237.                 // recupero profilo collaborazione accordo
  238.                 String profiloCollaborazioneAccordo = as.getProfiloCollaborazione().toString();
  239.                 if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  240.                     profiloCollaborazioneAccordo = "oneway";
  241.                 } else if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.SINCRONO.getValue())) {
  242.                     profiloCollaborazioneAccordo = "sincrono";
  243.                 } else if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ASINCRONO_SIMMETRICO.getValue())) {
  244.                     profiloCollaborazioneAccordo = "asincronoSimmetrico";
  245.                 } else if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.getValue())) {
  246.                     profiloCollaborazioneAccordo = "asincronoAsimmetrico";
  247.                 }

  248.                 // recupero profilo collaborazione azione se l'azione e'
  249.                 // specificata e il profilo azione e' ridefinito
  250.                 String profiloCollaborazioneAzione = "";
  251.                 if (nomeAzione != null && !nomeAzione.equals("")) {
  252.                     if(servSp.getPortType()!=null){
  253.                         for (PortTypeSintetico pt : as.getPortType()) {
  254.                             if(pt.getNome().equals(servSp.getPortType())){
  255.                                 for (OperationSintetica op : pt.getAzione()) {
  256.                                     if(op.getNome().equals(nomeAzione)){
  257.                                         if(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO.equals(op.getProfAzione())){
  258.                                             if(op.getProfiloCollaborazione()!=null)
  259.                                                 profiloCollaborazioneAzione = op.getProfiloCollaborazione().toString();
  260.                                         }
  261.                                         else{
  262.                                             if(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO.equals(pt.getProfiloPT())){
  263.                                                 if(pt.getProfiloCollaborazione()!=null)
  264.                                                     profiloCollaborazioneAzione = pt.getProfiloCollaborazione().toString();
  265.                                             }
  266.                                         }
  267.                                     }
  268.                                 }
  269.                             }
  270.                         }
  271.                     }
  272.                     else{
  273.                         for (int i = 0; i < as.getAzione().size(); i++) {
  274.                             AzioneSintetica tmpAz = as.getAzione().get(i);
  275.                             if (tmpAz.getProfAzione().equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO)) {
  276.                                 if(tmpAz.getProfiloCollaborazione()!=null)
  277.                                     profiloCollaborazioneAzione = tmpAz.getProfiloCollaborazione().toString();
  278.                                 break;
  279.                             }
  280.                         }
  281.                     }
  282.                 }

  283.                 // Controllo se nomeAzione e' specificato allora e' possibile
  284.                 // che il profilo azione sia ridefinito
  285.                 // quindi devo controllare se e' diverso da oneway
  286.                 if (nomeAzione != null && !nomeAzione.equals("")) {
  287.                     // se e' diverso da oneway posso avere solo un azione
  288.                     if ( profiloCollaborazioneAzione != null && !profiloCollaborazioneAzione.equals("") ){
  289.                         if (!profiloCollaborazioneAzione.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  290.                             isProfiloOneWay = false;
  291.                         }
  292.                     }
  293.                     else{
  294.                         if (!profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  295.                             isProfiloOneWay = false;
  296.                         }  
  297.                     }
  298.                 } else {
  299.                     // non ho azione (o azione con profilo non ridefinito)
  300.                     // allora considero il profilo dell'accordo
  301.                     if (!profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  302.                         isProfiloOneWay = false;
  303.                     }
  304.                 }

  305.                 // recupero il numero di servizi applicativi gia associati alla
  306.                 // porta applicativa
  307.                 // se il profilo non e' oneway allora ne posso avere solo uno
  308.                 // associato
  309.                 int numSAassociati = 0;
  310.                 if (!isProfiloOneWay)
  311.                     numSAassociati = pa.sizeServizioApplicativoList();

  312.                 if (!isProfiloOneWay && numSAassociati > 0 && !behaviourDefined) {
  313.                     if ((nomeAzione != null && !nomeAzione.equals("")) && (profiloCollaborazioneAzione != null && !profiloCollaborazioneAzione.equals("")))
  314.                         pd.setMessage("&Egrave; possibile associare un solo Servizio Applicativo alla Porta Applicativa [" + nomePorta + "] in quanto l'Azione [" + nomeAzione + "] dell'Accordo di Servizio [" + nomeAccordo + "] e' stata definito con profilo [" + profiloCollaborazioneAzione + "]");
  315.                     else
  316.                         pd.setMessage("&Egrave; possibile associare un solo Servizio Applicativo alla Porta Applicativa [" + nomePorta + "] in quanto l'Accordo di Servizio [" + nomeAccordo + "] e' stato definito con profilo [" + profiloCollaborazioneAccordo + "]");

  317.                     pd.setInserisciBottoni(false);
  318.                     pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);

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

  320.                     return ServletUtils.getStrutsForwardEditModeCheckError(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO,
  321.                             ForwardParams.ADD());
  322.                 }

  323.                 String [] servizioApplicativoList = PorteApplicativeServizioApplicativoAdd.loadSAErogatori(pa, saCore, soggInt, true);
  324.                
  325.                 dati = porteApplicativeHelper.addPorteServizioApplicativoToDati(TipoOperazione.ADD,dati, "", servizioApplicativoList, pa.sizeServizioApplicativoList(),true,true, false);

  326.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.ADD, idPorta, idsogg, idPorta, idAsps,dati);

  327.                 pd.setDati(dati);

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

  329.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO,
  330.                         ForwardParams.ADD());
  331.             }

  332.             // Controlli sui campi immessi
  333.             boolean isOk = porteApplicativeHelper.porteAppServizioApplicativoCheckData(TipoOperazione.ADD);
  334.             if (!isOk) {
  335.                 // setto la barra del titolo
  336.                 ServletUtils.setPageDataTitle(pd, lstParam);

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

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

  340.                 // Controllo vincolo profilo_collaborazione
  341.                 @SuppressWarnings("unused")
  342.                 boolean isProfiloOneWay = true;

  343.                 AccordoServizioParteSpecifica servSp = null;
  344.                 if(porteApplicativeCore.isRegistroServiziLocale()){
  345.                     servSp = apsCore.getAccordoServizioParteSpecifica(idServizio);
  346.                     if(servSp==null) {
  347.                         throw new Exception("AccordoServizioParteSpecifica con id '"+idServizio+"' non trovato");
  348.                     }
  349.                 }else{
  350.                     IDSoggetto soggettoErogatoreServizio = null;
  351.                     if(pa.getSoggettoVirtuale()!=null){
  352.                         soggettoErogatoreServizio = new IDSoggetto(pa.getSoggettoVirtuale().getTipo(), pa.getSoggettoVirtuale().getNome());
  353.                     }else{
  354.                         soggettoErogatoreServizio = new IDSoggetto(tipoSoggettoProprietario,nomeSoggettoProprietario);
  355.                     }
  356.                     IDServizio idServ = IDServizioFactory.getInstance().getIDServizioFromValues(tipoServizio, nomeServizio,
  357.                             soggettoErogatoreServizio,
  358.                             versioneServizio);
  359.                     try{
  360.                         servSp = apsCore.getServizio(idServ);
  361.                     }catch(DriverRegistroServiziNotFound dNot){
  362.                         // ignore
  363.                     }
  364.                     if(servSp==null) {
  365.                         throw new Exception("AccordoServizioParteSpecifica con id '"+idServ+"' non trovato");
  366.                     }
  367.                 }
  368.                 AccordoServizioParteComuneSintetico as = null;
  369.                 if(porteApplicativeCore.isRegistroServiziLocale()){
  370.                     int idAcc = servSp.getIdAccordo().intValue();
  371.                     as = apcCore.getAccordoServizioSintetico(idAcc);
  372.                 }
  373.                 else{
  374.                     as = apcCore.getAccordoServizioSintetico(IDAccordoFactory.getInstance().getIDAccordoFromUri(servSp.getAccordoServizioParteComune()));
  375.                 }

  376.                 // recupero profilo collaborazione accordo
  377.                 String profiloCollaborazioneAccordo = as.getProfiloCollaborazione().toString();
  378.                 if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  379.                     profiloCollaborazioneAccordo = "oneway";
  380.                 } else if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.SINCRONO.getValue())) {
  381.                     profiloCollaborazioneAccordo = "sincrono";
  382.                 } else if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ASINCRONO_SIMMETRICO.getValue())) {
  383.                     profiloCollaborazioneAccordo = "asincronoSimmetrico";
  384.                 } else if (profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ASINCRONO_ASIMMETRICO.getValue())) {
  385.                     profiloCollaborazioneAccordo = "asincronoAsimmetrico";
  386.                 }

  387.                 // recupero profilo collaborazione azione se l'azione e'
  388.                 // specificata e il profilo azione e' ridefinito
  389.                 String profiloCollaborazioneAzione = "";
  390.                 if (nomeAzione != null && !nomeAzione.equals("")) {
  391.                     for (int i = 0; i < as.getAzione().size(); i++) {
  392.                         AzioneSintetica tmpAz = as.getAzione().get(i);
  393.                         if (tmpAz.getProfAzione().equals(CostantiRegistroServizi.PROFILO_AZIONE_RIDEFINITO)) {
  394.                             if(tmpAz.getProfiloCollaborazione()!=null){
  395.                                 profiloCollaborazioneAzione = tmpAz.getProfiloCollaborazione().toString();
  396.                             }
  397.                             break;
  398.                         }
  399.                     }
  400.                 }

  401.                 // Controllo se nomeAzione e' specificato allora e' possibile
  402.                 // che il profilo azione sia ridefinito
  403.                 // quindi devo controllare se e' diverso da oneway
  404.                 if (nomeAzione != null && !nomeAzione.equals("")) {
  405.                     // se e' diverso da oneway posso avere solo un azione
  406.                     if (profiloCollaborazioneAzione != null && !profiloCollaborazioneAzione.equals("") && !profiloCollaborazioneAzione.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  407.                         isProfiloOneWay = false;
  408.                     }
  409.                 } else {
  410.                     // non ho azione (o azione con profilo non ridefinito)
  411.                     // allora considero il profilo dell'accordo
  412.                     if (!profiloCollaborazioneAccordo.equals(CostantiRegistroServizi.ONEWAY.getValue())) {
  413.                         isProfiloOneWay = false;
  414.                     }
  415.                 }

  416.                 /** recupero il numero di servizi applicativi gia associati alla
  417.                 // porta applicativa
  418.                 // se il profilo non e' oneway allora ne posso avere solo uno
  419.                 // associato
  420.                 //              int numSAassociati = 0;
  421.                 //              if (!isProfiloOneWay)
  422.                 //                  numSAassociati = pa.sizeServizioApplicativoList();

  423.                 //              if (!isProfiloOneWay && numSAassociati > 0) {
  424.                 //                  if ((nomeAzione != null || !"".equals(nomeAzione))) {
  425.                 //                      if (profiloCollaborazioneAzione != null && !profiloCollaborazioneAzione.equals(""))
  426.                 //                          profiloCollaborazioneAzione = profiloCollaborazioneAccordo;
  427.                 //
  428.                 //                      pd.setMessage("&Egrave; possibile associare un solo Servizio Applicativo alla Porta Applicativa [" + nomePorta + "] in quanto l'Azione [" + nomeAzione + "] dell'Accordo di Servizio [" + nomeAccordo + "]e' stata definito con profilo [" + profiloCollaborazioneAzione + "]");
  429.                 //                  } else {
  430.                 //                      pd.setMessage("&Egrave; possibile associare un solo Servizio Applicativo alla Porta Applicativa [" + nomePorta + "] in quanto l'Accordo di Servizio e' stato definito con profilo [" + profiloCollaborazioneAccordo + "]");
  431.                 //                  }
  432.                 //                  
  433.                 //                  ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  434.                 //                  // Forward control to the specified success URI
  435.                 //                  return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO,
  436.                 //                          ForwardParams.ADD());
  437.                 //              }*/

  438.                 String[] servizioApplicativoList = PorteApplicativeServizioApplicativoAdd.loadSAErogatori(pa, saCore, soggInt, true);

  439.                 dati = porteApplicativeHelper.addPorteServizioApplicativoToDati(TipoOperazione.ADD, dati, servizioApplicativo, servizioApplicativoList, pa.sizeServizioApplicativoList(),true,true, false);

  440.                 dati = porteApplicativeHelper.addHiddenFieldsToDati(TipoOperazione.ADD, idPorta, idsogg, idPorta, idAsps, dati);

  441.                 pd.setDati(dati);

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

  443.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO,
  444.                         ForwardParams.ADD());
  445.             }

  446.             // Inserisco il servizioApplicativo nel db
  447.             PortaApplicativaServizioApplicativo sa = new PortaApplicativaServizioApplicativo();
  448.             sa.setNome(servizioApplicativo);
  449.             pa.addServizioApplicativo(sa);

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

  451.             porteApplicativeCore.performUpdateOperation(userLogin, porteApplicativeHelper.smista(), pa);

  452.             // Preparo la lista
  453.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);

  454.             int idLista = Liste.PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO;

  455.             ricerca = porteApplicativeHelper.checkSearchParameters(idLista, ricerca);

  456.             List<ServizioApplicativo> lista = porteApplicativeCore.porteAppServizioApplicativoList(Integer.parseInt(idPorta), ricerca);

  457.             porteApplicativeHelper.preparePorteAppServizioApplicativoList(nomePorta, ricerca, lista);

  458.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  459.             // Forward control to the specified success URI
  460.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO,
  461.                     ForwardParams.ADD());
  462.         } catch (Exception e) {
  463.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  464.                     PorteApplicativeCostanti.OBJECT_NAME_PORTE_APPLICATIVE_SERVIZIO_APPLICATIVO,
  465.                     ForwardParams.ADD());
  466.         }
  467.     }
  468.    
  469.    
  470.     public static String[] loadSAErogatori(PortaApplicativa pa, ServiziApplicativiCore saCore, long soggInt, boolean addSAEsistenti) throws DriverConfigurazioneException{
  471.         // recupero nome dei servizi applicativi gia associati alla
  472.         // porta applicativa
  473.         HashSet<String> saEsistenti = new HashSet<>();
  474.         if(addSAEsistenti){
  475.             for (int i = 0; i < pa.sizeServizioApplicativoList(); i++) {
  476.                 PortaApplicativaServizioApplicativo tmpSA = pa.getServizioApplicativo(i);
  477.                 saEsistenti.add(tmpSA.getNome());
  478.             }
  479.         }

  480.         // I servizi applicativi da visualizzare sono quelli che hanno
  481.         // -Integration Manager (getMessage abilitato)
  482.         // -connettore != disabilitato
  483.         List<IDServizioApplicativoDB> listaIdSA = saCore.getIdServiziApplicativiWithIdErogatore(soggInt, true, true);
  484.         return ServiziApplicativiHelper.toArray(listaIdSA);

  485.     }
  486. }