/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.synapse.config.xml; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.synapse.MessageContext; import org.apache.synapse.ManagedLifecycle; import org.apache.synapse.aspects.ComponentType; import org.apache.synapse.aspects.flow.statistics.StatisticIdentityGenerator; import org.apache.synapse.aspects.flow.statistics.data.artifact.ArtifactHolder; import org.apache.synapse.core.SynapseEnvironment; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * A SwitchCase define a case element of Switch Mediator and It has a list mediator and * a regex that is matched by its owning SwitchMediator for selection. * If any SwitchCase has selected ,Then the list mediator of it, will responsible * for message mediation */ public class SwitchCase implements ManagedLifecycle { private static final Log log = LogFactory.getLog(SwitchCase.class); /** * The regular expression pattern to be checked */ private Pattern regex = null; /** * The list mediator which is responsible on message mediation of the case */ private AnonymousListMediator caseMediator; public void init(SynapseEnvironment se) { caseMediator.init(se); } public void destroy() { caseMediator.destroy(); } /** * To delegate message mediation to list mediator * * @param synCtx message context to be mediated * @return boolean value */ public boolean mediate(MessageContext synCtx) { return caseMediator == null || caseMediator.mediate(synCtx); } /** * To get list mediator of this case element * * @return List mediator of switch case */ public AnonymousListMediator getCaseMediator() { return caseMediator; } /** * To set the set of case mediators * * @param caseMediator anonymous sequence to be used for the case mediation */ public void setCaseMediator(AnonymousListMediator caseMediator) { this.caseMediator = caseMediator; } /** * To get the regular expression pattern * * @return Pattern */ public Pattern getRegex() { return regex; } /** * To set the regular expression pattern * * @param regex Regular Expression to be matched */ public void setRegex(Pattern regex) { this.regex = regex; } /** * To evaluate regular expression pattern to a get switch case * * @param value value to be tested over the regular expression of match * @return boolean value */ public boolean matches(String value) { if (value == null) { log.warn("Provided character sequence for switch case condition is 'null'." + " Switch case will not be executed."); return false; } Matcher matcher = regex.matcher(value); if (matcher == null) { log.warn("Matcher for the provided character sequence and the pattern ' " + regex + " '" + " cannot be found. Switch case will not be executed."); return false; } return matcher.matches(); } public void setStatisticIdForMediators(ArtifactHolder holder) { StatisticIdentityGenerator.reportingBranchingEvents(holder); caseMediator.setStatisticIdForMediators(holder); StatisticIdentityGenerator.reportingEndBranchingEvent(holder); } }