package sushi.esper;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPathConstants;
import sushi.event.SushiEventType;
import sushi.event.attribute.SushiAttribute;
import sushi.event.attribute.SushiAttributeTree;
import sushi.event.attribute.SushiAttributeTypeEnum;
import com.espertech.esper.client.ConfigurationEventTypeXMLDOM;
/**
* This class is a helper class providing methods to useful for the communication with esper
*/
public class EsperUtils {
/**
* Translates a java datatype to an XPath-Constants datatype.
* @param clazz
* @return QName
*/
public static QName mapClassToQName(SushiAttributeTypeEnum clazz) {
if (clazz == SushiAttributeTypeEnum.STRING) {
return XPathConstants.STRING;
}
if (clazz == SushiAttributeTypeEnum.INTEGER) {
return XPathConstants.NUMBER;
}
if (clazz == SushiAttributeTypeEnum.DATE) {
return DatatypeConstants.DATETIME;
}
return null;
}
/**
* Translates a java class to a cast-String
* @param clazz
* @return cast-String
*/
public static String mapClassToCast(SushiAttributeTypeEnum clazz) {
if (clazz == SushiAttributeTypeEnum.STRING) {
return "java.lang.String";
}
if (clazz == SushiAttributeTypeEnum.INTEGER) {
return "java.lang.Integer";
}
if (clazz == SushiAttributeTypeEnum.DATE) {
return "java.util.Date";
}
return null;
}
/**
* Transforms a sushi event to an xml-dom event.
* @param eventType
* @return esper formed xml-dom event
*/
public static ConfigurationEventTypeXMLDOM eventTypeToXMLDom(SushiEventType eventType) {
SushiAttributeTree tree = eventType.getValueTypeTree();
ConfigurationEventTypeXMLDOM dom = new ConfigurationEventTypeXMLDOM();
dom.setRootElementName(eventType.getTypeName());
dom.addXPathProperty("Timestamp", "/" + eventType.getTypeName() + "/Timestamp", XPathConstants.STRING, "java.util.Date");
dom.addXPathProperty("ProcessInstances", "/" + eventType.getTypeName() + "/" + "ProcessInstances", XPathConstants.STRING, "java.util.List");
for (SushiAttribute element: tree.getAttributes()) {
SushiAttributeTypeEnum attType = element.getType();
System.out.println(element.toString());
if (attType == SushiAttributeTypeEnum.DATE) {
dom.addXPathProperty(element.getAttributeExpression(), "/" + eventType.getTypeName() + element.getXPath(), XPathConstants.STRING, "java.util.Date");
}
else if (attType == SushiAttributeTypeEnum.INTEGER) {
dom.addXPathProperty(element.getAttributeExpression(), "/" + eventType.getTypeName() + element.getXPath(), XPathConstants.NUMBER, "int");
}
else {
dom.addXPathProperty(element.getAttributeExpression(), "/" + eventType.getTypeName() + element.getXPath(), XPathConstants.STRING);
}
}
return dom;
}
}