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

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

  65.     @SuppressWarnings("incomplete-switch")
  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.         // Inizializzo GeneralData
  73.         GeneralData gd = generalHelper.initGeneralData(request);

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

  75.         try {

  76.             FileUploadForm fileUpload = (FileUploadForm) form;

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

  78.             String idAllegato = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID_ALLEGATO);
  79.             String idServizio = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID);
  80.             String nomeDocumento = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_DOCUMENTO);
  81.             long idAllegatoLong = Long.parseLong(idAllegato);
  82.             long idServizioLong = Long.parseLong(idServizio);
  83.             String tipoFile = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_FILE);

  84.             String modificaAPI = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_API);
  85.            
  86.             FormFile ff = fileUpload.getTheFile();

  87.             AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore();
  88.             ArchiviCore archiviCore = new ArchiviCore(apsCore);

  89.             String tipologia = ServletUtils.getObjectFromSession(request, session, String.class, AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE);
  90.             boolean gestioneFruitori = false;
  91.             if(tipologia!=null) {
  92.                 if(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_EROGAZIONE_VALUE_FRUIZIONE.equals(tipologia)) {
  93.                     gestioneFruitori = true;
  94.                 }
  95.             }
  96.            
  97.             // Preparo il menu
  98.             apsHelper.makeMenu();

  99.             // Prendo il nome
  100.             AccordoServizioParteSpecifica asps = apsCore.getAccordoServizioParteSpecifica(idServizioLong);
  101.            
  102.             String tipoSoggettoFruitore = null;
  103.             String nomeSoggettoFruitore = null;
  104.             IDSoggetto idSoggettoFruitore = null;
  105.             if(gestioneFruitori) {
  106.                 tipoSoggettoFruitore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SOGGETTO_FRUITORE);
  107.                 nomeSoggettoFruitore = apsHelper.getParameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SOGGETTO_FRUITORE);
  108.                 idSoggettoFruitore = new IDSoggetto(tipoSoggettoFruitore, nomeSoggettoFruitore);
  109.             }
  110.            
  111.             String tipoProtocollo = apsCore.getProtocolloAssociatoTipoServizio(asps.getTipo());
  112.            
  113.             IProtocolFactory<?> pf = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  114.            
  115.             String tmpTitle = apsHelper.getLabelServizio(idSoggettoFruitore, gestioneFruitori, asps, tipoProtocollo);
  116.            
  117.             Documento doc = archiviCore.getDocumento(idAllegatoLong,false);
  118.            
  119.             List<Parameter> lstParam = new ArrayList<>();
  120.            
  121.             Boolean vistaErogazioni = ServletUtils.getBooleanAttributeFromSession(ErogazioniCostanti.ASPS_EROGAZIONI_ATTRIBUTO_VISTA_EROGAZIONI, session, request).getValue();
  122.             if(vistaErogazioni != null && vistaErogazioni.booleanValue()) {
  123.                 if(gestioneFruitori) {
  124.                     lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_FRUIZIONI, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_LIST));
  125.                 } else {
  126.                     lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_EROGAZIONI, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_LIST));
  127.                 }
  128.                 List<Parameter> listErogazioniChange = new ArrayList<>();
  129.                 Parameter pIdServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID, asps.getId()+ "");
  130.                 Parameter pNomeServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SERVIZIO, asps.getNome());
  131.                 Parameter pTipoServizio = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SERVIZIO, asps.getTipo());
  132.                 listErogazioniChange.add(pIdServizio);
  133.                 listErogazioniChange.add(pNomeServizio);
  134.                 listErogazioniChange.add(pTipoServizio);
  135.                 if(gestioneFruitori) {
  136.                     Parameter pNomeSoggettoFruitore = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_NOME_SOGGETTO_FRUITORE, nomeSoggettoFruitore);
  137.                     Parameter pTipoSoggettoFruitore = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_TIPO_SOGGETTO_FRUITORE, tipoSoggettoFruitore);
  138.                     listErogazioniChange.add(pNomeSoggettoFruitore);
  139.                     listErogazioniChange.add(pTipoSoggettoFruitore);
  140.                 }
  141.                 if(modificaAPI!=null) {
  142.                     Parameter pModificaAPI = new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_MODIFICA_API, modificaAPI);
  143.                     listErogazioniChange.add(pModificaAPI);
  144.                 }
  145.                
  146.                 lstParam.add(new Parameter(tmpTitle, ErogazioniCostanti.SERVLET_NAME_ASPS_EROGAZIONI_CHANGE,
  147.                         listErogazioniChange.toArray(new Parameter[1])));
  148.                
  149.                 lstParam.add(new Parameter(ErogazioniCostanti.LABEL_ASPS_MODIFICA_SERVIZIO_INFO_GENERALI, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_CHANGE,
  150.                         listErogazioniChange.toArray(new Parameter[1])));
  151.                
  152.                 lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_ALLEGATI,AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_ALLEGATI_LIST,
  153.                         listErogazioniChange.toArray(new Parameter[1])));
  154.             } else {
  155.                 if(gestioneFruitori) {
  156.                     lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_FRUITORI, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_LIST));
  157.                 }
  158.                 else {
  159.                     lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS, AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_LIST));
  160.                 }
  161.                 lstParam.add(new Parameter(AccordiServizioParteSpecificaCostanti.LABEL_APS_ALLEGATI_DI + tmpTitle,
  162.                         AccordiServizioParteSpecificaCostanti.SERVLET_NAME_APS_ALLEGATI_LIST,
  163.                         new Parameter(AccordiServizioParteSpecificaCostanti.PARAMETRO_APS_ID, idServizio)
  164.                         ));
  165.             }
  166.             lstParam.add(new Parameter(nomeDocumento, null));

  167.             // Se idhid = null, devo visualizzare la pagina per la
  168.             // modifica dati
  169.             if (apsHelper.isEditModeInProgress()) {
  170.                 // setto la barra del titolo
  171.                 ServletUtils.setPageDataTitle(pd, lstParam );

  172.                 // preparo i campi
  173.                 List<DataElement> dati = new ArrayList<>();
  174.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  175.                
  176.                 dati = apsHelper.addHiddenFieldsToDati(TipoOperazione.CHANGE, idServizio, null, null, null, null, tipoSoggettoFruitore, nomeSoggettoFruitore, dati);

  177.                 dati = apsHelper.addInfoAllegatiToDati(TipoOperazione.CHANGE, idAllegato, asps, doc, dati, modificaAPI);

  178.                 pd.setDati(dati);

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

  180.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  181.                         ForwardParams.CHANGE());
  182.             }

  183.             Documento toCheck = new Documento();
  184.             toCheck.setId(doc.getId());
  185.             toCheck.setRuolo(RuoliDocumento.valueOf(doc.getRuolo()).toString());
  186.             toCheck.setByteContenuto(ff.getFileData());
  187.             toCheck.setFile(ff.getFileName());
  188.             toCheck.setIdProprietarioDocumento(asps.getId());
  189.             toCheck.setOraRegistrazione(new Date());
  190.             //tipo file
  191.             switch (RuoliDocumento.valueOf(doc.getRuolo())) {
  192.             case allegato:
  193.                 toCheck.setTipo(ff.getFileName().substring(ff.getFileName().lastIndexOf('.')+1, ff.getFileName().length()));
  194.                 break;
  195.             case specificaSemiformale:
  196.                 toCheck.setTipo(TipiDocumentoSemiformale.toEnumConstant(tipoFile).getNome());
  197.                 break;
  198.             case specificaSicurezza:
  199.                 toCheck.setTipo(TipiDocumentoSicurezza.toEnumConstant(tipoFile).getNome());
  200.                 break;
  201.             case specificaLivelloServizio:
  202.                 toCheck.setTipo(TipiDocumentoLivelloServizio.toEnumConstant(tipoFile).getNome());
  203.                 break;
  204.             default:
  205.                 break;
  206.             }
  207.             // Controlli sui campi immessi
  208.             boolean isOk = apsHelper.serviziAllegatiCheckData(TipoOperazione.CHANGE,ff,toCheck,pf);
  209.             if (!isOk) {
  210.                 // setto la barra del titolo
  211.                 ServletUtils.setPageDataTitle(pd, lstParam );

  212.                 // preparo i campi
  213.                 List<DataElement> dati = new ArrayList<>();
  214.                
  215.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  216.                
  217.                 dati = apsHelper.addHiddenFieldsToDati(TipoOperazione.CHANGE, idServizio, null, null, dati);

  218.                 dati = apsHelper.addInfoAllegatiToDati(TipoOperazione.CHANGE, idAllegato, asps, doc, dati, modificaAPI);

  219.                 pd.setDati(dati);

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

  221.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  222.                         ForwardParams.CHANGE());
  223.             }



  224.             AccordiServizioParteSpecificaUtilities.sostituisciDocumentoAsps(asps, doc, toCheck);


  225.             // effettuo le operazioni
  226.             apsCore.performUpdateOperation(userLogin, apsHelper.smista(), asps);

  227.             // Preparo la lista
  228.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  229.            
  230.             List<Documento> lista = apsCore.serviziAllegatiList(asps.getId().intValue(), ricerca);

  231.             apsHelper.prepareServiziAllegatiList(asps, ricerca, lista);

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

  233.             return ServletUtils.getStrutsForwardEditModeFinished( mapping, AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  234.                     ForwardParams.CHANGE());
  235.         } catch (Exception e) {
  236.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  237.                     AccordiServizioParteSpecificaCostanti.OBJECT_NAME_APS_ALLEGATI,
  238.                     ForwardParams.CHANGE());
  239.         }  
  240.     }

  241.    
  242. }