package org.neo4j.util; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.neo4j.util.CrudEventData.AlterationMode; /** * Useful filter implementation which functions like a filter for CRUD * operations. Uses {@link CrudEventData}. * @author mattias */ public class CrudEventBufferFilter implements EventBufferFilter { public EventContext[] filter( EventContext[] events ) { Set<Long> deleted = new HashSet<Long>(); for ( EventContext context : events ) { CrudEventData data = ( CrudEventData ) context.getData().getData(); if ( data.getAlterationMode() == AlterationMode.DELETED ) { deleted.add( data.getNodeId() ); } } Set<Long> taken = new HashSet<Long>(); List<EventContext> list = new ArrayList<EventContext>(); for ( EventContext context : events ) { CrudEventData data = ( CrudEventData ) context.getData().getData(); long nodeId = data.getNodeId(); if ( data.getAlterationMode() == AlterationMode.DELETED ) { list.add( context ); } else if ( !taken.contains( nodeId ) && !deleted.contains( nodeId ) ) { list.add( context ); taken.add( nodeId ); } } return list.toArray( new EventContext[ list.size() ] ); } }