BasicConfiguration.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.protocol.basic.config;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.constants.TipoPdD;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.message.config.ServiceBindingConfiguration;
import org.openspcoop2.message.constants.ServiceBinding;
import org.openspcoop2.protocol.basic.BasicComponentFactory;
import org.openspcoop2.protocol.manifest.Binding;
import org.openspcoop2.protocol.manifest.CollaborationProfile;
import org.openspcoop2.protocol.manifest.Functionality;
import org.openspcoop2.protocol.manifest.InterfaceConfiguration;
import org.openspcoop2.protocol.manifest.Openspcoop2;
import org.openspcoop2.protocol.manifest.OrganizationType;
import org.openspcoop2.protocol.manifest.Registry;
import org.openspcoop2.protocol.manifest.ServiceType;
import org.openspcoop2.protocol.manifest.SoapHeaderBypassMustUnderstandHeader;
import org.openspcoop2.protocol.manifest.Version;
import org.openspcoop2.protocol.manifest.constants.InterfaceType;
import org.openspcoop2.protocol.sdk.BypassMustUnderstandCheck;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
import org.openspcoop2.protocol.sdk.constants.InitialIdConversationType;
import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
import org.openspcoop2.utils.certificate.remote.RemoteStoreConfig;
import org.openspcoop2.utils.transport.TransportRequestContext;
/**
* Classe che implementa, l'interfaccia {@link org.openspcoop2.protocol.sdk.config.IProtocolConfiguration}
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class BasicConfiguration extends BasicComponentFactory implements org.openspcoop2.protocol.sdk.config.IProtocolConfiguration {
private Registry registroManifest;
private Binding bindingManifest;
private Openspcoop2 manifest;
public BasicConfiguration(IProtocolFactory<?> factory) throws ProtocolException {
super(factory);
this.manifest = this.protocolFactory.getManifest();
this.registroManifest = this.manifest.getRegistry();
this.bindingManifest = this.manifest.getBinding();
}
@Override
public ServiceBindingConfiguration getDefaultServiceBindingConfiguration(TransportRequestContext transportRequest) throws ProtocolException{
return ServiceBindingConfigurationReader.getDefaultServiceBindingConfiguration(this.manifest, transportRequest);
}
@Override
public ServiceBinding getIntegrationServiceBinding(IDServizio idServizio, IRegistryReader registryReader) throws ProtocolException, RegistryNotFound{
return ServiceBindingConfigurationReader.getServiceBinding(idServizio, registryReader);
}
@Override
public ServiceBinding getProtocolServiceBinding(ServiceBinding integrationServiceBinding, TransportRequestContext transportRequest) throws ProtocolException{
return integrationServiceBinding; // stesso service binding tra integration e protocol per default
}
@Override
public ServiceBindingConfiguration getServiceBindingConfiguration(TransportRequestContext transportRequest, ServiceBinding serviceBinding,
IDServizio idServizio, IRegistryReader registryReader) throws ProtocolException, RegistryNotFound{
return ServiceBindingConfigurationReader.getServiceBindingConfiguration(this.manifest, transportRequest, serviceBinding, idServizio, registryReader);
}
@Override
public List<InterfaceType> getInterfacceSupportate(ServiceBinding serviceBinding){
List<InterfaceType> list = new ArrayList<InterfaceType>();
switch (serviceBinding) {
case SOAP:
if(this.bindingManifest.getSoap()!=null &&
this.bindingManifest.getSoap().getInterfaces()!=null &&
this.bindingManifest.getSoap().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getSoap().getInterfaces().getSpecificationList()) {
list.add(interfaceConfiguration.getType());
}
}
break;
case REST:
if(this.bindingManifest.getRest()!=null &&
this.bindingManifest.getRest().getInterfaces()!=null &&
this.bindingManifest.getRest().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getRest().getInterfaces().getSpecificationList()) {
list.add(interfaceConfiguration.getType());
}
}
break;
}
return list;
}
@Override
public boolean isSupportoSchemaEsternoInterfaccia(ServiceBinding serviceBinding, InterfaceType interfaceType) {
switch (serviceBinding) {
case SOAP:
if(this.bindingManifest.getSoap()!=null &&
this.bindingManifest.getSoap().getInterfaces()!=null &&
this.bindingManifest.getSoap().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getSoap().getInterfaces().getSpecificationList()) {
if(interfaceType.equals(interfaceConfiguration.getType())) {
return interfaceConfiguration.isSchema();
}
}
}
break;
case REST:
if(this.bindingManifest.getRest()!=null &&
this.bindingManifest.getRest().getInterfaces()!=null &&
this.bindingManifest.getRest().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getRest().getInterfaces().getSpecificationList()) {
if(interfaceType.equals(interfaceConfiguration.getType())) {
return interfaceConfiguration.isSchema();
}
}
}
break;
}
return false;
}
@Override
public boolean isSupportoSpecificaConversazioni(ServiceBinding serviceBinding, InterfaceType interfaceType) {
switch (serviceBinding) {
case SOAP:
if(this.bindingManifest.getSoap()!=null &&
this.bindingManifest.getSoap().getInterfaces()!=null &&
this.bindingManifest.getSoap().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getSoap().getInterfaces().getSpecificationList()) {
if(interfaceType.equals(interfaceConfiguration.getType())) {
return interfaceConfiguration.isConversations();
}
}
}
break;
case REST:
if(this.bindingManifest.getRest()!=null &&
this.bindingManifest.getRest().getInterfaces()!=null &&
this.bindingManifest.getRest().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getRest().getInterfaces().getSpecificationList()) {
if(interfaceType.equals(interfaceConfiguration.getType())) {
return interfaceConfiguration.isConversations();
}
}
}
break;
}
return false;
}
@Override
public boolean isSupportoPortiAccessoAccordiParteSpecifica(ServiceBinding serviceBinding, InterfaceType interfaceType) {
switch (serviceBinding) {
case SOAP:
if(this.bindingManifest.getSoap()!=null &&
this.bindingManifest.getSoap().getInterfaces()!=null &&
this.bindingManifest.getSoap().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getSoap().getInterfaces().getSpecificationList()) {
if(interfaceType.equals(interfaceConfiguration.getType())) {
return interfaceConfiguration.isImplementation();
}
}
}
break;
case REST:
if(this.bindingManifest.getRest()!=null &&
this.bindingManifest.getRest().getInterfaces()!=null &&
this.bindingManifest.getRest().getInterfaces().sizeSpecificationList()>0){
for (InterfaceConfiguration interfaceConfiguration : this.bindingManifest.getRest().getInterfaces().getSpecificationList()) {
if(interfaceType.equals(interfaceConfiguration.getType())) {
return interfaceConfiguration.isImplementation();
}
}
}
break;
}
return false;
}
@Override
public boolean isSupportoAutenticazioneSoggetti() {
return this.registroManifest.getOrganization().getAuthentication();
}
@Override
public boolean isSupportatoAutenticazioneApplicativiHttpsConToken() {
return this.registroManifest.getOrganization().getHttpsWithTokenAuthentication();
}
@Override
public boolean isSupportoAutenticazioneApplicativiErogazioni() {
return this.registroManifest.getOrganization().getInboundApplicativeAuthentication();
}
@Override
public boolean isSupportatoAutorizzazioneRichiedenteSenzaAutenticazioneErogazioni() {
return this.registroManifest.getOrganization().getInboundOrganizationAuthorizationWithoutAuthentication();
}
@Override
public boolean isSupportoAutenticazioneApplicativiEsterniErogazioni() {
return this.registroManifest.getOrganization().getInboundExternalApplicationAuthentication();
}
@Override
public boolean isSupportoCodiceIPA() {
return this.registroManifest.getOrganization().isCodeIPA();
}
@Override
public boolean isSupportoIdentificativoPortaSoggetto() {
return this.registroManifest.getOrganization().isCodeDomain();
}
@Override
public boolean isSupportoIndirizzoRisposta(){
return this.registroManifest.getOrganization().isReplyToAddress();
}
@Override
public boolean isSupportoSoggettoUtilizzoTrattino() {
return this.registroManifest.getOrganization().isDash();
}
@Override
public boolean isSupportoSoggettoReferenteAccordiParteComune() {
return this.registroManifest.getService().isApiReferent();
}
@Override
public boolean isSupportoVersionamentoAccordiParteSpecifica() {
return this.registroManifest.getService().isVersion();
}
@Override
public boolean isSupportoSbustamentoProtocollo() {
return this.registroManifest.getService().isProtocolEnvelopeManagement();
}
@Override
public boolean isSupportoSceltaFault() {
return this.registroManifest.getService().isFaultChoice();
}
@Override
public boolean isAbilitatoRiusoIdCorrelazioneApplicativa() {
return this.registroManifest.getService().isCorrelationReuseProtocolId();
}
@Override
public boolean isAbilitataGenerazioneTracce() {
return this.registroManifest.getService().isTrace();
}
@Override
public boolean isAbilitatoSalvataggioHeaderProtocolloTracce() {
return true;
}
@Override
public List<String> getTipiSoggetti() throws ProtocolException {
List<String> tipi = new ArrayList<>();
List<OrganizationType> l = this.registroManifest.getOrganization().getTypes().getTypeList();
for (int i = 0; i < l.size(); i++) {
tipi.add(l.get(i).getName());
}
return tipi;
}
@Override
public String getTipoSoggettoDefault() throws ProtocolException {
return this.registroManifest.getOrganization().getTypes().getType(0).getName();
}
private org.openspcoop2.protocol.manifest.constants.ServiceBinding convert(ServiceBinding serviceBinding){
switch (serviceBinding) {
case SOAP:
return org.openspcoop2.protocol.manifest.constants.ServiceBinding.SOAP;
case REST:
return org.openspcoop2.protocol.manifest.constants.ServiceBinding.REST;
}
return null;
}
@Override
public List<String> getTipiServizi(ServiceBinding serviceBinding) throws ProtocolException {
org.openspcoop2.protocol.manifest.constants.ServiceBinding sb = null;
if(serviceBinding!=null) {
sb = this.convert(serviceBinding);
}
List<String> tipi = new ArrayList<>();
List<ServiceType> l = this.registroManifest.getService().getTypes().getTypeList();
for (int i = 0; i < l.size(); i++) {
org.openspcoop2.protocol.manifest.constants.ServiceBinding serviceBindingTmp = l.get(i).getBinding();
if(serviceBindingTmp==null || (sb!=null && serviceBindingTmp.equals(sb))){
tipi.add(l.get(i).getName());
}
}
return tipi;
}
@Override
public String getTipoServizioDefault(ServiceBinding serviceBinding) throws ProtocolException {
List<String> l = this.getTipiServizi(serviceBinding);
if(l!=null && l.size()>0){
return l.get(0);
}
return null;
}
@Override
public List<String> getVersioni() throws ProtocolException{
List<String> tipi = new ArrayList<>();
List<Version> l = this.registroManifest.getVersions().getVersionList();
for (int i = 0; i < l.size(); i++) {
tipi.add(l.get(i).getName());
}
return tipi;
}
@Override
public String getVersioneDefault() throws ProtocolException {
return this.registroManifest.getVersions().getVersion(0).getName();
}
@Override
public boolean isSupportato(ServiceBinding serviceBinding, ProfiloDiCollaborazione profiloCollaborazione)
throws ProtocolException {
if(profiloCollaborazione==null || serviceBinding==null){
throw new ProtocolException("Params not defined");
}
CollaborationProfile profilo = null;
if(ServiceBinding.REST.equals(serviceBinding)) {
if(this.bindingManifest.getRest()!=null) {
profilo = new CollaborationProfile();
if(this.bindingManifest.getRest().getProfile()!=null) {
if(this.bindingManifest.getRest().getProfile().isOneway()) {
profilo.setInputOutput(false);
profilo.setOneway(true);
}
else {
profilo.setInputOutput(true);
profilo.setOneway(false);
}
}
else {
profilo.setInputOutput(true);
profilo.setOneway(false);
}
profilo.setAsyncInputOutput(false);
profilo.setPolledInputOutput(false);
}
}
else {
if(this.bindingManifest.getSoap()!=null) {
profilo = this.bindingManifest.getSoap().getProfile();
}
}
switch (profiloCollaborazione) {
case ONEWAY:
return (profilo!=null ? profilo.isOneway() : true);
case SINCRONO:
return (profilo!=null ? profilo.isInputOutput() : true);
case ASINCRONO_SIMMETRICO:
return (profilo!=null ? profilo.isAsyncInputOutput() : false);
case ASINCRONO_ASIMMETRICO:
return (profilo!=null ? profilo.isPolledInputOutput() : false);
case UNKNOWN:
throw new ProtocolException("Param ["+ProfiloDiCollaborazione.UNKNOWN.name()+"] not valid for this method");
default:
throw new ProtocolException("Param ["+profiloCollaborazione.getEngineValue()+"] not supported");
}
}
@Override
public boolean isSupportato(ServiceBinding serviceBinding, FunzionalitaProtocollo funzionalitaProtocollo)
throws ProtocolException {
if(funzionalitaProtocollo==null || serviceBinding==null){
throw new ProtocolException("Params not defined");
}
Functionality funzionalita = null;
if(ServiceBinding.REST.equals(serviceBinding)) {
if(this.bindingManifest.getRest()!=null) {
funzionalita = this.bindingManifest.getRest().getFunctionality();
}
}
else {
if(this.bindingManifest.getSoap()!=null) {
funzionalita = this.bindingManifest.getSoap().getFunctionality();
}
}
switch (funzionalitaProtocollo) {
case FILTRO_DUPLICATI:
return (funzionalita!=null ? funzionalita.isDuplicateFilter() : false);
case CONFERMA_RICEZIONE:
return (funzionalita!=null ? funzionalita.isAcknowledgement() : false);
case COLLABORAZIONE:
return (funzionalita!=null ? funzionalita.isConversationIdentifier() : false);
case RIFERIMENTO_ID_RICHIESTA:
return (funzionalita!=null ? funzionalita.isReferenceToRequestIdentifier() : false);
case CONSEGNA_IN_ORDINE:
return (funzionalita!=null ? funzionalita.isDeliveryOrder() : false);
case SCADENZA:
return (funzionalita!=null ? funzionalita.isExpiration() : false);
case MANIFEST_ATTACHMENTS:
return (funzionalita!=null ? funzionalita.getManifestAttachments() : false);
default:
throw new ProtocolException("Param ["+funzionalitaProtocollo.getEngineValue()+"] not supported");
}
}
@Override
public boolean isIntegrationInfoRequired(TipoPdD tipoPdD, ServiceBinding serviceBinding, FunzionalitaProtocollo funzionalitaProtocollo) throws ProtocolException{
return false;
}
@Override
public InitialIdConversationType isGenerateInitialIdConversation(TipoPdD tipoPdD, FunzionalitaProtocollo funzionalitaProtocollo) throws ProtocolException{
return InitialIdConversationType.ID_TRANSAZIONE;
}
@Override
public boolean isDataPresenteInIdentificativoMessaggio() {
return false;
}
@Override
public List<BypassMustUnderstandCheck> getBypassMustUnderstandCheck(){
List<BypassMustUnderstandCheck> list = new ArrayList<BypassMustUnderstandCheck>();
if( this.manifest.getBinding().getSoap()!=null &&
this.manifest.getBinding().getSoap().getSoapHeaderBypassMustUnderstand()!=null &&
this.manifest.getBinding().getSoap().getSoapHeaderBypassMustUnderstand().sizeHeaderList()>0){
for (SoapHeaderBypassMustUnderstandHeader header : this.manifest.getBinding().getSoap().getSoapHeaderBypassMustUnderstand().getHeaderList()) {
BypassMustUnderstandCheck bypassMustUnderstandCheck = new BypassMustUnderstandCheck();
bypassMustUnderstandCheck.setElementName(header.getLocalName());
bypassMustUnderstandCheck.setNamespace(header.getNamespace());
list.add(bypassMustUnderstandCheck);
}
}
return list;
}
@Override
public List<RemoteStoreConfig> getRemoteStoreConfig() throws ProtocolException{
return new ArrayList<>();
}
}