PorteDelegateTrasformazioniRispostaChange.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.pd;

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

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

  27. import org.apache.commons.lang.StringUtils;
  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.core.config.PortaDelegata;
  34. import org.openspcoop2.core.config.TrasformazioneRegola;
  35. import org.openspcoop2.core.config.TrasformazioneRegolaApplicabilitaRisposta;
  36. import org.openspcoop2.core.config.TrasformazioneRegolaRisposta;
  37. import org.openspcoop2.core.config.TrasformazioneSoapRisposta;
  38. import org.openspcoop2.core.config.Trasformazioni;
  39. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  40. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  41. import org.openspcoop2.message.constants.ServiceBinding;
  42. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  43. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  44. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  45. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  46. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCore;
  47. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  48. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  49. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  50. import org.openspcoop2.web.lib.mvc.DataElement;
  51. import org.openspcoop2.web.lib.mvc.ForwardParams;
  52. import org.openspcoop2.web.lib.mvc.GeneralData;
  53. import org.openspcoop2.web.lib.mvc.PageData;
  54. import org.openspcoop2.web.lib.mvc.Parameter;
  55. import org.openspcoop2.web.lib.mvc.ServletUtils;
  56. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  57. /**
  58.  * PorteDelegateTrasformazioniRispostaChange
  59.  *
  60.  * @author Giuliano Pintori (pintori@link.it)
  61.  * @author $Author$
  62.  * @version $Rev$, $Date$
  63.  *
  64.  */
  65. public class PorteDelegateTrasformazioniRispostaChange extends Action {

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

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

  69.         // Inizializzo PageData
  70.         PageData pd = new PageData();

  71.         GeneralHelper generalHelper = new GeneralHelper(session);
  72.        
  73.         String userLogin = ServletUtils.getUserLoginFromSession(session);

  74.         // Inizializzo GeneralData
  75.         GeneralData gd = generalHelper.initGeneralData(request);
  76.        
  77.         try {
  78.            
  79.             PorteDelegateHelper porteDelegateHelper = new PorteDelegateHelper(request, pd, session);
  80.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione delle porte delegate
  81.             Integer parentPD = ServletUtils.getIntegerAttributeFromSession(PorteDelegateCostanti.ATTRIBUTO_PORTE_DELEGATE_PARENT, session, request);
  82.             if(parentPD == null) parentPD = PorteDelegateCostanti.ATTRIBUTO_PORTE_DELEGATE_PARENT_NONE;
  83.             String id = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID);
  84.             long idInt = Long.parseLong(id);
  85.             String idsogg = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_SOGGETTO);
  86.            
  87.             String idAsps = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_ASPS);
  88.             if(idAsps == null)
  89.                 idAsps = "";
  90.            
  91.             String idFruizione = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_FRUIZIONE);
  92.             if(idFruizione == null)
  93.                 idFruizione = "";
  94.            
  95.            
  96.             String first = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_FIRST);
  97.             String nomeRisposta = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_NOME);
  98.            
  99.             String returnCode = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_APPLICABILITA_STATUS);
  100.            
  101.             String statusMin = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_APPLICABILITA_STATUS_MIN);
  102.             if(statusMin == null)
  103.                 statusMin = "";
  104.             String statusMax = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_APPLICABILITA_STATUS_MAX);
  105.             if(statusMax == null)
  106.                 statusMax = "";
  107.             String pattern = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_APPLICABILITA_PATTERN);
  108.             String contentType = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_APPLICABILITA_CT);
  109.            
  110.             String idTrasformazioneS = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_TRASFORMAZIONE);
  111.             long idTrasformazione = Long.parseLong(idTrasformazioneS);
  112.            
  113.             String idTrasformazioneRispostaS = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_TRASFORMAZIONE_RISPOSTA);
  114.             long idTrasformazioneRisposta = Long.parseLong(idTrasformazioneRispostaS);
  115.            
  116.             String trasformazioneContenutoRispostaAbilitatoS  = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_ENABLED);
  117.             boolean trasformazioneContenutoRispostaAbilitato = trasformazioneContenutoRispostaAbilitatoS != null ? ServletUtils.isCheckBoxEnabled(trasformazioneContenutoRispostaAbilitatoS) : false;
  118.             String trasformazioneContenutoRispostaTipoS = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TIPO);
  119.             org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione trasformazioneContenutoRispostaTipo =
  120.                     trasformazioneContenutoRispostaTipoS != null ? org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneContenutoRispostaTipoS) :
  121.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  122.             BinaryParameter trasformazioneContenutoRispostaTemplate = porteDelegateHelper.getBinaryParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TEMPLATE);
  123.             String trasformazioneContenutoRispostaTipoCheck = porteDelegateHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TIPO_CHECK);
  124.             String trasformazioneContenutoRispostaContentType = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_CONTENT_TYPE);
  125.             String trasformazioneContenutoRispostaReturnCode = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_RETURN_CODE);
  126.             String trasformazioneRispostaSoapAbilitatoS = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_TRANSFORMATION);
  127.             boolean trasformazioneRispostaSoapAbilitato = trasformazioneRispostaSoapAbilitatoS != null ? ServletUtils.isCheckBoxEnabled(trasformazioneRispostaSoapAbilitatoS) : false;
  128.             String trasformazioneRispostaSoapEnvelope = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE);
  129.             String trasformazioneRispostaSoapEnvelopeTipoS = porteDelegateHelper.getParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TIPO);
  130.             org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione trasformazioneRispostaSoapEnvelopeTipo =
  131.                     trasformazioneRispostaSoapEnvelopeTipoS != null ? org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(trasformazioneRispostaSoapEnvelopeTipoS) :
  132.                         org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  133.             BinaryParameter trasformazioneRispostaSoapEnvelopeTemplate = porteDelegateHelper.getBinaryParameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TEMPLATE);
  134.             String trasformazioneRispostaSoapEnvelopeTipoCheck = porteDelegateHelper.getParameter(CostantiControlStation.PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TIPO_CHECK);
  135.            
  136.             Parameter pId = new Parameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID, id);
  137.             Parameter pIdSoggetto = new Parameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_SOGGETTO, idsogg);
  138.             Parameter pIdAsps = new Parameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_ASPS, idAsps);
  139.             Parameter pIdFruizione = new Parameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_FRUIZIONE, idFruizione);
  140.            
  141.             PorteDelegateCore porteDelegateCore = new PorteDelegateCore();
  142.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(porteDelegateCore);
  143.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore(porteDelegateCore);
  144.             SoggettiCore soggettiCore = new SoggettiCore(porteDelegateCore);
  145.            
  146.             // Preparo il menu
  147.             porteDelegateHelper.makeMenu();

  148.             // Prendo nome della porta applicativa
  149.             PortaDelegata portaDelegata = porteDelegateCore.getPortaDelegata(idInt);
  150.             String nomePorta = portaDelegata.getNome();
  151.             String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(portaDelegata.getTipoSoggettoProprietario());
  152.            
  153.             AccordoServizioParteSpecifica asps = apsCore.getAccordoServizioParteSpecifica(Integer.parseInt(idAsps));
  154.             AccordoServizioParteComuneSintetico apc = apcCore.getAccordoServizioSintetico(asps.getIdAccordo());
  155.             ServiceBinding serviceBindingMessage = apcCore.toMessageServiceBinding(apc.getServiceBinding());
  156.            
  157.             Trasformazioni trasformazioni = portaDelegata.getTrasformazioni();
  158.             TrasformazioneRegola oldRegola = null;
  159.             TrasformazioneRegolaRisposta oldRisposta = null;
  160.             for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  161.                 if(reg.getId().longValue() == idTrasformazione) {
  162.                     oldRegola = reg;
  163.                     break;
  164.                 }
  165.             }
  166.             if(oldRegola==null) {
  167.                 throw new Exception("TrasformazioneRegola con id '"+idTrasformazione+"' non trovata");
  168.             }
  169.            
  170.             for (int j = 0; j < oldRegola.sizeRispostaList(); j++) {
  171.                 TrasformazioneRegolaRisposta risposta = oldRegola.getRisposta(j);
  172.                 if (risposta.getId().longValue() == idTrasformazioneRisposta) {
  173.                     oldRisposta = risposta;
  174.                     break;
  175.                 }
  176.             }
  177.             if(oldRisposta==null) {
  178.                 throw new Exception("TrasformazioneRegolaRisposta con id '"+idTrasformazioneRisposta+"' non trovata");
  179.             }
  180.            
  181.            
  182.             boolean trasformazioneContenutoRichiestaAbilitato = false;
  183.             boolean trasformazioneRichiestaRestAbilitato = false;
  184.             boolean trasformazioneRichiestaSoapAbilitato = false;
  185.             if(oldRegola.getRichiesta() != null) {
  186.                 trasformazioneContenutoRichiestaAbilitato = oldRegola.getRichiesta().getConversione();
  187.                 trasformazioneRichiestaRestAbilitato = oldRegola.getRichiesta().getTrasformazioneRest() != null;
  188.                 trasformazioneRichiestaSoapAbilitato = oldRegola.getRichiesta().getTrasformazioneSoap() != null;
  189.             }
  190.            
  191.             String nomeRispostaTitle = oldRisposta.getNome();
  192.             String nomeTrasformazione = oldRegola.getNome();
  193.             Parameter pIdTrasformazione = new Parameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_TRASFORMAZIONE, idTrasformazione+"");
  194.            
  195.             String postBackElementName = porteDelegateHelper.getPostBackElementName();
  196.            
  197.             if (postBackElementName != null) {
  198.                 if(postBackElementName.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_APPLICABILITA_STATUS)) {
  199.                     statusMin = "";
  200.                     statusMax = "";
  201.                 }
  202.                
  203.                 if(postBackElementName.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_ENABLED)) {
  204.                     trasformazioneContenutoRispostaTipo = org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  205.                     trasformazioneContenutoRispostaContentType = "";
  206.                     trasformazioneRispostaSoapAbilitato = false;
  207.                     trasformazioneRispostaSoapEnvelope = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_DISABILITATO;
  208.                     trasformazioneRispostaSoapEnvelopeTipo = org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  209.                    
  210.                     porteDelegateHelper.deleteBinaryParameters(trasformazioneContenutoRispostaTemplate, trasformazioneRispostaSoapEnvelopeTemplate);
  211.                 }
  212.                
  213.                 if(postBackElementName.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_CONVERSIONE_TIPO)) {
  214.                     trasformazioneContenutoRispostaTipoCheck = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TIPO_CHECK_UPDATE_TIPO;
  215.                     porteDelegateHelper.deleteBinaryParameters(trasformazioneContenutoRispostaTemplate);
  216.                 }
  217.                
  218.                 if(postBackElementName.equals(trasformazioneContenutoRispostaTemplate.getName()) &&
  219.                     StringUtils.isEmpty(trasformazioneContenutoRispostaTipoCheck)) {
  220.                     trasformazioneContenutoRispostaTipoCheck = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TIPO_CHECK_UPDATE_FILE;
  221.                 }
  222.                
  223.                 if(postBackElementName.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_TRANSFORMATION)) {
  224.                     porteDelegateHelper.deleteBinaryParameters(trasformazioneRispostaSoapEnvelopeTemplate);
  225.                     if(trasformazioneRispostaSoapAbilitato) {
  226.                         trasformazioneRispostaSoapEnvelope = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_DISABILITATO;
  227.                         trasformazioneRispostaSoapEnvelopeTipo = org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  228.                     }
  229.                 }
  230.                
  231.                 if(postBackElementName.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE)) {
  232.                     porteDelegateHelper.deleteBinaryParameters(trasformazioneRispostaSoapEnvelopeTemplate);
  233.                     if(CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_AS_ATTACHMENT.equals(trasformazioneRispostaSoapEnvelope)) {
  234.                         trasformazioneRispostaSoapEnvelopeTipo = org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  235.                     }
  236.                 }
  237.                
  238.                 if(postBackElementName.equals(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_SOAP_ENVELOPE_TIPO)) {
  239.                     trasformazioneRispostaSoapEnvelopeTipoCheck = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TIPO_CHECK_UPDATE_TIPO;
  240.                     porteDelegateHelper.deleteBinaryParameters(trasformazioneRispostaSoapEnvelopeTemplate);
  241.                 }
  242.                
  243.                 if(postBackElementName.equals(trasformazioneRispostaSoapEnvelopeTemplate.getName()) &&
  244.                     StringUtils.isEmpty(trasformazioneRispostaSoapEnvelopeTipoCheck)) {
  245.                     trasformazioneRispostaSoapEnvelopeTipoCheck = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_REQ_CONVERSIONE_TIPO_CHECK_UPDATE_FILE;
  246.                 }
  247.             }
  248.            
  249.             // parametri visualizzazione link
  250.             String servletTrasformazioniRispostaHeadersList = PorteDelegateCostanti.SERVLET_NAME_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_HEADER_LIST;
  251.             int numeroTrasformazioniRispostaHeaders = oldRisposta.sizeHeaderList();
  252.            
  253.             List<Parameter> parametriInvocazioneServletTrasformazioniRispostaHeaders = new ArrayList<>();
  254.             parametriInvocazioneServletTrasformazioniRispostaHeaders.add(pId);
  255.             parametriInvocazioneServletTrasformazioniRispostaHeaders.add(pIdSoggetto);
  256.             parametriInvocazioneServletTrasformazioniRispostaHeaders.add(pIdAsps);
  257.             parametriInvocazioneServletTrasformazioniRispostaHeaders.add(pIdFruizione);
  258.             parametriInvocazioneServletTrasformazioniRispostaHeaders.add(pIdTrasformazione);
  259.             parametriInvocazioneServletTrasformazioniRispostaHeaders.add(new Parameter(PorteDelegateCostanti.PARAMETRO_PORTE_DELEGATE_ID_TRASFORMAZIONE_RISPOSTA, idTrasformazioneRispostaS));
  260.            

  261.             List<Parameter> lstParam = porteDelegateHelper.getTitoloPD(parentPD, idsogg, idAsps, idFruizione);
  262.            
  263.             String labelPerPorta = null;
  264.             if(parentPD!=null && (parentPD.intValue() == PorteDelegateCostanti.ATTRIBUTO_PORTE_DELEGATE_PARENT_CONFIGURAZIONE)) {
  265.                 labelPerPorta = porteDelegateCore.getLabelRegolaMappingFruizionePortaDelegata(
  266.                         PorteDelegateCostanti.LABEL_PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_DI,
  267.                         PorteDelegateCostanti.LABEL_PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI,
  268.                         portaDelegata);
  269.             }
  270.             else {
  271.                 labelPerPorta = PorteDelegateCostanti.LABEL_PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_DI+nomePorta;
  272.             }

  273.             lstParam.add(new Parameter(labelPerPorta, PorteDelegateCostanti.SERVLET_NAME_PORTE_DELEGATE_TRASFORMAZIONI_LIST, pId, pIdSoggetto, pIdAsps, pIdFruizione));
  274.            
  275.             lstParam.add(new Parameter(nomeTrasformazione, PorteDelegateCostanti.SERVLET_NAME_PORTE_DELEGATE_TRASFORMAZIONI_CHANGE,
  276.                     pId, pIdSoggetto, pIdAsps, pIdFruizione, pIdTrasformazione));
  277.            
  278.             String labelPag = PorteDelegateCostanti.LABEL_PARAMETRO_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTE;
  279.            
  280.             List<Parameter> parametriInvocazioneServletTrasformazioniRisposta = new ArrayList<>();
  281.             parametriInvocazioneServletTrasformazioniRisposta.add(pId);
  282.             parametriInvocazioneServletTrasformazioniRisposta.add(pIdSoggetto);
  283.             parametriInvocazioneServletTrasformazioniRisposta.add(pIdAsps);
  284.             parametriInvocazioneServletTrasformazioniRisposta.add(pIdFruizione);
  285.             parametriInvocazioneServletTrasformazioniRisposta.add(pIdTrasformazione);
  286.            
  287.             lstParam.add(new Parameter(labelPag,PorteDelegateCostanti.SERVLET_NAME_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA_LIST,parametriInvocazioneServletTrasformazioniRisposta));
  288.            
  289.             lstParam.add(new Parameter(nomeRispostaTitle, null));

  290.             ServletUtils.setPageDataTitle(pd, lstParam);
  291.            
  292.             // Se nomehid = null, devo visualizzare la pagina per l'inserimento
  293.             // dati
  294.             if (porteDelegateHelper.isEditModeInProgress()) {
  295.                 // preparo i campi
  296.                 List<DataElement> dati = new ArrayList<>();
  297.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  298.                
  299.                 // primo accesso
  300.                 if(first == null) {
  301.                    
  302.                     nomeRisposta = oldRisposta.getNome();
  303.                    
  304.                     TrasformazioneRegolaApplicabilitaRisposta applicabilita = oldRisposta.getApplicabilita();
  305.                    
  306.                     Integer statusMinInteger = applicabilita != null ? applicabilita.getReturnCodeMin() : null;
  307.                     Integer statusMaxInteger = applicabilita != null ? applicabilita.getReturnCodeMax() : null;
  308.                    
  309.                     if(statusMinInteger != null) {
  310.                         statusMin = statusMinInteger +"";
  311.                     }
  312.                    
  313.                     if(statusMaxInteger != null) {
  314.                         statusMax = statusMaxInteger +"";
  315.                     }
  316.                    
  317.                     // se e' stato salvato il valore 0 lo tratto come null
  318.                     if(statusMinInteger != null && statusMinInteger.intValue() <= 0) {
  319.                         statusMinInteger = null;
  320.                     }
  321.                    
  322.                     if(statusMaxInteger != null && statusMaxInteger.intValue() <= 0) {
  323.                         statusMaxInteger = null;
  324.                     }
  325.                    
  326.                     // Intervallo
  327.                     if(statusMinInteger != null && statusMaxInteger != null) {
  328.                         if(statusMaxInteger.longValue() == statusMinInteger.longValue()) // esatto
  329.                             returnCode = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_ESATTO;
  330.                         else
  331.                             returnCode = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_INTERVALLO;
  332.                     } else if(statusMinInteger != null && statusMaxInteger == null) { // definito solo l'estremo inferiore
  333.                         returnCode = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_INTERVALLO;
  334.                     } else if(statusMinInteger == null && statusMaxInteger != null) { // definito solo l'estremo superiore
  335.                         returnCode = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_INTERVALLO;
  336.                     } else { //entrambi null
  337.                         returnCode = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_QUALSIASI;
  338.                     }
  339.                    
  340.                     if(applicabilita != null) {
  341.                         pattern = applicabilita.getPattern();
  342.                         contentType = applicabilita.getContentTypeList() != null ? StringUtils.join(applicabilita.getContentTypeList(), ",") : "";  
  343.                     }  
  344.                    
  345.                     // dati contenuto
  346.                     trasformazioneContenutoRispostaAbilitato = oldRisposta.getConversione();
  347.                     trasformazioneContenutoRispostaTipo = StringUtils.isNotEmpty(oldRisposta.getConversioneTipo()) ?
  348.                             org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(oldRisposta.getConversioneTipo()) : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  349.                     trasformazioneContenutoRispostaTemplate.setValue(oldRisposta.getConversioneTemplate());
  350.                     trasformazioneContenutoRispostaContentType = StringUtils.isNotEmpty(oldRisposta.getContentType()) ? oldRisposta.getContentType() : "";
  351.                     trasformazioneContenutoRispostaReturnCode = oldRisposta.getReturnCode() != null ? oldRisposta.getReturnCode() + "" : "";
  352.                    
  353.                     if(oldRisposta.getTrasformazioneSoap() == null) {
  354.                         trasformazioneRispostaSoapAbilitato = false;
  355.                         trasformazioneRispostaSoapEnvelope = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_DISABILITATO;
  356.                         trasformazioneRispostaSoapEnvelopeTipo = org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  357.                     } else {
  358.                         trasformazioneRispostaSoapAbilitato = true;
  359.                        
  360.                         if(oldRisposta.getTrasformazioneSoap().isEnvelope()) {
  361.                             if(oldRisposta.getTrasformazioneSoap().isEnvelopeAsAttachment()) {
  362.                                 trasformazioneRispostaSoapEnvelope = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_AS_ATTACHMENT;
  363.                             } else {
  364.                                 trasformazioneRispostaSoapEnvelope = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_AS_BODY;
  365.                             }
  366.                         } else {
  367.                             trasformazioneRispostaSoapEnvelope = CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_DISABILITATO;
  368.                         }
  369.                        
  370.                         trasformazioneRispostaSoapEnvelopeTipo = StringUtils.isNotEmpty(oldRisposta.getTrasformazioneSoap().getEnvelopeBodyConversioneTipo()) ?
  371.                                 org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.toEnumConstant(oldRisposta.getTrasformazioneSoap().getEnvelopeBodyConversioneTipo())
  372.                                 : org.openspcoop2.pdd.core.trasformazioni.TipoTrasformazione.EMPTY;
  373.                         trasformazioneRispostaSoapEnvelopeTemplate.setValue(oldRisposta.getTrasformazioneSoap().getEnvelopeBodyConversioneTemplate());
  374.                     }
  375.                 }

  376.                 dati = porteDelegateHelper.addTrasformazioneRispostaToDati(TipoOperazione.CHANGE, protocollo, dati, idInt, oldRisposta, true, idTrasformazioneS, idTrasformazioneRispostaS,
  377.                         apc.getServiceBinding(),
  378.                         nomeRisposta,
  379.                         returnCode, statusMin, statusMax, pattern, contentType, servletTrasformazioniRispostaHeadersList, parametriInvocazioneServletTrasformazioniRispostaHeaders, numeroTrasformazioniRispostaHeaders,
  380.                         trasformazioneContenutoRichiestaAbilitato, trasformazioneRichiestaRestAbilitato, trasformazioneRichiestaSoapAbilitato,
  381.                         trasformazioneContenutoRispostaAbilitato, trasformazioneContenutoRispostaTipo, trasformazioneContenutoRispostaTemplate, trasformazioneContenutoRispostaTipoCheck, trasformazioneContenutoRispostaContentType, trasformazioneContenutoRispostaReturnCode,
  382.                         serviceBindingMessage, trasformazioneRispostaSoapAbilitato, trasformazioneRispostaSoapEnvelope, trasformazioneRispostaSoapEnvelopeTipo, trasformazioneRispostaSoapEnvelopeTemplate, trasformazioneRispostaSoapEnvelopeTipoCheck);
  383.                
  384.                 dati = porteDelegateHelper.addHiddenFieldsToDati(TipoOperazione.CHANGE, id, idsogg, null, idAsps,
  385.                         idFruizione, portaDelegata.getTipoSoggettoProprietario(), portaDelegata.getNomeSoggettoProprietario(), dati);
  386.                
  387.                 pd.setDati(dati);

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

  389.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, PorteDelegateCostanti.OBJECT_NAME_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA,   ForwardParams.CHANGE());
  390.             }
  391.            
  392.                
  393.             boolean isOk = porteDelegateHelper.trasformazioniRispostaCheckData(TipoOperazione.CHANGE, oldRegola, oldRisposta,
  394.                     serviceBindingMessage);
  395.            
  396.             if(isOk) {
  397.                 // quando un parametro viene inviato come vuoto, sul db viene messo null, gestisco il caso
  398.                 Integer statusMinDBCheck = StringUtils.isNotEmpty(statusMin) ? Integer.parseInt(statusMin) : null;
  399.                 Integer statusMaxDBCheck = StringUtils.isNotEmpty(statusMax) ? Integer.parseInt(statusMax) : null;
  400.                 if(returnCode.equals(CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_ESATTO))
  401.                     statusMaxDBCheck = statusMinDBCheck;
  402.                 String patternDBCheck = StringUtils.isNotEmpty(pattern) ? pattern : null;
  403.                 String contentTypeDBCheck = StringUtils.isNotEmpty(contentType) ? contentType : null;
  404.                 TrasformazioneRegolaRisposta regolaRispostaDBCheckApplicabilita = porteDelegateCore.getTrasformazioneRisposta(Long.parseLong(id), idTrasformazione, statusMinDBCheck, statusMaxDBCheck, patternDBCheck, contentTypeDBCheck);
  405.                 TrasformazioneRegolaRisposta regolaRispostaDBCheckNome = porteDelegateCore.getTrasformazioneRisposta(Long.parseLong(id), idTrasformazione, nomeRisposta);
  406.                
  407.                 // controllo che le modifiche ai parametri non coincidano con altre regole gia' presenti
  408.                 if(regolaRispostaDBCheckApplicabilita != null && regolaRispostaDBCheckApplicabilita.getId().longValue() != oldRisposta.getId().longValue()) {
  409.                     pd.setMessage(CostantiControlStation.MESSAGGIO_ERRORE_REGOLA_TRASFORMAZIONE_APPLICABILITA_DUPLICATA);
  410.                     isOk = false;
  411.                 }
  412.                 if(isOk && regolaRispostaDBCheckNome != null && regolaRispostaDBCheckNome.getId().longValue() != oldRisposta.getId().longValue()) {
  413.                     pd.setMessage(CostantiControlStation.MESSAGGIO_ERRORE_REGOLA_TRASFORMAZIONE_APPLICABILITA_NOME);
  414.                     isOk = false;
  415.                 }
  416.             }
  417.            
  418.             if (!isOk) {

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

  421.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  422.                
  423.                 dati = porteDelegateHelper.addTrasformazioneRispostaToDati(TipoOperazione.CHANGE, protocollo, dati, idInt, oldRisposta, true, idTrasformazioneS, idTrasformazioneRispostaS,
  424.                         apc.getServiceBinding(),
  425.                         nomeRisposta,
  426.                         returnCode, statusMin, statusMax, pattern, contentType, servletTrasformazioniRispostaHeadersList, parametriInvocazioneServletTrasformazioniRispostaHeaders, numeroTrasformazioniRispostaHeaders,
  427.                         trasformazioneContenutoRichiestaAbilitato, trasformazioneRichiestaRestAbilitato, trasformazioneRichiestaSoapAbilitato,
  428.                         trasformazioneContenutoRispostaAbilitato, trasformazioneContenutoRispostaTipo, trasformazioneContenutoRispostaTemplate, trasformazioneContenutoRispostaTipoCheck, trasformazioneContenutoRispostaContentType, trasformazioneContenutoRispostaReturnCode,
  429.                         serviceBindingMessage, trasformazioneRispostaSoapAbilitato, trasformazioneRispostaSoapEnvelope, trasformazioneRispostaSoapEnvelopeTipo, trasformazioneRispostaSoapEnvelopeTemplate, trasformazioneRispostaSoapEnvelopeTipoCheck);
  430.                
  431.                 dati = porteDelegateHelper.addHiddenFieldsToDati(TipoOperazione.CHANGE, id, idsogg, null, idAsps,
  432.                         idFruizione, portaDelegata.getTipoSoggettoProprietario(), portaDelegata.getNomeSoggettoProprietario(), dati);
  433.                
  434.                 pd.setDati(dati);

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

  436.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, PorteDelegateCostanti.OBJECT_NAME_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA,   ForwardParams.CHANGE());
  437.             }
  438.            
  439.             // aggiorno la regola
  440.             TrasformazioneRegola regola = null;
  441.             for (TrasformazioneRegola reg : trasformazioni.getRegolaList()) {
  442.                 if(reg.getId().longValue() == idTrasformazione) {
  443.                     regola = reg;
  444.                     break;
  445.                 }
  446.             }
  447.             if(regola==null) {
  448.                 throw new Exception("TrasformazioneRegola con id '"+idTrasformazione+"' non trovata");
  449.             }
  450.            
  451.             TrasformazioneRegolaRisposta rispostaDaAggiornare = null;
  452.            
  453.             for (int j = 0; j < regola.sizeRispostaList(); j++) {
  454.                 TrasformazioneRegolaRisposta risposta = regola.getRisposta(j);
  455.                 if (risposta.getId().longValue() == idTrasformazioneRisposta) {
  456.                     rispostaDaAggiornare = risposta;
  457.                     break;
  458.                 }
  459.             }
  460.             if(rispostaDaAggiornare==null) {
  461.                 throw new Exception("TrasformazioneRegolaRisposta con id '"+idTrasformazioneRisposta+"' non trovata");
  462.             }
  463.            
  464.             rispostaDaAggiornare.setNome(nomeRisposta);
  465.            
  466.             if(rispostaDaAggiornare.getApplicabilita() == null)
  467.                 rispostaDaAggiornare.setApplicabilita(new TrasformazioneRegolaApplicabilitaRisposta());

  468.             if(returnCode.equals(CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_QUALSIASI)) {
  469.                 rispostaDaAggiornare.getApplicabilita().setReturnCodeMin(null);
  470.                 rispostaDaAggiornare.getApplicabilita().setReturnCodeMax(null);
  471.             } else if(returnCode.equals(CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_RETURN_CODE_ESATTO)) {
  472.                 rispostaDaAggiornare.getApplicabilita().setReturnCodeMin(StringUtils.isNotEmpty(statusMin) ? Integer.parseInt(statusMin) : null);
  473.                 rispostaDaAggiornare.getApplicabilita().setReturnCodeMax(StringUtils.isNotEmpty(statusMin) ? Integer.parseInt(statusMin) : null);
  474.             } else { // intervallo
  475.                 rispostaDaAggiornare.getApplicabilita().setReturnCodeMin(StringUtils.isNotEmpty(statusMin) ? Integer.parseInt(statusMin) : null);
  476.                 rispostaDaAggiornare.getApplicabilita().setReturnCodeMax(StringUtils.isNotEmpty(statusMax) ? Integer.parseInt(statusMax) : null);
  477.             }
  478.            
  479.             rispostaDaAggiornare.getApplicabilita().setPattern(pattern);
  480.             rispostaDaAggiornare.getApplicabilita().getContentTypeList().clear();
  481.             if(contentType != null) {
  482.                 rispostaDaAggiornare.getApplicabilita().getContentTypeList().addAll(Arrays.asList(contentType.split(",")));
  483.             }
  484.            
  485.             rispostaDaAggiornare.setReturnCode(StringUtils.isNotEmpty(trasformazioneContenutoRispostaReturnCode) ? trasformazioneContenutoRispostaReturnCode : null);
  486.            
  487.             rispostaDaAggiornare.setConversione(trasformazioneContenutoRispostaAbilitato);
  488.            
  489.             if(trasformazioneContenutoRispostaAbilitato) {
  490.                 if(trasformazioneContenutoRispostaTipo.isTemplateRequired()) {
  491.                     //  se e' stato aggiornato il template lo sovrascrivo
  492.                     if(trasformazioneContenutoRispostaTemplate.getValue() != null && trasformazioneContenutoRispostaTemplate.getValue().length  > 0)
  493.                         rispostaDaAggiornare.setConversioneTemplate(trasformazioneContenutoRispostaTemplate.getValue());
  494.                 }else {
  495.                     rispostaDaAggiornare.setConversioneTemplate(null);
  496.                 }

  497.                 if(trasformazioneContenutoRispostaContentType!=null && !"".equals(trasformazioneContenutoRispostaContentType)) {
  498.                     rispostaDaAggiornare.setContentType(trasformazioneContenutoRispostaContentType);
  499.                 }
  500.                 else {
  501.                     rispostaDaAggiornare.setContentType(null);
  502.                 }
  503.                 rispostaDaAggiornare.setConversioneTipo(trasformazioneContenutoRispostaTipo.getValue());
  504.                
  505.                 if(trasformazioneRispostaSoapAbilitato) {
  506.                     if(rispostaDaAggiornare.getTrasformazioneSoap() == null)
  507.                         rispostaDaAggiornare.setTrasformazioneSoap(new TrasformazioneSoapRisposta());
  508.                    
  509.                     if(CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_AS_ATTACHMENT.equals(trasformazioneRispostaSoapEnvelope)) { // attachment
  510.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelope(true);
  511.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeAsAttachment(true);
  512.                        
  513.                         if(trasformazioneRispostaSoapEnvelopeTipo.isTemplateRequired()) {
  514.                             //  se e' stato aggiornato il template lo sovrascrivo
  515.                             if(trasformazioneRispostaSoapEnvelopeTemplate.getValue() != null && trasformazioneRispostaSoapEnvelopeTemplate.getValue().length  > 0)
  516.                                 rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTemplate(trasformazioneRispostaSoapEnvelopeTemplate.getValue());
  517.                         } else {
  518.                             rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTemplate(null);
  519.                         }
  520.                        
  521.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTipo(trasformazioneRispostaSoapEnvelopeTipo.getValue());
  522.                     } else if(CostantiControlStation.VALUE_PARAMETRO_CONFIGURAZIONE_TRASFORMAZIONI_SOAP_ENVELOPE_AS_BODY.equals(trasformazioneRispostaSoapEnvelope)) { // body
  523.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelope(true);
  524.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeAsAttachment(false);
  525.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTemplate(null);
  526.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTipo(null);
  527.                     } else  { // disabilitato
  528.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelope(false);
  529.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeAsAttachment(false);
  530.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTemplate(null);
  531.                         rispostaDaAggiornare.getTrasformazioneSoap().setEnvelopeBodyConversioneTipo(null);
  532.                     }
  533.                        
  534.                 } else {
  535.                     rispostaDaAggiornare.setTrasformazioneSoap(null);
  536.                 }
  537.             } else {
  538.                 rispostaDaAggiornare.setConversioneTemplate(null);
  539.                 rispostaDaAggiornare.setContentType(null);
  540.                 rispostaDaAggiornare.setConversioneTipo(null);
  541.                 rispostaDaAggiornare.setTrasformazioneSoap(null);
  542.             }
  543.            
  544.             porteDelegateCore.performUpdateOperation(userLogin, porteDelegateHelper.smista(), portaDelegata);
  545.            
  546.             // ricaricare id trasformazione
  547.             portaDelegata = porteDelegateCore.getPortaDelegata(Long.parseLong(id));

  548.             TrasformazioneRegola trasformazioneAggiornata = porteDelegateCore.getTrasformazione(portaDelegata.getId(), regola.getNome());
  549.            
  550.            
  551.             // Preparo la lista
  552.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  553.            
  554.             int idLista = Liste.PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTE;
  555.            
  556.             ricerca = porteDelegateHelper.checkSearchParameters(idLista, ricerca);

  557.             List<TrasformazioneRegolaRisposta> lista = porteDelegateCore.porteDelegateTrasformazioniRispostaList(Long.parseLong(id), trasformazioneAggiornata.getId(), ricerca);
  558.            
  559.             porteDelegateHelper.preparePorteDelegateTrasformazioniRispostaList(nomePorta, trasformazioneAggiornata.getId(), ricerca, lista);
  560.                        
  561.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  562.            
  563.             // Forward control to the specified success URI
  564.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, PorteDelegateCostanti.OBJECT_NAME_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA, ForwardParams.CHANGE());
  565.         } catch (Exception e) {
  566.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  567.                     PorteDelegateCostanti.OBJECT_NAME_PORTE_DELEGATE_TRASFORMAZIONI_RISPOSTA,
  568.                     ForwardParams.CHANGE());
  569.         }
  570.     }
  571. }