ConditionalUtils.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.pdd.core.behaviour.conditional;
- import java.io.ByteArrayOutputStream;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.core.commons.ModalitaIdentificazione;
- import org.openspcoop2.core.config.PortaApplicativa;
- import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
- import org.openspcoop2.core.config.Proprieta;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.config.constants.TipoBehaviour;
- import org.openspcoop2.core.id.IDPortaApplicativa;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.registry.Resource;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.core.CostantiPdD;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.Utilities;
- import org.openspcoop2.pdd.core.behaviour.BehaviourEmitDiagnosticException;
- import org.openspcoop2.pdd.core.behaviour.BehaviourException;
- import org.openspcoop2.pdd.core.behaviour.BehaviourPropertiesUtils;
- import org.openspcoop2.pdd.core.dynamic.DynamicUtils;
- import org.openspcoop2.pdd.core.dynamic.ErrorHandler;
- import org.openspcoop2.pdd.core.dynamic.MessageContent;
- import org.openspcoop2.pdd.core.dynamic.Template;
- import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
- import org.openspcoop2.pdd.logger.MsgDiagnostico;
- import org.openspcoop2.pdd.services.connector.FormUrlEncodedHttpServletRequest;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.state.IState;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.utils.regexp.RegExpNotFoundException;
- import org.openspcoop2.utils.regexp.RegularExpressionEngine;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.openspcoop2.utils.transport.http.HttpServletTransportRequestContext;
- import org.openspcoop2.utils.xml.AbstractXPathExpressionEngine;
- import org.openspcoop2.utils.xml2json.JsonXmlPathExpressionEngine;
- import org.slf4j.Logger;
- /**
- * ConditionalUtils
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ConditionalUtils {
-
- public static ConditionalFilterResult filter(PortaApplicativa pa, OpenSPCoop2Message message, Busta busta,
- RequestInfo requestInfo, PdDContext pddContext,
- MsgDiagnostico msgDiag, Logger log,
- TipoBehaviour behaviourType,
- IState state) throws BehaviourException, BehaviourEmitDiagnosticException {
-
- if(isConfigurazioneCondizionale(pa, log)==false) {
- return null; // non vi è da fare alcun filtro condizionale
- }
-
- ConditionalFilterResult result = new ConditionalFilterResult();
-
- ConfigurazioneCondizionale config = read(pa, log);
-
-
- String nomeRegola = null;
- TipoSelettore tipoSelettore = null;
- String patternSelettore = null;
- String prefixSelettore = null;
- String suffixSelettore = null;
- String staticInfo = null;
- if(busta.getAzione()!=null && !"".equals(busta.getAzione())) {
- ConfigurazioneSelettoreCondizioneRegola regola = null;
-
- Resource restResource = null;
- if(message!=null && ServiceBinding.REST.equals(message.getServiceBinding()) &&
- StringUtils.isNotEmpty(busta.getTipoDestinatario()) && StringUtils.isNotEmpty(busta.getDestinatario()) &&
- StringUtils.isNotEmpty(busta.getTipoServizio()) && StringUtils.isNotEmpty(busta.getServizio()) && busta.getVersioneServizio()!=null ) {
- IDServizio idServizio = null;
- try {
- idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(busta.getTipoServizio(), busta.getServizio(),
- busta.getTipoDestinatario(), busta.getDestinatario(),
- busta.getVersioneServizio());
- idServizio.setAzione(busta.getAzione());
- }catch(Throwable t) {}
- if(idServizio!=null) {
- restResource = Utilities.getRestResource(log, state, idServizio, requestInfo);
- }
- }
-
- try {
- regola = config.getRegolaByOperazione(busta.getAzione(), restResource);
- }catch(Exception e) {
- throw new BehaviourException(e.getMessage(),e);
- }
- if(regola!=null) {
- nomeRegola = regola.getRegola();
- tipoSelettore = regola.getTipoSelettore();
- patternSelettore = regola.getPattern();
- prefixSelettore = regola.getPrefix();
- suffixSelettore = regola.getSuffix();
- staticInfo = regola.getStaticInfo();
- result.setRegola(regola.getRegola());
- }
- }
- if(tipoSelettore==null) {
- nomeRegola = null;
- ConfigurazioneSelettoreCondizione c = config.getDefaultConfig();
- tipoSelettore = c.getTipoSelettore();
- patternSelettore = c.getPattern();
- prefixSelettore = c.getPrefix();
- suffixSelettore = c.getSuffix();
- }
-
- result.setByFilter(config.isByFilter());
-
- String condition = null;
- String nomeConnettoreDaUsare = null;
- if(staticInfo!=null && !"".equals(staticInfo)) {
- condition = staticInfo;
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_SELETTORE, ModalitaIdentificazione.STATIC.getLabel());
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, ""); // per eliminare @@ dove non serve
- }
- else {
- String pattern = "";
- try {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_SELETTORE, tipoSelettore.getValue());
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern); // per eliminare @@ dove non serve
-
- Map<String, List<String>> pTrasporto = null;
- String urlInvocazione = null;
- Map<String, List<String>> pQuery = null;
- Map<String, List<String>> pForm = null;
- if(requestInfo!=null && requestInfo.getProtocolContext()!=null) {
- pTrasporto = requestInfo.getProtocolContext().getHeaders();
- urlInvocazione = requestInfo.getProtocolContext().getUrlInvocazione_formBased();
- pQuery = requestInfo.getProtocolContext().getParameters();
- if(requestInfo.getProtocolContext() instanceof HttpServletTransportRequestContext) {
- HttpServletTransportRequestContext httpServletContext = (HttpServletTransportRequestContext) requestInfo.getProtocolContext();
- HttpServletRequest httpServletRequest = httpServletContext.getHttpServletRequest();
- if(httpServletRequest!=null && httpServletRequest instanceof FormUrlEncodedHttpServletRequest) {
- FormUrlEncodedHttpServletRequest formServlet = (FormUrlEncodedHttpServletRequest) httpServletRequest;
- if(formServlet.getFormUrlEncodedParametersValues()!=null &&
- !formServlet.getFormUrlEncodedParametersValues().isEmpty()) {
- pForm = formServlet.getFormUrlEncodedParametersValues();
- }
- }
- }
- }
- MessageContent messageContent = null;
- boolean bufferMessage_readOnly = OpenSPCoop2Properties.getInstance().isReadByPathBufferEnabled();
- if(TipoSelettore.CONTENT_BASED.equals(tipoSelettore) || tipoSelettore.isTemplate()) {
- if(ServiceBinding.SOAP.equals(message.getServiceBinding())){
- messageContent = new MessageContent(message.castAsSoap(), bufferMessage_readOnly, pddContext);
- }
- else{
- if(MessageType.XML.equals(message.getMessageType())){
- messageContent = new MessageContent(message.castAsRestXml(), bufferMessage_readOnly, pddContext);
- }
- else if(MessageType.JSON.equals(message.getMessageType())){
- messageContent = new MessageContent(message.castAsRestJson(), bufferMessage_readOnly, pddContext);
- }
- else{
- if(TipoSelettore.CONTENT_BASED.equals(tipoSelettore)
- // Nei template potrei utilizzare gli header o altre informazioni che non entrano nel merito del contenuto //|| tipoSelettore.isTemplate()
- ) {
- throw new Exception("Selettore '"+tipoSelettore.getValue()+"' non supportato per il message-type '"+message.getMessageType()+"'");
- }
- }
- }
- }
-
- switch (tipoSelettore) {
-
- case HEADER_BASED:
- pattern = " (Header HTTP: "+patternSelettore+")";
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- condition = TransportUtils.getFirstValue(pTrasporto, patternSelettore);
- if(condition==null) {
- throw new Exception("header non presente");
- }
- break;
-
- case URLBASED:
- pattern = " (Espressione Regolare: "+patternSelettore+")";
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- try{
- condition = RegularExpressionEngine.getStringMatchPattern(urlInvocazione, patternSelettore);
- }catch(RegExpNotFoundException notFound){}
- break;
-
- case FORM_BASED:
- pattern = " (Parametro URL: "+patternSelettore+")";
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- condition = TransportUtils.getFirstValue(pQuery, patternSelettore);
- if(condition==null) {
- throw new Exception("parametro della url non presente");
- }
- break;
-
- case CONTENT_BASED:
- AbstractXPathExpressionEngine xPathEngine = null;
- if(messageContent==null) {
- throw new Exception("messaggio non presente");
- }
- if(messageContent.isXml()) {
- pattern = " (xPath: "+patternSelettore+")";
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- xPathEngine = new org.openspcoop2.message.xml.XPathExpressionEngine(message.getFactory());
- condition = AbstractXPathExpressionEngine.extractAndConvertResultAsString(messageContent.getElement(), xPathEngine, patternSelettore, log);
- }
- else {
- pattern = " (jsonPath: "+patternSelettore+")";
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- condition = JsonXmlPathExpressionEngine.extractAndConvertResultAsString(messageContent.getElementJson(), patternSelettore, log);
- }
- break;
-
- case INDIRIZZO_IP:
- if(pddContext!=null && pddContext.containsKey(org.openspcoop2.core.constants.Costanti.CLIENT_IP_REMOTE_ADDRESS)) {
- condition = (String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.CLIENT_IP_REMOTE_ADDRESS);
- }
- break;
-
- case INDIRIZZO_IP_FORWARDED:
- if(pddContext!=null && pddContext.containsKey(org.openspcoop2.core.constants.Costanti.CLIENT_IP_TRANSPORT_ADDRESS)) {
- condition = (String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.CLIENT_IP_TRANSPORT_ADDRESS);
- }
- break;
-
- case SOAPACTION_BASED:
- if(ServiceBinding.SOAP.equals(message.getServiceBinding())){
- condition = message.castAsSoap().getSoapAction();
- if(condition!=null) {
- condition = condition.trim();
- if(condition.startsWith("\"") && condition.length()>1){
- condition = condition.substring(1);
- }
- if(condition.endsWith("\"") && condition.length()>1){
- condition = condition.substring(0, (condition.length()-1));
- }
- }
- }
- break;
-
- case TEMPLATE:
- if(patternSelettore.length()<50) {
- pattern = " ("+patternSelettore+")";
- }
- else {
- pattern = "";
- }
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- Map<String, Object> dynamicMap = new HashMap<>();
- ErrorHandler errorHandler = new ErrorHandler();
- DynamicUtils.fillDynamicMapRequest(log, dynamicMap, pddContext, urlInvocazione,
- message,
- messageContent,
- busta,
- pTrasporto,
- pQuery,
- pForm,
- errorHandler);
- condition = DynamicUtils.convertDynamicPropertyValue("ConditionalConfig.gwt", patternSelettore, dynamicMap, pddContext);
- if(condition!=null) {
- condition = ConditionalUtils.normalizeTemplateResult(condition);
- }
- break;
-
- case FREEMARKER_TEMPLATE:
- if(patternSelettore.length()<50) {
- pattern = " ("+patternSelettore+")";
- }
- else {
- pattern = "";
- }
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- dynamicMap = new HashMap<>();
- errorHandler = new ErrorHandler();
- DynamicUtils.fillDynamicMapRequest(log, dynamicMap, pddContext, urlInvocazione,
- message,
- messageContent,
- busta,
- pTrasporto,
- pQuery,
- pForm,
- errorHandler);
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- ConfigurazionePdDManager configurazionePdDManager = ConfigurazionePdDManager.getInstance(state);
- IDPortaApplicativa idPA = new IDPortaApplicativa();
- idPA.setNome(pa.getNome());
- Template template = configurazionePdDManager.getTemplateConnettoreMultiploCondizionale(idPA, nomeRegola, patternSelettore.getBytes(), requestInfo);
- DynamicUtils.convertFreeMarkerTemplate(template, dynamicMap, bout);
- bout.flush();
- bout.close();
- condition = bout.toString();
- if(condition!=null) {
- condition = ConditionalUtils.normalizeTemplateResult(condition);
- }
- break;
-
- case VELOCITY_TEMPLATE:
- if(patternSelettore.length()<50) {
- pattern = " ("+patternSelettore+")";
- }
- else {
- pattern = "";
- }
- msgDiag.addKeyword(CostantiPdD.KEY_PATTERN_SELETTORE, pattern);
- dynamicMap = new HashMap<>();
- errorHandler = new ErrorHandler();
- DynamicUtils.fillDynamicMapRequest(log, dynamicMap, pddContext, urlInvocazione,
- message,
- messageContent,
- busta,
- pTrasporto,
- pQuery,
- pForm,
- errorHandler);
- bout = new ByteArrayOutputStream();
- configurazionePdDManager = ConfigurazionePdDManager.getInstance(state);
- idPA = new IDPortaApplicativa();
- idPA.setNome(pa.getNome());
- template = configurazionePdDManager.getTemplateConnettoreMultiploCondizionale(idPA, nomeRegola, patternSelettore.getBytes(), requestInfo);
- DynamicUtils.convertVelocityTemplate(template, dynamicMap, bout);
- bout.flush();
- bout.close();
- condition = bout.toString();
- if(condition!=null) {
- condition = ConditionalUtils.normalizeTemplateResult(condition);
- }
- break;
- }
-
- if(condition==null || "".equals(condition)) {
- throw new Exception("Nessuna condizione estratta");
- }
- else {
- msgDiag.addKeyword(CostantiPdD.KEY_CONDIZIONE_CONNETTORE, condition);
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.identificazioneRiuscita");
- }
-
- }catch(Exception e) {
-
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, e.getMessage());
-
- if(config.getCondizioneNonIdentificata().isAbortTransaction()) {
- BehaviourEmitDiagnosticException be = new BehaviourEmitDiagnosticException(msgDiag, MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.identificazioneFallita.error", e);
- be.setIntegrationFunctionError(IntegrationFunctionError.CONNECTOR_NOT_FOUND);
- throw be;
- }
- else {
- if(config.getCondizioneNonIdentificata().isEmitDiagnosticError()) {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.identificazioneFallita.error");
- }
- else if(config.getCondizioneNonIdentificata().isEmitDiagnosticInfo()) {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.identificazioneFallita.info");
- }
-
- if(TipoBehaviour.CONSEGNA_LOAD_BALANCE.equals(behaviourType)) {
- // li usero tutti senza filtro sulla condizionalità
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.loadBalancer.tuttiConnettori");
-
- result.setListServiziApplicativi(getAllEnabled(pa.getServizioApplicativoList()));
- return result;
- }
-
- // se arrivo qua, sicuramente non sono in load balance mode
- nomeConnettoreDaUsare = config.getCondizioneNonIdentificata().getNomeConnettore();
- if(nomeConnettoreDaUsare==null || "".equals(nomeConnettoreDaUsare)) {
-
- if(TipoBehaviour.CONSEGNA_MULTIPLA.equals(behaviourType)) {
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.tuttiConnettori");
-
- result.setListServiziApplicativi(getAllEnabled(pa.getServizioApplicativoList()));
- return result;
- }
- else if(TipoBehaviour.CONSEGNA_CONDIZIONALE.equals(behaviourType)) {
- // non può succedere
- throw new BehaviourException("Connettore da utilizzare in caso di identificazione fallita non indicato");
- }
- else if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType)) {
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.tuttiConnettori");
-
- result.setListServiziApplicativi(getAllEnabled(pa.getServizioApplicativoList()));
- return result;
- }
-
- }
- else if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType) &&
- Costanti.CONDITIONAL_NOME_CONNETTORE_VALORE_NESSUNO.equals(nomeConnettoreDaUsare)) {
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.nessunConnettore");
-
- result.setListServiziApplicativi(new ArrayList<>());
- return result;
-
- }
-
- result.setListServiziApplicativi(filter(pa.getServizioApplicativoList(),false,nomeConnettoreDaUsare));
- if(result.getListServiziApplicativi().isEmpty()) {
- throw new BehaviourException("Connettore '"+nomeConnettoreDaUsare+"' indicato, da utilizzare in caso di identificazione fallita, non esistente");
- }
-
- msgDiag.addKeyword(CostantiPdD.KEY_NOME_CONNETTORE, nomeConnettoreDaUsare);
- if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType)) {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNotificaDefault");
- }
- else {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreDefault");
- }
-
- return result;
- }
- }
- }
-
- String conditionFinal = condition;
- if(prefixSelettore!=null) {
- conditionFinal = prefixSelettore+conditionFinal;
- }
- if(suffixSelettore!=null) {
- conditionFinal = conditionFinal+suffixSelettore;
- }
- result.setCondition(conditionFinal);
- msgDiag.addKeyword(CostantiPdD.KEY_CONDIZIONE_CONNETTORE, conditionFinal);
-
- List<PortaApplicativaServizioApplicativo> l = filter(pa.getServizioApplicativoList(), config.isByFilter(), conditionFinal);
- if(!l.isEmpty()) {
-
- if(TipoBehaviour.CONSEGNA_CONDIZIONALE.equals(behaviourType)) {
- if(l.size()>1) {
- BehaviourEmitDiagnosticException be = new BehaviourEmitDiagnosticException(msgDiag, MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.servizioSincrono.consegnaVersoNServiziApplicativi");
- be.setIntegrationFunctionError(IntegrationFunctionError.CONNECTOR_NOT_FOUND);
- throw be;
- }
- }
-
- result.setListServiziApplicativi(l);
- return result;
- }
- else {
- if(config.getNessunConnettoreTrovato().isAbortTransaction()) {
- if(config.isByFilter()) {
- BehaviourEmitDiagnosticException be = new BehaviourEmitDiagnosticException(msgDiag, MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNonEsistente.filtro.error");
- be.setIntegrationFunctionError(IntegrationFunctionError.CONNECTOR_NOT_FOUND);
- throw be;
- }
- else {
- BehaviourEmitDiagnosticException be = new BehaviourEmitDiagnosticException(msgDiag, MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNonEsistente.nomeConnettore.error");
- be.setIntegrationFunctionError(IntegrationFunctionError.CONNECTOR_NOT_FOUND);
- throw be;
- }
- }
- else {
- if(config.getNessunConnettoreTrovato().isEmitDiagnosticError()) {
- if(config.isByFilter()) {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNonEsistente.filtro.error");
- }
- else {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNonEsistente.nomeConnettore.error");
- }
- }
- else if(config.getNessunConnettoreTrovato().isEmitDiagnosticInfo()) {
- if(config.isByFilter()) {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNonEsistente.filtro.info");
- }
- else {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.connettoreNonEsistente.nomeConnettore.info");
- }
- }
-
- if(TipoBehaviour.CONSEGNA_LOAD_BALANCE.equals(behaviourType)) {
- // li usero tutti senza filtro sulla condizionalità
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.loadBalancer.tuttiConnettori");
-
- result.setListServiziApplicativi(getAllEnabled(pa.getServizioApplicativoList()));
- return result;
- }
-
- // se arrivo qua, sicuramente non sono in load balance mode
- nomeConnettoreDaUsare = config.getNessunConnettoreTrovato().getNomeConnettore();
- if(nomeConnettoreDaUsare==null || "".equals(nomeConnettoreDaUsare)) {
-
- if(TipoBehaviour.CONSEGNA_MULTIPLA.equals(behaviourType)) {
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.nessunConnettoreIdentificato.tuttiConnettori");
-
- result.setListServiziApplicativi(getAllEnabled(pa.getServizioApplicativoList()));
- return result;
- }
- else if(TipoBehaviour.CONSEGNA_CONDIZIONALE.equals(behaviourType)) {
- // non può succedere
- throw new BehaviourException("Connettore da utilizzare in caso di identificazione del connettore fallita non indicato");
- }
- else if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType)) {
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.nessunConnettoreIdentificato.tuttiConnettoriNotifica");
-
- result.setListServiziApplicativi(getAllEnabled(pa.getServizioApplicativoList()));
- return result;
- }
-
- }
- else if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType) &&
- Costanti.CONDITIONAL_NOME_CONNETTORE_VALORE_NESSUNO.equals(nomeConnettoreDaUsare)) {
-
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.nessunConnettoreIdentificato");
-
- result.setListServiziApplicativi(new ArrayList<>());
- return result;
-
- }
-
- result.setListServiziApplicativi(filter(pa.getServizioApplicativoList(),false,nomeConnettoreDaUsare));
- if(result.getListServiziApplicativi().isEmpty()) {
- throw new BehaviourException("Connettore '"+nomeConnettoreDaUsare+"' indicato, da utilizzare in caso di identificazione condizionale fallita, non esistente");
- }
-
- msgDiag.addKeyword(CostantiPdD.KEY_NOME_CONNETTORE, nomeConnettoreDaUsare);
- if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType)) {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.nessunConnettoreIdentificato.connettoreNotificaDefault");
- }
- else {
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI,
- "connettoriMultipli.consegnaCondizionale.nessunConnettoreIdentificato.connettoreDefault");
- }
-
- return result;
- }
-
- }
-
- }
- private static List<PortaApplicativaServizioApplicativo> filter(List<PortaApplicativaServizioApplicativo> listPASA, boolean filter, String condition){
- List<PortaApplicativaServizioApplicativo> l = new ArrayList<>();
- for (PortaApplicativaServizioApplicativo portaApplicativaServizioApplicativo : listPASA) {
-
- if(portaApplicativaServizioApplicativo.getDatiConnettore()==null || portaApplicativaServizioApplicativo.getDatiConnettore().getStato()==null ||
- StatoFunzionalita.ABILITATO.equals(portaApplicativaServizioApplicativo.getDatiConnettore().getStato())) {
-
- if(filter) {
- if(portaApplicativaServizioApplicativo.getDatiConnettore()!=null) {
- if(portaApplicativaServizioApplicativo.getDatiConnettore().getFiltroList()!=null &&
- portaApplicativaServizioApplicativo.getDatiConnettore().getFiltroList().contains(condition)) {
- l.add(portaApplicativaServizioApplicativo);
- }
- }
- }
- else {
- String nomeConnettore = org.openspcoop2.pdd.core.behaviour.built_in.Costanti.NOME_CONNETTORE_DEFAULT;
- if(portaApplicativaServizioApplicativo.getDatiConnettore()!=null &&
- portaApplicativaServizioApplicativo.getDatiConnettore().getNome()!=null) {
- nomeConnettore = portaApplicativaServizioApplicativo.getDatiConnettore().getNome();
- }
-
- if(condition.equals(nomeConnettore)) {
- l.add(portaApplicativaServizioApplicativo);
- }
- }
-
- }
- }
- return l;
- }
- private static List<PortaApplicativaServizioApplicativo> getAllEnabled(List<PortaApplicativaServizioApplicativo> listPASA){
-
- List<PortaApplicativaServizioApplicativo> l = new ArrayList<>();
-
- for (PortaApplicativaServizioApplicativo servizioApplicativo : listPASA) {
-
- if(servizioApplicativo.getDatiConnettore()==null || servizioApplicativo.getDatiConnettore().getStato()==null ||
- StatoFunzionalita.ABILITATO.equals(servizioApplicativo.getDatiConnettore().getStato())) {
- l.add(servizioApplicativo);
- }
-
- }
-
- return l;
-
- }
-
- public static String normalizeTemplateResult(String condition) {
- if(condition!=null) {
- condition = condition.trim();
- if(condition.startsWith("\n") && condition.length()>1) {
- condition = condition.substring(1);
- }
- if(condition.endsWith("\n") && condition.length()>1) {
- condition = condition.substring(0, condition.length()-1);
- }
- }
- return condition;
- }
-
- public static boolean isConfigurazioneCondizionale(PortaApplicativa pa, Logger log) {
- if(pa.getBehaviour()==null || pa.getBehaviour().sizeProprietaList()<=0) {
- return false;
- }
- String type = null;
- for (Proprieta p : pa.getBehaviour().getProprietaList()) {
- if(Costanti.CONDITIONAL_ENABLED.equals(p.getNome())) {
- type = p.getValore();
- break;
- }
- }
- if(type==null) {
- return false;
- }
- return "true".equals(type);
- }
-
- public static boolean isConfigurazioneCondizionaleByFilter(PortaApplicativa pa, Logger log) {
- if(pa.getBehaviour()==null || pa.getBehaviour().sizeProprietaList()<=0) {
- return false;
- }
- String type = null;
- String byFilter = null;
- for (Proprieta p : pa.getBehaviour().getProprietaList()) {
- if(Costanti.CONDITIONAL_ENABLED.equals(p.getNome())) {
- type = p.getValore();
- }
- else if(Costanti.CONDITIONAL_BY_FILTER.equals(p.getNome())) {
- byFilter = p.getValore();
- }
- }
- if(type==null || byFilter==null) {
- return false;
- }
- return "true".equals(type) && "true".equals(byFilter);
- }
-
- public static ConfigurazioneCondizionale read(PortaApplicativa pa, Logger log) throws BehaviourException {
- ConfigurazioneCondizionale config = new ConfigurazioneCondizionale();
- if(pa.getBehaviour()==null || pa.getBehaviour().sizeProprietaList()<=0) {
- throw new BehaviourException("Configurazione condizionale non disponibile");
- }
-
- ConfigurazioneSelettoreCondizione selettoreConfigurazioneDefault = new ConfigurazioneSelettoreCondizione();
- config.setDefaultConfig(selettoreConfigurazioneDefault);
-
- IdentificazioneFallitaConfigurazione condizioneNonIdentificata = new IdentificazioneFallitaConfigurazione();
- config.setCondizioneNonIdentificata(condizioneNonIdentificata);
-
- IdentificazioneFallitaConfigurazione nessunConnettoreTrovato = new IdentificazioneFallitaConfigurazione();
- config.setNessunConnettoreTrovato(nessunConnettoreTrovato);
-
- List<String> idRegole = new ArrayList<>();
-
- for (Proprieta p : pa.getBehaviour().getProprietaList()) {
-
- String nome = p.getNome();
- String valore = p.getValore().trim();
-
- try {
- if(Costanti.CONDITIONAL_BY_FILTER.equals(nome)) {
- config.setByFilter("true".equals(valore));
- }
-
- else if(Costanti.CONDITIONAL_TIPO_SELETTORE.equals(nome)) {
- selettoreConfigurazioneDefault.setTipoSelettore(TipoSelettore.toEnumConstant(valore, true));
- }
- else if(Costanti.CONDITIONAL_PATTERN.equals(nome)) {
- selettoreConfigurazioneDefault.setPattern(valore);
- }
- else if(Costanti.CONDITIONAL_PREFIX.equals(nome)) {
- selettoreConfigurazioneDefault.setPrefix(valore);
- }
- else if(Costanti.CONDITIONAL_SUFFIX.equals(nome)) {
- selettoreConfigurazioneDefault.setSuffix(valore);
- }
-
- else if(nome.startsWith(Costanti.CONDITIONAL_RULE) && nome.endsWith(Costanti.CONDITIONAL_RULE_NAME) ) {
- String idRegola = nome.substring(Costanti.CONDITIONAL_RULE.length(), (nome.length()-Costanti.CONDITIONAL_RULE_NAME.length()));
- idRegole.add(idRegola);
- }
-
- else if((Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_ABORT_TRANSACTION).equals(nome)) {
- condizioneNonIdentificata.setAbortTransaction("true".equals(valore));
- }
- else if((Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_INFO).equals(nome)) {
- condizioneNonIdentificata.setEmitDiagnosticInfo("true".equals(valore));
- }
- else if((Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_ERROR).equals(nome)) {
- condizioneNonIdentificata.setEmitDiagnosticError("true".equals(valore));
- }
- else if((Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_NOME_CONNETTORE).equals(nome)) {
- condizioneNonIdentificata.setNomeConnettore(valore);
- }
-
- else if((Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_ABORT_TRANSACTION).equals(nome)) {
- nessunConnettoreTrovato.setAbortTransaction("true".equals(valore));
- }
- else if((Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_INFO).equals(nome)) {
- nessunConnettoreTrovato.setEmitDiagnosticInfo("true".equals(valore));
- }
- else if((Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_ERROR).equals(nome)) {
- nessunConnettoreTrovato.setEmitDiagnosticError("true".equals(valore));
- }
- else if((Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_NOME_CONNETTORE).equals(nome)) {
- nessunConnettoreTrovato.setNomeConnettore(valore);
- }
- }catch(Exception e) {
- throw new BehaviourException("Configurazione condizionale non corretta (proprietà:"+p.getNome()+" valore:'"+p.getValore()+"'): "+e.getMessage(),e);
- }
-
- }
-
- if(!idRegole.isEmpty()) {
- for (String idRegola : idRegole) {
-
- String prefixGruppo = Costanti.CONDITIONAL_RULE+idRegola;
- String prefixGruppoConUnderscore = prefixGruppo+"_";
- ConfigurazioneSelettoreCondizioneRegola selettoreConfigurazioneRegola = new ConfigurazioneSelettoreCondizioneRegola();
-
- for (Proprieta p : pa.getBehaviour().getProprietaList()) {
-
- String nome = p.getNome();
- String valore = p.getValore().trim();
-
- try {
- if((prefixGruppo+Costanti.CONDITIONAL_RULE_NAME).equals(nome)) {
- selettoreConfigurazioneRegola.setRegola(valore);
- }
- else if((prefixGruppoConUnderscore+Costanti.CONDITIONAL_RULE_PATTERN_OPERAZIONE).equals(nome)) {
- selettoreConfigurazioneRegola.setPatternOperazione(valore);
- }
- else if((prefixGruppoConUnderscore+Costanti.CONDITIONAL_RULE_STATIC_INFO).equals(nome)) {
- selettoreConfigurazioneRegola.setStaticInfo(valore);
- }
-
- else if((prefixGruppoConUnderscore+Costanti.CONDITIONAL_TIPO_SELETTORE).equals(nome)) {
- selettoreConfigurazioneRegola.setTipoSelettore(TipoSelettore.toEnumConstant(valore, true));
- }
- else if((prefixGruppoConUnderscore+Costanti.CONDITIONAL_PATTERN).equals(nome)) {
- selettoreConfigurazioneRegola.setPattern(valore);
- }
- else if((prefixGruppoConUnderscore+Costanti.CONDITIONAL_PREFIX).equals(nome)) {
- selettoreConfigurazioneRegola.setPrefix(valore);
- }
- else if((prefixGruppoConUnderscore+Costanti.CONDITIONAL_SUFFIX).equals(nome)) {
- selettoreConfigurazioneRegola.setSuffix(valore);
- }
- }catch(Exception e) {
- throw new BehaviourException("Configurazione condizionale non corretta (proprietà:"+p.getNome()+" valore:'"+p.getValore()+"'): "+e.getMessage(),e);
- }
-
- }
-
- config.addRegola(selettoreConfigurazioneRegola);
-
- }
- }
-
- return config;
- }
-
- public static void save(PortaApplicativa pa, ConfigurazioneCondizionale configurazione) throws BehaviourException {
-
- if(pa.getBehaviour()==null) {
- throw new BehaviourException("Configurazione behaviour non abilitata");
- }
- if(configurazione==null) {
- throw new BehaviourException("Configurazione condizionale non fornita");
- }
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_ENABLED, true+"");
-
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_BY_FILTER, configurazione.isByFilter()+"");
-
- if(configurazione.getDefaultConfig()==null) {
- throw new BehaviourException("Configurazione selettore condizione di default non fornita");
- }
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_TIPO_SELETTORE, configurazione.getDefaultConfig().getTipoSelettore().getValue());
- if(StringUtils.isNotEmpty(configurazione.getDefaultConfig().getPattern())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_PATTERN, configurazione.getDefaultConfig().getPattern());
- }else {
- BehaviourPropertiesUtils.removeProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_PATTERN);
- }
- if(StringUtils.isNotEmpty(configurazione.getDefaultConfig().getPrefix())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_PREFIX, configurazione.getDefaultConfig().getPrefix());
- }else {
- BehaviourPropertiesUtils.removeProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_PREFIX);
- }
- if(StringUtils.isNotEmpty(configurazione.getDefaultConfig().getSuffix())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_SUFFIX, configurazione.getDefaultConfig().getSuffix());
- }else {
- BehaviourPropertiesUtils.removeProprieta(pa.getBehaviour(),Costanti.CONDITIONAL_SUFFIX);
- }
-
- List<String> listProprietaDaRimuovere = new ArrayList<>();
- for (Proprieta p : pa.getBehaviour().getProprietaList()) {
- if(p.getNome().startsWith(Costanti.CONDITIONAL_RULE)) {
- listProprietaDaRimuovere.add(p.getNome());
- }
- }
- if(!listProprietaDaRimuovere.isEmpty()) {
- for (String propertyName : listProprietaDaRimuovere) {
- BehaviourPropertiesUtils.removeProprieta(pa.getBehaviour(), propertyName);
- }
- }
- if(configurazione.getRegoleOrdinate()!=null && !configurazione.getRegoleOrdinate().isEmpty()) {
- int indexRegola = 1;
- for (String nomeRegola : configurazione.getRegoleOrdinate()) {
-
- String prefixRegola = Costanti.CONDITIONAL_RULE+indexRegola;
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+Costanti.CONDITIONAL_RULE_NAME),nomeRegola);
-
- ConfigurazioneSelettoreCondizioneRegola regola = configurazione.getRegola(nomeRegola);
-
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+"_"+Costanti.CONDITIONAL_RULE_PATTERN_OPERAZIONE),regola.getPatternOperazione());
- if(StringUtils.isNotEmpty(regola.getStaticInfo())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+"_"+Costanti.CONDITIONAL_RULE_STATIC_INFO),regola.getStaticInfo());
- }
-
- if(regola.getTipoSelettore()!=null) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+"_"+Costanti.CONDITIONAL_TIPO_SELETTORE),regola.getTipoSelettore().getValue());
- }
- if(StringUtils.isNotEmpty(regola.getPattern())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+"_"+Costanti.CONDITIONAL_PATTERN),regola.getPattern());
- }
- if(StringUtils.isNotEmpty(regola.getPrefix())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+"_"+Costanti.CONDITIONAL_PREFIX),regola.getPrefix());
- }
- if(StringUtils.isNotEmpty(regola.getSuffix())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(prefixRegola+"_"+Costanti.CONDITIONAL_SUFFIX), regola.getSuffix());
- }
-
- indexRegola++;
- }
- }
-
- if(configurazione.getCondizioneNonIdentificata()==null) {
- throw new BehaviourException("Configurazione 'condizione non identificata' non fornita");
- }
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_ABORT_TRANSACTION),
- configurazione.getCondizioneNonIdentificata().isAbortTransaction()+"");
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_INFO),
- configurazione.getCondizioneNonIdentificata().isEmitDiagnosticInfo()+"");
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_ERROR),
- configurazione.getCondizioneNonIdentificata().isEmitDiagnosticError()+"");
- if(StringUtils.isNotEmpty(configurazione.getCondizioneNonIdentificata().getNomeConnettore())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_CONDIZIONE_NON_IDENTIFICATA+Costanti.CONDITIONAL_NOME_CONNETTORE),
- configurazione.getCondizioneNonIdentificata().getNomeConnettore());
- }
-
- if(configurazione.getNessunConnettoreTrovato()==null) {
- throw new BehaviourException("Configurazione 'nessun connettore trovato' non fornita");
- }
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_ABORT_TRANSACTION),
- configurazione.getNessunConnettoreTrovato().isAbortTransaction()+"");
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_INFO),
- configurazione.getNessunConnettoreTrovato().isEmitDiagnosticInfo()+"");
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_EMIT_DIAGNOSTIC_ERROR),
- configurazione.getNessunConnettoreTrovato().isEmitDiagnosticError()+"");
- if(StringUtils.isNotEmpty(configurazione.getNessunConnettoreTrovato().getNomeConnettore())) {
- BehaviourPropertiesUtils.addProprieta(pa.getBehaviour(),(Costanti.CONDITIONAL_NESSUN_CONNETTORE_TROVATO+Costanti.CONDITIONAL_NOME_CONNETTORE),
- configurazione.getNessunConnettoreTrovato().getNomeConnettore());
- }
- }
-
- }