ApiHelper.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.api;

  21. import java.text.MessageFormat;
  22. import java.util.ArrayList;
  23. import java.util.List;

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

  26. import org.apache.commons.lang.StringEscapeUtils;
  27. import org.apache.commons.lang.StringUtils;
  28. import org.apache.struts.action.ActionForward;
  29. import org.apache.struts.action.ActionMapping;
  30. import org.openspcoop2.core.commons.Filtri;
  31. import org.openspcoop2.core.commons.ISearch;
  32. import org.openspcoop2.core.commons.Liste;
  33. import org.openspcoop2.core.commons.SearchUtils;
  34. import org.openspcoop2.core.config.CanaleConfigurazione;
  35. import org.openspcoop2.core.config.CanaliConfigurazione;
  36. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  37. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  38. import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
  39. import org.openspcoop2.core.id.IDAccordo;
  40. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  41. import org.openspcoop2.core.registry.GruppiAccordo;
  42. import org.openspcoop2.core.registry.GruppoAccordo;
  43. import org.openspcoop2.core.registry.PortType;
  44. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  45. import org.openspcoop2.core.registry.beans.GruppoSintetico;
  46. import org.openspcoop2.core.registry.driver.BeanUtilities;
  47. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  48. import org.openspcoop2.message.constants.ServiceBinding;
  49. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  50. import org.openspcoop2.protocol.manifest.constants.InterfaceType;
  51. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  52. import org.openspcoop2.protocol.sdk.ProtocolException;
  53. import org.openspcoop2.protocol.sdk.constants.ArchiveType;
  54. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  55. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  56. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  57. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  58. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  59. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  60. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  61. import org.openspcoop2.web.ctrlstat.costanti.InUsoType;
  62. import org.openspcoop2.web.ctrlstat.driver.DriverControlStationException;
  63. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
  64. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneHelper;
  65. import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneUtilities;
  66. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCostanti;
  67. import org.openspcoop2.web.ctrlstat.servlet.archivi.ExporterUtils;
  68. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  69. import org.openspcoop2.web.lib.mvc.AreaBottoni;
  70. import org.openspcoop2.web.lib.mvc.CheckboxStatusType;
  71. import org.openspcoop2.web.lib.mvc.Costanti;
  72. import org.openspcoop2.web.lib.mvc.DataElement;
  73. import org.openspcoop2.web.lib.mvc.DataElementImage;
  74. import org.openspcoop2.web.lib.mvc.DataElementType;
  75. import org.openspcoop2.web.lib.mvc.ForwardParams;
  76. import org.openspcoop2.web.lib.mvc.GeneralData;
  77. import org.openspcoop2.web.lib.mvc.PageData;
  78. import org.openspcoop2.web.lib.mvc.Parameter;
  79. import org.openspcoop2.web.lib.mvc.ServletUtils;
  80. import org.openspcoop2.web.lib.mvc.TargetType;
  81. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  82. /**
  83.  * ApiHelper
  84.  *
  85.  * @author Giuliano Pintori (pintori@link.it)
  86.  * @author $Author$
  87.  * @version $Rev$, $Date$
  88.  */
  89. public class ApiHelper extends AccordiServizioParteComuneHelper {

  90.     public ApiHelper(HttpServletRequest request, PageData pd, HttpSession session) throws Exception {
  91.         super(request, pd, session);
  92.     }


  93.     public void prepareApiList(List<AccordoServizioParteComuneSintetico> lista, ISearch ricerca, String tipoAccordo) throws DriverControlStationException {
  94.         try {

  95.             if(lista==null) {
  96.                 throw new DriverControlStationException("Param lista is null");
  97.             }
  98.            
  99.             ServletUtils.addListElementIntoSession(this.request, this.session, ApiCostanti.OBJECT_NAME_APC_API,
  100.                     new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO, tipoAccordo));
  101.            
  102.             ServletUtils.setObjectIntoSession(this.request, this.session, Boolean.valueOf(true), ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API);
  103.            
  104.             this.pd.setCustomListViewName(ApiCostanti.APC_API_NOME_VISTA_CUSTOM_LISTA_API);
  105.            
  106.             boolean showProtocolli = this.core.countProtocolli(this.request, this.session)>1;
  107.             boolean showServiceBinding = true;
  108.             boolean showResources = true;
  109.             boolean showServices = true;
  110.             if( !showProtocolli ) {
  111.                 List<String> l = this.core.getProtocolli(this.request, this.session);
  112.                 if(!l.isEmpty()) {
  113.                     IProtocolFactory<?> p = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(l.get(0));
  114.                     if(p.getManifest().getBinding().getRest()==null) {
  115.                         showResources=false;
  116.                     }
  117.                     if(p.getManifest().getBinding().getSoap()==null) {
  118.                         showServices=false;
  119.                     }
  120.                     if( (!showResources) || (!showServices) ) {
  121.                         showServiceBinding = false;
  122.                     }
  123.                 }
  124.             }
  125.            
  126.             int idLista = Liste.ACCORDI;
  127.             int limit = ricerca.getPageSize(idLista);
  128.             int offset = ricerca.getIndexIniziale(idLista);
  129.             String search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
  130.            
  131.             String filterProtocol = addFilterProtocol(ricerca, idLista, true);
  132.            
  133.             String protocolloS = filterProtocol;
  134.             if(protocolloS==null) {
  135.                 // significa che e' stato selezionato un protocollo nel menu in alto a destra
  136.                 List<String> protocolli = this.core.getProtocolli(this.request, this.session);
  137.                 if(protocolli!=null && protocolli.size()==1) {
  138.                     protocolloS = protocolli.get(0);
  139.                 }
  140.             }
  141.             // filtri MODIPA da visualizzare solo se non e' stato selezionato un protocollo in alto a dx  (opzione pilota da file di proprieta')
  142.             // oppure e' selezionato MODIPA
  143.             // oppure non e' stato selezionato un protocollo in alto e nessun protocollo nei filtri  (opzione pilota da file di proprieta')
  144.             // oppure MODIPA nei filtri
  145.             boolean profiloModipaSelezionato = false;
  146.             // solo se il protocollo modipa e' caricato faccio la verifica
  147.             if(this.core.getProtocolli().contains(CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_MODIPA)) {
  148.                 List<String> profiloModipaSelezionatoOpzioniAccettate = new ArrayList<>();
  149.                 profiloModipaSelezionatoOpzioniAccettate.add(CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_MODIPA);
  150.                 if(this.core.isModipaFiltroRicercaProfiloQualsiasiVisualizzaDatiModi()) {
  151.                     profiloModipaSelezionatoOpzioniAccettate.add(CostantiControlStation.DEFAULT_VALUE_PARAMETRO_PROTOCOLLO_QUALSIASI);
  152.                 }
  153.                 if( (filterProtocol!=null && profiloModipaSelezionatoOpzioniAccettate.contains(filterProtocol))
  154.                         ||
  155.                     (filterProtocol==null && protocolloS!=null && profiloModipaSelezionatoOpzioniAccettate.contains(protocolloS))
  156.                     ) {
  157.                     profiloModipaSelezionato = true;
  158.                 }
  159.             }
  160.                        
  161.             String filterTipoAccordo = null;
  162.             if(showServiceBinding) {
  163.                 filterTipoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_SERVICE_BINDING);
  164.                 boolean postBackServiceBinding = profiloModipaSelezionato; // serve per pilotare la label sulla sicurezza messaggio
  165.                 this.addFilterServiceBinding(filterTipoAccordo,postBackServiceBinding,false);
  166.             }
  167.            
  168.             String filterGruppo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_GRUPPO);
  169.             addFilterGruppo(filterProtocol, filterGruppo, false);
  170.            
  171.             CanaliConfigurazione canali = this.confCore.getCanaliConfigurazione(false);
  172.             if(canali!=null && StatoFunzionalita.ABILITATO.equals(canali.getStato())) {
  173.                 String filterCanale = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_CANALE);
  174.                 addFilterCanale(canali, filterCanale, false);
  175.             }
  176.            
  177.             if(this.isShowGestioneWorkflowStatoDocumenti() &&
  178.                 this.core.isGestioneWorkflowStatoDocumentiVisualizzaStatoLista()) {
  179.                 String filterStatoAccordo = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_STATO_ACCORDO);
  180.                 this.addFilterStatoAccordo(filterStatoAccordo,false);
  181.             }
  182.                
  183.            
  184.             // **** filtro modi ****
  185.            
  186.             if(profiloModipaSelezionato) {
  187.                 this.addFilterSubtitle(CostantiControlStation.NAME_SUBTITLE_FILTRI_MODIPA, CostantiControlStation.LABEL_SUBTITLE_FILTRI_MODIPA, false);
  188.                
  189.                 // filtro sicurezza canale
  190.                 this.addFilterModISicurezzaCanale(ricerca, idLista);
  191.                
  192.                 // filtro sicurezza messaggio
  193.                 this.addFilterModISicurezzaMessaggio(ricerca, idLista, filterTipoAccordo);
  194.                
  195.                 // filtro sorgente token
  196.                 this.addFilterModIGenerazioneToken(ricerca, idLista);
  197.                
  198.                 // filtro digest richiesta
  199.                 this.addFilterModIDigestRichiesta(ricerca, idLista);
  200.                
  201.                 // filtro ifo utente
  202.                 this.addFilterModIInfoUtente(ricerca, idLista);
  203.                
  204.                 // imposto apertura sezione
  205.                 this.impostaAperturaSubtitle(CostantiControlStation.NAME_SUBTITLE_FILTRI_MODIPA);
  206.             }
  207.            
  208.             // **** fine filtro modi ****
  209.            
  210.                                    
  211.             this.pd.setIndex(offset);
  212.             this.pd.setPageSize(limit);
  213.             this.pd.setNumEntries(ricerca.getNumEntries(idLista));

  214.             String termine = AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo);
  215.            
  216.             // setto la barra del titolo
  217.             this.pd.setSearchLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
  218.             if (search.equals("")) {
  219.                 this.pd.setSearchDescription("");
  220.                 ServletUtils.setPageDataTitle(this.pd,
  221.                         new Parameter(termine, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST));
  222.             }
  223.             else{
  224.                 ServletUtils.setPageDataTitle(this.pd,
  225.                         new Parameter(termine, AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_LIST),
  226.                         new Parameter(Costanti.PAGE_DATA_TITLE_LABEL_RISULTATI_RICERCA, null));
  227.             }

  228.             // controllo eventuali risultati ricerca
  229.             if (!search.equals("")) {
  230.                 ServletUtils.enabledPageDataSearch(this.pd, termine, search);
  231.             }
  232.            
  233.             List<String> labelLst = new ArrayList<>();
  234.             labelLst.add("");//AccordiServizioParteComuneCostanti.LABEL_APC_STATO); // colonna stato
  235.             labelLst.add(termine);
  236.            
  237.             String [] labels = labelLst.toArray(new String[labelLst.size()]);
  238.             this.pd.setLabels(labels);

  239.             // preparo i dati
  240.             List<List<DataElement>> dati = new ArrayList<>();
  241.            
  242.             // colleziono i tags registrati
  243.             List<String> tagsDisponibili = this.gruppiCore.getAllGruppiOrdinatiPerDataRegistrazione();
  244.            
  245.             // configurazione dei canali
  246.             CanaliConfigurazione gestioneCanali = this.confCore.getCanaliConfigurazione(false);
  247.             boolean gestioneCanaliEnabled = gestioneCanali != null && org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(gestioneCanali.getStato());
  248.             List<CanaleConfigurazione> canaleList = gestioneCanali != null ? gestioneCanali.getCanaleList() : new ArrayList<>();
  249.             CanaleConfigurazione canaleConfigurazioneDefault = null;
  250.             if(gestioneCanaliEnabled) {
  251.                 canaleConfigurazioneDefault = getCanaleDefault(canaleList);
  252.             }

  253.             for (int i = 0; i < lista.size(); i++) {
  254.                 List<DataElement> e = new ArrayList<>();
  255.                 AccordoServizioParteComuneSintetico accordoServizio = lista.get(i);
  256.                
  257.                 Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, accordoServizio.getId()+"");
  258.                 Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, accordoServizio.getNome());
  259.                 Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
  260.                
  261.                 ServiceBinding serviceBinding = this.apcCore.toMessageServiceBinding(accordoServizio.getServiceBinding());
  262.                
  263.                 String protocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(accordoServizio.getSoggettoReferente().getTipo());
  264.                
  265.                 // SCHEMA Assegnazione dati -> DataElement:
  266.                 // Data Element 1. colonna 1, riga superiore: Titolo Api
  267.                 // Data Element 2. colonna 1, riga inferiore: Metadati Api
  268.                
  269.                 // Titolo API
  270.                 DataElement de = new DataElement();
  271.                 de.setType(DataElementType.TITLE);
  272.                 de.setUrl(ApiCostanti.SERVLET_NAME_APC_API_CHANGE, pIdAccordo, pNomeAccordo , pTipoAccordo);
  273.                 IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(accordoServizio);
  274.                 String labelAccordo = getLabelIdAccordo(protocollo, idAccordo);
  275.                 de.setValue(labelAccordo);
  276.                 de.setIdToRemove("" + accordoServizio.getId());
  277.                 e.add(de);
  278.                
  279.                 // Metadati Servizio
  280.                 de = new DataElement();
  281.                 String labelServiceBinding = null;
  282.                 switch (serviceBinding) {
  283.                 case REST:
  284.                     labelServiceBinding= CostantiControlStation.LABEL_PARAMETRO_SERVICE_BINDING_REST;
  285.                     break;
  286.                 case SOAP:
  287.                 default:
  288.                     labelServiceBinding= CostantiControlStation.LABEL_PARAMETRO_SERVICE_BINDING_SOAP;
  289.                     break;
  290.                 }
  291.                 InterfaceType interfaceType = this.apcCore.formatoSpecifica2InterfaceType(accordoServizio.getFormatoSpecifica());
  292.                 labelServiceBinding = labelServiceBinding + " " + this.getLabelWSDLFromFormatoSpecifica(interfaceType);
  293.                
  294.                 if(gestioneCanaliEnabled) {
  295.                     String labelCanale = accordoServizio.getCanale();
  296.                     if(labelCanale == null) { // default
  297.                         labelCanale =  canaleConfigurazioneDefault.getNome();
  298.                     }
  299.                    
  300.                     if(showProtocolli) {
  301.                         String labelProtocollo =this.getLabelProtocollo(protocollo);
  302.                         de.setValue(MessageFormat.format(ApiCostanti.MESSAGE_METADATI_APC_API_CON_CANALE_CON_PROFILO, labelServiceBinding, labelCanale, labelProtocollo));
  303.                     } else {
  304.                         de.setValue(MessageFormat.format(ApiCostanti.MESSAGE_METADATI_APC_API_LIST_CON_CANALE, labelServiceBinding, labelCanale));
  305.                     }
  306.                 } else {
  307.                     if(showProtocolli) {
  308.                         String labelProtocollo =this.getLabelProtocollo(protocollo);
  309.                         de.setValue(MessageFormat.format(ApiCostanti.MESSAGE_METADATI_APC_API_CON_PROFILO, labelServiceBinding, labelProtocollo));
  310.                     } else {
  311.                         de.setValue(MessageFormat.format(ApiCostanti.MESSAGE_METADATI_APC_API_LIST, labelServiceBinding));
  312.                     }
  313.                 }
  314.                
  315.                 de.setType(DataElementType.SUBTITLE);
  316.                 e.add(de);
  317.                
  318.                 de = new DataElement();
  319.                 de.setName(ApiCostanti.APC_API_PARAMETRO_STATO_SERVIZI);
  320.                 de.setType(DataElementType.CHECKBOX);
  321.                
  322.                 // controllo stato dell'API
  323.                 ConsoleSearch searchForCount = new ConsoleSearch(true);
  324.                 switch (serviceBinding) {
  325.                 case REST:
  326.                     // caso REST: l'API e' abilitata se ha almeno una risorsa
  327.                    
  328.                     this.apcCore.accordiResourceList(accordoServizio.getId().intValue(), searchForCount);
  329.                     int numRisorse = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES);
  330.                    
  331.                     if(numRisorse > 0) {
  332.                         de.setStatusType(CheckboxStatusType.ABILITATO);
  333.                         de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_RISORSE_TUTTE_ABILITATE_TOOLTIP);
  334.                     } else {
  335.                         de.setStatusType(CheckboxStatusType.DISABILITATO);
  336.                         de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_RISORSE_TUTTE_DISABILITATE_TOOLTIP);
  337.                     }
  338.                     break;
  339.                 case SOAP:
  340.                 default:
  341.                     List<PortType> accordiPorttypeList = this.apcCore.accordiPorttypeList(accordoServizio.getId().intValue(), searchForCount);
  342.                     int numeroTotaleServizi = accordiPorttypeList.size();
  343.                     int numeroServiziAbilitati = 0;
  344.                    
  345.                     for (PortType portType : accordiPorttypeList) {
  346.                         if(portType.sizeAzioneList()>0) {
  347.                             numeroServiziAbilitati ++;
  348.                         }  
  349.                     }
  350.                    
  351.                     if(numeroTotaleServizi == 0) {
  352.                         de.setStatusType(CheckboxStatusType.DISABILITATO);
  353.                         de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_DISABILITATI_TOOLTIP);
  354.                     }
  355.                     else if(numeroServiziAbilitati==0) {
  356.                         de.setStatusType(CheckboxStatusType.DISABILITATO);
  357.                         if(numeroTotaleServizi==1) {
  358.                             de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZIO_PARZIALMENTE_CONFIGURATO_DISABILITATI_TOOLTIP);
  359.                         }
  360.                         else {
  361.                             de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_SENZA_AZIONE_TOOLTIP);
  362.                         }
  363.                     }
  364.                     else if(numeroServiziAbilitati == numeroTotaleServizi) {
  365.                         de.setStatusType(CheckboxStatusType.ABILITATO);
  366.                         de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_ABILITATI_TOOLTIP);
  367.                     }
  368.                     else {
  369.                         de.setStatusType(CheckboxStatusType.WARNING_ONLY);
  370.                         de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_PARZIALMENTE_ABILITATI_TOOLTIP);
  371.                     }
  372.                     break;
  373.                 }
  374.                
  375.                 de.setWidthPx(16);
  376.                 e.add(de);
  377.                
  378.                 // tags
  379.                 List<GruppoSintetico> gruppo = accordoServizio.getGruppo();
  380.                 if(gruppo != null && !gruppo.isEmpty()) {
  381.                     for (int j = 0; j < gruppo.size(); j++) {
  382.                         GruppoSintetico gruppoSintetico = gruppo.get(j);
  383.                         de = new DataElement();
  384.                         de.setName(ApiCostanti.PARAMETRO_APC_API_GESTIONE_GRUPPO + "_" + j);
  385.                         de.setType(DataElementType.BUTTON);
  386.                         de.setLabel(gruppoSintetico.getNome());
  387.                        
  388.                         int indexOf = tagsDisponibili.indexOf(gruppoSintetico.getNome());
  389.                         if(indexOf == -1)
  390.                             indexOf = 0;
  391.                        
  392.                         indexOf = indexOf % CostantiControlStation.NUMERO_GRUPPI_CSS;
  393.                        
  394.                         de.setStyleClass("label-info-"+indexOf);
  395.                        
  396.                         e.add(de);
  397.                     }
  398.                 }
  399.                                
  400.                 // In Uso Button
  401.                 this.addInUsoButton(e, labelAccordo, accordoServizio.getId()+"", InUsoType.ACCORDO_SERVIZIO_PARTE_COMUNE);
  402.                
  403.                 // se e' abilitata l'opzione reset cache per elemento, visualizzo il comando nell'elenco dei comandi disponibili nella lista
  404.                 if(this.core.isElenchiVisualizzaComandoResetCacheSingoloElemento()){
  405.                    
  406.                     List<Parameter> listaParametriChange = new ArrayList<>();              
  407.                     listaParametriChange.add(pIdAccordo);
  408.                     listaParametriChange.add(pNomeAccordo);
  409.                     listaParametriChange.add(pTipoAccordo);
  410.                    
  411.                     this.addComandoResetCacheButton(e, labelAccordo, ApiCostanti.SERVLET_NAME_APC_API_CHANGE, listaParametriChange);
  412.                 }

  413.                 // Proprieta Button
  414.                 if(this.existsProprietaOggetto(accordoServizio.getProprietaOggetto(), accordoServizio.getDescrizione())) {
  415.                     this.addProprietaOggettoButton(e, labelAccordo, accordoServizio.getId()+"", InUsoType.ACCORDO_SERVIZIO_PARTE_COMUNE);
  416.                 }
  417.                
  418.                 // aggiungo entry
  419.                 dati.add(e);
  420.             }


  421.             this.pd.setDati(dati);
  422.             this.pd.setAddButton(true);

  423.             // preparo bottoni
  424.             if(lista!=null && !lista.isEmpty() &&
  425.                 this.core.isShowPulsantiImportExport()) {

  426.                 ExporterUtils exporterUtils = new ExporterUtils(this.archiviCore);
  427.                 boolean exists = false;
  428.                 if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoAccordo)){
  429.                     exists = exporterUtils.existsAtLeastOneExportMode(ArchiveType.ACCORDO_SERVIZIO_PARTE_COMUNE, this.request, this.session);
  430.                 }
  431.                 else{
  432.                     exists = exporterUtils.existsAtLeastOneExportMode(ArchiveType.ACCORDO_SERVIZIO_COMPOSTO, this.request, this.session);
  433.                 }
  434.                 if(exists){

  435.                     List<AreaBottoni> bottoni = new ArrayList<>();

  436.                     AreaBottoni ab = new AreaBottoni();
  437.                     List<DataElement> otherbott = new ArrayList<>();
  438.                     DataElement de = new DataElement();
  439.                     de.setValue(AccordiServizioParteComuneCostanti.LABEL_APC_ESPORTA_SELEZIONATI);
  440.                     if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoAccordo)){
  441.                         de.setOnClick(AccordiServizioParteComuneCostanti.LABEL_APC_ESPORTA_SELEZIONATI_ONCLICK);
  442.                     }
  443.                     else{
  444.                         de.setOnClick(AccordiServizioParteComuneCostanti.LABEL_ASC_ESPORTA_SELEZIONATI_ONCLICK);
  445.                     }
  446.                     de.setDisabilitaAjaxStatus();
  447.                     otherbott.add(de);
  448.                     ab.setBottoni(otherbott);
  449.                     bottoni.add(ab);

  450.                     this.pd.setAreaBottoni(bottoni);

  451.                 }

  452.             }

  453.         } catch (Exception e) {
  454.             this.logError("Exception: " + e.getMessage(), e);
  455.             throw new DriverControlStationException(e);
  456.         }
  457.     }


  458.     public void prepareApiChange(TipoOperazione tipoOp, AccordoServizioParteComune as) throws DriverControlStationException, DriverRegistroServiziException, ProtocolException, DriverConfigurazioneException, DriverConfigurazioneNotFound {
  459.        
  460.         String tipoAccordo = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
  461.         Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
  462.        
  463.         IDAccordo idAccordoOLD = this.idAccordoFactory.getIDAccordoFromValues(as.getNome(),BeanUtilities.getSoggettoReferenteID(as.getSoggettoReferente()),as.getVersione());
  464.         String tipoProtocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(as.getSoggettoReferente().getTipo());
  465.         String labelASTitle = this.getLabelIdAccordo(tipoProtocollo, idAccordoOLD);
  466.        
  467.         ServletUtils.setObjectIntoSession(this.request, this.session, Boolean.valueOf(true), ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API);
  468.        
  469.         // setto la barra del titolo
  470.         List<Parameter> lstParm = new ArrayList<>();
  471.         String termine = AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo);
  472.         lstParm.add(new Parameter(termine, ApiCostanti.SERVLET_NAME_APC_API_LIST,pTipoAccordo));
  473.         lstParm.add(new Parameter(labelASTitle, null));

  474.         // setto la barra del titolo
  475.         ServletUtils.setPageDataTitle(this.pd, lstParm);
  476.        
  477.         // Preparo il menu
  478.         this.makeMenu();
  479.        
  480.         List<List<DataElement>> datiPagina = new ArrayList<>();
  481.         List<DataElement> dati = new ArrayList<>();
  482.         datiPagina.add(dati);
  483.         dati.add(ServletUtils.getDataElementForEditModeFinished());
  484.        
  485.         ServiceBinding serviceBinding = this.apcCore.toMessageServiceBinding(as.getServiceBinding());
  486.        
  487.         datiPagina = this.addApiToDati(datiPagina, tipoOp, as, tipoAccordo, tipoProtocollo, serviceBinding);
  488.        
  489.         this.pd.setDati(datiPagina);
  490.         this.pd.disableEditMode();
  491.     }
  492.    
  493.     public ActionForward prepareApiResetCache(ActionMapping mapping, GeneralData gd,
  494.             TipoOperazione tipoOp, AccordoServizioParteComune as) throws Exception{
  495.        
  496.         String tipoAccordo = this.getParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO);
  497.         Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
  498.        
  499.         IDAccordo idAccordoOLD = this.idAccordoFactory.getIDAccordoFromValues(as.getNome(),BeanUtilities.getSoggettoReferenteID(as.getSoggettoReferente()),as.getVersione());
  500.         String tipoProtocollo = this.soggettiCore.getProtocolloAssociatoTipoSoggetto(as.getSoggettoReferente().getTipo());
  501.         String labelASTitle = this.getLabelIdAccordo(tipoProtocollo, idAccordoOLD);
  502.        
  503.         ServletUtils.setObjectIntoSession(this.request, this.session, Boolean.valueOf(true), ApiCostanti.SESSION_ATTRIBUTE_VISTA_APC_API);
  504.        
  505.         String userLogin = ServletUtils.getUserLoginFromSession(this.session);  
  506.        
  507.         // setto la barra del titolo
  508.         List<Parameter> lstParm = new ArrayList<>();
  509.         String termine = AccordiServizioParteComuneUtilities.getTerminologiaAccordoServizio(tipoAccordo);
  510.         lstParm.add(new Parameter(termine, ApiCostanti.SERVLET_NAME_APC_API_LIST,pTipoAccordo));
  511.         lstParm.add(new Parameter(labelASTitle, null));

  512.         // setto la barra del titolo
  513.         ServletUtils.setPageDataTitle(this.pd, lstParm);
  514.        
  515.         // Preparo il menu
  516.         this.makeMenu();
  517.        
  518.         // Uso lo stessoAlias
  519.         List<String> aliases = this.apcCore.getJmxPdDAliases();
  520.         String alias = null;
  521.         if(aliases!=null && !aliases.isEmpty()) {
  522.             alias = aliases.get(0);
  523.         }
  524.         this.apcCore.invokeJmxMethodAllNodesAndSetResult(this.pd, this.apcCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConfigurazionePdD(alias),
  525.                 this.apcCore.getJmxPdDConfigurazioneSistemaNomeMetodoRipulisciRiferimentiCacheApi(alias),
  526.                 MessageFormat.format(CostantiControlStation.LABEL_ELIMINATO_CACHE_SUCCESSO,labelASTitle),
  527.                 MessageFormat.format(CostantiControlStation.LABEL_ELIMINATO_CACHE_FALLITO_PREFIX,labelASTitle),
  528.                 as.getId());
  529.        
  530.         String resetElementoCacheS = this.getParameter(CostantiControlStation.PARAMETRO_ELIMINA_ELEMENTO_DALLA_CACHE);
  531.         boolean resetElementoCache = ServletUtils.isCheckBoxEnabled(resetElementoCacheS);
  532.        
  533.         // reset delle cache richiesto dal link nella lista, torno alla lista
  534.         if(resetElementoCache) {
  535.             // preparo lista
  536.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(this.request, this.session, ConsoleSearch.class);
  537.            
  538.             int idLista = Liste.ACCORDI;
  539.            
  540.             // poiche' esistono filtri che hanno necessita di postback salvo in sessione
  541.             List<AccordoServizioParteComuneSintetico> lista = null;
  542.             if(this.apcCore.isRegistroServiziLocale() &&
  543.                 !ServletUtils.isSearchDone(this)) {
  544.                 lista = ServletUtils.getRisultatiRicercaFromSession(this.request, this.session, idLista,  AccordoServizioParteComuneSintetico.class);
  545.             }

  546.             ricerca = this.checkSearchParameters(idLista, ricerca);
  547.            
  548.             if(lista==null) {
  549.                 lista = AccordiServizioParteComuneUtilities.accordiList(this.apcCore, userLogin, ricerca, tipoAccordo);
  550.             }

  551.             if(!this.isPostBackFilterElement()) {
  552.                 ServletUtils.setRisultatiRicercaIntoSession(this.request, this.session, idLista, lista); // salvo poiche' esistono filtri che hanno necessita di postback
  553.             }
  554.            
  555.             this.prepareApiList(lista, ricerca, tipoAccordo);

  556.             // salvo l'oggetto ricerca nella sessione
  557.             ServletUtils.setSearchObjectIntoSession(this.request, this.session, ricerca);
  558.  
  559.             ServletUtils.setGeneralAndPageDataIntoSession(this.request, this.session, gd, this.pd);
  560.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, ApiCostanti.OBJECT_NAME_APC_API, CostantiControlStation.TIPO_OPERAZIONE_RESET_CACHE_ELEMENTO);
  561.         } else { // reset richiesto dal dettaglio, torno al dettaglio
  562.             this.prepareApiChange(tipoOp, as);
  563.             ServletUtils.setGeneralAndPageDataIntoSession(this.request, this.session, gd, this.pd);
  564.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, ApiCostanti.OBJECT_NAME_APC_API, ForwardParams.CHANGE());
  565.         }
  566.     }


  567.     private List<List<DataElement>> addApiToDati(List<List<DataElement>> datiPagina, TipoOperazione tipoOp,
  568.             AccordoServizioParteComune as, String tipoAccordo, String tipoProtocollo, ServiceBinding serviceBinding) throws DriverRegistroServiziException, DriverControlStationException, ProtocolException, DriverConfigurazioneException, DriverConfigurazioneNotFound {
  569.        
  570.         if(tipoOp!=null) {
  571.             // nop
  572.         }
  573.        
  574.         this.pd.setCustomListViewName(ApiCostanti.APC_API_NOME_VISTA_CUSTOM_FORM_API);
  575.        
  576.         Parameter pIdAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ID, as.getId()+"");
  577.         Parameter pNomeAccordo = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_NOME, as.getNome());
  578.         Parameter pTipoAccordo = AccordiServizioParteComuneUtilities.getParametroAccordoServizio(tipoAccordo);
  579.        
  580.         IDAccordo idAccordo = this.idAccordoFactory.getIDAccordoFromAccordo(as);
  581.         String labelAccordo = getLabelIdAccordo(tipoProtocollo, idAccordo);
  582.         boolean showProtocolli = this.core.countProtocolli(this.request, this.session)>1;
  583.         // sezione 1 riepilogo
  584.         // nome accordo + link edit
  585.         // nome soggetto referente + link edit
  586.         // tipo interfaccia + link wsdl change + link download
  587.         List<DataElement> dati = datiPagina.get(0);
  588.        
  589.         List<Parameter> listParametersApi = new ArrayList<>();
  590.         listParametersApi.add(new Parameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE, "")); // lasciare per primo
  591.         listParametersApi.add(pIdAccordo);
  592.         listParametersApi.add(pNomeAccordo);
  593.         listParametersApi.add(pTipoAccordo);
  594.        
  595.         // In Uso Button
  596.         this.addComandoInUsoButton(labelAccordo, as.getId()+"", InUsoType.ACCORDO_SERVIZIO_PARTE_COMUNE);

  597.         // se e' abilitata l'opzione reset cache per elemento, visualizzo il comando nell'elenco dei comandi disponibili nella lista
  598.         if(this.core.isElenchiVisualizzaComandoResetCacheSingoloElemento()){
  599.             List<Parameter> listaParametriChange = new ArrayList<>();              
  600.             listaParametriChange.add(pIdAccordo);
  601.             listaParametriChange.add(pNomeAccordo);
  602.             listaParametriChange.add(pTipoAccordo);
  603.            
  604.             this.pd.addComandoResetCacheElementoButton(ApiCostanti.SERVLET_NAME_APC_API_CHANGE, listaParametriChange);
  605.         }
  606.        
  607.         // Proprieta Button
  608.         if(this.existsProprietaOggetto(as.getProprietaOggetto(), as.getDescrizione())) {
  609.             this.addComandoProprietaOggettoButton(labelAccordo, as.getId()+"", InUsoType.ACCORDO_SERVIZIO_PARTE_COMUNE);
  610.         }
  611.        
  612.         // Titolo API
  613.         DataElement de = new DataElement();
  614.         de.setType(DataElementType.CHECKBOX);
  615.         de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_NOME);
  616.         de.setValue(getLabelIdAccordoSenzaReferente(tipoProtocollo, idAccordo));
  617.         de.setStatusValue(getLabelIdAccordoSenzaReferente(tipoProtocollo, idAccordo));
  618.                
  619.         DataElementImage image = new DataElementImage();
  620.         listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_INFORMAZIONI_GENERALI);
  621.         image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  622.         image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, ApiCostanti.APC_API_LABEL_APS_INFO_GENERALI));
  623.         image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  624.         de.addImage(image);
  625.        
  626.         if(as.getDescrizione()==null || StringUtils.isEmpty(as.getDescrizione())) {
  627.             image = new DataElementImage();
  628.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_DESCRIZIONE);
  629.             image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  630.             image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_AGGIUNGI_DESCRIZIONE_TOOLTIP_CON_PARAMETRO, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE));
  631.             image.setImage(ApiCostanti.APC_API_ICONA_AGGIUNGI_DESCRIZIONE);
  632.             de.addImage(image);
  633.         }
  634.        
  635.         ConsoleSearch searchForCount = new ConsoleSearch(true);
  636.         switch (serviceBinding) {
  637.         case REST:
  638.             // caso REST: l'API e' abilitata se ha almeno una risorsa
  639.            
  640.             this.apcCore.accordiResourceList(as.getId().intValue(), searchForCount);
  641.             int numRisorse = searchForCount.getNumEntries(Liste.ACCORDI_API_RESOURCES);
  642.            
  643.             if(numRisorse > 0) {
  644.                 de.setStatusType(CheckboxStatusType.ABILITATO);
  645.                 de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_RISORSE_TUTTE_ABILITATE_TOOLTIP);
  646.             } else {
  647.                 de.setStatusType(CheckboxStatusType.DISABILITATO);
  648.                 de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_RISORSE_TUTTE_DISABILITATE_TOOLTIP);
  649.             }
  650.             break;
  651.         case SOAP:
  652.         default:
  653.             List<PortType> accordiPorttypeList = this.apcCore.accordiPorttypeList(as.getId().intValue(), searchForCount);
  654.             int numeroTotaleServizi = accordiPorttypeList.size();
  655.             int numeroServiziAbilitati = 0;
  656.            
  657.             for (PortType portType : accordiPorttypeList) {
  658.                 if(portType.sizeAzioneList()>0) {
  659.                     numeroServiziAbilitati ++;
  660.                 }  
  661.             }
  662.            
  663.             if(numeroTotaleServizi == 0) {
  664.                 de.setStatusType(CheckboxStatusType.DISABILITATO);
  665.                 de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_DISABILITATI_TOOLTIP);
  666.             }
  667.             else if(numeroServiziAbilitati==0) {
  668.                 de.setStatusType(CheckboxStatusType.DISABILITATO);
  669.                 if(numeroTotaleServizi==1) {
  670.                     de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZIO_PARZIALMENTE_CONFIGURATO_DISABILITATI_TOOLTIP);
  671.                 }
  672.                 else {
  673.                     de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_SENZA_AZIONE_TOOLTIP);
  674.                 }
  675.             }
  676.             else if(numeroServiziAbilitati == numeroTotaleServizi) {
  677.                 de.setStatusType(CheckboxStatusType.ABILITATO);
  678.                 de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_TUTTI_ABILITATI_TOOLTIP);
  679.             }
  680.             else {
  681.                 de.setStatusType(CheckboxStatusType.WARNING_ONLY);
  682.                 de.setStatusToolTip(ApiCostanti.APC_API_ICONA_STATO_SERVIZI_PARZIALMENTE_ABILITATI_TOOLTIP);
  683.             }
  684.             break;
  685.         }
  686.        
  687.         dati.add(de);
  688.        

  689.        
  690.         // soggetto referente
  691.         ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  692.         IProtocolFactory<?> protocolFactory = protocolFactoryManager.getProtocolFactoryByName(tipoProtocollo);
  693.         boolean supportatoSoggettoReferente = protocolFactory.createProtocolConfiguration().isSupportoSoggettoReferenteAccordiParteComune();
  694.         if(supportatoSoggettoReferente) {
  695.             de = new DataElement();
  696.             de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE);
  697.             de.setValue(this.getLabelNomeSoggetto(tipoProtocollo,as.getSoggettoReferente().getTipo(),as.getSoggettoReferente().getNome()));
  698.             de.setType(DataElementType.TEXT);
  699.             image = new DataElementImage();
  700.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_SOGGETTO_REFERENTE);
  701.             image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  702.             image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_REFERENTE));
  703.             image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  704.             de.setImage(image);
  705.             dati.add(de);
  706.         }
  707.        
  708.         // ProtocolProperties
  709.         IConsoleDynamicConfiguration consoleDynamicConfiguration = protocolFactory.createDynamicConfigurationConsole();
  710.         IRegistryReader registryReader = this.apcCore.getRegistryReader(protocolFactory);
  711.         IConfigIntegrationReader configRegistryReader = this.apcCore.getConfigIntegrationReader(protocolFactory);
  712.         ConsoleConfiguration consoleConfiguration = ProtocolPropertiesCostanti.PARAMETRO_VALORE_PP_TIPO_ACCORDO_SERVIZIO_COMPOSTO.equals(tipoAccordo) ?
  713.                 consoleDynamicConfiguration.getDynamicConfigAccordoServizioComposto(ConsoleOperationType.CHANGE, this,
  714.                         registryReader, configRegistryReader, idAccordo)
  715.                 : consoleDynamicConfiguration.getDynamicConfigAccordoServizioParteComune(ConsoleOperationType.CHANGE, this,
  716.                         registryReader, configRegistryReader, idAccordo);
  717.         boolean modificaDatiProfilo = false;
  718.         if(consoleConfiguration!=null && consoleConfiguration.getConsoleItem()!=null && !consoleConfiguration.getConsoleItem().isEmpty()) {
  719.             modificaDatiProfilo = true;
  720.         }
  721.         if(showProtocolli || modificaDatiProfilo) {
  722.             de = new DataElement();
  723.             String labelProtocollo =this.getLabelProtocollo(tipoProtocollo);
  724.             de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO);
  725.             de.setValue(labelProtocollo);
  726.             de.setType(DataElementType.TEXT);
  727.            
  728.             if(modificaDatiProfilo) {
  729.                 image = new DataElementImage();
  730.                 listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_PROFILO);
  731.                 image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  732.                 image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_PROTOCOLLO));
  733.                 image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  734.                 de.setImage(image);
  735.             }
  736.            
  737.             dati.add(de);
  738.         }
  739.        
  740.         // interfaccia
  741.         de = new DataElement();
  742.         de.setLabel(ApiCostanti.APC_API_LABEL_PARAMETRO_INTERFACCIA);
  743.         de.setType(DataElementType.TEXT);
  744.        
  745.         String labelServiceBinding = null;
  746.         String tipoWsdl = null;
  747.         String tipologiaDocumentoScaricare = null;
  748.         boolean download = false;
  749.         switch (serviceBinding) {
  750.         case REST:
  751.             labelServiceBinding= CostantiControlStation.LABEL_PARAMETRO_SERVICE_BINDING_REST;
  752.             tipoWsdl = AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE;
  753.             tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_CONCETTUALE;
  754.             download = as.getByteWsdlConcettuale()!=null &&  as.getByteWsdlConcettuale().length>0;
  755.             break;
  756.         case SOAP:
  757.         default:
  758.             labelServiceBinding= CostantiControlStation.LABEL_PARAMETRO_SERVICE_BINDING_SOAP;
  759.             tipoWsdl = AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE;
  760.             tipologiaDocumentoScaricare = ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_WSDL_LOGICO_EROGATORE;
  761.             download = as.getByteWsdlLogicoErogatore()!=null &&  as.getByteWsdlLogicoErogatore().length>0;
  762.             break;
  763.         }
  764.        
  765.         InterfaceType interfaceType = this.apcCore.formatoSpecifica2InterfaceType(as.getFormatoSpecifica());
  766.         String labelWsdlCon = this.getLabelWSDLFromFormatoSpecifica(interfaceType);
  767.         StringBuilder sb = new StringBuilder();
  768.         sb.append(labelServiceBinding).append(" ").append(labelWsdlCon);
  769.         de.setValue(sb.toString());
  770.                
  771.         // lista icone a dx
  772.         // wsdl change
  773.         Parameter pNascondiSezioneDownload = new Parameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE, ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_PARZIALE_WSDL_CHANGE);
  774.         Parameter pTipoWsdl = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_WSDL, tipoWsdl);
  775.         List<Parameter> listParametersApiWsdlChange = new ArrayList<>();
  776.         listParametersApiWsdlChange.add(pIdAccordo);
  777.         listParametersApiWsdlChange.add(pTipoAccordo);
  778.         listParametersApiWsdlChange.add(pTipoWsdl);
  779.         listParametersApiWsdlChange.add(pNascondiSezioneDownload);
  780.         image = new DataElementImage();
  781.         if(this.isModalitaStandard()) {
  782.             image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_WSDL_CHANGE, listParametersApiWsdlChange.toArray(new Parameter[1]));
  783.         }
  784.         else {
  785.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_SPECIFICA_INTERFACCE);
  786.             image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  787.         }
  788.         image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, ApiCostanti.APC_API_LABEL_PARAMETRO_INTERFACCIA));
  789.         image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  790.         image.setTarget(TargetType.SELF);
  791.        
  792.         de.addImage(image);
  793.         // download
  794.         if(download) {
  795.             List<Parameter> listParametersApiWsdlDownload = new ArrayList<>();
  796.             Parameter pIdAccordoDownload = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, as.getId()+"");
  797.             Parameter pTipoDocumentoDownload = new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO, tipologiaDocumentoScaricare);
  798.             Parameter pTipoAccordoDownload = new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE);
  799.             listParametersApiWsdlDownload.add(pIdAccordoDownload);
  800.             listParametersApiWsdlDownload.add(pTipoDocumentoDownload);
  801.             listParametersApiWsdlDownload.add(pTipoAccordoDownload);
  802.            
  803.             image = new DataElementImage();
  804.             image.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, listParametersApiWsdlDownload.toArray(new Parameter[1]));
  805.             image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_DOWNLOAD_DOCUMENTO_INTERFACCIA_TOOLTIP_CON_PARAMETRO, ApiCostanti.APC_API_LABEL_PARAMETRO_INTERFACCIA));
  806.             image.setImage(ApiCostanti.APC_API_ICONA_DOWNLOAD_DOCUMENTO_INTERFACCIA);
  807.             image.setTarget(TargetType.SELF);
  808.             image.setDisabilitaAjaxStatus();
  809.            
  810.             de.addImage(image);
  811.         }
  812.         // xsdSchemaCollction
  813.         if(!this.isModalitaStandard()) {
  814.             boolean asWithAllegati = this.asWithAllegatiXsd(as);
  815.             if(asWithAllegati) {
  816.                 List<Parameter> listParametersApiWsdlDownload = new ArrayList<>();
  817.                 Parameter pIdAccordoDownload = new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_ID_ACCORDO, as.getId()+"");
  818.                 Parameter pTipoDocumentoDownload = new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_TIPO_DOCUMENTO_XSD_SCHEMA_COLLECTION);
  819.                 Parameter pTipoAccordoDownload = new Parameter(ArchiviCostanti.PARAMETRO_ARCHIVI_ALLEGATO_TIPO_ACCORDO, ArchiviCostanti.PARAMETRO_VALORE_ARCHIVI_ALLEGATO_TIPO_ACCORDO_PARTE_COMUNE);
  820.                 Parameter pApiGestioneParziale = new Parameter(ApiCostanti.PARAMETRO_APC_API_GESTIONE_PARZIALE, ApiCostanti.VALORE_PARAMETRO_APC_API_GESTIONE_SPECIFICA_INTERFACCE);
  821.                 listParametersApiWsdlDownload.add(pIdAccordoDownload);
  822.                 listParametersApiWsdlDownload.add(pTipoDocumentoDownload);
  823.                 listParametersApiWsdlDownload.add(pTipoAccordoDownload);
  824.                 listParametersApiWsdlDownload.add(pApiGestioneParziale);
  825.                
  826.                 image = new DataElementImage();
  827.                 image.setUrl(ArchiviCostanti.SERVLET_NAME_DOCUMENTI_EXPORT, listParametersApiWsdlDownload.toArray(new Parameter[1]));
  828.                 image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_DOWNLOAD_DOCUMENTO_INTERFACCIA_TOOLTIP_CON_PARAMETRO,
  829.                         AccordiServizioParteComuneCostanti.LABEL_XSD_SCHEMA_COLLECTION));
  830.                 image.setImage(ApiCostanti.APC_API_ICONA_DOWNLOAD_DOCUMENTO_ARCHIVE);
  831.                 image.setTarget(TargetType.SELF);
  832.                 image.setDisabilitaAjaxStatus();
  833.                
  834.                 de.addImage(image);
  835.             }
  836.         }
  837.        
  838.         dati.add(de);
  839.        
  840.        
  841.         // Descrizione
  842.         if(as.getDescrizione()!=null && StringUtils.isNotEmpty(as.getDescrizione())) {
  843.             de = new DataElement();
  844.             de.setType(DataElementType.TEXT);
  845.             de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE);
  846.             int length = 150;
  847.             String descrizione = null;
  848.             if(as.getDescrizione()!=null && as.getDescrizione().length()>length) {
  849.                 descrizione = as.getDescrizione().substring(0, (length-4)) + " ...";
  850.             }
  851.             else {
  852.                 descrizione =  as.getDescrizione() ;
  853.             }
  854.             de.setValue(descrizione!=null ? StringEscapeUtils.escapeHtml(descrizione) : null);
  855.             de.setToolTip(as.getDescrizione());
  856.             de.setCopyToClipboard(as.getDescrizione());
  857.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_DESCRIZIONE);
  858.             de.setIcon(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  859.            
  860.             image = new DataElementImage();
  861.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_DESCRIZIONE);
  862.             image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  863.             image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_DESCRIZIONE));
  864.             image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  865.             de.setImage(image);
  866.            
  867.             dati.add(de);
  868.         }
  869.        
  870.        
  871.         // Gruppi
  872.         de = new DataElement();
  873.         de.setType(DataElementType.BUTTON);
  874.         de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_GRUPPI);

  875.         List<String> labelsGruppi = new ArrayList<>();
  876.         List<String> valuesGruppi = new ArrayList<>();
  877.        
  878.         GruppiAccordo gruppi = as.getGruppi();
  879.         if(gruppi != null) {
  880.             // colleziono i tags registrati
  881.             List<String> tagsDisponibili = this.gruppiCore.getAllGruppiOrdinatiPerDataRegistrazione();
  882.            
  883.             for (int i = 0; i < gruppi.sizeGruppoList(); i++) {
  884.                 GruppoAccordo gruppo = gruppi.getGruppo(i);
  885.                
  886.                 int indexOf = tagsDisponibili.indexOf(gruppo.getNome());
  887.                 if(indexOf == -1)
  888.                     indexOf = 0;
  889.                
  890.                 indexOf = indexOf % CostantiControlStation.NUMERO_GRUPPI_CSS;
  891.                
  892.                 labelsGruppi.add(gruppo.getNome());
  893.                 valuesGruppi.add("label-info-"+indexOf);
  894.             }
  895.         }  
  896.        
  897.         de.setLabels(labelsGruppi);
  898.         de.setValues(valuesGruppi);
  899.        
  900.         listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_GRUPPI);
  901.         de.setIcon(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  902.         image = new DataElementImage();
  903.         listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_GRUPPI);
  904.         image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  905.         image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_GRUPPI));
  906.         image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  907.         de.setImage(image);
  908.        
  909.         dati.add(de);
  910.        
  911.         // Canale
  912.         CanaliConfigurazione gestioneCanali = this.confCore.getCanaliConfigurazione(false);
  913.         boolean gestioneCanaliEnabled = gestioneCanali != null && org.openspcoop2.core.config.constants.StatoFunzionalita.ABILITATO.equals(gestioneCanali.getStato());
  914.         if(gestioneCanaliEnabled) {
  915.             List<CanaleConfigurazione> canaleList = gestioneCanali != null ? gestioneCanali.getCanaleList() : new ArrayList<>();
  916.             de = new DataElement();
  917.             de.setType(DataElementType.TEXT);
  918.             de.setLabel(AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CANALE);
  919.             this.setStatoCanale(de, as.getCanale(), canaleList);
  920.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_CANALE);
  921.             de.setIcon(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  922.            
  923.             image = new DataElementImage();
  924.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_CANALE);
  925.             image.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  926.             image.setToolTip(MessageFormat.format(ApiCostanti.APC_API_ICONA_MODIFICA_API_TOOLTIP_CON_PARAMETRO, AccordiServizioParteComuneCostanti.LABEL_PARAMETRO_APC_CANALE));
  927.             image.setImage(ApiCostanti.APC_API_ICONA_MODIFICA_API);
  928.             de.setImage(image);
  929.            
  930.             dati.add(de);
  931.         }
  932.        
  933.         // Proprieta Oggetto
  934.         this.addProprietaOggetto(dati, as.getProprietaOggetto());

  935.        
  936.         // link
  937.         // 1. risorse/servizi
  938.         switch(serviceBinding) {
  939.         case REST:
  940.                 de = new DataElement();
  941.                 de.setType(DataElementType.LINK);
  942.                 listParametersApi.get(0).setValue("");
  943.                 de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_RESOURCES_LIST, listParametersApi.toArray(new Parameter[1]));
  944.                 de.setValue(ApiCostanti.APC_API_LABEL_GESTIONE_RISORSE);
  945.                 de.setIcon(ApiCostanti.APC_API_ICONA_GESTIONE_RISORSE);
  946.                 dati.add(de);
  947.             break;
  948.         case SOAP:
  949.         default:
  950.             // PortType
  951.             de = new DataElement();
  952.             de.setType(DataElementType.LINK);
  953.             listParametersApi.get(0).setValue("");
  954.             de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_PORT_TYPES_LIST, listParametersApi.toArray(new Parameter[1]));
  955.             de.setValue(ApiCostanti.APC_API_LABEL_GESTIONE_SERVIZI);
  956.             de.setIcon(ApiCostanti.APC_API_ICONA_GESTIONE_SERVIZI);
  957.             dati.add(de);
  958.             break;
  959.        
  960.         }

  961.         // 2. allegati
  962.         de = new DataElement();
  963.         de.setType(DataElementType.LINK);
  964.         listParametersApi.get(0).setValue("");
  965.         de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_ALLEGATI_LIST, listParametersApi.toArray(new Parameter[1]));
  966.         de.setValue(ApiCostanti.APC_API_LABEL_GESTIONE_ALLEGATI);
  967.         de.setIcon(ApiCostanti.APC_API_ICONA_GESTIONE_ALLEGATI);
  968.         dati.add(de);
  969.        
  970.         // 3. opzioni avanzate
  971.         if(this.isModalitaAvanzata()) {
  972.             de = new DataElement();
  973.             de.setType(DataElementType.LINK);
  974.             listParametersApi.get(0).setValue(ApiCostanti.VALORE_PARAMETRO_APC_API_OPZIONI_AVANZATE);
  975.             de.setUrl(AccordiServizioParteComuneCostanti.SERVLET_NAME_APC_CHANGE, listParametersApi.toArray(new Parameter[1]));
  976.             de.setValue(ApiCostanti.APC_API_LABEL_GESTIONE_OPZIONI_AVANZATE);
  977.             de.setIcon(ApiCostanti.APC_API_ICONA_GESTIONE_OPZIONI_AVANZATE);
  978.             dati.add(de);
  979.         }
  980.        
  981.         de = new DataElement();
  982.         de.setType(DataElementType.LINK);
  983.         List<Parameter> listParametersNuovaVersione = new ArrayList<>();
  984.         listParametersNuovaVersione.add(new Parameter(ApiCostanti.PARAMETRO_APC_API_NUOVA_VERSIONE, Costanti.CHECK_BOX_ENABLED_TRUE));
  985.         listParametersNuovaVersione.add(pIdAccordo);
  986.         listParametersNuovaVersione.add(pTipoAccordo);
  987.         de.setUrl(ApiCostanti.SERVLET_NAME_APC_API_ADD, listParametersNuovaVersione.toArray(new Parameter[1]));
  988.         de.setValue(ApiCostanti.APC_API_LABEL_NUOVA_VERSIONE_API);
  989.         de.setIcon(ApiCostanti.APC_API_ICONA_NUOVA_VERSIONE_API);
  990.         de.spostaLinkADestra();
  991.         dati.add(de);
  992.        
  993.        
  994.         return datiPagina;
  995.     }
  996.    
  997.    
  998. }