/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.hibernate.coreuser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.camel.Exchange; import org.apache.camel.processor.aggregate.AggregationStrategy; /** Aggregates the result of two endpoints. * * This aggregator works only for messages of type DeleteMessage. */ public class DeleteMessageAggregator implements AggregationStrategy { /** The class logger. */ private static Logger log = LoggerFactory.getLogger(DeleteMessageAggregator.class); /** Aggregates both messages. * * @param oldExchange the result of the previous aggregations. If null, this * is the call to the first listener. * * @param newExchange the result of the listener. It is never null. * * @return returns the result of aggegating both exchanges, never null. */ public Exchange aggregate(final Exchange oldExchange, final Exchange newExchange) { log.trace("Entering aggregate({}, {})", oldExchange, newExchange); DeleteMessage newMessage; newMessage = newExchange.getIn().getBody(DeleteMessage.class); DeleteMessage oldMessage; if (oldExchange == null) { oldMessage = newMessage; } else { oldMessage = oldExchange.getIn().getBody(DeleteMessage.class); log.debug("Old message is {})", oldMessage); oldMessage = oldMessage.aggregate(newMessage); } newExchange.getIn().setBody(oldMessage); log.trace("Leaving aggregate"); return newExchange; } }