AccordiServizioParteComuneResourcesParametersChange.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.apc;

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

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

  26. import org.apache.commons.lang.StringUtils;
  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.registry.AccordoServizioParteComune;
  32. import org.openspcoop2.core.registry.Resource;
  33. import org.openspcoop2.core.registry.ResourceParameter;
  34. import org.openspcoop2.core.registry.ResourceRequest;
  35. import org.openspcoop2.core.registry.ResourceResponse;
  36. import org.openspcoop2.core.registry.constants.ParameterType;
  37. import org.openspcoop2.core.registry.constants.StatiAccordo;
  38. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  39. import org.openspcoop2.protocol.engine.utils.NamingUtils;
  40. import org.openspcoop2.utils.rest.api.ApiResponse;
  41. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  42. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  43. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  44. import org.openspcoop2.web.ctrlstat.servlet.apc.api.ApiCostanti;
  45. import org.openspcoop2.web.lib.mvc.Costanti;
  46. import org.openspcoop2.web.lib.mvc.DataElement;
  47. import org.openspcoop2.web.lib.mvc.ForwardParams;
  48. import org.openspcoop2.web.lib.mvc.GeneralData;
  49. import org.openspcoop2.web.lib.mvc.PageData;
  50. import org.openspcoop2.web.lib.mvc.Parameter;
  51. import org.openspcoop2.web.lib.mvc.ServletUtils;
  52. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  53. /**
  54.  * AccordiServizioParteComuneResourcesParametersChange
  55.  *
  56.  * @author Andrea Poli (apoli@link.it)
  57.  * @author $Author$
  58.  * @version $Rev$, $Date$
  59.  *
  60.  */
  61. public final class AccordiServizioParteComuneResourcesParametersChange extends Action {

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

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

  65.         // Inizializzo PageData
  66.         PageData pd = new PageData();

  67.         // Inizializzo GeneralData
  68.         GeneralHelper generalHelper = new GeneralHelper(session);

  69.         GeneralData gd = generalHelper.initGeneralData(request);

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

  71.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  72.         // Parametri relativi al tipo operazione
  73.         TipoOperazione tipoOp = TipoOperazione.CHANGE;
  74.         try {
  75.             AccordiServizioParteComuneCore apcCore = new AccordiServizioParteComuneCore();

  76.             AccordiServizioParteComuneHelper apcHelper = new AccordiServizioParteComuneHelper(request, pd, session);

  77.             String editMode = apcHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);
  78.             String id = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID);
  79.             long idAccordoLong = Long.parseLong(id);
  80.             String nomeRisorsa = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME);
  81.             if (nomeRisorsa == null) {
  82.                 nomeRisorsa = "";
  83.             }
  84.             String statusS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS);
  85.             Integer status = null;
  86.             try {
  87.                 if(statusS!=null)
  88.                     status = Integer.parseInt(statusS);
  89.             } catch(Exception e) {
  90.                 // ignore
  91.             }
  92.             String isReq = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST);
  93.             boolean isRequest = ServletUtils.isCheckBoxEnabled(isReq);
  94.            
  95.             String descr = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_DESCRIZIONE);
  96.             if (descr == null) {
  97.                 descr = "";
  98.             }
  99.            
  100.             String tipoAccordo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
  101.             if("".equals(tipoAccordo))
  102.                 tipoAccordo = null;
  103.             String nome = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_NOME);
  104.             String tipo = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_TIPO);
  105.             String restrizioni = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_RESTRIZIONI);
  106.             String tipoParametroS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_TIPO_PARAMETRO);
  107.             ParameterType tipoParametro =  StringUtils.isNotEmpty(tipoParametroS) ? ParameterType.toEnumConstant(tipoParametroS) : null;
  108.             String requiredS = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_REQUIRED);
  109.             boolean required = ServletUtils.isCheckBoxEnabled(requiredS);
  110.            
  111.             String idPar = apcHelper.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_PARAMETER_ID);
  112.             int idParInt = Integer.parseInt(idPar);
  113.            
  114.             // Preparo il menu
  115.             apcHelper.makeMenu();

  116.             // Prendo il nome
  117.             AccordoServizioParteComune as = apcCore.getAccordoServizioFull(idAccordoLong);
  118.             String uriAS = idAccordoFactory.getUriFromAccordo(as);
  119.             String labelASTitle = apcHelper.getLabelIdAccordo(as);

  120.             Resource risorsa = null;
  121.             for (int j = 0; j < as.sizeResourceList(); j++) {
  122.                 risorsa = as.getResource(j);
  123.                 if (nomeRisorsa.equals(risorsa.getNome())) {
  124.                     break;
  125.                 }
  126.             }
  127.            
  128.             if(risorsa==null) {
  129.                 throw new Exception("Risorsa con nome '"+nomeRisorsa+"' non trovata nell'accordo con id '"+idAccordoLong+"'");
  130.             }
  131.            
  132.             Long idResponse = null;
  133.             Long idResource = null;
  134.             ResourceRequest resourceRequest = null;
  135.             ResourceResponse resourceResponse = null;
  136.             ResourceParameter resourceParameterOLD = null;
  137.             List<ResourceParameter> parameterList = null;
  138.             if(isRequest) {
  139.                 resourceRequest = risorsa.getRequest();
  140.                 idResource = risorsa.getId();
  141.                 if(resourceRequest != null)
  142.                     parameterList = resourceRequest.getParameterList();
  143.             } else {
  144.                 if(risorsa.getResponseList() != null) {
  145.                     for (int i = 0; i < risorsa.getResponseList().size(); i++) {
  146.                         resourceResponse = risorsa.getResponse(i);
  147.                         if (resourceResponse.getStatus() == status) {
  148.                             idResponse = resourceResponse.getId();
  149.                             break;
  150.                         }
  151.                     }
  152.                     if(resourceResponse != null)
  153.                         parameterList = resourceResponse.getParameterList();
  154.                 }
  155.             }
  156.            
  157.             if(parameterList != null && !parameterList.isEmpty()) {
  158.                 for (ResourceParameter resourceParameter : parameterList) {
  159.                     if(resourceParameter.getId().intValue() == idParInt) {
  160.                         resourceParameterOLD = resourceParameter;
  161.                         break;
  162.                     }
  163.                 }
  164.             }
  165.            
  166.             String oldNome = null;
  167.             ParameterType oldTipoParametro = null;
  168.             if(resourceParameterOLD!=null) {
  169.                 oldNome = resourceParameterOLD.getNome();
  170.                 oldTipoParametro = resourceParameterOLD.getParameterType();
  171.             }
  172.            
  173.             Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
  174.             Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, id);
  175.             Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, uriAS);
  176.             Parameter pNomeRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_NOME, risorsa.getNome());
  177.             Parameter pIsRequest = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCE_REQUEST, isRequest+"");
  178.             Parameter pIdRisorsa = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_ID, risorsa.getId()+"");
  179.             Parameter pResponseStatus = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_RESOURCES_RESPONSE_STATUS, statusS);
  180.             Boolean isModalitaVistaApiCustom = ServletUtils.getBooleanAttributeFromSession(ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API, session, request, false).getValue();
  181.             List<Parameter> listaParams = apcHelper.getTitoloApc(TipoOperazione.CHANGE, as, tipoAccordo, labelASTitle, null, false);
  182.            
  183.             String labelRisorse = (isModalitaVistaApiCustom!=null && isModalitaVistaApiCustom.booleanValue()) ? AccordiServizioParteComuneCostanti.LABEL_RISORSE : AccordiServizioParteComuneCostanti.LABEL_RISORSE + " di " + labelASTitle;
  184.            
  185.             listaParams.add(new Parameter(labelRisorse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo));
  186.            
  187.             String labelRisorsa = NamingUtils.getLabelResource(risorsa);
  188.             listaParams.add(new Parameter(labelRisorsa, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_CHANGE, pIdAccordo, pNomeAccordo, pTipoAccordo,pIdRisorsa));
  189.            
  190.             if(!isRequest) {
  191.                 String labelResponse = AccordiServizioParteComuneCostanti.LABEL_RISPOSTE;
  192.                 listaParams.add(new Parameter(labelResponse, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa));
  193.                
  194.                 String labelRisposta = AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS +" "+
  195.                         (ApiResponse.isDefaultHttpReturnCode(status)? AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_RESOURCES_RESPONSE_STATUS_DEFAULT : statusS);
  196.                
  197.                 listaParams.add(new Parameter(labelRisposta, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_RISPOSTE_CHANGE, pIdAccordo, pTipoAccordo, pNomeAccordo, pNomeRisorsa,pResponseStatus));
  198.             }
  199.            
  200.             String labelParameters = AccordiServizioParteComuneCostanti.LABEL_PARAMETERS;
  201.            
  202.             listaParams.add(new Parameter(labelParameters, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_PARAMETERS_LIST, pIdAccordo, pNomeAccordo, pTipoAccordo,pNomeRisorsa,pIsRequest, pResponseStatus));
  203.             listaParams.add(new Parameter(oldNome, null));
  204.            
  205.             // Se idhid = null, devo visualizzare la pagina per la
  206.             // modifica dati
  207.        
  208.             if(ServletUtils.isEditModeInProgress(editMode)){

  209.                 // setto la barra del titolo
  210.                 ServletUtils.setPageDataTitle(pd,listaParams);

  211.                 // Prendo i dati dell'accordo
  212.                 if(nome == null){
  213.                     nome = resourceParameterOLD.getNome();
  214.                     descr = resourceParameterOLD.getDescrizione();
  215.                     required = resourceParameterOLD.isRequired();
  216.                     tipoParametro = oldTipoParametro;
  217.                     tipo = resourceParameterOLD.getTipo();
  218.                     restrizioni = resourceParameterOLD.getRestrizioni();
  219.                 }

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

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

  223.                 dati = apcHelper.addAccordiResourceParameterToDati(tipoOp, dati, id, as.getStatoPackage(),tipoAccordo,
  224.                          nomeRisorsa, isRequest, statusS, idParInt, nome, descr,  tipoParametro, tipo, restrizioni, required);

  225.                 pd.setDati(dati);

  226.                 if( apcHelper.isModalitaStandard() || (apcHelper.isShowGestioneWorkflowStatoDocumenti() && StatiAccordo.finale.toString().equals(as.getStatoPackage())) ){
  227.                     pd.disableEditMode();
  228.                 }

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

  230.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_PARAMETERS, ForwardParams.CHANGE());

  231.             }
  232.            
  233.             // Controlli sui campi immessi
  234.             boolean isOk = apcHelper.accordiResourceParameterCheckData(tipoOp, id, nomeRisorsa, isRequest, statusS,  nome, descr, tipoParametro,
  235.                     tipo, restrizioni, required, idResource,idResponse,
  236.                     oldTipoParametro,oldNome);

  237.             if (!isOk) {

  238.                 // setto la barra del titolo
  239.                 ServletUtils.setPageDataTitle(pd,listaParams);

  240.                 // preparo i campi
  241.                 List<DataElement> dati = new ArrayList<>();
  242.                
  243.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  244.                 dati = apcHelper.addAccordiResourceParameterToDati(tipoOp, dati, id, as.getStatoPackage(),tipoAccordo,
  245.                          nomeRisorsa, isRequest, statusS, idParInt, nome, descr,  tipoParametro, tipo, restrizioni, required);
  246.                
  247.                 pd.setDati(dati);

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

  249.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_PARAMETERS, ForwardParams.CHANGE());
  250.             }

  251.             // Modifico i dati del parameter nel db
  252.             ResourceParameter newParameter = new ResourceParameter();
  253.             newParameter.setParameterType(tipoParametro);
  254.             newParameter.setNome(nome);
  255.             newParameter.setTipo(tipo);
  256.             if(restrizioni!=null && !"".equals(restrizioni)) {
  257.                 newParameter.setRestrizioni(restrizioni);
  258.             }
  259.             newParameter.setDescrizione(descr);
  260.             newParameter.setRequired(required);
  261.            
  262.             int idx = -1;          
  263.             if(parameterList != null && !parameterList.isEmpty()) {
  264.                 for (int i = 0; i < parameterList.size(); i++) {
  265.                     ResourceParameter resourceParameter = parameterList.get(i);
  266.                     if(resourceParameter.getId().intValue() == idParInt) {
  267.                         idx = i;
  268.                         break;
  269.                     }
  270.                 }
  271.                 if(idx > -1) {
  272.                     parameterList.remove(idx);
  273.                     parameterList.add(idx, newParameter);
  274.                 }
  275.             }
  276.            
  277.             // effettuo le operazioni
  278.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);

  279.             // Devo rileggere l'accordo dal db, perche' altrimenti
  280.             // manca l'id dei nuovi port-type
  281.             as = apcCore.getAccordoServizioFull(idAccordoLong);

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

  284.             risorsa = null;
  285.             for (int j = 0; j < as.sizeResourceList(); j++) {
  286.                 risorsa = as.getResource(j);
  287.                 if (nomeRisorsa.equals(risorsa.getNome())) {
  288.                     break;
  289.                 }
  290.             }
  291.            
  292.             if(risorsa==null) {
  293.                 throw new Exception("Risorsa con nome '"+nomeRisorsa+"' non trovata nell'accordo con id '"+idAccordoLong+"'");
  294.             }
  295.            
  296.             idResponse = null;
  297.             idResource = null;
  298.             resourceRequest = null;
  299.             resourceResponse = null;
  300.             if(isRequest) {
  301.                 resourceRequest = risorsa.getRequest();
  302.                 idResource = risorsa.getId();
  303.             } else {
  304.                 if(risorsa.getResponseList() != null) {
  305.                     for (int i = 0; i < risorsa.getResponseList().size(); i++) {
  306.                         resourceResponse = risorsa.getResponse(i);
  307.                         if (resourceResponse.getStatus() == status) {
  308.                             idResponse = resourceResponse.getId();
  309.                             break;
  310.                         }
  311.                     }
  312.                 }
  313.             }
  314.            

  315.             List<ResourceParameter> lista = apcCore.accordiResourceParametersList(idResource, isRequest, idResponse, ricerca);

  316.             apcHelper.prepareAccordiResourcesParametersList(id, as, lista, ricerca, tipoAccordo, isRequest, risorsa, resourceRequest, resourceResponse);

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

  318.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_PARAMETERS, ForwardParams.CHANGE());

  319.         } catch (Exception e) {
  320.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  321.                     AccordiServizioParteComuneCostanti.OBJECT_NAME_APC_RESOURCES_PARAMETERS, ForwardParams.CHANGE());
  322.         }
  323.     }
  324. }