package org.orienteer.camel.tasks; import java.util.EventObject; import org.apache.camel.CamelContext; import org.apache.camel.management.event.ExchangeSentEvent; import org.apache.camel.support.EventNotifierSupport; import org.orienteer.camel.component.OIntegrationConfig; import org.orienteer.core.tasks.ITaskSessionCallback; import org.orienteer.core.tasks.OTask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * To handle camel events * */ public class CamelEventHandler extends EventNotifierSupport{ private static final Logger LOG = LoggerFactory.getLogger(CamelEventHandler.class); private ITaskSessionCallback callback; private volatile OCamelTaskSession taskSession; private OIntegrationConfig config; private CamelContext context; public CamelEventHandler(ITaskSessionCallback callback,OIntegrationConfig config,CamelContext context) { this.callback = callback; this.config = config; this.context = context; } @Override public void notify(EventObject event) throws Exception { if (event instanceof ExchangeSentEvent) { ExchangeSentEvent sent = (ExchangeSentEvent) event; String logRecord ="Took " + sent.getTimeTaken() + " millis to send to: " + sent.getEndpoint(); // LOG.info(logRecord); taskSession.incrementCurrentProgress(); } // LOG.info("Event = "+ event); taskSession.appendOut(event.toString()); } @Override public boolean isEnabled(EventObject event) { return true; } public void onAllRoutesComplete(){ if(taskSession!=null) { taskSession.finish(); taskSession = null; } } @Override protected void doStart() throws Exception { LOG.info(Thread.currentThread().getName()); // if (taskSession == null){ taskSession = new OCamelTaskSession(); taskSession.setOTask(config); taskSession.setCallback(callback); Object deleteOnFinish = config.getDocument().field(OTask.Field.AUTODELETE_SESSIONS.fieldName()); taskSession.setDeleteOnFinish(deleteOnFinish!=null?(Boolean)deleteOnFinish:false); taskSession.setConfig(config.getDocument().getIdentity().toString()); taskSession.setFinalProgress(context.getRoutes().size()); taskSession.start(); // } super.doStart(); } @Override protected void doStop() throws Exception { if(taskSession!=null) taskSession.interrupt(); super.doStop(); } }