package org.cad.interruptus.service; import com.espertech.esper.client.ConfigurationOperations; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.EventType; import com.espertech.esper.dataflow.interfaces.EPDataFlowEmitter; import com.espertech.esper.event.map.MapEventBean; import com.espertech.esperio.amqp.AMQPToObjectCollectorContext; import java.util.Collections; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.cad.interruptus.Message; public class MessageCollectorService { final Log logger = LogFactory.getLog(getClass()); final ConfigurationOperations esperConfig; final InventoryService inventoryService; final MessageService messageService; public MessageCollectorService(final ConfigurationOperations esperConfig, final MessageService messageService, final InventoryService inventoryService) { this.esperConfig = esperConfig; this.messageService = messageService; this.inventoryService = inventoryService; } public void collect(final AMQPToObjectCollectorContext context) { final byte[] input = context.getBytes(); final EPDataFlowEmitter emmiter = context.getEmitter(); final List<Message> list = this.extractMessages(input); for (final Message message : list) { final EventBean event = getEventBean(message); emmiter.submit(event); inventoryService.collect(message); } } private List<Message> extractMessages(final byte[] input) { try { return messageService.extractMessages(input); } catch (final Exception ex) { logger.error(this, ex); return Collections.EMPTY_LIST; } } private EventBean getEventBean(final Message message) { final EventType eventType = esperConfig.getEventType(message.getType()); final EventBean eventBean = new MapEventBean(message.getBody(), eventType); return eventBean; } }