/*
* 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.smooks.ui;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.config.xml.SynapseXPathFactory;
import org.apache.synapse.config.xml.SynapseXPathSerializer;
import org.apache.synapse.util.xpath.SynapseXPath;
import org.jaxen.JaxenException;
import org.wso2.carbon.mediator.service.ui.AbstractMediator;
import org.wso2.carbon.mediator.service.MediatorException;
import javax.xml.namespace.QName;
public class SmooksMediator extends AbstractMediator {
private String configKey = null;
private static final QName ATT_CONFIG_KEY = new QName("config-key");
private String inputType = "xml";
private SynapseXPath inputExpression = null;
private String outputType = "xml";
private SynapseXPath outputExpression = null;
private String outputProperty = null;
private String outputAction = null;
public String getConfigKey() {
return configKey;
}
public void setConfigKey(String configKey) {
this.configKey = configKey;
}
public String getTagLocalName() {
return "smooks";
}
public OMElement serialize(OMElement parent) {
OMElement smooksEle = fac.createOMElement("smooks", synNS);
saveTracingState(smooksEle, this);
if (configKey != null) {
smooksEle.addAttribute(fac.createOMAttribute(
"config-key", nullNS, configKey));
} else {
throw new MediatorException("config-key not specified");
}
smooksEle.addChild(serializeInput());
smooksEle.addChild(serializeOutput());
if (parent != null) {
parent.addChild(smooksEle);
}
return smooksEle;
}
public void build(OMElement elem) {
OMAttribute key = elem.getAttribute(ATT_CONFIG_KEY);
if (key == null) {
String msg = "The 'config-key' attribute is required";
throw new MediatorException(msg);
}
this.configKey = key.getAttributeValue();
OMElement inputElement = elem.getFirstChildWithName(
new QName(SynapseConstants.SYNAPSE_NAMESPACE, "input"));
if (inputElement != null) {
processInput(inputElement);
}
OMElement outputElement = elem.getFirstChildWithName(
new QName(SynapseConstants.SYNAPSE_NAMESPACE, "output"));
if (inputElement != null) {
processOutput(outputElement);
}
// after successfully creating the mediator
// set its common attributes such as tracing etc
processAuditStatus(this, elem);
}
private void processInput(OMElement input) {
OMAttribute typeAttr = input.getAttribute(new QName("type"));
if (typeAttr != null) {
String typeValue = typeAttr.getAttributeValue();
setInputType(typeValue);
}
if (input.getAttribute(new QName("expression")) != null) {
try {
setInputExpression(SynapseXPathFactory.getSynapseXPath(input, new QName("expression")));
} catch (JaxenException ignored) {
}
}
}
private void processOutput(OMElement output) {
OMAttribute typeAttr = output.getAttribute(new QName("type"));
if (typeAttr != null) {
String typeValue = typeAttr.getAttributeValue();
setOutputType(typeValue);
}
if (output.getAttribute(new QName("expression")) != null) {
try {
setOutputExpression(SynapseXPathFactory.getSynapseXPath(output, new QName("expression")));
} catch (JaxenException ignored) {
}
OMAttribute actionAttr = output.getAttribute(new QName("action"));
if (actionAttr != null && actionAttr.getAttributeValue() != null) {
setOutputAction(actionAttr.getAttributeValue());
}
}
OMAttribute propertyAttr = output.getAttribute(new QName("property"));
if (propertyAttr != null && propertyAttr.getAttributeValue() != null) {
setOutputProperty(propertyAttr.getAttributeValue());
}
}
private OMElement serializeInput() {
OMElement inputElement = fac.createOMElement("input", synNS);
inputElement.addAttribute(fac.createOMAttribute("type", nullNS, inputType));
if (getInputExpression() != null) {
SynapseXPathSerializer.serializeXPath(getInputExpression(), inputElement, "expression");
}
return inputElement;
}
private OMElement serializeOutput() {
OMElement outputElement = fac.createOMElement("output", synNS);
outputElement.addAttribute(fac.createOMAttribute("type", nullNS, outputType));
if (getOutputExpression() != null) {
SynapseXPathSerializer.serializeXPath(getOutputExpression(), outputElement, "expression");
if (getOutputAction() != null) {
outputElement.addAttribute(fac.createOMAttribute("action", nullNS, getOutputAction()));
}
} else if (getOutputProperty() != null) {
outputElement.addAttribute(fac.createOMAttribute("property", nullNS, getOutputProperty()));
}
return outputElement;
}
public String getInputType() {
return inputType;
}
public SynapseXPath getInputExpression() {
return inputExpression;
}
public String getOutputType() {
return outputType;
}
public SynapseXPath getOutputExpression() {
return outputExpression;
}
public String getOutputProperty() {
return outputProperty;
}
public String getOutputAction() {
return outputAction;
}
public void setInputType(String inputType) {
this.inputType = inputType;
}
public void setInputExpression(SynapseXPath inputExpression) {
this.inputExpression = inputExpression;
}
public void setOutputType(String outputType) {
this.outputType = outputType;
}
public void setOutputExpression(SynapseXPath outputExpression) {
this.outputExpression = outputExpression;
}
public void setOutputProperty(String outputProperty) {
this.outputProperty = outputProperty;
}
public void setOutputAction(String outputAction) {
this.outputAction = outputAction;
}
}