package sushi.transformation; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; import sushi.event.SushiEvent; import sushi.event.SushiEventType; import sushi.event.attribute.SushiAttribute; import sushi.event.attribute.SushiAttributeTypeEnum; import sushi.event.collection.SushiMapTree; import sushi.eventhandling.Broker; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.UpdateListener; /** * Listener for events generated by the data stream management system. */ public class TransformationListener implements UpdateListener { private SushiEventType eventType; private int numberOfEventsFired; public TransformationListener(SushiEventType sushiEventType) { eventType = sushiEventType; numberOfEventsFired = 0; } /** * Normalizes the transformed events and sends them to the broker. * * @see UpdateListener#update(EventBean[], EventBean[]) */ public void update(EventBean[] newData, EventBean[] oldData) { Set<Map<String, Serializable>> uniqueEvents = new HashSet<Map<String, Serializable>>(); // create event/attribute values for event type for (EventBean data : newData) { System.out.println("Event received: " + data.getUnderlying()); Map<String, Serializable> attributeExpressionsAndValues = (Map<String, Serializable>) data.getUnderlying(); if (!uniqueEvents.contains(attributeExpressionsAndValues)) { uniqueEvents.add(attributeExpressionsAndValues); SushiMapTree<String, Serializable> values = new SushiMapTree<String, Serializable>(); for (SushiAttribute attribute : eventType.getRootLevelValueTypes()) { try { String attributeExpression = attribute.getAttributeExpression(); Serializable attributeValue = null; if (attribute.getType() == SushiAttributeTypeEnum.DATE) { attributeValue = (Date) attributeExpressionsAndValues.get(attributeExpression); } else if (attribute.getType() == SushiAttributeTypeEnum.INTEGER) { if (attributeExpressionsAndValues.get(attributeExpression) instanceof Long) { attributeValue = ((Long) attributeExpressionsAndValues.get(attributeExpression)).intValue(); } else if (attributeExpressionsAndValues.get(attributeExpression) instanceof Double) { attributeValue = ((Double) attributeExpressionsAndValues.get(attributeExpression)).intValue(); } else { attributeValue = (Integer) attributeExpressionsAndValues.get(attributeExpression); } } else { attributeValue = attributeExpressionsAndValues.get(attributeExpression).toString(); } values.put(attributeExpression, attributeValue); } catch (Exception e) { e.printStackTrace(); } } System.out.println(values.toString()); SushiEvent event = new SushiEvent(eventType, new Date(), values); Object timestamp = attributeExpressionsAndValues.get("Timestamp"); if (timestamp instanceof Date) { event.setTimestamp((Date) timestamp); } Broker.send(event); System.out.println("Event created: " + event); numberOfEventsFired++; } } } public int getNumberOfEventsFired() { return numberOfEventsFired; } public void setNumberOfEventsFired(int numberOfEventsFired) { this.numberOfEventsFired = numberOfEventsFired; } }