package org.talend.esb.policy.transformation;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import org.apache.neethi.Assertion;
import org.apache.neethi.PolicyComponent;
import org.w3c.dom.Element;
public class TransformationAssertion implements Assertion {
private static final String NS_PREFIX = "tpa";
private static final String TYPE_NAME = "type";
private static final String PATH_ATTRIBUTE_NAME = "path";
private static final String APPLIES_TO_ATTRIBUTE_NAME = "appliesTo";
private static final String MESSAGE_TYPE_ATTRIBUTE_NAME = "message";
public enum AppliesToType {
consumer,
provider,
always,
none
}
public enum MessageType {
request,
response,
all,
none
}
private final String path;
private final TransformationType transformationType;
private final AppliesToType appliesTo;
private final MessageType messageType;
public TransformationAssertion(Element element) {
String sType = element.getAttribute(TYPE_NAME);
if ((sType == null) || (sType.isEmpty())) {
transformationType = TransformationType.xslt;
} else {
transformationType = TransformationType.valueOf(sType);
}
path = element.getAttribute(PATH_ATTRIBUTE_NAME);
appliesTo = AppliesToType.valueOf(element.getAttribute(APPLIES_TO_ATTRIBUTE_NAME));
messageType = MessageType.valueOf(element.getAttribute(MESSAGE_TYPE_ATTRIBUTE_NAME));
}
public TransformationAssertion(String path,
AppliesToType appliesTo,
MessageType messageType,
TransformationType transformationType) {
this.path = path;
this.appliesTo = appliesTo;
this.messageType = messageType;
this.transformationType = transformationType;
}
@Override
public short getType() {
return org.apache.neethi.Constants.TYPE_ASSERTION;
}
@Override
public boolean equal(PolicyComponent policyComponent) {
return policyComponent == this;
}
@Override
public QName getName() {
return TransformationPolicyBuilder.TRANSFORMATION;
}
@Override
public boolean isOptional() {
return false;
}
@Override
public boolean isIgnorable() {
return false;
}
@Override
public void serialize(XMLStreamWriter writer) throws XMLStreamException {
String prefix = writer.getPrefix(TransformationPolicyBuilder.NAMESPACE);
if (prefix == null) {
prefix = NS_PREFIX;
writer.setPrefix(prefix, TransformationPolicyBuilder.NAMESPACE);
}
// <tpa:Transformation>
writer.writeStartElement(prefix, TransformationPolicyBuilder.TRANSFORMATION_NAME,
TransformationPolicyBuilder.NAMESPACE);
// xmlns:tpa="http://types.talend.com/policy/assertion/1.0"
writer.writeNamespace(prefix, TransformationPolicyBuilder.NAMESPACE);
// attributes
writer.writeAttribute(null, PATH_ATTRIBUTE_NAME, String.valueOf(path));
writer.writeAttribute(null, APPLIES_TO_ATTRIBUTE_NAME, String.valueOf(appliesTo));
writer.writeAttribute(null, MESSAGE_TYPE_ATTRIBUTE_NAME, String.valueOf(messageType));
// </tpa:Transformation>
writer.writeEndElement();
}
@Override
public PolicyComponent normalize() {
return this;
}
public TransformationType getTransformationType() {
return transformationType;
}
public String getPath() {
return path;
}
public AppliesToType getAppliesTo() {
return appliesTo;
}
public MessageType getMessageType() {
return messageType;
}
}