package org.neo4j.util;
import org.neo4j.kernel.impl.event.Event;
import org.neo4j.kernel.impl.event.EventData;
import org.neo4j.kernel.impl.event.ProActiveEventListener;
/**
* Listens to events, receives events when a transaction is commited. Use with
* {@link TransactionEventManager}.
* @author mattias
*/
public abstract class TransactionEventListener
implements ProActiveEventListener
{
private TransactionEventManager manager;
public TransactionEventListener( TransactionEventManager manager )
{
this.manager = manager;
}
/**
* @return a list of events to listen for.
*/
protected abstract Event[] getEvents();
/**
* Starts listen to events.
*/
public void start()
{
for ( Event event : getEvents() )
{
manager.registerEventListener( this, event );
}
}
/**
* Stops listen to events.
*/
public void stop()
{
for ( Event event : getEvents() )
{
manager.unregisterEventListener( this, event );
}
}
protected EventBufferFilter newFilter()
{
return EventBufferFilter.HOLLOW_EVENT_FILTER;
}
public boolean proActiveEventReceived( Event event, EventData data )
{
if ( event != TransactionEventManager.TX_EVENT_BUFFER )
{
return true;
}
EventContext[] contexts = ( EventContext[] ) data.getData();
contexts = newFilter().filter( contexts );
return handleEventBuffer( contexts );
}
protected abstract boolean handleEventBuffer( EventContext[] events );
}