@@ -0,0 +1,1913 @@
+package org.realityforge.replicant.client;%0A%0Aimport java.util.ArrayList;%0A%0Aclass RecordingListener%0A    implements EntityChangeListener%0A%7B%0A  private final ArrayList%3CEntityChangeEvent%3E _entityRemovedEvents = new ArrayList%3CEntityChangeEvent%3E();%0A  private final ArrayList%3CEntityChangeEvent%3E _attributeChangedEvents = new ArrayList%3CEntityChangeEvent%3E();%0A  private final ArrayList%3CEntityChangeEvent%3E _relatedAddedEvents = new ArrayList%3CEntityChangeEvent%3E();%0A  private final ArrayList%3CEntityChangeEvent%3E _relatedRemovedEvents = new ArrayList%3CEntityChangeEvent%3E();%0A%0A  public boolean hasRecordedEvents()%0A  %7B%0A    return !hasNoRecordedEvents();%0A  %7D%0A%0A  private boolean hasNoRecordedEvents()%0A  %7B%0A    return 0 == _entityRemovedEvents.size() &&%0A           0 == _attributeChangedEvents.size() &&%0A           0 == _relatedAddedEvents.size() &&%0A           0 == _relatedRemovedEvents.size();%0A  %7D%0A%0A  public void clear()%0A  %7B%0A    _entityRemovedEvents.clear();%0A    _attributeChangedEvents.clear();%0A    _relatedAddedEvents.clear();%0A    _relatedRemovedEvents.clear();%0A  %7D%0A%0A  public void entityRemoved( final EntityChangeEvent event )%0A  %7B%0A    _entityRemovedEvents.add( event );%0A  %7D%0A%0A  public void attributeChanged( final EntityChangeEvent event )%0A  %7B%0A    _attributeChangedEvents.add( event );%0A  %7D%0A%0A  public void relatedAdded( final EntityChangeEvent event )%0A  %7B%0A    _relatedAddedEvents.add( event );%0A  %7D%0A%0A  public void relatedRemoved( final EntityChangeEvent event )%0A  %7B%0A    _relatedRemovedEvents.add( event );%0A  %7D%0A%0A  public ArrayList%3CEntityChangeEvent%3E getEntityRemovedEvents()%0A  %7B%0A    return _entityRemovedEvents;%0A  %7D%0A%0A  public ArrayList%3CEntityChangeEvent%3E getAttributeChangedEvents()%0A  %7B%0A    return _attributeChangedEvents;%0A  %7D%0A%0A  public ArrayList%3CEntityChangeEvent%3E getRelatedAddedEvents()%0A  %7B%0A    return _relatedAddedEvents;%0A  %7D%0A%0A  public ArrayList%3CEntityChangeEvent%3E getRelatedRemovedEvents()%0A  %7B%0A    return _relatedRemovedEvents;%0A  %7D%0A%7D%0A

Add in a listener to record events as part of testing