AccordiServizioParteSpecificaAllegatiAdd.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.aps;

  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.id.IDSoggetto;
  32. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  33. import org.openspcoop2.core.registry.Documento;
  34. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  35. import org.openspcoop2.core.registry.constants.TipiDocumentoLivelloServizio;
  36. import org.openspcoop2.core.registry.constants.TipiDocumentoSemiformale;
  37. import org.openspcoop2.core.registry.constants.TipiDocumentoSicurezza;
  38. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  39. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  40. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  41. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  42. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  43. import org.openspcoop2.web.ctrlstat.servlet.aps.erogazioni.ErogazioniCostanti;
  44. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  45. import org.openspcoop2.web.lib.mvc.DataElement;
  46. import org.openspcoop2.web.lib.mvc.ForwardParams;
  47. import org.openspcoop2.web.lib.mvc.GeneralData;
  48. import org.openspcoop2.web.lib.mvc.PageData;
  49. import org.openspcoop2.web.lib.mvc.Parameter;
  50. import org.openspcoop2.web.lib.mvc.ServletUtils;
  51. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  52. /**
  53.  * serviziAllegatiAdd
  54.  *
  55.  * @author Andrea Poli (apoli@link.it)
  56.  * @author Stefano Corallo (corallo@link.it)
  57.  * @author Sandra Giangrandi (sandra@link.it)
  58.  * @author $Author$
  59.  * @version $Rev$, $Date$
  60.  *
  61.  */
  62. public final class AccordiServizioParteSpecificaAllegatiAdd extends Action {

  63.     @SuppressWarnings("incomplete-switch")
  64.     @Override
  65.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  67.         // Inizializzo PageData
  68.         PageData pd = new PageData();

  69.         GeneralHelper generalHelper = new GeneralHelper(session);

  70.         // Inizializzo GeneralData
  71.         GeneralData gd = generalHelper.initGeneralData(request);

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

  73.         try {

  74.             AccordiServizioParteSpecificaHelper apsHelper = new AccordiServizioParteSpecificaHelper(request, pd, session);

  75.             String idServizio = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID);
  76.             long idServizioLong = Long.parseLong(idServizio);
  77.             String ruolo = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_RUOLO  );
  78.             String tipoFile = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_FILE  );

  79.             String modificaAPI = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_API);
  80.                    
  81.             List<BinaryParameter> binaryParameterDocumenti = apsHelper.getBinaryParameters(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_THE_FILE);

  82.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore();

  83.             String tipologia = ServletUtils.getObjectFromSession(request, session, String.class, AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  84.             boolean gestioneFruitori = false;
  85.             if(tipologia!=null &&
  86.                 AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE.equals(tipologia)) {
  87.                 gestioneFruitori = true;
  88.             }
  89.            
  90.             // Preparo il menu
  91.             apsHelper.makeMenu();

  92.             // Prendo il nome
  93.             AccordoServizioParteSpecifica asps = apsCore.getAccordoServizioParteSpecifica(idServizioLong);

  94.             String tipoSoggettoFruitore = null;
  95.             String nomeSoggettoFruitore = null;
  96.             IDSoggetto idSoggettoFruitore = null;
  97.             if(gestioneFruitori) {
  98.                 tipoSoggettoFruitore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SOGGETTO_FRUITORE);
  99.                 nomeSoggettoFruitore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SOGGETTO_FRUITORE);
  100.                 idSoggettoFruitore = new IDSoggetto(tipoSoggettoFruitore, nomeSoggettoFruitore);
  101.             }
  102.            
  103.             String tipoProtocollo = apsCore.getProtocolloAssociatoTipoServizio(asps.getTipo());
  104.             IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  105.            
  106.             String tmpTitle = apsHelper.getLabelServizio(idSoggettoFruitore, gestioneFruitori, asps, tipoProtocollo);

  107.             String[] ruoli = {RuoliDocumento.allegato.toString(),RuoliDocumento.specificaSemiformale.toString(),RuoliDocumento.specificaSicurezza.toString(),RuoliDocumento.specificaLivelloServizio.toString()};

  108.             String[] tipiAmmessi = null;
  109.             String[] tipiAmmessiLabel = null;

  110.             if(ruolo!=null && !"".equals(ruolo)){
  111.                 switch (RuoliDocumento.valueOf(ruolo)) {
  112.                 case allegato:
  113.                     //non ci sono vincoli
  114.                     break;
  115.                 case specificaSicurezza:
  116.                     tipiAmmessi = TipiDocumentoSicurezza.toEnumNameArray();
  117.                     tipiAmmessiLabel=TipiDocumentoSicurezza.toStringArray();
  118.                     break;
  119.                 case specificaSemiformale:
  120.                     tipiAmmessi = TipiDocumentoSemiformale.toEnumNameArray();
  121.                     tipiAmmessiLabel=TipiDocumentoSemiformale.toStringArray();
  122.                     break;
  123.                 case specificaLivelloServizio:
  124.                     tipiAmmessi = TipiDocumentoLivelloServizio.toEnumNameArray();
  125.                     tipiAmmessiLabel=TipiDocumentoLivelloServizio.toStringArray();
  126.                     break;
  127.                 default:
  128.                     break;

  129.                 }
  130.             }
  131.            
  132.             boolean find = false;
  133.             if(tipoFile!=null && StringUtils.isNotEmpty(tipoFile) && tipiAmmessi!=null && tipiAmmessi.length>0) {
  134.                 for (String t : tipiAmmessi) {
  135.                     if(tipoFile.equals(t)) {
  136.                         find = true;
  137.                         break;
  138.                     }
  139.                 }
  140.             }
  141.             if(!find) {
  142.                 tipoFile = null;
  143.             }

  144.             // setto la barra del titolo
  145.             List<Parameter> lstParam = new ArrayList<>();
  146.             Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();
  147.             if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  148.                 if(gestioneFruitori) {
  149.                     lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_FRUIZIONI, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_LIST));
  150.                 } else {
  151.                     lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_EROGAZIONI, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_LIST));
  152.                 }
  153.                 List<Parameter> listErogazioniChange = new ArrayList<>();
  154.                 Parameter pIdServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID, asps.getId()+ "");
  155.                 Parameter pNomeServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SERVIZIO, asps.getNome());
  156.                 Parameter pTipoServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SERVIZIO, asps.getTipo());
  157.                 listErogazioniChange.add(pIdServizio);
  158.                 listErogazioniChange.add(pNomeServizio);
  159.                 listErogazioniChange.add(pTipoServizio);
  160.                 if(gestioneFruitori) {
  161.                     Parameter pNomeSoggettoFruitore = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SOGGETTO_FRUITORE, nomeSoggettoFruitore);
  162.                     Parameter pTipoSoggettoFruitore = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SOGGETTO_FRUITORE, tipoSoggettoFruitore);
  163.                     listErogazioniChange.add(pNomeSoggettoFruitore);
  164.                     listErogazioniChange.add(pTipoSoggettoFruitore);
  165.                 }
  166.                 if(modificaAPI!=null) {
  167.                     Parameter pModificaAPI = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_API, modificaAPI);
  168.                     listErogazioniChange.add(pModificaAPI);
  169.                 }
  170.                
  171.                 lstParam.add(new Parameter(tmpTitle, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_CHANGE,
  172.                         listErogazioniChange.toArray(new Parameter[1])));
  173.                
  174.                 lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_MODIFICA_SERVIZIO_INFO_GENERALI, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE,
  175.                         listErogazioniChange.toArray(new Parameter[1])));
  176.                
  177.                 lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_ALLEGATI,AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_ALLEGATI_LIST,
  178.                         listErogazioniChange.toArray(new Parameter[1])));
  179.             } else {
  180.                 if(gestioneFruitori) {
  181.                     lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_FRUITORI, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_LIST));
  182.                 }
  183.                 else {
  184.                     lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_LIST));
  185.                 }
  186.                 lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_ALLEGATI_DI + tmpTitle,
  187.                         AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_ALLEGATI_LIST,
  188.                         new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID, idServizio)
  189.                         ));
  190.             }
  191.             lstParam.add(ServletUtils.getParameterAggiungi());
  192.            
  193.             // Se idhid = null, devo visualizzare la pagina per l'inserimento
  194.             // dati
  195.             if (apsHelper.isEditModeInProgress()) {
  196.                
  197.                    
  198.                 // setto la barra del titolo
  199.                 ServletUtils.setPageDataTitle(pd, lstParam );
  200.                
  201.                 // preparo i campi
  202.                 List<DataElement> dati = new ArrayList<>();
  203.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  204.                
  205.                 dati = apsHelper.addHiddenFieldsToDati(TipoOperazione.ADD, idServizio, null, null, null, null, tipoSoggettoFruitore, nomeSoggettoFruitore, dati);

  206.                 dati = apsHelper. addTipiAllegatiToDati(TipoOperazione.ADD, idServizio, ruolo, ruoli, tipiAmmessi,
  207.                         tipiAmmessiLabel, tipoFile, dati, modificaAPI, binaryParameterDocumenti);

  208.                 pd.setDati(dati);

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

  210.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  211.                         ForwardParams.ADD());
  212.             }

  213.             // Controlli sui campi immessi
  214.             boolean isOk = apsHelper.serviziAllegatiCheckData(TipoOperazione.ADD,binaryParameterDocumenti,asps.getId(),pf);
  215.             if (!isOk) {
  216.                 // setto la barra del titolo
  217.                 ServletUtils.setPageDataTitle(pd, lstParam );

  218.                 // preparo i campi
  219.                 List<DataElement> dati = new ArrayList<>();
  220.                
  221.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  222.                
  223.                 dati = apsHelper.addHiddenFieldsToDati(TipoOperazione.ADD, idServizio, null, null, dati);

  224.                 dati = apsHelper. addTipiAllegatiToDati(TipoOperazione.ADD, idServizio, ruolo, ruoli, tipiAmmessi,
  225.                         tipiAmmessiLabel, tipoFile, dati, modificaAPI, binaryParameterDocumenti);

  226.                 pd.setDati(dati);

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

  228.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  229.                         ForwardParams.ADD());
  230.             }

  231.             //inserimento documento in accordo
  232.             for (BinaryParameter binaryParameter : binaryParameterDocumenti) {
  233.                 Documento documento = new Documento();
  234.                 documento.setRuolo(RuoliDocumento.valueOf(ruolo).toString());
  235.                 documento.setByteContenuto(binaryParameter.getValue());
  236.                 documento.setFile(binaryParameter.getFilename());
  237.                 documento.setIdProprietarioDocumento(asps.getId());

  238.                 switch (RuoliDocumento.valueOf(ruolo)) {
  239.                     case allegato:
  240.                         documento.setTipo(binaryParameter.getFilename().substring(binaryParameter.getFilename().lastIndexOf('.')+1, binaryParameter.getFilename().length()));
  241.                         asps.addAllegato(documento);
  242.                         break;
  243.                     case specificaSemiformale:
  244.                         documento.setTipo(TipiDocumentoSemiformale.valueOf(tipoFile).getNome());
  245.                         asps.addSpecificaSemiformale(documento);
  246.                         break;
  247.                     case specificaSicurezza:
  248.                         documento.setTipo(TipiDocumentoSicurezza.valueOf(tipoFile).getNome());
  249.                         asps.addSpecificaSicurezza(documento);
  250.                         break;
  251.                     case specificaLivelloServizio:
  252.                         documento.setTipo(TipiDocumentoLivelloServizio.valueOf(tipoFile).getNome());
  253.                         asps.addSpecificaLivelloServizio(documento);
  254.                         break;
  255.                     default:
  256.                         break;
  257.                 }
  258.             }

  259.             // effettuo le operazioni
  260.             apsCore.performUpdateOperation(userLogin, apsHelper.smista(), asps);

  261.             // Preparo la lista
  262.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  263.            
  264.             List<Documento> lista = apsCore.serviziAllegatiList(idServizioLong, ricerca);

  265.             apsHelper.prepareServiziAllegatiList(asps, ricerca, lista);
  266.            
  267.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  268.             return ServletUtils.getStrutsForwardEditModeFinished( mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  269.                     ForwardParams.ADD());
  270.         } catch (Exception e) {
  271.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  272.                     AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  273.                     ForwardParams.ADD());
  274.         }  
  275.     }

  276.    
  277. }