ContextUrlCollection.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.message.config;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.List;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.exception.MessageException;
- /**
- * ContextUrlCollection
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ContextUrlCollection implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- // Vengono utilizzate due liste per preservare l'ordine di inserimento che si perde in una hashtable,
- private List<String> map_contextUrl = new ArrayList<>();
- private List<MessageType> map_messageProcessor = new ArrayList<MessageType>();
- private List<List<String>> map_contentTypesRestriction = new ArrayList<List<String>>();
- private SoapBinding soapBinding;
- private RestBinding restBinding;
-
- public ContextUrlCollection(SoapBinding soapBinding, RestBinding restBinding){
- this.soapBinding = soapBinding;
- this.restBinding = restBinding;
- }
-
- public int sizeContextUrl(){
- return this.map_contextUrl.size();
- }
-
- private void checkVersion(MessageType version) throws MessageException{
- if(MessageType.XML.equals(version)){
- if(this.restBinding==null){
- throw new MessageException("Rest disabled");
- }
- if(!this.restBinding.isBinding_xml()){
- throw new MessageException("MessageType ["+version+"] not supported in RestBinding; Xml disabled");
- }
- }
- else if(MessageType.JSON.equals(version)){
- if(this.restBinding==null){
- throw new MessageException("Rest disabled");
- }
- if(!this.restBinding.isBinding_json()){
- throw new MessageException("MessageType ["+version+"] not supported in RestBinding; Json disabled");
- }
- }
- else if(MessageType.BINARY.equals(version)){
- if(this.restBinding==null){
- throw new MessageException("Rest disabled");
- }
- if(!this.restBinding.isBinding_binary()){
- throw new MessageException("MessageType ["+version+"] not supported in RestBinding; Binary disabled");
- }
- }
- else if(MessageType.MIME_MULTIPART.equals(version)){
- if(this.restBinding==null){
- throw new MessageException("Rest disabled");
- }
- if(!this.restBinding.isBinding_mimeMultipart()){
- throw new MessageException("MessageType ["+version+"] not supported in RestBinding; MimeMultipart disabled");
- }
- }
- else if(MessageType.SOAP_11.equals(version)){
- if(this.soapBinding==null){
- throw new MessageException("Soap disabled");
- }
- if(!this.soapBinding.isBinding_soap11()){
- throw new MessageException("MessageType ["+version+"] not supported in SoapBinding; Soap11 disabled");
- }
- }
- else if(MessageType.SOAP_12.equals(version)){
- if(this.soapBinding==null){
- throw new MessageException("Soap disabled");
- }
- if(!this.soapBinding.isBinding_soap12()){
- throw new MessageException("MessageType ["+version+"] not supported in SoapBinding; Soap12 disabled");
- }
- }
- else{
- throw new MessageException("MessageType ["+version+"] not supported in Binding");
- }
- }
-
- public void addContext(String protocol, String function, String functionParam,MessageType version,String ... contentTypesRestriction) throws MessageException{
- String context = ServiceBindingConfiguration.normalizeContext(protocol);
- String f = ServiceBindingConfiguration.normalizeContext(function);
- String subContext_functionParam = ServiceBindingConfiguration.normalizeContext(functionParam);
-
- String key = context +" - " + f +" - " +subContext_functionParam;
-
- if(version==null){
- throw new MessageException("MessageProcessorVersion not defined");
- }
- this.checkVersion(version);
- if(this.map_contextUrl.contains(key)){
- throw new MessageException("ContextUrl already defined for MessageType "+this.getMessageType(protocol,function,functionParam));
- }
- this.map_contextUrl.add(key);
- this.map_messageProcessor.add(version);
-
- List<String> contentTypesRestrictionList = new ArrayList<>();
- if(contentTypesRestriction!=null){
- for (int i = 0; i < contentTypesRestriction.length; i++) {
- contentTypesRestrictionList.add(contentTypesRestriction[i]);
- }
- }
- this.map_contentTypesRestriction.add(contentTypesRestrictionList);
- }
-
- public MessageType getMessageType(String protocol, String function, String functionParam) throws MessageException{
- String context = ServiceBindingConfiguration.normalizeContext(protocol);
- String f = ServiceBindingConfiguration.normalizeContext(function);
- String subContext_functionParam = ServiceBindingConfiguration.normalizeContext(functionParam);
-
- String key = context +" - " + f +" - " +subContext_functionParam;
-
- for (int i = 0; i < this.map_contextUrl.size(); i++) {
- if(this.map_contextUrl.get(i).equals(key)){
- return this.map_messageProcessor.get(i);
- }
- }
-
- // provo a cercarlo senza utilizzare la funzione specifica
- if(function!=null && !"".equals(function)){
- function = null;
- f = ServiceBindingConfiguration.normalizeContext(function);
- key = context +" - " + f +" - " +subContext_functionParam;
-
- for (int i = 0; i < this.map_contextUrl.size(); i++) {
- if(this.map_contextUrl.get(i).equals(key)){
- return this.map_messageProcessor.get(i);
- }
- }
- }
-
- return null; // ritorno anzi null per gestire la differenza rispetto all'eccezione sopra
- }
-
- public List<String> getContentTypesRestriction(String protocol, String function, String functionParam) {
- String context = ServiceBindingConfiguration.normalizeContext(protocol);
- String f = ServiceBindingConfiguration.normalizeContext(function);
- String subContext_functionParam = ServiceBindingConfiguration.normalizeContext(functionParam);
-
- String key = context +" - " + f +" - " +subContext_functionParam;
-
- for (int i = 0; i < this.map_contextUrl.size(); i++) {
- if(this.map_contextUrl.get(i).equals(key)){
- return this.map_contentTypesRestriction.get(i);
- }
- }
-
- // provo a cercarlo senza utilizzare la funzione specifica
- if(function!=null && !"".equals(function)){
- function = null;
- f = ServiceBindingConfiguration.normalizeContext(function);
- key = context +" - " + f +" - " +subContext_functionParam;
-
- for (int i = 0; i < this.map_contextUrl.size(); i++) {
- if(this.map_contextUrl.get(i).equals(key)){
- return this.map_contentTypesRestriction.get(i);
- }
- }
- }
-
- return null;
- }
- }