/* * 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.switchm; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMAttribute; import org.apache.synapse.config.xml.*; import org.apache.synapse.util.xpath.SynapseXPath; import org.wso2.carbon.mediator.service.MediatorException; import org.wso2.carbon.mediator.service.ui.AbstractListMediator; import org.jaxen.JaxenException; import javax.xml.namespace.QName; public class SwitchMediator extends AbstractListMediator { private static final QName CASE_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "case"); private static final QName DEFAULT_Q = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "default"); /** The XPath expression specifying the source element to apply the switch case expressions against */ private SynapsePath source = null; public SynapsePath getSource() { return source; } public void setSource(SynapsePath source) { this.source = source; } public String getTagLocalName() { return "switch"; } public OMElement serialize(OMElement parent) { OMElement switchMed = fac.createOMElement("switch", synNS); saveTracingState(switchMed, this); if (getSource() != null) { SynapsePathSerializer.serializePath(getSource(), switchMed, "source"); } else { throw new MediatorException("Invalid switch mediator. Source required"); } serializeChildren(switchMed, getList()); if (parent != null) { parent.addChild(switchMed); } return switchMed; } public void build(OMElement elem) { if (getList() != null) { getList().clear(); } OMAttribute source = elem.getAttribute(ATT_SOURCE); if (source == null) { String msg = "A 'source' XPath attribute is required for a switch mediator"; throw new MediatorException(msg); } else { try { setSource(SynapsePathFactory.getSynapsePath(elem, ATT_SOURCE)); } catch (JaxenException e) { String msg = "Invalid XPath for attribute 'source' : " + source.getAttributeValue(); throw new MediatorException(msg); } } // after successfully creating the mediator // set its common attributes such as tracing etc processAuditStatus(this, elem); addChildren(elem, this); } }