ApiApiServiceImpl.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.core.config.rs.server.api.impl.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.commons.Filtri;
import org.openspcoop2.core.commons.Liste;
import org.openspcoop2.core.config.rs.server.api.ApiApi;
import org.openspcoop2.core.config.rs.server.api.impl.Enums;
import org.openspcoop2.core.config.rs.server.api.impl.Helper;
import org.openspcoop2.core.config.rs.server.config.ServerProperties;
import org.openspcoop2.core.config.rs.server.model.Api;
import org.openspcoop2.core.config.rs.server.model.ApiAllegato;
import org.openspcoop2.core.config.rs.server.model.ApiAzione;
import org.openspcoop2.core.config.rs.server.model.ApiCanale;
import org.openspcoop2.core.config.rs.server.model.ApiDescrizione;
import org.openspcoop2.core.config.rs.server.model.ApiInformazioniGenerali;
import org.openspcoop2.core.config.rs.server.model.ApiInformazioniGeneraliView;
import org.openspcoop2.core.config.rs.server.model.ApiInterfaccia;
import org.openspcoop2.core.config.rs.server.model.ApiInterfacciaRest;
import org.openspcoop2.core.config.rs.server.model.ApiInterfacciaSoap;
import org.openspcoop2.core.config.rs.server.model.ApiInterfacciaView;
import org.openspcoop2.core.config.rs.server.model.ApiItem;
import org.openspcoop2.core.config.rs.server.model.ApiModI;
import org.openspcoop2.core.config.rs.server.model.ApiReferenteView;
import org.openspcoop2.core.config.rs.server.model.ApiRisorsa;
import org.openspcoop2.core.config.rs.server.model.ApiServizio;
import org.openspcoop2.core.config.rs.server.model.ApiTags;
import org.openspcoop2.core.config.rs.server.model.ApiViewItem;
import org.openspcoop2.core.config.rs.server.model.CanaleEnum;
import org.openspcoop2.core.config.rs.server.model.ConfigurazioneApiCanale;
import org.openspcoop2.core.config.rs.server.model.ConfigurazioneCanaleEnum;
import org.openspcoop2.core.config.rs.server.model.HttpMethodEnum;
import org.openspcoop2.core.config.rs.server.model.ListaApi;
import org.openspcoop2.core.config.rs.server.model.ListaApiAllegati;
import org.openspcoop2.core.config.rs.server.model.ListaApiAzioni;
import org.openspcoop2.core.config.rs.server.model.ListaApiRisorse;
import org.openspcoop2.core.config.rs.server.model.ListaApiServizi;
import org.openspcoop2.core.config.rs.server.model.RuoloAllegatoAPI;
import org.openspcoop2.core.config.rs.server.model.TipoApiEnum;
import org.openspcoop2.core.id.IDAccordo;
import org.openspcoop2.core.id.IDPortType;
import org.openspcoop2.core.id.IDPortTypeAzione;
import org.openspcoop2.core.id.IDResource;
import org.openspcoop2.core.registry.AccordoServizioParteComune;
import org.openspcoop2.core.registry.Documento;
import org.openspcoop2.core.registry.GruppiAccordo;
import org.openspcoop2.core.registry.Gruppo;
import org.openspcoop2.core.registry.GruppoAccordo;
import org.openspcoop2.core.registry.Operation;
import org.openspcoop2.core.registry.PortType;
import org.openspcoop2.core.registry.Resource;
import org.openspcoop2.core.registry.beans.AccordoServizioParteComuneSintetico;
import org.openspcoop2.core.registry.constants.HttpMethod;
import org.openspcoop2.core.registry.constants.ProprietariDocumento;
import org.openspcoop2.core.registry.constants.ServiceBinding;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.protocol.basic.Costanti;
import org.openspcoop2.protocol.basic.archive.APIUtils;
import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
import org.openspcoop2.utils.json.YAMLUtils;
import org.openspcoop2.utils.service.BaseImpl;
import org.openspcoop2.utils.service.authorization.AuthorizationConfig;
import org.openspcoop2.utils.service.authorization.AuthorizationManager;
import org.openspcoop2.utils.service.beans.ProfiloCollaborazioneEnum;
import org.openspcoop2.utils.service.beans.ProfiloEnum;
import org.openspcoop2.utils.service.beans.utils.BaseHelper;
import org.openspcoop2.utils.service.beans.utils.ListaUtils;
import org.openspcoop2.utils.service.context.IContext;
import org.openspcoop2.utils.service.fault.jaxrs.FaultCode;
import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
import org.openspcoop2.web.ctrlstat.core.SerialiableFormFile;
import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneCostanti;
import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneHelper;
import org.openspcoop2.web.ctrlstat.servlet.apc.AccordiServizioParteComuneUtilities;
import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviCore;
import org.openspcoop2.web.ctrlstat.servlet.archivi.ArchiviHelper;
import org.openspcoop2.web.ctrlstat.servlet.gruppi.GruppiCore;
import org.openspcoop2.web.lib.mvc.BinaryParameter;
import org.openspcoop2.web.lib.mvc.TipoOperazione;
/**
* ApiApiServiceImpl
*
* @author $Author$
* @version $Rev$, $Date$
*
*/
public class ApiApiServiceImpl extends BaseImpl implements ApiApi {
public ApiApiServiceImpl() {
super(org.slf4j.LoggerFactory.getLogger(ApiApiServiceImpl.class));
}
private AuthorizationConfig getAuthorizationConfig() throws Exception {
return new AuthorizationConfig(ServerProperties.getInstance().getProperties());
}
/**
* Creazione di un'API
*
* Questa operazione consente di creare una API
*
*/
@Override
public void createApi(Api body, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
if (body.getReferente() == null || "".equals(body.getReferente().trim())) {
body.setReferente(soggetto);
}
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.accordoApiToRegistro(body, env);
ProtocolProperties protocolProperties = null;
if(profilo != null) {
protocolProperties = ApiApiHelper.getProtocolProperties(body, profilo);
if(protocolProperties != null) {
as.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(protocolProperties, ConsoleOperationType.ADD, null));
}
}
IDAccordo idAccordoFromAccordo = env.idAccordoFactory.getIDAccordoFromAccordo(as);
if (env.apcCore.existsAccordoServizio(idAccordoFromAccordo))
throw FaultCode.CONFLITTO.toException("Api già esistente");
boolean validazioneDocumenti = ServerProperties.getInstance().isValidazioneDocumenti();
StringBuilder bfTags = new StringBuilder();
if(body!=null && body.getTags()!=null && !body.getTags().isEmpty()) {
for (String tag : body.getTags()) {
if(bfTags.length()>0) {
bfTags.append(",");
}
bfTags.append(tag);
}
}
boolean gestioneCanaliEnabled = env.gestioneCanali;
String canale = as.getCanale();
String canaleStato = null;
if(canale == null) {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
} else {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
}
if (!env.apcHelper.accordiCheckData(TipoOperazione.ADD, as.getNome(), as.getDescrizione(),
as.getProfiloCollaborazione().toString(), Helper.toBinaryParameter(as.getByteWsdlDefinitorio()), // wsdldef
Helper.toBinaryParameter(as.getByteWsdlConcettuale()), // wsdlconc,
Helper.toBinaryParameter(as.getByteWsdlLogicoErogatore()), // wsdlserv
Helper.toBinaryParameter(as.getByteWsdlLogicoFruitore()), // wsdlservcorr,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine()), "", // scadenza
"0", // Id intero del servizio applicativo
as.getSoggettoReferente().getId().toString(), // IDSoggetto?
as.getVersione().toString(), null, // accordoCooperazione
false, // visibilitaAccordoServizio
false, // visibilitaAccordoCooperazione
null, // ID AccordoOld
new BinaryParameter(), // wsblconc
new BinaryParameter(), // wsblserv
new BinaryParameter(), // wsblservcorr
validazioneDocumenti, env.tipo_protocollo, null, // backToStato
env.apcCore.toMessageServiceBinding(as.getServiceBinding()), null, // messageType
Enums.interfaceTypeFromFormatoSpecifica.get(as.getFormatoSpecifica()), env.gestisciSoggettoReferente,
bfTags.toString(),
canaleStato, canale, gestioneCanaliEnabled
)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
ApiApiHelper.validateProperties(env, protocolProperties, idAccordoFromAccordo, ConsoleOperationType.ADD);
List<Object> objectToCreate = new ArrayList<>();
if(body.getTags()!=null && !body.getTags().isEmpty()) {
as.setGruppi(new GruppiAccordo());
GruppiCore gruppiCore = new GruppiCore(env.stationCore);
for (String tag : body.getTags()) {
GruppoAccordo gruppo = new GruppoAccordo();
gruppo.setNome(tag);
as.getGruppi().addGruppo(gruppo);
if(!gruppiCore.existsGruppo(tag)) {
Gruppo nuovoGruppo = new Gruppo();
nuovoGruppo.setNome(tag);
nuovoGruppo.setSuperUser(as.getSuperUser());
objectToCreate.add(nuovoGruppo);
}
}
}
objectToCreate.add(as);
// effettuo le operazioni
env.apcCore.performCreateOperation(env.userLogin, false, objectToCreate.toArray(new Object[objectToCreate.size()]));
context.getLogger().info("Invocazione completata con successo");
// Bug Fix: altrimenti viene generato 204
context.getServletResponse().setStatus(201);
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Creazione di un allegato di una API
*
* Questa operazione consente di aggiungere un allegato alla API identificata
* dal nome e dalla versione
*
*/
@Override
public void createApiAllegato(ApiAllegato body, String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Body non presente");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = Helper.getAccordoFull(nome, versione, env.idSoggetto.toIDSoggetto(), env.apcCore);
if (as == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nessuna Api corrisponde ai parametri indicati");
Documento documento = ApiApiHelper.apiAllegatoToDocumento(body, as, env);
if(RuoloAllegatoAPI.ALLEGATO.equals(body.getAllegato().getRuolo())) {
as.addAllegato(documento);
}
else if(RuoloAllegatoAPI.SPECIFICASEMIFORMALE.equals(body.getAllegato().getRuolo())) {
as.addSpecificaSemiformale(documento);
}else {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Ruolo " + body.getAllegato().getRuolo() + " sconosciuto");
}
ArchiviCore archiviCore = new ArchiviCore(env.stationCore);
SerialiableFormFile filewrap = new SerialiableFormFile(documento.getFile(), documento.getByteContenuto());
env.requestWrapper.overrideParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_RUOLO,
documento.getRuolo());
ArchiviHelper archiviHelper = new ArchiviHelper(env.stationCore, env.requestWrapper, env.pd,
env.requestWrapper.getSession());
boolean documentoUnivocoIndipendentementeTipo = true;
if (archiviCore.existsDocumento(documento, ProprietariDocumento.accordoServizio,
documentoUnivocoIndipendentementeTipo)) {
throw FaultCode.CONFLITTO.toException("Allegato con nome " + documento.getFile() + " già presente nella API");
}
if (!archiviHelper.accordiAllegatiCheckData(TipoOperazione.ADD, filewrap, documento,
ProprietariDocumento.accordoServizio, env.protocolFactory)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
env.apcCore.performUpdateOperation(env.userLogin, false, as);
context.getLogger().info("Invocazione completata con successo");
// Bug Fix: altrimenti viene generato 204
context.getServletResponse().setStatus(201);
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Creazione di un'azione di una API
*
* Questa operazione consente di aggiungere una azione al servizio della API
* identificata dal nome e dalla versione
*
*/
@Override
public void createApiAzione(ApiAzione body, String nome, Integer versione, String nomeServizio, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
// body.
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nessuna Api con nome: " + nome + " e versione " + versione);
if (as.getServiceBinding() == ServiceBinding.REST)
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("Non è possibile registrare Azioni e Servizi su Api con interfaccia REST");
PortType pt = as.getPortTypeList().stream().filter(p -> nomeServizio.equals(p.getNome())).findFirst()
.orElse(null);
if (pt == null)
throw FaultCode.NOT_FOUND.toException("Nessun Servizio con nome: " + nomeServizio);
Operation newOp = ApiApiHelper.apiAzioneToOperazione(body, pt);
if (env.apcCore.existsAccordoServizioPorttypeOperation(newOp.getNome(), pt.getId()))
throw FaultCode.CONFLITTO.toException("L'azione " + newOp.getNome() + " è già stata associata alla Api");
ProtocolProperties protocolProperties = null;
if(profilo != null) {
protocolProperties = ApiApiHelper.getProtocolProperties(body, profilo, as, newOp, env);
if(protocolProperties != null) {
newOp.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(protocolProperties, ConsoleOperationType.ADD, null));
}
}
pt.addAzione(newOp);
ProfiloCollaborazioneEnum profiloBody = body.getProfiloCollaborazione()!=null ? body.getProfiloCollaborazione() : ProfiloCollaborazioneEnum.SINCRONO;
if (! env.apcHelper.accordiPorttypeOperationCheckData(
TipoOperazione.ADD,
as.getId().toString(),
nomeServizio,
newOp.getNome(),
newOp.getProfAzione(),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getConsegnaInOrdine()),
newOp.getScadenza() != null ? newOp.getScadenza() : "", "-", // Servizio Correlato
"-", // Azione Correlata
Enums.profiloCollaborazioneFromApiEnum.get(profiloBody).toString(), "0", // styleOp
"", // soapActionOp,
"literal", // useOp,
null, // opTypeOp,
"" // nsWSDLOp
)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
IDPortType idPT = new IDPortType();
idPT.setNome(pt.getNome());
idPT.setIdAccordo(IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as));
IDPortTypeAzione idAccordoAzione = new IDPortTypeAzione();
idAccordoAzione.setNome(newOp.getNome());
idAccordoAzione.setIdPortType(idPT);
ApiApiHelper.validateProperties(env, protocolProperties, idAccordoAzione, ConsoleOperationType.ADD);
AccordiServizioParteComuneUtilities.createPortTypeOperation(env.apcCore.isEnableAutoMappingWsdlIntoAccordo(),
env.apcCore, env.apcHelper, as, pt, env.userLogin);
context.getLogger().info("Invocazione completata con successo");
// Bug Fix: altrimenti viene generato 204
context.getServletResponse().setStatus(201);
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Creazione di una risorsa di una API
*
* Questa operazione consente di aggiungere una risorsa alla API identificata
* dal nome e dalla versione
*
*/
@Override
public void createApiRisorsa(ApiRisorsa body, String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nessuna Api con nome: " + nome + " e versione " + versione);
if (as.getServiceBinding() != ServiceBinding.REST) {
throw FaultCode.RICHIESTA_NON_VALIDA
.toException("E' possibile registrare risorse solo su API con interfaccia REST");
}
Resource newRes = ApiApiHelper.apiRisorsaToRegistro(body, as);
ProtocolProperties protocolProperties = null;
if(profilo != null) {
protocolProperties = ApiApiHelper.getProtocolProperties(body, profilo, newRes, env);
if(protocolProperties != null) {
newRes.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(protocolProperties, ConsoleOperationType.ADD, null));
}
}
if (StringUtils.isEmpty(newRes.getNome()) && newRes.getMethod() == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il campo nome non è stato definito");
if (env.apcCore.existsAccordoServizioResource(newRes.getMethodRawEnumValue(), newRes.getPath(), as.getId(), null))
throw FaultCode.CONFLITTO.toException("La risorsa " + newRes.getNome() + " è già stata associata alla Api");
if (!env.apcHelper.accordiResourceCheckData(TipoOperazione.ADD, as.getId().toString(),
body.getNome() != null ? body.getNome() : "", newRes.getNome(), newRes.getPath(), newRes.getMethodRawEnumValue(),
newRes.getDescrizione(), env.apcCore.toMessageMessageType(newRes.getMessageType()), null, // oldNomeRisorsa
null, // oldNomeRisorsaGenerato
null, // oldPath
null, // oldHttpMethod
AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_DEFAULT,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getConfermaRicezione()), // confricaz,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getConsegnaInOrdine()), // consordaz,
"" // scadenzaaz
)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
IDResource idResource = new IDResource();
idResource.setNome(newRes.getNome());
idResource.setIdAccordo(IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as));
ApiApiHelper.validateProperties(env, protocolProperties, idResource, newRes.getMethod()!=null ? newRes.getMethod().toString() : null, newRes.getPath(), ConsoleOperationType.ADD);
as.addResource(newRes);
AccordiServizioParteComuneUtilities.createResource(env.apcCore.isEnableAutoMappingWsdlIntoAccordo(), env.apcCore,
env.apcHelper, as, env.userLogin);
context.getLogger().info("Invocazione completata con successo");
// Bug Fix: altrimenti viene generato 204
context.getServletResponse().setStatus(201);
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Creazione di un servizio di una API
*
* Questa operazione consente di aggiungere un servizio alla API identificata
* dal nome e dalla versione
*
*/
@Override
public void createApiServizio(ApiServizio body, String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Nessuna Api con nome: " + nome + " e versione " + versione);
if (as.getServiceBinding() == ServiceBinding.REST) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non è possibile associare un servizio ad una api REST");
}
// Il Servizio assumiamo che di base RIDEFINISCA il profilo della api, dato che
// abbiamo nei campi dei valori che dalla console sono configurabili sono in
// quel caso.
PortType newPT = ApiApiHelper.apiServizioToRegistro(body, as, env);
if (env.apcCore.existsAccordoServizioPorttype(newPT.getNome(), as.getId()))
throw FaultCode.CONFLITTO.toException("Il servizio " + newPT.getNome() + " è già stato associato alla API");
if (!env.apcHelper.accordiPorttypeCheckData(TipoOperazione.ADD, as.getId().toString(), newPT.getNome(),
newPT.getDescrizione(), AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPT.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPT.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPT.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPT.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPT.getConsegnaInOrdine()),
newPT.getScadenza())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
as.addPortType(newPT);
env.apcCore.performUpdateOperation(env.userLogin, false, as);
context.getLogger().info("Invocazione completata con successo");
// Bug Fix: altrimenti viene generato 204
context.getServletResponse().setStatus(201);
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elimina un'api
*
* Questa operazione consente di eliminare un API identificata dal nome e dalla
* versione
*
*/
@Override
public void deleteApi(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as != null) {
StringBuilder inUsoMessage = new StringBuilder();
AccordiServizioParteComuneUtilities.deleteAccordoServizioParteComune(as, env.userLogin, env.apcCore,
env.apcHelper, inUsoMessage, "\n");
if (inUsoMessage.length() > 0)
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
}
if (env.delete_404 && as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elimina un allegato di una API
*
* Questa operazione consente di eliminare un'allegato della API identificata
* dal nome e dalla versione
*
*/
@Override
public void deleteApiAllegato(String nome, Integer versione, String nomeAllegato, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = BaseHelper
.supplyOrNotFound(() -> ApiApiHelper.getAccordoFull(nome, versione, env), "API");
final Documento toDel = BaseHelper.evalnull(() -> env.archiviCore.getDocumento(nomeAllegato, null, null,
as.getId(), false, ProprietariDocumento.accordoServizio)
);
if (toDel != null) {
AccordiServizioParteComuneUtilities.deleteAccordoServizioParteComuneAllegati(as, env.userLogin, env.apcCore,
env.apcHelper, Arrays.asList(toDel.getId()));
}
if (env.delete_404 && toDel == null)
throw FaultCode.NOT_FOUND
.toException("Allegato con nome " + nomeAllegato + " non presente per il servizio applicativo scelto.");
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elimina un'azione del servizio di una API
*
* Questa operazione consente di eliminare un'azione del servizio della API
* identificata dal nome e dalla versione
*
*/
@Override
public void deleteApiAzione(String nome, Integer versione, String nomeServizio, String nomeAzione,
ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = BaseHelper
.supplyOrNotFound(() -> ApiApiHelper.getAccordoFull(nome, versione, env), "API");
PortType pt = null;
for (int i = 0; i < as.sizePortTypeList(); i++) {
pt = as.getPortType(i);
if (nomeServizio.equals(pt.getNome()))
break;
}
if (pt == null)
throw FaultCode.NOT_FOUND.toException("Nessun Servizio registrato sulla api con nome " + nomeServizio);
if (BaseHelper.findFirst(pt.getAzioneList(), op -> op.getNome().equals(nomeAzione)).isPresent()) {
StringBuilder inUsoMessage = new StringBuilder();
AccordiServizioParteComuneUtilities.deleteAccordoServizioParteComuneOperations(as, env.userLogin, env.apcCore,
env.apcHelper, inUsoMessage, "\n", pt, Arrays.asList(nomeAzione));
if (inUsoMessage.length() > 0)
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
}
else if (env.delete_404) {
throw FaultCode.NOT_FOUND.toException("Azione " + nomeAzione + " non registrata sul servizio " + nomeServizio);
}
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elimina una risorsa di una API
*
* Questa operazione consente di eliminare una risorsa della API identificata
* dal nome e dalla versione
*
*/
@Override
public void deleteApiRisorsa(String nome, Integer versione, String nomeRisorsa, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = BaseHelper
.supplyOrNotFound(() -> ApiApiHelper.getAccordoFull(nome, versione, env), "API");
if (BaseHelper.findFirst(as.getResourceList(), res -> res.getNome().equals(nomeRisorsa)).isPresent()) {
StringBuilder inUsoMessage = new StringBuilder();
AccordiServizioParteComuneUtilities.deleteAccordoServizioParteComuneRisorse(as, env.userLogin, env.apcCore,
env.apcHelper, inUsoMessage, "\n", Arrays.asList(nomeRisorsa));
if (inUsoMessage.length() > 0)
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
} else if (env.delete_404) {
throw FaultCode.NOT_FOUND.toException("Risorsa " + nomeRisorsa + " non associata alla API ");
}
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elimina un servizio di una API
*
* Questa operazione consente di eliminare un servizio della API identificata
* dal nome e dalla versione
*
*/
@Override
public void deleteApiServizio(String nome, Integer versione, String nomeServizio, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = BaseHelper
.supplyOrNotFound(() -> ApiApiHelper.getAccordoFull(nome, versione, env), "API");
if (BaseHelper.findFirst(as.getPortTypeList(), pt -> pt.getNome().equals(nomeServizio)).isPresent()) {
final StringBuilder inUsoMessage = new StringBuilder();
AccordiServizioParteComuneUtilities.deleteAccordoServizioParteComunePortTypes(as, env.userLogin, env.apcCore,
env.apcHelper, inUsoMessage, "\n", Arrays.asList(nomeServizio));
if (inUsoMessage.length() > 0) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(inUsoMessage.toString()));
}
} else if (env.delete_404) {
throw FaultCode.NOT_FOUND.toException("Servizio " + nomeServizio + " non associato alla API");
}
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce l'allegato di una API
*
* Questa operazione consente di ottenere l'allegato di una API identificata dal
* nome e dalla versione
*
*/
@Override
public byte[] downloadApiAllegato(String nome, Integer versione, String nomeAllegato, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
Documento doc = as.getAllegatoList().stream().filter(a -> nomeAllegato.equals(a.getFile())).findFirst()
.orElse(null);
if (doc == null) {
doc = as.getSpecificaSemiformaleList().stream().filter(a -> nomeAllegato.equals(a.getFile())).findFirst()
.orElse(null);
}
if (doc == null)
throw FaultCode.NOT_FOUND
.toException("Nessun allegato con nome " + nomeAllegato + " registrato per la Api specificata");
doc = env.archiviCore.getDocumento(doc.getFile(), doc.getTipo(), doc.getRuolo(), doc.getIdProprietarioDocumento(),
true, ProprietariDocumento.accordoServizio);
context.getLogger().info("Invocazione completata con successo");
Helper.setContentType(context, doc.getFile());
return doc.getByteContenuto();
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce l'interfaccia di una API
*
* Questa operazione consente di ottenere l'interfaccia di una API identificata
* dal nome e dalla versione
*
*/
@Override
public byte[] downloadApiInterfaccia(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
// ApiInterfacciaView a = new ApiInterfacciaView();
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
context.getLogger().info("Invocazione completata con successo");
byte [] spec = null;
switch (as.getServiceBinding()) {
case REST:
spec = as.getByteWsdlConcettuale();
break;
case SOAP:
spec = as.getByteWsdlLogicoErogatore();
break;
}
String fileName = null;
switch (as.getFormatoSpecifica()) {
case WSDL_11:
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WSDL_CONCETTUALE_WSDL;
break;
case OPEN_API_3:
YAMLUtils yamlUtils = YAMLUtils.getInstance();
if(yamlUtils.isYaml(spec)) {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_OPENAPI_3_0_YAML;
}
else {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_OPENAPI_3_0_JSON;
}
break;
case SWAGGER_2:
yamlUtils = YAMLUtils.getInstance();
if(yamlUtils.isYaml(spec)) {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SWAGGER_2_0_YAML;
}
else {
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_SWAGGER_2_0_JSON;
}
break;
case WADL:
fileName = Costanti.OPENSPCOOP2_ARCHIVE_ACCORDI_FILE_WADL;
break;
}
if(fileName!=null) {
Helper.setContentType(context, fileName);
}
return spec;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Ricerca api
*
* Elenca le API registrate
*
*/
@Override
public ListaApi findAllApi(ProfiloEnum profilo, String soggetto, String q, Integer limit, Integer offset,
TipoApiEnum tipoApi, String tag, Boolean profiloQualsiasi) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final int idLista = Liste.ACCORDI;
final ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(),
env.tipo_protocollo);
if(profiloQualsiasi!=null && profiloQualsiasi) {
ricerca.clearFilter(idLista, Filtri.FILTRO_PROTOCOLLO);
}
if (tipoApi != null)
ricerca.addFilter(idLista, Filtri.FILTRO_SERVICE_BINDING, Enums.serviceBindingFromTipo.get(tipoApi).toString().toLowerCase());
if(tag!=null) {
ricerca.addFilter(idLista, Filtri.FILTRO_GRUPPO, tag);
}
final String tipoAccordo = "apc"; // Dal debug.
final List<AccordoServizioParteComuneSintetico> lista = AccordiServizioParteComuneUtilities
.accordiList(env.apcCore, env.userLogin, ricerca, tipoAccordo);
final ListaApi ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
ricerca.getIndexIniziale(idLista),
ricerca.getPageSize(idLista),
ricerca.getNumEntries(idLista), ListaApi.class);
if (env.findall_404 && lista.isEmpty())
throw FaultCode.NOT_FOUND.toException("Nessuna Api corrisponde ai criteri di ricerca");
lista.forEach(as -> ret
.addItemsItem(ApiApiHelper.apiToItem(ApiApiHelper.accordoSpcRegistroToApi(as, env.soggettiCore), as, env)));
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elenco allegati di una API
*
* Questa operazione consente di ottenere gli allegati di una API identificata
* dal nome e dalla versione
*
*/
@Override
public ListaApiAllegati findAllApiAllegati(String nome, Integer versione, ProfiloEnum profilo, String soggetto,
String q, Integer limit, Integer offset) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
int idLista = Liste.ACCORDI_ALLEGATI;
ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(),
env.tipo_protocollo);
List<Documento> docsRegistro = env.apcCore.accordiAllegatiList(as.getId().intValue(), ricerca);
if (docsRegistro.size() == 0 && env.findall_404)
throw FaultCode.NOT_FOUND.toException("Nessun allegato dell'Api specificata corrisponde ai criteri di ricerca");
final ListaApiAllegati ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
ricerca.getIndexIniziale(idLista),
ricerca.getPageSize(idLista),
ricerca.getNumEntries(idLista), ListaApiAllegati.class);
docsRegistro.forEach(d -> ret.addItemsItem(ApiApiHelper.documentoToApiAllegatoItem(d)));
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elenco servizi di una API
*
* Questa operazione consente di ottenere le azioni di un servizio della API
* identificata dal nome e dalla versione
*
*/
@Override
public ListaApiAzioni findAllApiAzioni(String nome, Integer versione, String nomeServizio, ProfiloEnum profilo,
String soggetto, String q, Integer limit, Integer offset) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
int idLista = Liste.ACCORDI_PORTTYPE_AZIONI;
ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(),
env.tipo_protocollo);
PortType pt = as.getPortTypeList().stream().filter(p -> nomeServizio.equals(p.getNome())).findFirst()
.orElse(null);
if (pt == null)
throw FaultCode.NOT_FOUND
.toException("Non è stato trovato alcun servizio con nome " + nomeServizio + " legato alla Api");
List<Operation> azioniServizio = env.apcCore.accordiPorttypeOperationList(pt.getId().intValue(), ricerca);
if (azioniServizio.size() == 0 && env.findall_404)
throw FaultCode.NOT_FOUND.toException("Nessua azione dell'Api specificata corrisponde ai criteri di ricerca");
final ListaApiAzioni ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
ricerca.getIndexIniziale(idLista),
ricerca.getPageSize(idLista),
ricerca.getNumEntries(idLista), ListaApiAzioni.class);
azioniServizio.forEach(op -> ret.addItemsItem(ApiApiHelper.operazioneToApiAzione(op)));
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elenco risorse di una API
*
* Questa operazione consente di ottenere le risorse di una API identificata dal
* nome e dalla versione
*
*/
@Override
public ListaApiRisorse findAllApiRisorse(String nome, Integer versione, ProfiloEnum profilo, String soggetto,
String q, Integer limit, Integer offset, HttpMethodEnum httpMethod) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
int idLista = Liste.ACCORDI_API_RESOURCES;
ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(),
env.tipo_protocollo);
if (httpMethod != null)
ricerca.addFilter(idLista, Filtri.FILTRO_HTTP_METHOD, httpMethod.toString());
final ListaApiRisorse ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
ricerca.getIndexIniziale(idLista),
ricerca.getPageSize(idLista),
ricerca.getNumEntries(idLista), ListaApiRisorse.class);
List<Resource> risorse = env.apcCore.accordiResourceList(as.getId().intValue(), ricerca);
if (risorse.size() == 0 && env.findall_404)
throw FaultCode.NOT_FOUND.toException("Nessun allegato dell'Api specificata corrisponde ai criteri di ricerca");
risorse.forEach(r -> ret.addItemsItem(ApiApiHelper.risorsaRegistroToApi(r)));
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Elenco servizi di una API
*
* Questa operazione consente di ottenere i servizi di una API identificata dal
* nome e dalla versione
*
*/
@Override
public ListaApiServizi findAllApiServizi(String nome, Integer versione, ProfiloEnum profilo, String soggetto,
String q, Integer limit, Integer offset) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Api non trovata");
int idLista = Liste.ACCORDI_PORTTYPE;
ConsoleSearch ricerca = Helper.setupRicercaPaginata(q, limit, offset, idLista, env.idSoggetto.toIDSoggetto(),
env.tipo_protocollo);
List<PortType> servizi = env.apcCore.accordiPorttypeList(as.getId().intValue(), ricerca);
final ListaApiServizi ret = ListaUtils.costruisciListaPaginata(context.getUriInfo(),
ricerca.getIndexIniziale(idLista),
ricerca.getPageSize(idLista),
ricerca.getNumEntries(idLista), ListaApiServizi.class);
if (servizi.size() == 0 && env.findall_404)
throw FaultCode.NOT_FOUND.toException("Nessun allegato dell'Api specificata corrisponde ai criteri di ricerca");
servizi.forEach(s -> ret.addItemsItem(ApiApiHelper.servizioRegistroToApi(s)));
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce i dettagli di una API
*
* Questa operazione consente di ottenere i dettagli di una API identificata dal
* nome e dalla versione
*
*/
@Override
public ApiViewItem getApi(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComuneSintetico as = ApiApiHelper.getAccordoSintetico(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiItem item = ApiApiHelper.apiToItem(ApiApiHelper.accordoSpcRegistroToApi(as, env.soggettiCore), as, env);
ApiViewItem ret = new ApiViewItem();
ret.setDescrizione(item.getDescrizione());
ret.setTipoInterfaccia(item.getTipoInterfaccia());
ret.setNome(item.getNome());
ret.setProfilo(item.getProfilo());
ret.setReferente(item.getSoggetto());
ret.setSoggetto(item.getSoggetto());
ret.setVersione(item.getVersione());
ret.setStato(item.getStato());
ret.setStatoDescrizione(item.getStatoDescrizione());
ret.setTags(item.getTags());
ret.setCanale(item.getCanale());
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce il dettaglio di un allegato di una API
*
* Questa operazione consente di ottenere il dettaglio di un allegato della API
* identificata dal nome e dalla versione
*
*/
@Override
public ApiAllegato getApiAllegato(String nome, Integer versione, String nomeAllegato, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiAllegato ret = as.getAllegatoList().stream().filter(a -> nomeAllegato.equals(a.getFile())).map(a -> {
try {
return ApiApiHelper.documentoToApiAllegato(env.archiviCore.getDocumento(a.getId(), true));
} catch (Exception e) {
return null;
}
}).findFirst().orElse(null);
if(ret==null) {
ret = as.getSpecificaSemiformaleList().stream().filter(a -> nomeAllegato.equals(a.getFile())).map(a -> {
try {
return ApiApiHelper.documentoToApiAllegato(env.archiviCore.getDocumento(a.getId(), true));
} catch (Exception e) {
return null;
}
}).findFirst().orElse(null);
}
if (ret == null)
throw FaultCode.NOT_FOUND
.toException("Nessun allegato con nome " + nomeAllegato + " registrato per la Api specificata");
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce il dettaglio di un'azione di un servizio della API
*
* Questa operazione consente di ottenere il dettaglio di un'azione nel servizio
* della API identificata dal nome e dalla versione
*
*/
@Override
public ApiAzione getApiAzione(String nome, Integer versione, String nomeServizio, String nomeAzione,
ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
PortType pt = as.getPortTypeList().stream().filter(p -> nomeServizio.equals(p.getNome())).findFirst()
.orElse(null);
if (pt == null)
throw FaultCode.NOT_FOUND.toException("Nessun Servizio con nome: " + nomeServizio);
Operation az = pt.getAzioneList().stream().filter(a -> nomeAzione.equals(a.getNome()))
.findFirst().orElse(null);
if (az == null)
throw FaultCode.NOT_FOUND
.toException("Nessuna azione con nome " + nomeAzione + " registrato per il servizio " + nomeServizio);
ApiAzione ret = ApiApiHelper.operazioneToApiAzione(az);
ApiApiHelper.populateApiAzioneWithProtocolInfo(as, az, env, profilo, ret);
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/*
* Restituisce il canale associato all'API
*
* Questa operazione consente di ottenere il canale associato all'API identificata dal nome e dalla versione
*
*/
@Override
public ApiCanale getApiCanale(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiCanale canale = null;
if(env.gestioneCanali) {
canale = new ApiCanale();
if(as.getCanale()!=null && !"".equals(as.getCanale())) {
canale.setNome(as.getCanale());
canale.setConfigurazione(CanaleEnum.API);
}
else {
canale.setNome(env.canaleDefault);
canale.setConfigurazione(CanaleEnum.DEFAULT);
}
}
else {
throw new Exception("Gestione dei canali non abilitata");
}
context.getLogger().info("Invocazione completata con successo");
return canale;
}
catch(javax.ws.rs.WebApplicationException e) {
context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
throw e;
}
catch(Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce la descrizione di una API
*
* Questa operazione consente di ottenere la descrizione di una API identificata
* dal nome e dalla versione
*
*/
@Override
public ApiDescrizione getApiDescrizione(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiDescrizione ret = new ApiDescrizione();
ret.setDescrizione(as.getDescrizione());
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce le informazioni generali di una API
*
* Questa operazione consente di ottenere le informazioni generali di una API
* identificata dal nome e dalla versione
*
*/
@Override
public ApiInformazioniGeneraliView getApiInformazioniGenerali(String nome, Integer versione, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiInformazioniGeneraliView ret = new ApiInformazioniGeneraliView();
ret.setNome(as.getNome());
ret.setProfilo(env.profilo);
ret.setVersione(as.getVersione());
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce l'interfaccia di una API
*
* Questa operazione consente di ottenere l'interfaccia di una API identificata
* dal nome e dalla versione
*
*/
@Override
public ApiInterfacciaView getApiInterfaccia(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiInterfacciaView ret = new ApiInterfacciaView();
ret.setProfilo(env.profilo);
TipoApiEnum protocollo = as.getServiceBinding() == ServiceBinding.REST ? TipoApiEnum.REST : TipoApiEnum.SOAP;
switch (protocollo) {
case REST:
ApiInterfacciaRest iRest = new ApiInterfacciaRest();
iRest.setProtocollo(protocollo);
iRest.setFormato(Enums.formatoRestFromSpecifica.get(as.getFormatoSpecifica()));
ret.setTipoInterfaccia(iRest);
ret.setInterfaccia(as.getByteWsdlConcettuale());
break;
case SOAP:
ApiInterfacciaSoap iSoap = new ApiInterfacciaSoap();
iSoap.setProtocollo(protocollo);
iSoap.setFormato(Enums.formatoSoapFromSpecifica.get(as.getFormatoSpecifica()));
ret.setTipoInterfaccia(iSoap);
ret.setInterfaccia(as.getByteWsdlLogicoErogatore());
break;
default:
throw FaultCode.ERRORE_INTERNO
.toException("Tipologia interfaccia registro sconosciuta: " + as.getServiceBinding().name());
}
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce le informazioni ModI associate all'API
*
* Questa operazione consente di ottenere le informazioni ModI associato all'API identificata dal nome e dalla versione
*
*/
@Override
public ApiModI getApiModI(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiModI ret = ModiApiApiHelper.getApiModI(as, profilo, env);
context.getLogger().info("Invocazione completata con successo");
return ret;
}
catch(javax.ws.rs.WebApplicationException e) {
context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
throw e;
}
catch(Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce il nome del soggetto referente dell'api
*
* Questa operazione consente di ottenere il nome del soggetto referente
* dell'API identificata dal nome e dalla versione
*
*/
@Override
public ApiReferenteView getApiReferente(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiReferenteView ret = new ApiReferenteView();
ret.setProfilo(env.profilo);
ret.setReferente(as.getSoggettoReferente().getNome());
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce il dettaglio di una risorsa di una API
*
* Questa operazione consente di ottenere il dettaglio di una risorsa della API
* identificata dal nome e dalla versione
*
*/
@Override
public ApiRisorsa getApiRisorsa(String nome, Integer versione, String nomeRisorsa, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
Resource res = as.getResourceList().stream().filter(r -> nomeRisorsa.equals(r.getNome()))
.findFirst().orElse(null);
if (res == null)
throw FaultCode.NOT_FOUND
.toException("Nessuna risorsa con nome " + nomeRisorsa + " è registrata per la Api indicata");
ApiRisorsa ret = ApiApiHelper.risorsaRegistroToApi(res);
ApiApiHelper.populateApiRisorsaWithProtocolInfo(as, res, env, profilo, ret);
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce il dettaglio di un servizio di una API
*
* Questa operazione consente di ottenere il dettaglio di un servizio della API
* identificata dal nome e dalla versione
*
*/
@Override
public ApiServizio getApiServizio(String nome, Integer versione, String nomeServizio, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiServizio ret = as.getPortTypeList().stream().filter(p -> nomeServizio.equals(p.getNome()))
.map(p -> ApiApiHelper.servizioRegistroToApi(p)).findFirst().orElse(null);
if (ret == null)
throw FaultCode.NOT_FOUND.toException("Nessun Servizio con nome: " + nomeServizio);
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Restituisce i tags associati all'API
*
* Questa operazione consente di ottenere i tags associati all'API identificata dal nome e dalla versione
*
*/
@Override
public ApiTags getApiTags(String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
ApiEnv env = new ApiEnv(profilo, soggetto, context);
AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ApiTags ret = new ApiTags();
if(as.getGruppi()!=null && as.getGruppi().getGruppoList()!=null && !as.getGruppi().getGruppoList().isEmpty()) {
for (GruppoAccordo tag : as.getGruppi().getGruppoList()) {
ret.addTagsItem(tag.getNome());
}
}
context.getLogger().info("Invocazione completata con successo");
return ret;
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Modifica i dati di un allegato di una API
*
* Questa operazione consente di aggiornare i dettagli di un allegato della API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiAllegato(ApiAllegato body, String nome, Integer versione, String nomeAllegato,
ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final Documento oldDoc = BaseHelper.supplyOrNotFound(() -> env.archiviCore.getDocumento(nomeAllegato, null, null,
as.getId(), false, ProprietariDocumento.accordoServizio),
"Allegato con nome " + nomeAllegato + " per la API scelta.");
final Documento newDoc = ApiApiHelper.apiAllegatoToDocumento(body, as, env);
newDoc.setId(oldDoc.getId());
if (!newDoc.getRuolo().equals(oldDoc.getRuolo()))
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non puoi modificare il ruolo di un allegato");
SerialiableFormFile filewrap = new SerialiableFormFile(newDoc.getFile(), newDoc.getByteContenuto());
env.requestWrapper.overrideParameter(AccordiServizioParteComuneCostanti.PARAMETRO_APC_ALLEGATI_RUOLO,
newDoc.getRuolo());
ArchiviHelper archiviHelper = new ArchiviHelper(env.stationCore, env.requestWrapper, env.pd,
env.requestWrapper.getSession());
if (!archiviHelper.accordiAllegatiCheckData(TipoOperazione.CHANGE, filewrap, newDoc,
ProprietariDocumento.accordoServizio, env.protocolFactory)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
AccordiServizioParteComuneUtilities.updateAccordoServizioParteComuneAllegati(as, oldDoc, newDoc);
env.apcCore.performUpdateOperation(env.userLogin, false, as);
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Modifica i dati di un'azione nel servizio di una API
*
* Questa operazione consente di aggiornare i dettagli di un'azione della API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiAzione(ApiAzione body, String nome, Integer versione, String nomeServizio, String nomeAzione,
ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final PortType pt = as.getPortTypeList().stream().filter(p -> nomeServizio.equals(p.getNome())).findFirst()
.orElse(null);
if (pt == null)
throw FaultCode.NOT_FOUND.toException("Nessun Servizio con nome: " + nomeServizio);
final Operation oldOp = BaseHelper.findAndRemoveFirst(pt.getAzioneList(),
(op -> nomeAzione.equals(op.getNome())));
if (oldOp == null)
throw FaultCode.NOT_FOUND
.toException("Nessuna Azione con nome: " + nomeAzione + " associata al servizio " + nomeServizio);
if (!nomeAzione.equals(oldOp.getNome())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Non puoi modificare il nome dell'azione");
}
ApiApiHelper.updateOperation(body, pt, oldOp);
final Operation newOp = oldOp;
ProfiloCollaborazioneEnum profiloBody = body.getProfiloCollaborazione()!=null ? body.getProfiloCollaborazione() : ProfiloCollaborazioneEnum.SINCRONO;
ProtocolProperties protocolProperties = null;
if(profilo != null) {
protocolProperties = ApiApiHelper.getProtocolProperties(body, profilo, as, newOp, env);
if(protocolProperties != null) {
newOp.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(protocolProperties, ConsoleOperationType.CHANGE, null));
}
}
if (! env.apcHelper.accordiPorttypeOperationCheckData(
TipoOperazione.CHANGE,
as.getId().toString(),
nomeServizio,
newOp.getNome(),
newOp.getProfAzione(),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newOp.getConsegnaInOrdine()),
newOp.getScadenza() != null ? newOp.getScadenza() : "", // Scadenza operazione
"-", // Servizio Correlato
"-", // Azione Correlata
Enums.profiloCollaborazioneFromApiEnum.get(profiloBody).toString(), "0", // styleOp
"", // soapActionOp,
"literal", // useOp,
null, // opTypeOp,
"" // nsWSDLOp
)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
IDPortType idPT = new IDPortType();
idPT.setNome(pt.getNome());
idPT.setIdAccordo(IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as));
IDPortTypeAzione idAccordoAzione = new IDPortTypeAzione();
idAccordoAzione.setNome(oldOp.getNome());
idAccordoAzione.setIdPortType(idPT);
ApiApiHelper.validateProperties(env, protocolProperties, idAccordoAzione, ConsoleOperationType.CHANGE);
// Dopo aver fatto i controlli sui dati aggiungo la nuova azione
pt.addAzione(newOp);
AccordiServizioParteComuneUtilities.createPortTypeOperation(env.apcCore.isEnableAutoMappingWsdlIntoAccordo(),
env.apcCore, env.apcHelper, as, pt, env.userLogin);
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Consente di modificare il canale associato all'API
*
* Questa operazione consente di aggiornare il canale associato all'API identificata dal nome e dalla versione
*
*/
@Override
public void updateApiCanale(ConfigurazioneApiCanale body, String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final IDAccordo oldIdAccordo = env.idAccordoFactory.getIDAccordoFromAccordo(as);
if(!env.gestioneCanali) {
throw new Exception("Gestione dei canali non abilitata");
}
if(ConfigurazioneCanaleEnum.RIDEFINITO.equals(body.getConfigurazione())){
if(body.getCanale()==null || "".equals(body.getCanale())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un canale");
}
if(!env.canali.contains(body.getCanale())) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Il canale fornito '" + body.getCanale() + "' non è presente nel registro");
}
as.setCanale(body.getCanale());
}
else {
as.setCanale(null);
}
boolean validazioneDocumenti = ServerProperties.getInstance().isValidazioneDocumenti();
BinaryParameter wsdlserv = new BinaryParameter();
wsdlserv.setValue(as.getByteWsdlLogicoErogatore());
BinaryParameter wsdlconc = new BinaryParameter();
wsdlconc.setValue(as.getByteWsdlConcettuale());
BinaryParameter wsdldef = new BinaryParameter();
wsdldef.setValue(as.getByteWsdlDefinitorio());
/*
* boolean visibilitaAccordoCooperazione=false;
* if("-".equals(this.accordoCooperazioneId)==false &&
* "".equals(this.accordoCooperazioneId)==false &&
* this.accordoCooperazioneId!=null){ AccordoCooperazione ac =
* acCore.getAccordoCooperazione(Long.parseLong(this.accordoCooperazioneId));
* visibilitaAccordoCooperazione=ac.getPrivato()!=null && ac.getPrivato(); }
*/
StringBuilder bfTags = new StringBuilder();
if(as.getGruppi()!=null && as.getGruppi().getGruppoList()!=null && !as.getGruppi().getGruppoList().isEmpty()) {
for (GruppoAccordo tag : as.getGruppi().getGruppoList()) {
if(bfTags.length()>0) {
bfTags.append(",");
}
bfTags.append(tag.getNome());
}
}
boolean gestioneCanaliEnabled = env.gestioneCanali;
String canale = as.getCanale();
String canaleStato = null;
if(canale == null) {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
} else {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
}
if (!env.apcHelper.accordiCheckData(TipoOperazione.CHANGE, as.getNome(), as.getDescrizione(),
as.getProfiloCollaborazione().toString(), Helper.toBinaryParameter(as.getByteWsdlDefinitorio()),
Helper.toBinaryParameter(as.getByteWsdlConcettuale()),
Helper.toBinaryParameter(as.getByteWsdlLogicoErogatore()),
Helper.toBinaryParameter(as.getByteWsdlLogicoFruitore()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine()),
as.getScadenza() == null ? "" : as.getScadenza(), as.getId().toString(), as.getSoggettoReferente().getNome(),
as.getVersione().toString(), null, // AccordoCooperazioneID
false, // privato false, null,
false, // visibilitaAccordoCooperazione
oldIdAccordo, // idAccordoOld
null, // wsblconc
null, // wsblserv
null, // wsblservrorr
validazioneDocumenti, env.tipo_protocollo, null, // backToStato
env.apcCore.toMessageServiceBinding(as.getServiceBinding()), null, // MessageType
Enums.interfaceTypeFromFormatoSpecifica.get(as.getFormatoSpecifica()), env.gestisciSoggettoReferente,
bfTags.toString(),
canaleStato, canale, gestioneCanaliEnabled)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
// Il profilo di collaborazione di base è Sincrono.
// Quindi Nella AccordiServizioPArteComuneChange così come nella Add possiamo
// assumerlo costante.
// Sono i Servizi e le Azioni ad avere un profilo di collaborazione
as.setOldIDAccordoForUpdate(oldIdAccordo);
List<Object> operazioniList = new ArrayList<>(Arrays.asList(as));
// Questa roba non serve qui perchè la updateDescrizione non cambia il nome e
// quindi nemmeno l'ID.
IDAccordo idNEW = env.idAccordoFactory.getIDAccordoFromAccordo(as);
if (idNEW.equals(oldIdAccordo) == false) {
AccordiServizioParteComuneUtilities.findOggettiDaAggiornare(oldIdAccordo, as, env.apcCore, operazioniList);
}
env.apcCore.performUpdateOperation(env.userLogin, false, operazioniList.toArray());
context.getLogger().info("Invocazione completata con successo");
}
catch(javax.ws.rs.WebApplicationException e) {
context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
throw e;
}
catch(Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Consente di modificare la descrizione di una API
*
* Questa operazione consente di aggiornare la descrizione di una API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiDescrizione(ApiDescrizione body, String nome, Integer versione, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final IDAccordo oldIdAccordo = env.idAccordoFactory.getIDAccordoFromAccordo(as);
as.setDescrizione(body.getDescrizione());
boolean validazioneDocumenti = ServerProperties.getInstance().isValidazioneDocumenti();
BinaryParameter wsdlserv = new BinaryParameter();
wsdlserv.setValue(as.getByteWsdlLogicoErogatore());
BinaryParameter wsdlconc = new BinaryParameter();
wsdlconc.setValue(as.getByteWsdlConcettuale());
BinaryParameter wsdldef = new BinaryParameter();
wsdldef.setValue(as.getByteWsdlDefinitorio());
/*
* boolean visibilitaAccordoCooperazione=false;
* if("-".equals(this.accordoCooperazioneId)==false &&
* "".equals(this.accordoCooperazioneId)==false &&
* this.accordoCooperazioneId!=null){ AccordoCooperazione ac =
* acCore.getAccordoCooperazione(Long.parseLong(this.accordoCooperazioneId));
* visibilitaAccordoCooperazione=ac.getPrivato()!=null && ac.getPrivato(); }
*/
StringBuilder bfTags = new StringBuilder();
if(as.getGruppi()!=null && as.getGruppi().getGruppoList()!=null && !as.getGruppi().getGruppoList().isEmpty()) {
for (GruppoAccordo tag : as.getGruppi().getGruppoList()) {
if(bfTags.length()>0) {
bfTags.append(",");
}
bfTags.append(tag.getNome());
}
}
boolean gestioneCanaliEnabled = env.gestioneCanali;
String canale = as.getCanale();
String canaleStato = null;
if(canale == null) {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
} else {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
}
if (!env.apcHelper.accordiCheckData(TipoOperazione.CHANGE, as.getNome(), as.getDescrizione(),
as.getProfiloCollaborazione().toString(), Helper.toBinaryParameter(as.getByteWsdlDefinitorio()),
Helper.toBinaryParameter(as.getByteWsdlConcettuale()),
Helper.toBinaryParameter(as.getByteWsdlLogicoErogatore()),
Helper.toBinaryParameter(as.getByteWsdlLogicoFruitore()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine()),
as.getScadenza() == null ? "" : as.getScadenza(), as.getId().toString(), as.getSoggettoReferente().getNome(),
as.getVersione().toString(), null, // AccordoCooperazioneID
false, // privato false, null,
false, // visibilitaAccordoCooperazione
oldIdAccordo, // idAccordoOld
null, // wsblconc
null, // wsblserv
null, // wsblservrorr
validazioneDocumenti, env.tipo_protocollo, null, // backToStato
env.apcCore.toMessageServiceBinding(as.getServiceBinding()), null, // MessageType
Enums.interfaceTypeFromFormatoSpecifica.get(as.getFormatoSpecifica()), env.gestisciSoggettoReferente,
bfTags.toString(),
canaleStato, canale, gestioneCanaliEnabled)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
// Il profilo di collaborazione di base è Sincrono.
// Quindi Nella AccordiServizioPArteComuneChange così come nella Add possiamo
// assumerlo costante.
// Sono i Servizi e le Azioni ad avere un profilo di collaborazione
as.setOldIDAccordoForUpdate(oldIdAccordo);
List<Object> operazioniList = new ArrayList<>(Arrays.asList(as));
// Questa roba non serve qui perchè la updateDescrizione non cambia il nome e
// quindi nemmeno l'ID.
IDAccordo idNEW = env.idAccordoFactory.getIDAccordoFromAccordo(as);
if (idNEW.equals(oldIdAccordo) == false) {
AccordiServizioParteComuneUtilities.findOggettiDaAggiornare(oldIdAccordo, as, env.apcCore, operazioniList);
}
env.apcCore.performUpdateOperation(env.userLogin, false, operazioniList.toArray());
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Consente di modificare le informazioni generali di una API
*
* Questa operazione consente di aggiornare le informazioni generali di una API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiInformazioniGenerali(ApiInformazioniGenerali body, String nome, Integer versione,
ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
BaseHelper.throwIfNull(body);
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final IDAccordo oldIdAccordo = env.idAccordoFactory.getIDAccordoFromAccordo(as);
as.setNome(body.getNome());
as.setVersione(body.getVersione());
boolean validazioneDocumenti = ServerProperties.getInstance().isValidazioneDocumenti();
/*
* boolean visibilitaAccordoCooperazione=false;
* if("-".equals(this.accordoCooperazioneId)==false &&
* "".equals(this.accordoCooperazioneId)==false &&
* this.accordoCooperazioneId!=null){ AccordoCooperazione ac =
* acCore.getAccordoCooperazione(Long.parseLong(this.accordoCooperazioneId));
* visibilitaAccordoCooperazione=ac.getPrivato()!=null && ac.getPrivato(); }
*/
StringBuilder bfTags = new StringBuilder();
if(as.getGruppi()!=null && as.getGruppi().getGruppoList()!=null && !as.getGruppi().getGruppoList().isEmpty()) {
for (GruppoAccordo tag : as.getGruppi().getGruppoList()) {
if(bfTags.length()>0) {
bfTags.append(",");
}
bfTags.append(tag.getNome());
}
}
boolean gestioneCanaliEnabled = env.gestioneCanali;
String canale = as.getCanale();
String canaleStato = null;
if(canale == null) {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
} else {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
}
if (!env.apcHelper.accordiCheckData(TipoOperazione.CHANGE, as.getNome(), as.getDescrizione(),
as.getProfiloCollaborazione().toString(), Helper.toBinaryParameter(as.getByteWsdlDefinitorio()),
Helper.toBinaryParameter(as.getByteWsdlConcettuale()),
Helper.toBinaryParameter(as.getByteWsdlLogicoErogatore()),
Helper.toBinaryParameter(as.getByteWsdlLogicoFruitore()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine()),
as.getScadenza() == null ? "" : as.getScadenza(), as.getId().toString(), as.getSoggettoReferente().getNome(),
as.getVersione().toString(), null, // AccordoCooperazioneID
false, // privato false, null,
false, // visibilitaAccordoCooperazione
oldIdAccordo, // idAccordoOld
null, // wsblconc
null, // wsblserv
null, // wsblservrorr
validazioneDocumenti, env.tipo_protocollo, null, // backToStato
env.apcCore.toMessageServiceBinding(as.getServiceBinding()), null, // MessageType
Enums.interfaceTypeFromFormatoSpecifica.get(as.getFormatoSpecifica()), env.gestisciSoggettoReferente,
bfTags.toString(),
canaleStato, canale, gestioneCanaliEnabled)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
as.setOldIDAccordoForUpdate(oldIdAccordo);
List<Object> operazioniList = new ArrayList<>(Arrays.asList(as));
IDAccordo idNEW = env.idAccordoFactory.getIDAccordoFromAccordo(as);
if (idNEW.equals(oldIdAccordo) == false) {
AccordiServizioParteComuneUtilities.findOggettiDaAggiornare(oldIdAccordo, as, env.apcCore, operazioniList);
}
env.apcCore.performUpdateOperation(env.userLogin, false, operazioniList.toArray());
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Consente di modificare l'interfaccia di una API
*
* Questa operazione consente di aggiornare l'interfaccia di una API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiInterfaccia(ApiInterfaccia body, String nome, Integer versione, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final String tipoWsdl = as.getServiceBinding() == ServiceBinding.REST
? AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_CONCETTUALE
: AccordiServizioParteComuneCostanti.PARAMETRO_APC_WSDL_EROGATORE;
final String wsdl = new String(body.getInterfaccia());
ServerProperties serverProperties = ServerProperties.getInstance();
final boolean validazioneDocumenti = serverProperties.isValidazioneDocumenti();
if (!env.apcHelper.accordiWSDLCheckData(env.pd, tipoWsdl, wsdl, as, validazioneDocumenti, env.tipo_protocollo)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
final boolean facilityUnicoWSDL_interfacciaStandard = as.getServiceBinding() == ServiceBinding.SOAP;
ServerProperties properties = ServerProperties.getInstance();
boolean aggiornaEsistenti = serverProperties.isUpdateInterfacciaApiUpdateIfExists();
boolean eliminaNonPresentiNuovaInterfaccia = serverProperties.isUpdateInterfacciaApiDeleteIfNotFound();
List<IDResource> risorseEliminate = new ArrayList<IDResource>();
List<IDPortType> portTypeEliminati = new ArrayList<IDPortType>();
List<IDPortTypeAzione> operationEliminate = new ArrayList<IDPortTypeAzione>();
AccordiServizioParteComuneUtilities.updateInterfacciaAccordoServizioParteComune(tipoWsdl, wsdl, as,
properties.isEnabledAutoMapping(), properties.isValidazioneDocumenti(),
properties.isEnabledAutoMappingEstraiXsdSchemiFromWsdlTypes(), facilityUnicoWSDL_interfacciaStandard,
env.tipo_protocollo, env.apcCore,
aggiornaEsistenti, eliminaNonPresentiNuovaInterfaccia,
risorseEliminate, portTypeEliminati, operationEliminate);
// effettuo le operazioni
env.apcCore.performUpdateOperation(env.userLogin, false, as);
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Consente di modificare le informazioni ModI associate all'API
*
* Questa operazione consente di aggiornare le informazioni ModI associate all'API identificata dal nome e dalla versione
*
*/
@Override
public void updateApiModI(ApiModI body, String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
ProtocolProperties updateModiProtocolProperties = ModiApiApiHelper.updateModiProtocolProperties(as, profilo, body);
IDAccordo idAccordoFromAccordo = env.idAccordoFactory.getIDAccordoFromAccordo(as);
ApiApiHelper.validateProperties(env, updateModiProtocolProperties, idAccordoFromAccordo, ConsoleOperationType.CHANGE);
if(updateModiProtocolProperties != null) {
as.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(updateModiProtocolProperties, ConsoleOperationType.ADD, null));
}
env.apcCore.performUpdateOperation(env.userLogin, false, as);
context.getLogger().info("Invocazione completata con successo");
}
catch(javax.ws.rs.WebApplicationException e) {
context.getLogger().error("Invocazione terminata con errore '4xx': %s",e, e.getMessage());
throw e;
}
catch(Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s",e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Modifica i dati di una risorsa di una API
*
* Questa operazione consente di aggiornare i dettagli di una risorsa della API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiRisorsa(ApiRisorsa body, String nome, Integer versione, String nomeRisorsa, ProfiloEnum profilo,
String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
Resource oldResource = BaseHelper.findAndRemoveFirst(as.getResourceList(), r -> nomeRisorsa.equals(r.getNome()));
if (oldResource == null)
throw FaultCode.NOT_FOUND.toException("Nessuna risorsa trovata con nome " + nomeRisorsa);
final String oldPath = oldResource.getPath();
final String oldHttpMethod = oldResource.getMethodRawEnumValue();
final String oldNomeRisorsaGenerato = oldHttpMethod != null
? APIUtils.normalizeResourceName(HttpMethod.toEnumConstant(oldHttpMethod), oldPath)
: null;
ApiApiHelper.updateRisorsa(body, oldResource);
final Resource newRes = oldResource;
ProtocolProperties protocolProperties = null;
if(profilo != null) {
protocolProperties = ApiApiHelper.getProtocolProperties(body, profilo, newRes, env);
if(protocolProperties != null) {
newRes.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(protocolProperties, ConsoleOperationType.CHANGE, null));
}
}
if (!env.apcHelper.accordiResourceCheckData(TipoOperazione.CHANGE, as.getId().toString(),
body.getNome() != null ? body.getNome() : "", newRes.getNome(), newRes.getPath(), newRes.getMethodRawEnumValue(),
newRes.getDescrizione(), env.apcCore.toMessageMessageType(newRes.getMessageType()), nomeRisorsa,
oldNomeRisorsaGenerato, oldPath, oldHttpMethod,
AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getConfermaRicezione()), // confricaz,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newRes.getConsegnaInOrdine()), // consordaz,
newRes.getScadenza() != null ? newRes.getScadenza() : "")) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
IDResource idResource = new IDResource();
idResource.setNome(oldResource.getNome());
idResource.setIdAccordo(IDAccordoFactory.getInstance().getIDAccordoFromAccordo(as));
ApiApiHelper.validateProperties(env, protocolProperties, idResource, newRes.getMethod()!=null ? newRes.getMethod().toString() : null, newRes.getPath(), ConsoleOperationType.ADD);
as.addResource(newRes);
AccordiServizioParteComuneUtilities.createResource(env.apcCore.isEnableAutoMappingWsdlIntoAccordo(), env.apcCore,
env.apcHelper, as, env.userLogin);
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Modifica i dati di un servizio di una API
*
* Questa operazione consente di aggiornare i dettagli di un servizio della API
* identificata dal nome e dalla versione
*
*/
@Override
public void updateApiServizio(ApiServizio body, String nome, Integer versione, String nomeServizio,
ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final PortType oldPt = BaseHelper.findAndRemoveFirst(as.getPortTypeList(),
(p -> nomeServizio.equals(p.getNome())));
if (oldPt == null)
throw FaultCode.NOT_FOUND.toException("Nessun Servizio registrato con nome: " + nomeServizio);
ApiApiHelper.updatePortType(body, oldPt, env);
final PortType newPt = oldPt;
if (!env.apcHelper.accordiPorttypeCheckData(TipoOperazione.CHANGE, as.getId().toString(), newPt.getNome(),
newPt.getDescrizione(), AccordiServizioParteComuneCostanti.INFORMAZIONI_PROTOCOLLO_MODALITA_RIDEFINITO,
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPt.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPt.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPt.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPt.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(newPt.getConsegnaInOrdine()),
newPt.getScadenza() != null ? newPt.getScadenza() : "")) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
as.addPortType(newPt);
env.apcCore.performUpdateOperation(env.userLogin, false, as);
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
/**
* Consente di modificare i tags associati all'API
*
* Questa operazione consente di aggiornare i tags associati all'API identificata dal nome e dalla versione
*
*/
@Override
public void updateApiTags(ApiTags body, String nome, Integer versione, ProfiloEnum profilo, String soggetto) {
IContext context = this.getContext();
try {
context.getLogger().info("Invocazione in corso ...");
AuthorizationManager.authorize(context, getAuthorizationConfig());
context.getLogger().debug("Autorizzazione completata con successo");
if (body == null)
throw FaultCode.RICHIESTA_NON_VALIDA.toException("Specificare un body");
final ApiEnv env = new ApiEnv(profilo, soggetto, context);
final AccordoServizioParteComune as = ApiApiHelper.getAccordoFull(nome, versione, env);
if (as == null)
throw FaultCode.NOT_FOUND.toException("Nessuna Api registrata con nome " + nome + " e versione " + versione);
final IDAccordo oldIdAccordo = env.idAccordoFactory.getIDAccordoFromAccordo(as);
List<Object> objectToCreate = new ArrayList<>();
if(body.getTags()==null || body.getTags().isEmpty()) {
as.setGruppi(null);
}
else {
as.setGruppi(new GruppiAccordo()); // annullo eventuali tags presenti.
GruppiCore gruppiCore = new GruppiCore(env.stationCore);
for (String tag : body.getTags()) {
GruppoAccordo gruppo = new GruppoAccordo();
gruppo.setNome(tag);
as.getGruppi().addGruppo(gruppo);
if(!gruppiCore.existsGruppo(tag)) {
Gruppo nuovoGruppo = new Gruppo();
nuovoGruppo.setNome(tag);
nuovoGruppo.setSuperUser(as.getSuperUser());
objectToCreate.add(nuovoGruppo);
}
}
}
boolean validazioneDocumenti = ServerProperties.getInstance().isValidazioneDocumenti();
BinaryParameter wsdlserv = new BinaryParameter();
wsdlserv.setValue(as.getByteWsdlLogicoErogatore());
BinaryParameter wsdlconc = new BinaryParameter();
wsdlconc.setValue(as.getByteWsdlConcettuale());
BinaryParameter wsdldef = new BinaryParameter();
wsdldef.setValue(as.getByteWsdlDefinitorio());
/*
* boolean visibilitaAccordoCooperazione=false;
* if("-".equals(this.accordoCooperazioneId)==false &&
* "".equals(this.accordoCooperazioneId)==false &&
* this.accordoCooperazioneId!=null){ AccordoCooperazione ac =
* acCore.getAccordoCooperazione(Long.parseLong(this.accordoCooperazioneId));
* visibilitaAccordoCooperazione=ac.getPrivato()!=null && ac.getPrivato(); }
*/
StringBuilder bfTags = new StringBuilder();
if(as.getGruppi()!=null && as.getGruppi().getGruppoList()!=null && !as.getGruppi().getGruppoList().isEmpty()) {
for (GruppoAccordo tag : as.getGruppi().getGruppoList()) {
if(bfTags.length()>0) {
bfTags.append(",");
}
bfTags.append(tag.getNome());
}
}
boolean gestioneCanaliEnabled = env.gestioneCanali;
String canale = as.getCanale();
String canaleStato = null;
if(canale == null) {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_DEFAULT;
} else {
canaleStato = AccordiServizioParteComuneCostanti.DEFAULT_VALUE_PARAMETRO_APC_CANALE_STATO_RIDEFINITO;
}
if (!env.apcHelper.accordiCheckData(TipoOperazione.CHANGE, as.getNome(), as.getDescrizione(),
as.getProfiloCollaborazione().toString(), Helper.toBinaryParameter(as.getByteWsdlDefinitorio()),
Helper.toBinaryParameter(as.getByteWsdlConcettuale()),
Helper.toBinaryParameter(as.getByteWsdlLogicoErogatore()),
Helper.toBinaryParameter(as.getByteWsdlLogicoFruitore()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getFiltroDuplicati()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConfermaRicezione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdCollaborazione()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getIdRiferimentoRichiesta()),
AccordiServizioParteComuneHelper.convertAbilitatoDisabilitatoDB2View(as.getConsegnaInOrdine()),
as.getScadenza() == null ? "" : as.getScadenza(), as.getId().toString(), as.getSoggettoReferente().getNome(),
as.getVersione().toString(), null, // AccordoCooperazioneID
false, // privato false, null,
false, // visibilitaAccordoCooperazione
oldIdAccordo, // idAccordoOld
null, // wsblconc
null, // wsblserv
null, // wsblservrorr
validazioneDocumenti, env.tipo_protocollo, null, // backToStato
env.apcCore.toMessageServiceBinding(as.getServiceBinding()), null, // MessageType
Enums.interfaceTypeFromFormatoSpecifica.get(as.getFormatoSpecifica()), env.gestisciSoggettoReferente,
bfTags.toString(),
canaleStato, canale, gestioneCanaliEnabled)) {
throw FaultCode.RICHIESTA_NON_VALIDA.toException(StringEscapeUtils.unescapeHtml(env.pd.getMessage()));
}
// Il profilo di collaborazione di base è Sincrono.
// Quindi Nella AccordiServizioPArteComuneChange così come nella Add possiamo
// assumerlo costante.
// Sono i Servizi e le Azioni ad avere un profilo di collaborazione
as.setOldIDAccordoForUpdate(oldIdAccordo);
List<Object> operazioniList = new ArrayList<>(Arrays.asList(as));
// Questa roba non serve qui perchè la updateDescrizione non cambia il nome e
// quindi nemmeno l'ID.
IDAccordo idNEW = env.idAccordoFactory.getIDAccordoFromAccordo(as);
if (idNEW.equals(oldIdAccordo) == false) {
AccordiServizioParteComuneUtilities.findOggettiDaAggiornare(oldIdAccordo, as, env.apcCore, operazioniList);
}
// effettuo le operazioni
if(objectToCreate.size()>0) {
env.apcCore.performCreateOperation(env.userLogin, false, objectToCreate.toArray(new Object[objectToCreate.size()]));
}
env.apcCore.performUpdateOperation(env.userLogin, false, operazioniList.toArray());
context.getLogger().info("Invocazione completata con successo");
} catch (javax.ws.rs.WebApplicationException e) {
context.getLogger().error_except404("Invocazione terminata con errore '4xx': %s", e, e.getMessage());
throw e;
} catch (Throwable e) {
context.getLogger().error("Invocazione terminata con errore: %s", e, e.getMessage());
throw FaultCode.ERRORE_INTERNO.toException(e);
}
}
}