AccordiServizioParteComuneUtilities.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */
  20. package org.openspcoop2.web.ctrlstat.servlet.apc;

  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.Iterator;
  24. import java.util.List;
  25. import java.util.Map;

  26. import org.openspcoop2.core.commons.ErrorsHandlerCostant;
  27. import org.openspcoop2.core.id.IDAccordo;
  28. import org.openspcoop2.core.id.IDPortType;
  29. import org.openspcoop2.core.id.IDPortTypeAzione;
  30. import org.openspcoop2.core.id.IDResource;
  31. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  32. import org.openspcoop2.core.registry.AccordoServizioParteComuneServizioComposto;
  33. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  34. import org.openspcoop2.core.registry.Documento;
  35. import org.openspcoop2.core.registry.Operation;
  36. import org.openspcoop2.core.registry.PortType;
  37. import org.openspcoop2.core.registry.ProtocolProperty;
  38. import org.openspcoop2.core.registry.Resource;
  39. import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
  40. import org.openspcoop2.core.registry.constants.FormatoSpecifica;
  41. import org.openspcoop2.core.registry.constants.RuoliDocumento;
  42. import org.openspcoop2.core.registry.constants.StatiAccordo;
  43. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  44. import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
  45. import org.openspcoop2.core.registry.driver.FiltroRicercaOperations;
  46. import org.openspcoop2.core.registry.driver.FiltroRicercaProtocolPropertyRegistry;
  47. import org.openspcoop2.core.registry.driver.FiltroRicercaResources;
  48. import org.openspcoop2.core.registry.driver.IDAccordoFactory;
  49. import org.openspcoop2.core.registry.driver.ValidazioneStatoPackageException;
  50. import org.openspcoop2.core.registry.driver.db.IDAccordoDB;
  51. import org.openspcoop2.protocol.engine.constants.Costanti;
  52. import org.openspcoop2.protocol.engine.utils.DBOggettiInUsoUtils;
  53. import org.openspcoop2.protocol.engine.utils.NamingUtils;
  54. import org.openspcoop2.protocol.manifest.constants.InterfaceType;
  55. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  56. import org.openspcoop2.web.ctrlstat.servlet.aps.AccordiServizioParteSpecificaCore;
  57. import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCore;
  58. import org.openspcoop2.web.lib.mvc.Parameter;


  59. /**
  60.  * AccordiServizioParteComuneUtilities
  61.  *
  62.  * @author Poli Andrea (apoli@link.it)
  63.  * @author $Author$
  64.  * @version $Rev$, $Date$
  65.  */
  66. public class AccordiServizioParteComuneUtilities {

  67.     public static void findOggettiDaAggiornare(IDAccordo idAccordoOLD, AccordoServizioParteComune as, AccordiServizioParteComuneCore apcCore, List<Object> listOggettiDaAggiornare) throws Exception {
  68.        
  69.         AccordiServizioParteSpecificaCore apsCore = new AccordiServizioParteSpecificaCore(apcCore);
  70.        
  71.         IDAccordoFactory idAccordoFactory = IDAccordoFactory.getInstance();
  72.        
  73.         String newURI = idAccordoFactory.getUriFromAccordo(as);

  74.         // Cerco i servizi in cui devo cambiare la URI dell'accordo
  75.         List<AccordoServizioParteSpecifica> servizi = apsCore.serviziByAccordoFilterList(idAccordoOLD);
  76.         if(servizi!=null){
  77.             while(servizi.size()>0){
  78.                 AccordoServizioParteSpecifica s = servizi.remove(0);
  79.                 s.setAccordoServizioParteComune(newURI);
  80.                 listOggettiDaAggiornare.add(s);
  81.             }
  82.         }
  83.        
  84.         if(Costanti.MODIPA_PROTOCOL_NAME.equals(idAccordoOLD.getSoggettoReferente().getTipo())) {
  85.            
  86.             String oldURI = idAccordoFactory.getUriFromIDAccordo(idAccordoOLD);
  87.            
  88.             Map<String, AccordoServizioParteComune> map = new HashMap<String, AccordoServizioParteComune>();
  89.            
  90.             if(org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(as.getServiceBinding())) {
  91.                 FiltroRicercaResources filtroRicerca = new FiltroRicercaResources();
  92.                 FiltroRicercaProtocolPropertyRegistry filtroRPP = new FiltroRicercaProtocolPropertyRegistry();
  93.                 filtroRPP.setName(org.openspcoop2.protocol.engine.constants.Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  94.                 filtroRPP.setValueAsString(oldURI);
  95.                 filtroRicerca.addProtocolPropertyResource(filtroRPP);
  96.                 List<IDResource> list = null;
  97.                 try {
  98.                     list = apcCore.getAllIdResource(filtroRicerca);
  99.                 }catch(DriverRegistroServiziNotFound notFound) {}
  100.                 if(list!=null && !list.isEmpty()) {
  101.                     for (IDResource idResource : list) {
  102.                        
  103.                         AccordoServizioParteComune aspc = null;
  104.                         String uri = idAccordoFactory.getUriFromIDAccordo(idResource.getIdAccordo());
  105.                         boolean forceAdd = false;
  106.                         if(map.containsKey(uri)) {
  107.                             aspc = map.remove(uri);
  108.                             forceAdd = true;
  109.                         }
  110.                         else {
  111.                             if(idResource.getIdAccordo().equals(idAccordoOLD)) {
  112.                                 // è quello che sto modificando
  113.                                 aspc = as;
  114.                             }
  115.                             else {
  116.                                 aspc = apcCore.getAccordoServizioFull(idResource.getIdAccordo());
  117.                             }
  118.                         }
  119.                         boolean find = false;
  120.                         if(aspc.sizeResourceList()>0) {
  121.                             for (Resource res : aspc.getResourceList()) {
  122.                                 if(res.getNome().equals(idResource.getNome())) {
  123.                                     if(res.sizeProtocolPropertyList()>0) {
  124.                                         for (ProtocolProperty pp : res.getProtocolPropertyList()) {
  125.                                             if(org.openspcoop2.protocol.engine.constants.Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName())) {
  126.                                                 pp.setValue(newURI);
  127.                                                 find = true;
  128.                                                 break;
  129.                                             }
  130.                                         }
  131.                                     }
  132.                                     break;
  133.                                 }
  134.                             }
  135.                         }
  136.                         if((!idResource.getIdAccordo().equals(idAccordoOLD)) && (forceAdd || find)) {
  137.                             map.put(uri, aspc);
  138.                         }
  139.                     }
  140.                 }
  141.             }
  142.             else {
  143.                 FiltroRicercaOperations filtroRicerca = new FiltroRicercaOperations();
  144.                 FiltroRicercaProtocolPropertyRegistry filtroRPP = new FiltroRicercaProtocolPropertyRegistry();
  145.                 filtroRPP.setName(org.openspcoop2.protocol.engine.constants.Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA);
  146.                 filtroRPP.setValueAsString(oldURI);
  147.                 filtroRicerca.addProtocolPropertyAzione(filtroRPP);
  148.                 List<IDPortTypeAzione> list = null;
  149.                 try {
  150.                     list = apcCore.getAllIdOperation(filtroRicerca);
  151.                 }catch(DriverRegistroServiziNotFound notFound) {}
  152.                 if(list!=null && !list.isEmpty()) {
  153.                     for (IDPortTypeAzione idAzione : list) {
  154.                        
  155.                         AccordoServizioParteComune aspc = null;
  156.                         String uri = idAccordoFactory.getUriFromIDAccordo(idAzione.getIdPortType().getIdAccordo());
  157.                         boolean forceAdd = false;
  158.                         if(map.containsKey(uri)) {
  159.                             aspc = map.remove(uri);
  160.                             forceAdd = true;
  161.                         }
  162.                         else {
  163.                             if(idAzione.getIdPortType().getIdAccordo().equals(idAccordoOLD)) {
  164.                                 // è quello che sto modificando
  165.                                 aspc = as;
  166.                             }
  167.                             else {
  168.                                 aspc = apcCore.getAccordoServizioFull(idAzione.getIdPortType().getIdAccordo());
  169.                             }
  170.                         }
  171.                         boolean find = false;
  172.                         if(aspc.sizePortTypeList()>0) {
  173.                             for (PortType portType : aspc.getPortTypeList()) {
  174.                                 if(portType.getNome().contentEquals(idAzione.getIdPortType().getNome())) {
  175.                                     if(portType.sizeAzioneList()>0) {
  176.                                         for (Operation op : portType.getAzioneList()) {
  177.                                             if(op.getNome().equals(idAzione.getNome())) {
  178.                                                 if(op.sizeProtocolPropertyList()>0) {
  179.                                                     for (ProtocolProperty pp : op.getProtocolPropertyList()) {
  180.                                                         if(org.openspcoop2.protocol.engine.constants.Costanti.MODIPA_PROFILO_INTERAZIONE_ASINCRONA_API_RICHIESTA_CORRELATA.equals(pp.getName())) {
  181.                                                             pp.setValue(newURI);
  182.                                                             find = true;
  183.                                                             break;
  184.                                                         }
  185.                                                     }
  186.                                                 }
  187.                                                 break;
  188.                                             }
  189.                                         }
  190.                                     }
  191.                                     break;
  192.                                 }
  193.                             }
  194.                         }
  195.                         if((!idAzione.getIdPortType().getIdAccordo().equals(idAccordoOLD)) && (forceAdd || find)) {
  196.                             map.put(uri, aspc);
  197.                         }
  198.                        
  199.                     }
  200.                 }
  201.             }
  202.            
  203.             if(!map.isEmpty()) {
  204.                 listOggettiDaAggiornare.addAll( map.values() );
  205.             }
  206.            
  207.         }
  208.     }
  209.    
  210.     public static boolean deleteAccordoServizioParteComune(AccordoServizioParteComune as, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
  211.        
  212.         HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  213.        
  214.         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as);

  215.         boolean normalizeObjectIds = !apcHelper.isModalitaCompleta();
  216.         if (apcCore.isAccordoInUso(as, whereIsInUso, normalizeObjectIds)) {// accordo in uso
  217.             inUsoMessage.append(DBOggettiInUsoUtils.toString(idAccordo, whereIsInUso, true, newLine, normalizeObjectIds));
  218.             inUsoMessage.append(newLine);
  219.         } else {// accordo non in uso
  220.             apcCore.performDeleteOperation(userLogin, apcHelper.smista(), as);
  221.             return true;
  222.         }
  223.        
  224.         return false;
  225.     }
  226.    
  227.     public static boolean deleteResource(AccordoServizioParteComune as, IDResource idResource, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
  228.         HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  229.         boolean normalizeObjectIds = !apcHelper.isModalitaCompleta();
  230.         boolean risorsaInUso = apcCore.isRisorsaInUso(idResource,whereIsInUso,normalizeObjectIds);
  231.        
  232.         boolean modificaAS_effettuata = false;
  233.        
  234.         if (risorsaInUso) {
  235.            
  236.             // traduco nomeRisorsa in path
  237.             String methodPath = null;
  238.             for (int j = 0; j < as.sizeResourceList(); j++) {
  239.                 Resource risorsa = as.getResource(j);
  240.                 if (idResource.getNome().equals(risorsa.getNome())) {
  241.                     methodPath = NamingUtils.getLabelResource(risorsa);
  242.                     break;
  243.                 }
  244.             }
  245.             if(methodPath==null) {
  246.                 methodPath = idResource.getNome();
  247.             }
  248.            
  249.             inUsoMessage.append(DBOggettiInUsoUtils.toString(idResource, methodPath, whereIsInUso, true, newLine));
  250.             inUsoMessage.append(newLine);

  251.         } else {
  252.             // Effettuo eliminazione
  253.             for (int j = 0; j < as.sizeResourceList(); j++) {
  254.                 Resource risorsa = as.getResource(j);
  255.                 if (idResource.getNome().equals(risorsa.getNome())) {
  256.                     modificaAS_effettuata = true;
  257.                     as.removeResource(j);
  258.                     break;
  259.                 }
  260.             }
  261.         }
  262.        
  263.         return modificaAS_effettuata;
  264.     }
  265.    
  266.     public static void deleteAccordoServizioParteComuneRisorse(AccordoServizioParteComune as, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper,
  267.             StringBuilder inUsoMessage, String newLine, List<String> resourcesToRemove) throws Exception {

  268.         boolean modificaAS_effettuata = false;
  269.        
  270.         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as);
  271.                
  272.         for (int i = 0; i < resourcesToRemove.size(); i++) {
  273.             String nomeRisorsa = resourcesToRemove.get(i);
  274.             IDResource idRisorsa = new IDResource();
  275.             idRisorsa.setNome(nomeRisorsa);
  276.             idRisorsa.setIdAccordo(idAccordo);
  277.            
  278.             boolean modificato = AccordiServizioParteComuneUtilities.deleteResource(as, idRisorsa, userLogin, apcCore, apcHelper, inUsoMessage, newLine);
  279.             if(modificato) {
  280.                 modificaAS_effettuata = true;
  281.             }
  282.            
  283.         }// chiudo for
  284.         if(modificaAS_effettuata) {
  285.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);
  286.         }
  287.     }
  288.    
  289.     public static boolean deletePortType(AccordoServizioParteComune as, IDPortType idPortType, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
  290.         HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  291.         boolean normalizeObjectIds = !apcHelper.isModalitaCompleta();
  292.         boolean portTypeInUso = apcCore.isPortTypeInUso(idPortType,whereIsInUso,normalizeObjectIds);
  293.        
  294.         boolean modificaAS_effettuata = false;
  295.        
  296.         if (portTypeInUso) {
  297.             inUsoMessage.append(DBOggettiInUsoUtils.toString(idPortType, whereIsInUso, true, newLine));
  298.             inUsoMessage.append(newLine);

  299.         } else {
  300.             // Effettuo eliminazione
  301.             for (int j = 0; j < as.sizePortTypeList(); j++) {
  302.                 PortType pt = as.getPortType(j);
  303.                 if (idPortType.getNome().equals(pt.getNome())) {
  304.                     modificaAS_effettuata = true;
  305.                     as.removePortType(j);
  306.                     break;
  307.                 }
  308.             }
  309.         }
  310.        
  311.         return modificaAS_effettuata;
  312.     }
  313.    
  314.     public static void deleteAccordoServizioParteComunePortTypes(AccordoServizioParteComune as, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper,
  315.             StringBuilder inUsoMessage, String newLine, List<String> ptsToRemove) throws Exception {
  316.        
  317.         boolean modificaAS_effettuata = false;
  318.        
  319.         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as);
  320.                
  321.         for (int i = 0; i < ptsToRemove.size(); i++) {
  322.             String nomePT = ptsToRemove.get(i);
  323.            
  324.             IDPortType idPT = new IDPortType();
  325.             idPT.setNome(nomePT);
  326.             idPT.setIdAccordo(idAccordo);
  327.                        
  328.             boolean modificato = AccordiServizioParteComuneUtilities.deletePortType(as, idPT, userLogin, apcCore, apcHelper, inUsoMessage, newLine);
  329.             if(modificato) {
  330.                 modificaAS_effettuata = true;
  331.             }
  332.            
  333.         }// chiudo for
  334.         if(modificaAS_effettuata) {
  335.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);
  336.         }
  337.        
  338.     }
  339.    
  340.     public static boolean deleteOperazione(PortType pt, IDPortTypeAzione idOperazione, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper, StringBuilder inUsoMessage, String newLine) throws Exception {
  341.         HashMap<ErrorsHandlerCostant, List<String>> whereIsInUso = new HashMap<ErrorsHandlerCostant, List<String>>();
  342.         boolean normalizeObjectIds = !apcHelper.isModalitaCompleta();
  343.         boolean operazioneInUso = apcCore.isOperazioneInUso(idOperazione,whereIsInUso,normalizeObjectIds);
  344.        
  345.         boolean modificaAS_effettuata = false;
  346.        
  347.         if (operazioneInUso) {
  348.             inUsoMessage.append(DBOggettiInUsoUtils.toString(idOperazione, whereIsInUso, true, newLine));
  349.             inUsoMessage.append(newLine);

  350.         } else {
  351.             // Effettuo eliminazione
  352.             for (int j = 0; j < pt.sizeAzioneList(); j++) {
  353.                 Operation op = pt.getAzione(j);
  354.                 if (idOperazione.getNome().equals(op.getNome())) {
  355.                     modificaAS_effettuata = true;
  356.                     pt.removeAzione(j);
  357.                     break;
  358.                 }
  359.             }
  360.         }
  361.        
  362.         return modificaAS_effettuata;
  363.     }
  364.    
  365.    
  366.     public static void deleteAccordoServizioParteComuneOperations(AccordoServizioParteComune as, String userLogin, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper,
  367.             StringBuilder inUsoMessage, String newLine, PortType pt, List<String> optsToRemove) throws Exception {
  368.    
  369.         boolean modificaAS_effettuata = false;
  370.        
  371.         IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as);
  372.         IDPortType idPortType = new IDPortType();
  373.         idPortType.setNome(pt.getNome());
  374.         idPortType.setIdAccordo(idAccordo);
  375.        
  376.         for (int i = 0; i < optsToRemove.size(); i++) {
  377.             String nomeop = optsToRemove.get(i);
  378.            
  379.             IDPortTypeAzione idOperazione = new IDPortTypeAzione();
  380.             idOperazione.setNome(nomeop);
  381.             idOperazione.setIdPortType(idPortType);
  382.            
  383.             boolean modificato = AccordiServizioParteComuneUtilities.deleteOperazione(pt, idOperazione, userLogin, apcCore, apcHelper, inUsoMessage, newLine);
  384.             if(modificato) {
  385.                 modificaAS_effettuata = true;
  386.             }
  387.            
  388.         }// chiudo for
  389.         if(modificaAS_effettuata) {
  390.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), pt);
  391.         }
  392.                
  393.     }
  394.    
  395.     @SuppressWarnings("incomplete-switch")
  396.     public static void updateAccordoServizioParteComuneAllegati(AccordoServizioParteComune as,Documento doc, Documento docNew) {
  397.         switch (RuoliDocumento.valueOf(doc.getRuolo())) {
  398.             case allegato:
  399.                 //rimuovo il vecchio doc dalla lista
  400.                 for (int i = 0; i < as.sizeAllegatoList(); i++) {
  401.                     Documento documento = as.getAllegato(i);                        
  402.                     if(documento.getId().equals(doc.getId()))
  403.                         as.removeAllegato(i);
  404.                 }
  405.                 //aggiungo il nuovo
  406.                 as.addAllegato(docNew);
  407.                
  408.                 break;
  409.    
  410.             case specificaSemiformale:
  411.                
  412.                 for (int i = 0; i < as.sizeSpecificaSemiformaleList(); i++) {
  413.                     Documento documento = as.getSpecificaSemiformale(i);                        
  414.                     if(documento.getId().equals(doc.getId())){
  415.                         as.removeSpecificaSemiformale(i);
  416.                         break;
  417.                     }
  418.                 }
  419.                 //aggiungo il nuovo
  420.                 as.addSpecificaSemiformale(docNew);
  421.                 break;
  422.                
  423.             case specificaCoordinamento:
  424.                 AccordoServizioParteComuneServizioComposto assc = as.getServizioComposto();
  425.                 for (int i = 0; i < assc.sizeSpecificaCoordinamentoList(); i++) {
  426.                     Documento documento = assc.getSpecificaCoordinamento(i);                        
  427.                     if(documento.getId().equals(doc.getId())){
  428.                         assc.removeSpecificaCoordinamento(i);
  429.                         break;
  430.                     }
  431.                 }
  432.                 assc.addSpecificaCoordinamento(docNew);
  433.                 as.setServizioComposto(assc);
  434.                 break;
  435.         }
  436.     }
  437.    
  438.     public static void deleteAccordoServizioParteComuneAllegati(AccordoServizioParteComune as, String userLogin,
  439.             AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper,
  440.             List<Long> idAllegati) throws Exception {
  441.        
  442.         ArchiviCore archiviCore = new ArchiviCore(apcCore);
  443.        
  444.         for (int i = 0; i < idAllegati.size(); i++) {
  445.             long idAllegato = idAllegati.get(i);
  446.            
  447.             Documento doc = archiviCore.getDocumento(idAllegato, false);
  448.            
  449.             switch (RuoliDocumento.valueOf(doc.getRuolo())) {
  450.                 case allegato:
  451.                     //rimuovo il vecchio doc dalla lista
  452.                     for (int j = 0; j < as.sizeAllegatoList(); j++) {
  453.                         Documento documento = as.getAllegato(j);                        
  454.                         if(documento.getFile().equals(doc.getFile()))
  455.                             as.removeAllegato(j);
  456.                     }
  457.                    
  458.                     break;

  459.                 case specificaSemiformale:
  460.                    
  461.                     for (int j = 0; j < as.sizeSpecificaSemiformaleList(); j++) {
  462.                         Documento documento = as.getSpecificaSemiformale(j);                        
  463.                         if(documento.getFile().equals(doc.getFile()))
  464.                             as.removeSpecificaSemiformale(j);
  465.                     }
  466.                     break;
  467.                
  468.                 case specificaCoordinamento:
  469.                     if(as.getServizioComposto()!=null){
  470.                         for (int j = 0; j < as.getServizioComposto().sizeSpecificaCoordinamentoList(); j++) {
  471.                             Documento documento = as.getServizioComposto().getSpecificaCoordinamento(j);                        
  472.                             if(documento.getFile().equals(doc.getFile()))
  473.                                 as.getServizioComposto().removeSpecificaCoordinamento(j);
  474.                         }
  475.                     }
  476.                     break;
  477.                 case specificaLivelloServizio:
  478.                     break;
  479.                 case specificaSicurezza:
  480.                     break;
  481.             }
  482.            
  483.         }

  484.         // effettuo le operazioni
  485.         apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);
  486.        
  487.     }
  488.    
  489.     public static String getTerminologiaAccordoServizio(String tipo){
  490.         String termine = null;
  491.         if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipo)){
  492.             termine=AccordiServizioParteComuneCostanti.LABEL_APC;
  493.         }
  494.         else{
  495.             termine=AccordiServizioParteComuneCostanti.LABEL_ASC;
  496.         }
  497.         return termine;
  498.     }

  499.     @Deprecated
  500.     public static String getParametroAccordoServizio(String tipo,String appendChar){
  501.         String parametro = "";
  502.         if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipo)){
  503.             parametro = appendChar+AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO+"="+AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE;
  504.         }
  505.         else{
  506.             parametro = appendChar+AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO+"="+AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO;
  507.         }
  508.         return parametro;
  509.     }
  510.     public static Parameter getParametroAccordoServizio(AccordoServizioParteComune apc){
  511.         if(apc.getServizioComposto()!=null){
  512.             return new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO,
  513.                     AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO);
  514.         }else
  515.         {
  516.             return new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO,
  517.                     AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE);
  518.         }
  519.     }
  520.     public static Parameter getParametroAccordoServizio(AccordoServizioParteComuneSintetico apc){
  521.         if(apc.getServizioComposto()!=null){
  522.             return new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO,
  523.                     AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO);
  524.         }else
  525.         {
  526.             return new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO,
  527.                     AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE);
  528.         }
  529.     }

  530.     public static Parameter getParametroAccordoServizio(String tipo){
  531.         if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipo)){
  532.             return new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO,
  533.                     AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE);
  534.         }
  535.         else{
  536.             return new Parameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_TIPO_ACCORDO,
  537.                     AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO);
  538.         }
  539.     }

  540.     public static boolean showInformazioniServiziComponenti(String tipo){
  541.         boolean value = true;
  542.         if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipo)){
  543.             value = false;
  544.         }
  545.         return value;
  546.     }

  547.     public static boolean showFlagServizioComposto(){
  548.         return false;
  549.     }

  550.     public static List<AccordoServizioParteComuneSintetico> accordiList(AccordiServizioParteComuneCore core,String userLogin,ConsoleSearch ricerca,String tipoAccordo) throws DriverRegistroServiziException{
  551.         List<AccordoServizioParteComuneSintetico> lista = null;
  552.         if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_PARTE_COMUNE.equals(tipoAccordo)){
  553.             if(core.isVisioneOggettiGlobale(userLogin)){
  554.                 lista = core.accordiServizioParteComuneList(null, ricerca);
  555.             }else{
  556.                 lista = core.accordiServizioParteComuneList(userLogin, ricerca);
  557.             }
  558.         }
  559.         else if(AccordiServizioParteComuneCostanti.PARAMETRO_VALORE_APC_TIPO_ACCORDO_SERVIZIO_COMPOSTO.equals(tipoAccordo)){
  560.             if(core.isVisioneOggettiGlobale(userLogin)){
  561.                 lista = core.accordiServizioCompostiList(null, ricerca);
  562.             }else{
  563.                 lista = core.accordiServizioCompostiList(userLogin, ricerca);
  564.             }
  565.         }
  566.         else {
  567.             if(core.isVisioneOggettiGlobale(userLogin)){
  568.                 lista = core.accordiList(null, ricerca);
  569.             }else{
  570.                 lista = core.accordiList(userLogin, ricerca);
  571.             }
  572.         }
  573.         return lista;
  574.     }

  575.     public static List<AccordoServizioParteComuneSintetico> accordiListFromPermessiUtente(AccordiServizioParteComuneCore core,String userLogin,ConsoleSearch ricerca,boolean[] permessiUtente) throws DriverRegistroServiziException{
  576.         List<AccordoServizioParteComuneSintetico> lista = null;
  577.         if(permessiUtente != null){
  578.             if(permessiUtente[0] && !permessiUtente[1]){
  579.                 if(core.isVisioneOggettiGlobale(userLogin)){
  580.                     lista = core.accordiServizioParteComuneList(null, ricerca);
  581.                 }else{
  582.                     lista = core.accordiServizioParteComuneList(userLogin, ricerca);
  583.                 }

  584.                 return lista;
  585.             }

  586.             if(!permessiUtente[0] && permessiUtente[1]){
  587.                 if(core.isVisioneOggettiGlobale(userLogin)){
  588.                     lista = core.accordiServizioCompostiList(null, ricerca);
  589.                 }else{
  590.                     lista = core.accordiServizioCompostiList(userLogin, ricerca);
  591.                 }

  592.                 return lista;
  593.             }
  594.         }


  595.         if(core.isVisioneOggettiGlobale(userLogin)){
  596.             lista = core.accordiList(null, ricerca);
  597.         }else{
  598.             lista = core.accordiList(userLogin, ricerca);
  599.         }

  600.         return lista;
  601.     }
  602.    
  603.     public static List<IDAccordoDB> idAccordiListFromPermessiUtente(AccordiServizioParteComuneCore core,String userLogin,ConsoleSearch ricerca,boolean[] permessiUtente,
  604.             boolean soloAccordiConsistentiRest, boolean soloAccordiConsistentiSoap) throws DriverRegistroServiziException{
  605.         List<IDAccordoDB> lista = null;
  606.         if(permessiUtente != null){
  607.             if(permessiUtente[0] && !permessiUtente[1]){
  608.                 if(core.isVisioneOggettiGlobale(userLogin)){
  609.                     lista = core.idAccordiServizioParteComuneList(null, ricerca,
  610.                             soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  611.                 }else{
  612.                     lista = core.idAccordiServizioParteComuneList(userLogin, ricerca,
  613.                             soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  614.                 }

  615.                 return lista;
  616.             }

  617.             if(!permessiUtente[0] && permessiUtente[1]){
  618.                 if(core.isVisioneOggettiGlobale(userLogin)){
  619.                     lista = core.idAccordiServizioCompostiList(null, ricerca,
  620.                             soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  621.                 }else{
  622.                     lista = core.idAccordiServizioCompostiList(userLogin, ricerca,
  623.                             soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  624.                 }

  625.                 return lista;
  626.             }
  627.         }


  628.         if(core.isVisioneOggettiGlobale(userLogin)){
  629.             lista = core.idAccordiList(null, ricerca,
  630.                     soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  631.         }else{
  632.             lista = core.idAccordiList(userLogin, ricerca,
  633.                     soloAccordiConsistentiRest, soloAccordiConsistentiSoap);
  634.         }

  635.         return lista;
  636.     }

  637.     public static ArrayList<String> selectPortTypeAsincroni(AccordoServizioParteComune as,String profcollop,String nomept){
  638.         // Recupero i servizi dell'accordo con lo stesso profilo di collaborazione
  639.         ArrayList<String> servCorrUniche = null;
  640.         //List<PortType> getServCorrList = core.accordiPorttypeList(idInt, null, new Search(true));
  641.         List<PortType> getServCorrList = new ArrayList<PortType>();
  642.         for(int k=0;k<as.sizePortTypeList();k++){
  643.             getServCorrList.add(as.getPortType(k));
  644.         }

  645.         if (!getServCorrList.isEmpty()) {
  646.             servCorrUniche = new ArrayList<>();
  647.             servCorrUniche.add("-");
  648.             for (Iterator<PortType> iterator = getServCorrList.iterator(); iterator.hasNext();) {
  649.                 PortType myPT = iterator.next();
  650.                 // Devono possedere almeno un'azione
  651.                 if(myPT.sizeAzioneList()<=0)
  652.                     continue;
  653.                 // Devono possedere almeno un'azione con profilo di collaborazione uguale a quello selezionato
  654.                 List<Operation> opList = new ArrayList<>();
  655.                 for(int j=0; j<myPT.sizeAzioneList();j++){
  656.                     Operation op = myPT.getAzione(j);
  657.                     // ridefinito sull'azione
  658.                     if(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(op.getProfAzione()) &&
  659.                             (op.getProfiloCollaborazione()!=null && op.getProfiloCollaborazione().equals(profcollop))
  660.                             ){
  661.                         opList.add(op);
  662.                     }
  663.                     // ereditato dal port type
  664.                     else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.equals(op.getProfAzione()) &&
  665.                             AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(myPT.getProfiloPT()) &&
  666.                             (myPT.getProfiloCollaborazione()!=null && myPT.getProfiloCollaborazione().equals(profcollop))
  667.                             ){
  668.                         opList.add(op);
  669.                     }
  670.                     // ereditato dall'accordo di servizio
  671.                     else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.equals(op.getProfAzione()) &&
  672.                             AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.equals(myPT.getProfiloPT()) &&
  673.                             (as.getProfiloCollaborazione()!=null && as.getProfiloCollaborazione().equals(profcollop))
  674.                             ){
  675.                         opList.add(op);
  676.                     }
  677.                     // profilo non matcha quello atteso
  678.                     else{
  679.                         continue;
  680.                     }
  681.                 }
  682.                 if(opList.size()<=0){
  683.                     continue;
  684.                 }
  685.                 if (!nomept.equals(myPT.getNome())) {
  686.                     servCorrUniche.add(myPT.getNome());
  687.                 }
  688.             }
  689.         }

  690.         if (servCorrUniche != null && servCorrUniche.size() > 0)
  691.             return servCorrUniche;
  692.         else
  693.             return null;
  694.     }

  695.     public static Map<String, List<Operation>> selectPortTypeOperationsListAsincrone(AccordoServizioParteComune as,String profcollop,String nomept){
  696.         //List<PortType> getServCorrList = core.accordiPorttypeList(idInt, null, new Search(true));
  697.         List<PortType> getServCorrList = new ArrayList<PortType>();
  698.         for(int k=0;k<as.sizePortTypeList();k++){
  699.             getServCorrList.add(as.getPortType(k));
  700.         }
  701.         Map<String, List<Operation>> operationsListSelezionate = new HashMap<>();

  702.         if (!getServCorrList.isEmpty()) {
  703.             for (Iterator<PortType> iterator = getServCorrList.iterator(); iterator.hasNext();) {
  704.                 PortType myPT = iterator.next();
  705.                 // Devono possedere almeno un'azione
  706.                 if(myPT.sizeAzioneList()<=0)
  707.                     continue;
  708.                 // Devono possedere almeno un'azione con profilo di collaborazione uguale a quello selezionato
  709.                 List<Operation> opList = new ArrayList<>();
  710.                 for(int j=0; j<myPT.sizeAzioneList();j++){
  711.                     Operation op = myPT.getAzione(j);
  712.                     // ridefinito sull'azione
  713.                     if(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(op.getProfAzione()) &&
  714.                             (op.getProfiloCollaborazione()!=null && op.getProfiloCollaborazione().equals(profcollop))
  715.                             ){
  716.                         opList.add(op);
  717.                     }
  718.                     // ereditato dal port type
  719.                     else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.equals(op.getProfAzione()) &&
  720.                             AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(myPT.getProfiloPT()) &&
  721.                             (myPT.getProfiloCollaborazione()!=null && myPT.getProfiloCollaborazione().equals(profcollop))
  722.                             ){
  723.                         opList.add(op);
  724.                     }
  725.                     // ereditato dall'accordo di servizio
  726.                     else if (AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.equals(op.getProfAzione()) &&
  727.                             AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.equals(myPT.getProfiloPT()) &&
  728.                             (as.getProfiloCollaborazione()!=null && as.getProfiloCollaborazione().equals(profcollop))
  729.                             ){
  730.                         opList.add(op);
  731.                     }
  732.                     // profilo non matcha quello atteso
  733.                     else{
  734.                         continue;
  735.                     }
  736.                 }
  737.                 if(opList.size()<=0){
  738.                     continue;
  739.                 }
  740.                 if (!nomept.equals(myPT.getNome())) {
  741.                     operationsListSelezionate.put(myPT.getNome(), opList);
  742.                 }
  743.                 else{
  744.                     operationsListSelezionate.put("-", opList);
  745.                 }
  746.             }
  747.         }

  748.         return operationsListSelezionate;
  749.     }

  750.     public static ArrayList<String> selectOperationAsincrone(AccordoServizioParteComune as,String servcorr,String profProtocollo,
  751.             String profcollop,PortType pt,String nomeop,AccordiServizioParteComuneCore core, Map<String, List<Operation>> operationsListSelezionate)throws DriverRegistroServiziException{
  752.         // Se è stato selezionato un servizio,
  753.         // recupero le azioni del servizio
  754.         // che non sono già state correlate
  755.         //
  756.         // Se non è stato selezionato un servizio:
  757.         // - se il profilo dell'azione è
  758.         //   asincronoAsimmetrico, recupero le
  759.         //   azioni del servizio con profilo
  760.         //   asincronoAsimmetrico che non sono già
  761.         //   state correlate
  762.         // - se il profilo dell'azione è
  763.         //   asincronoSimmetrico, non permetto
  764.         //   di scegliere un'azione correlata
  765.         ArrayList<String> aziCorrUniche = null;
  766.         List<Operation> getAziCorrList = null;
  767.         PortType ptSel = null;
  768.         if (!servcorr.equals("-")) {
  769.             // Prendo il servizio selezionato
  770.             for (int j = 0; j < as.sizePortTypeList(); j++) {
  771.                 ptSel = as.getPortType(j);
  772.                 if (servcorr.equals(ptSel.getNome()))
  773.                     break;
  774.             }
  775.             //getAziCorrList = core.accordiPorttypeOperationList(ptSel.getId().intValue(), ptSel.getProfiloCollaborazione(), new Search(true));*/
  776.             getAziCorrList = operationsListSelezionate.get(servcorr);
  777.         } else {
  778.            
  779.             boolean calcolaLista = false;
  780.             if(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(profProtocollo) && profcollop.equals("asincronoAsimmetrico")) {
  781.                 calcolaLista = true;
  782.             }
  783.             else if(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT.contentEquals(profProtocollo)) {
  784.                 if(AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO.equals(pt.getProfiloPT())) {
  785.                     if(pt.getProfiloCollaborazione()!=null) {
  786.                         calcolaLista = "asincronoAsimmetrico".equals(pt.getProfiloCollaborazione().getValue());
  787.                     }
  788.                 }
  789.                 else {
  790.                     if(as.getProfiloCollaborazione()!=null) {
  791.                         calcolaLista = "asincronoAsimmetrico".equals(as.getProfiloCollaborazione().getValue());
  792.                     }
  793.                 }
  794.             }
  795.             if (calcolaLista){
  796.                 //getAziCorrList = core.accordiPorttypeOperationList(pt.getId().intValue(), "asincronoAsimmetrico", new Search(true));
  797.                 getAziCorrList = operationsListSelezionate.get(servcorr);
  798.                 ptSel = pt;
  799.             }
  800.         }

  801.         if (getAziCorrList != null && getAziCorrList.size() > 0) {
  802.             aziCorrUniche = new ArrayList<>();
  803.             aziCorrUniche.add("-");
  804.             for (Iterator<Operation> iterator = getAziCorrList.iterator(); iterator.hasNext();) {
  805.                 Operation operation = iterator.next();
  806.                 // Se sto utilizzando lo stesso port type, non devo inserire le azioni con il mio nome
  807.                 if (servcorr.equals("-") && nomeop.equals(operation.getNome())) {
  808.                     continue;
  809.                 }
  810.                 // Non devo inserire le azioni gia correlate une alle altre.
  811.                 // Devo quindi verificare se l'azione suddetta 'operation.getNome' risulta gia' correlata, oppure e' utilizzata come correlata
  812.                 if (ptSel!=null && !core.isOperationCorrelata(ptSel.getNome(), ptSel.getId(), operation.getNome(), operation.getId())) {
  813.                     aziCorrUniche.add(operation.getNome());
  814.                 }
  815.             }
  816.         }

  817.         if (aziCorrUniche != null && aziCorrUniche.size() > 0)
  818.             return aziCorrUniche;
  819.         else
  820.             return null;
  821.     }

  822.     public static void mapppingAutomaticoInterfaccia(AccordoServizioParteComune as, AccordiServizioParteComuneCore apcCore,
  823.             boolean enableAutoMapping, boolean validazioneDocumenti, boolean enableAutoMapping_estraiXsdSchemiFromWsdlTypes, boolean facilityUnicoWSDL_interfacciaStandard,
  824.             String tipoProtocollo,
  825.             InterfaceType interfaceType) throws Exception{
  826.         if(as.getByteWsdlConcettuale() != null || as.getByteWsdlLogicoErogatore() != null || as.getByteWsdlLogicoFruitore() != null) {
  827.             apcCore.mappingAutomatico(tipoProtocollo, as, validazioneDocumenti);
  828.             if(enableAutoMapping_estraiXsdSchemiFromWsdlTypes && InterfaceType.WSDL_11.equals(interfaceType)){
  829.                 Map<String, byte[]> schemiAggiuntiInQuestaOperazione = new HashMap<String, byte[]>();
  830.                 if(as.getByteWsdlConcettuale() != null){
  831.                     apcCore.estraiSchemiFromWSDLTypesAsAllegati(as, as.getByteWsdlConcettuale(),AccordiServizioParteComuneCostanti.TIPO_WSDL_CONCETTUALE, schemiAggiuntiInQuestaOperazione);
  832.                 }
  833.                 if(facilityUnicoWSDL_interfacciaStandard){
  834.                     // è stato utilizzato il concettuale. Lo riporto nel logico
  835.                     if(as.getByteWsdlConcettuale()!=null){
  836.                         as.setByteWsdlLogicoErogatore(as.getByteWsdlConcettuale());
  837.                     }
  838.                 }
  839.                 else{
  840.                     if(as.getByteWsdlLogicoErogatore() != null){
  841.                         apcCore.estraiSchemiFromWSDLTypesAsAllegati(as, as.getByteWsdlLogicoErogatore(),AccordiServizioParteComuneCostanti.TIPO_WSDL_EROGATORE, schemiAggiuntiInQuestaOperazione);
  842.                     }
  843.                     if(as.getByteWsdlLogicoFruitore() != null){
  844.                         apcCore.estraiSchemiFromWSDLTypesAsAllegati(as, as.getByteWsdlLogicoFruitore(),AccordiServizioParteComuneCostanti.TIPO_WSDL_FRUITORE, schemiAggiuntiInQuestaOperazione);
  845.                     }
  846.                 }
  847.             }
  848.             try{
  849.                 // Se ho fatto il mapping controllo la validita' di quanto prodotto
  850.                 as.setStatoPackage(StatiAccordo.operativo.toString());
  851.                 boolean utilizzoAzioniDiretteInAccordoAbilitato = apcCore.isShowAccordiColonnaAzioni();
  852.                 apcCore.validaStatoAccordoServizio(as, utilizzoAzioniDiretteInAccordoAbilitato, false);
  853.             }catch(ValidazioneStatoPackageException validazioneException){
  854.                 // Se l'automapping non ha prodotto ne porttype ne operatin rimetto lo stato a bozza
  855.                 as.setStatoPackage(StatiAccordo.bozza.toString());
  856.             }
  857.         }
  858.     }
  859.    
  860.     public static boolean createPortTypeOperation(boolean enableAutoMapping, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper,
  861.             AccordoServizioParteComune as, PortType pt, String userLogin) throws Exception{
  862.         boolean updateAccordo = false;
  863.         try{
  864.             if(enableAutoMapping) {
  865.                 if(StatiAccordo.bozza.toString().equals(as.getStatoPackage())) {
  866.                     // Se ho aggiunto la prima operazione
  867.                     if(pt.sizeAzioneList()==1) {
  868.                         as.setStatoPackage(StatiAccordo.operativo.toString());
  869.                         boolean utilizzoAzioniDiretteInAccordoAbilitato = apcCore.isShowAccordiColonnaAzioni();
  870.                         apcCore.validaStatoAccordoServizio(as, utilizzoAzioniDiretteInAccordoAbilitato, false);
  871.                         updateAccordo = true;
  872.                     }
  873.                 }
  874.             }
  875.         }catch(ValidazioneStatoPackageException validazioneException){
  876.         }
  877.        
  878.         if(updateAccordo) {        
  879.             // effettuo le operazioni
  880.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);          
  881.         }      
  882.         else {              
  883.             // effettuo le operazioni
  884.             apcCore.performUpdateOperation(userLogin, apcHelper.smista(), pt);              
  885.         }
  886.         return updateAccordo;
  887.     }
  888.    
  889.     public static void createResource(boolean enableAutoMapping, AccordiServizioParteComuneCore apcCore, AccordiServizioParteComuneHelper apcHelper,
  890.             AccordoServizioParteComune as, String userLogin) throws Exception{
  891.    
  892.         try{
  893.             if(enableAutoMapping) {
  894.                 if(StatiAccordo.bozza.toString().equals(as.getStatoPackage())) {
  895.                     // Se ho aggiunto la prima risorsa
  896.                     if(as.sizeResourceList()==1) {
  897.                         as.setStatoPackage(StatiAccordo.operativo.toString());
  898.                         boolean utilizzoAzioniDiretteInAccordoAbilitato = apcCore.isShowAccordiColonnaAzioni();
  899.                         apcCore.validaStatoAccordoServizio(as, utilizzoAzioniDiretteInAccordoAbilitato, false);
  900.                     }
  901.                 }
  902.             }
  903.         }catch(ValidazioneStatoPackageException validazioneException){
  904.             // Se l'automapping non ha prodotto ne porttype ne operatin rimetto lo stato a bozza
  905.             as.setStatoPackage(StatiAccordo.bozza.toString());
  906.         }
  907.        
  908.         // effettuo le operazioni
  909.         apcCore.performUpdateOperation(userLogin, apcHelper.smista(), as);
  910.        
  911.     }
  912.    
  913.     public static void updateInterfacciaAccordoServizioParteComune(String tipoParam, String wsdlS, AccordoServizioParteComune as,
  914.             boolean enableAutoMapping, boolean validazioneDocumenti, boolean enableAutoMapping_estraiXsdSchemiFromWsdlTypes, boolean facilityUnicoWSDL_interfacciaStandard,
  915.             String tipoProtocollo,
  916.             AccordiServizioParteComuneCore apcCore,
  917.             boolean aggiornaEsistenti, boolean eliminaNonPresentiNuovaInterfaccia,
  918.             List<IDResource> risorseEliminate,List<IDPortType> portTypeEliminati, List<IDPortTypeAzione> operationEliminate) throws Exception {
  919.        
  920.         FormatoSpecifica formato = null;
  921.         byte [] wsdlBytes = null;
  922.         if(as!=null) {
  923.             formato = as.getFormatoSpecifica();
  924.         }
  925.         if(wsdlS!=null) {
  926.             wsdlBytes = apcCore.getInterfaceAsByteArray(formato, wsdlS);
  927.         }
  928.        
  929.         // il wsdl definitorio rimane fuori dal nuovo comportamento quindi il flusso della pagina continua come prima
  930.         if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_DEFINITORIO)) {
  931.             as.setByteWsdlDefinitorio(wsdlBytes);
  932.         }
  933.         else {
  934.             // se sono state definiti dei port type ed e' la prima volta che ho passato i controlli
  935.             //Informo l'utente che potrebbe sovrascrivere i servizi definiti tramite l'aggiornamento del wsdl
  936.             // Questa Modalita' e' controllata tramite la proprieta' isenabledAutoMappingWsdlIntoAccordo
  937.             // e se non e' un reset
  938.             if(enableAutoMapping){
  939.                
  940.                 if( wsdlBytes!=null ){
  941.                     AccordoServizioParteComune asNuovo = new AccordoServizioParteComune();
  942.                     asNuovo.setFormatoSpecifica(as.getFormatoSpecifica());
  943.                     asNuovo.setServiceBinding(as.getServiceBinding());

  944.                     boolean fillXsd = false;
  945.                     String tipo = null;
  946.                    
  947.                     // decodifico quale wsdl/wsbl sto aggiornando
  948.                     if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE)) {
  949.                         as.setByteWsdlConcettuale(wsdlBytes);

  950.                         asNuovo.setByteSpecificaConversazioneConcettuale(as.getByteSpecificaConversazioneConcettuale());
  951.                         asNuovo.setByteSpecificaConversazioneErogatore(as.getByteSpecificaConversazioneErogatore());
  952.                         asNuovo.setByteSpecificaConversazioneFruitore(as.getByteSpecificaConversazioneFruitore());
  953.                         asNuovo.setByteWsdlConcettuale(wsdlBytes);
  954.                        
  955.                         fillXsd = true;
  956.                         tipo=AccordiServizioParteComuneCostanti.TIPO_WSDL_CONCETTUALE;
  957.                     }
  958.                     if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE)) {
  959.                         as.setByteWsdlLogicoErogatore(wsdlBytes);

  960.                         asNuovo.setByteSpecificaConversazioneConcettuale(as.getByteSpecificaConversazioneConcettuale());
  961.                         asNuovo.setByteSpecificaConversazioneErogatore(as.getByteSpecificaConversazioneErogatore());
  962.                         asNuovo.setByteSpecificaConversazioneFruitore(as.getByteSpecificaConversazioneFruitore());
  963.                         asNuovo.setByteWsdlLogicoErogatore(wsdlBytes);
  964.                        
  965.                         fillXsd = true;
  966.                         if(facilityUnicoWSDL_interfacciaStandard){
  967.                             tipo=AccordiServizioParteComuneCostanti.TIPO_WSDL_CONCETTUALE;
  968.                         }
  969.                         else{
  970.                             tipo=AccordiServizioParteComuneCostanti.TIPO_WSDL_EROGATORE;
  971.                         }
  972.                        
  973.                     }
  974.                     if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE)) {
  975.                         as.setByteWsdlLogicoFruitore(wsdlBytes);

  976.                         asNuovo.setByteSpecificaConversazioneConcettuale(as.getByteSpecificaConversazioneConcettuale());
  977.                         asNuovo.setByteSpecificaConversazioneErogatore(as.getByteSpecificaConversazioneErogatore());
  978.                         asNuovo.setByteSpecificaConversazioneFruitore(as.getByteSpecificaConversazioneFruitore());
  979.                         asNuovo.setByteWsdlLogicoFruitore(wsdlBytes);
  980.                        
  981.                         fillXsd = true;
  982.                         tipo=AccordiServizioParteComuneCostanti.TIPO_WSDL_FRUITORE;
  983.                     }
  984.                     if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE)) {
  985.                         as.setByteSpecificaConversazioneConcettuale(wsdlBytes);

  986.                         asNuovo.setByteSpecificaConversazioneConcettuale(wsdlBytes);
  987.                         asNuovo.setByteWsdlConcettuale(as.getByteWsdlConcettuale());
  988.                         asNuovo.setByteWsdlLogicoErogatore(as.getByteWsdlLogicoErogatore());
  989.                         asNuovo.setByteWsdlLogicoFruitore(as.getByteWsdlLogicoFruitore());
  990.                     }
  991.                     if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE)) {
  992.                         as.setByteSpecificaConversazioneErogatore(wsdlBytes);

  993.                         asNuovo.setByteSpecificaConversazioneErogatore(wsdlBytes);
  994.                         asNuovo.setByteWsdlConcettuale(as.getByteWsdlConcettuale());
  995.                         asNuovo.setByteWsdlLogicoErogatore(as.getByteWsdlLogicoErogatore());
  996.                         asNuovo.setByteWsdlLogicoFruitore(as.getByteWsdlLogicoFruitore());
  997.                     }
  998.                     if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE)) {
  999.                         as.setByteSpecificaConversazioneFruitore(wsdlBytes);

  1000.                         asNuovo.setByteSpecificaConversazioneFruitore(wsdlBytes);
  1001.                         asNuovo.setByteWsdlConcettuale(as.getByteWsdlConcettuale());
  1002.                         asNuovo.setByteWsdlLogicoErogatore(as.getByteWsdlLogicoErogatore());
  1003.                         asNuovo.setByteWsdlLogicoFruitore(as.getByteWsdlLogicoFruitore());
  1004.                     }

  1005.                     // Genero la nuova definizione
  1006.                     apcCore.mappingAutomatico(tipoProtocollo, asNuovo, validazioneDocumenti);

  1007.                     // se l'aggiornamento ha creato nuovi oggetti o aggiornato i vecchi aggiorno la configurazione
  1008.                     if(org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(as.getServiceBinding())) {
  1009.                         apcCore.popolaResourceDaUnAltroASPC(as,asNuovo,
  1010.                                 aggiornaEsistenti, eliminaNonPresentiNuovaInterfaccia, risorseEliminate);
  1011.                     }
  1012.                     else {
  1013.                         apcCore.popolaPorttypeOperationDaUnAltroASPC(as,asNuovo,
  1014.                                 aggiornaEsistenti, eliminaNonPresentiNuovaInterfaccia,
  1015.                                 portTypeEliminati, operationEliminate);
  1016.                     }
  1017.                    
  1018.                     // popolo gli allegati
  1019.                     if(fillXsd && enableAutoMapping_estraiXsdSchemiFromWsdlTypes && FormatoSpecifica.WSDL_11.equals(as.getFormatoSpecifica())){
  1020.                         apcCore.estraiSchemiFromWSDLTypesAsAllegati(as, wsdlBytes, tipo, new HashMap<String, byte[]> ());
  1021.                         if(facilityUnicoWSDL_interfacciaStandard){
  1022.                             // è stato utilizzato il concettuale. Lo riporto nel logico
  1023.                             as.setByteWsdlLogicoErogatore(as.getByteWsdlConcettuale());
  1024.                         }
  1025.                     }
  1026.                    
  1027.                     try{
  1028.                         if(StatiAccordo.bozza.toString().equals(as.getStatoPackage())) {
  1029.                             // Se ho fatto il mapping controllo la validita' di quanto prodotto
  1030.                             as.setStatoPackage(StatiAccordo.operativo.toString());
  1031.                             boolean utilizzoAzioniDiretteInAccordoAbilitato = apcCore.isShowAccordiColonnaAzioni();
  1032.                             apcCore.validaStatoAccordoServizio(as, utilizzoAzioniDiretteInAccordoAbilitato, false);
  1033.                         }
  1034.                     }catch(ValidazioneStatoPackageException validazioneException){
  1035.                         // Se l'automapping non ha prodotto ne porttype ne operatin rimetto lo stato a bozza
  1036.                         as.setStatoPackage(StatiAccordo.bozza.toString());
  1037.                     }
  1038.                    
  1039.                 }
  1040.             }else {
  1041.                 // vecchio comportamento sovrascrivo i wsdl
  1042.                 // Modifico i dati del wsdl dell'accordo nel db
  1043.                 // anche in caso di reset del wsdl

  1044.                 if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE)) {
  1045.                     as.setByteWsdlConcettuale(wsdlBytes);
  1046.                 }
  1047.                 if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE)) {
  1048.                     as.setByteWsdlLogicoErogatore(wsdlBytes);
  1049.                 }
  1050.                 if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_FRUITORE)) {
  1051.                     as.setByteWsdlLogicoFruitore(wsdlBytes);
  1052.                 }
  1053.                 if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_CONCETTUALE)) {
  1054.                     as.setByteSpecificaConversazioneConcettuale(wsdlBytes);
  1055.                 }
  1056.                 if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_EROGATORE)) {
  1057.                     as.setByteSpecificaConversazioneErogatore(wsdlBytes);
  1058.                 }
  1059.                 if (tipoParam.equals(AccordiServizioParteComuneCostanti.PARAMETRO_APC_SPECIFICA_CONVERSAZIONE_FRUITORE)) {
  1060.                     as.setByteSpecificaConversazioneFruitore(wsdlBytes);
  1061.                 }

  1062.             }
  1063.         }

  1064.         // Se un utente ha impostato solo il logico erogatore (avviene automaticamente nel caso non venga visualizzato il campo concettuale)
  1065.         // imposto lo stesso wsdl anche per il concettuale. Tanto Rappresenta la stessa informazione, ma e' utile per lo stato dell'accordo
  1066.         if(as!=null && as.getByteWsdlLogicoErogatore()!=null && as.getByteWsdlLogicoFruitore()==null && as.getByteWsdlConcettuale()==null){
  1067.             as.setByteWsdlConcettuale(as.getByteWsdlLogicoErogatore());
  1068.         }
  1069.     }
  1070. }