/* * Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.wso2.carbon.mediator.conditionalrouter; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.util.AXIOMUtil; import org.apache.synapse.commons.evaluators.Evaluator; import org.apache.synapse.commons.evaluators.EvaluatorException; import org.apache.synapse.commons.evaluators.config.EvaluatorFactoryFinder; import org.apache.synapse.commons.evaluators.config.EvaluatorSerializer; import org.apache.synapse.commons.evaluators.config.EvaluatorSerializerFinder; import org.apache.synapse.config.xml.XMLConfigConstants; import org.apache.xmlbeans.impl.xb.xmlconfig.Qnameconfig; import org.wso2.carbon.mediator.service.ui.AbstractListMediator; import org.apache.axiom.om.OMElement; import java.util.LinkedList; import java.util.List; import javax.swing.plaf.synth.SynthConstants; import javax.xml.namespace.QName; public class ConditionalRouteMediator extends AbstractListMediator { private boolean breakAfter = false; private boolean isAsynchronous = false; private Evaluator evaluator; private String targetSeq; private static final String ROUTE = "conditionalRoute"; private static final String CONDITION = "condition"; private static final String TARGET = "target"; private static final String BREAK_ROUTE = "breakRoute"; private static final String ASYNCHRONOUS = "asynchronous"; private static final String TARGET_SEQ = "sequence"; public static final QName BREAK_AFTER_Q = new QName(BREAK_ROUTE); public static final QName ASYNCHRONOUS_Q = new QName(ASYNCHRONOUS); public static final QName CONDITION_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE,CONDITION); public static final QName TARGET_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, TARGET); private static final QName SEQUENCE_Q = new QName(TARGET_SEQ); public OMElement serialize(OMElement parent) { OMElement routeElem = fac.createOMElement(ROUTE, synNS); if (evaluator != null) { EvaluatorSerializer evaluatorSerializer = EvaluatorSerializerFinder.getInstance().getSerializer(evaluator.getName()); if (evaluatorSerializer != null) { OMElement conditionElem = fac.createOMElement(CONDITION, synNS); try { evaluatorSerializer.serialize(conditionElem, evaluator); } catch (EvaluatorException ee) { } routeElem.addChild(conditionElem); } } if (String.valueOf(breakAfter) != null) { routeElem.addAttribute(BREAK_ROUTE, String.valueOf(breakAfter), null); } if (String.valueOf(isAsynchronous) != null) { routeElem.addAttribute(ASYNCHRONOUS, String.valueOf(isAsynchronous), null); } if (targetSeq != null) { OMElement targetElem = fac.createOMElement(TARGET, synNS); targetElem.addAttribute(TARGET_SEQ, targetSeq, null); routeElem.addChild(targetElem); } if (parent != null) { parent.addChild(routeElem); } return routeElem; } public String getConditionString() { String conditionStr = ""; EvaluatorSerializer evaluatorSerializer = EvaluatorSerializerFinder.getInstance().getSerializer(evaluator.getName()); if (evaluatorSerializer != null) { OMElement conditionElem = fac.createOMElement(CONDITION, synNS); try { evaluatorSerializer.serialize(conditionElem, evaluator); } catch (EvaluatorException ee) { } conditionStr = conditionElem.toString(); } return conditionStr; } public void build(OMElement omElement) { OMAttribute breakAfterAttr = omElement.getAttribute(BREAK_AFTER_Q); OMAttribute asynchronousAttr = omElement.getAttribute(ASYNCHRONOUS_Q); if (breakAfterAttr != null && breakAfterAttr.getAttributeValue() != null) { breakAfter = Boolean.parseBoolean(breakAfterAttr.getAttributeValue()); } if (asynchronousAttr != null && asynchronousAttr.getAttributeValue() != null) { isAsynchronous = Boolean.parseBoolean(asynchronousAttr.getAttributeValue()); } OMElement conditionElem = omElement.getFirstChildWithName(CONDITION_Q); if (conditionElem != null) { try { evaluator = EvaluatorFactoryFinder.getInstance().getEvaluator(conditionElem.getFirstElement()); } catch (EvaluatorException ee) { } } OMElement targetElem = omElement.getFirstChildWithName(TARGET_Q); if (targetElem != null) { OMAttribute targetSeqAttr = targetElem.getAttribute(SEQUENCE_Q); if (targetSeqAttr != null && targetSeqAttr.getAttributeValue() != null) { targetSeq = targetSeqAttr.getAttributeValue(); } } } public String getTagLocalName() { return "conditionalRoute"; } public boolean isBreakAfter() { return breakAfter; } public void setBreakAfter(boolean breakAfter) { this.breakAfter = breakAfter; } public boolean isAsynchronous() { return isAsynchronous; } public void setAsynchronous(boolean asynchronous) { isAsynchronous = asynchronous; } public Evaluator getEvaluator() { return evaluator; } public void setEvaluator(Evaluator evaluator) { this.evaluator = evaluator; } public void setEvaluator(OMElement evaluatorElem) throws EvaluatorException{ evaluator = EvaluatorFactoryFinder.getInstance().getEvaluator(evaluatorElem.getFirstElement()); } public String getTargetSeq() { return targetSeq; } public void setTargetSeq(String targetSeq) { this.targetSeq = targetSeq; } }