package org.atomnuke.examples; import java.io.File; import java.util.concurrent.TimeUnit; import org.atomnuke.NukeKernel; import org.atomnuke.atom.model.Entry; import org.atomnuke.atom.model.builder.CategoryBuilder; import org.atomnuke.examples.eventlets.FeedFileWriterHandler; import org.atomnuke.examples.source.EventGenerator; import org.atomnuke.sink.eps.EventletChainSink; import org.atomnuke.sink.eps.eventlet.AtomEventletException; import org.atomnuke.sink.eps.eventlet.AtomEventletPartial; import org.atomnuke.sink.selectors.CategorySelector; import org.atomnuke.sink.selectors.CategorySelectorImpl; import org.atomnuke.task.atom.AtomTask; import org.atomnuke.util.TimeValue; /** * * How EPS works * * AtomEvenHandlers process only events. This simplifies the interface. * * AtomEventHandlers elect into events received by EPS by 'selecting' them. * Selection is accomplished with a Selector object that contains the selection * logic. The relay will then relay atom events to the AtomEventHandler based on * the selection result. * * When a feed is selected, its entries are processed in order. Each entry must * be selected. * * @author zinic */ public class EPSMain { public static void main(String[] args) throws Exception { // First relay for selecting feeds that have the category 'test' and only // the entries inside that feed that also have the category 'test' final EventletChainSink relay1 = new EventletChainSink(); final CategorySelector selector1 = new CategorySelectorImpl(); selector1.addCategory(new CategoryBuilder().setTerm("test").build()); // Event eventlet partial makes delegate creation more simple relay1.enlistHandler(new AtomEventletPartial() { @Override public void entry(Entry entry) throws AtomEventletException { System.out.println("Relay 1 - Entry: " + entry.id().toString()); } }, selector1); // Second relay for selecting feeds that have the category 'test' and only // the entries inside that feed that have the category 'other-cat' final EventletChainSink relay2 = new EventletChainSink(); // Creating your own handler allows you to implement the init and destroy // methods however you like final CategorySelector selector2 = new CategorySelectorImpl(); selector1.addCategory(new CategoryBuilder().setTerm("test").build()); selector1.addCategory(new CategoryBuilder().setTerm("other-cat").build()); relay2.enlistHandler(new FeedFileWriterHandler(new File("/tmp/test.feed")), selector2); // Set up Nuke final NukeKernel nukeKernel = new NukeKernel(); final AtomTask task1 = nukeKernel.follow(new EventGenerator("Task 1", true), new TimeValue(500, TimeUnit.MILLISECONDS)); task1.addSink(relay1); final AtomTask task2 = nukeKernel.follow(new EventGenerator("Task 2", true), new TimeValue(1, TimeUnit.SECONDS)); task2.addSink(relay1); task2.addSink(relay2); final AtomTask task3 = nukeKernel.follow(new EventGenerator("Task 3", true), new TimeValue(2, TimeUnit.SECONDS)); task3.addSink(relay1); nukeKernel.start(); Thread.sleep(10000); nukeKernel.destroy(); } }