DefaultDeleteBuilder extends BaseTaskBuilder implements DeleteBuilder<T> { ListenersBuilder createListenersBuilder() { return new ListenersBuilder( AfterTargetsMapped.class, AfterSourceKeysExtracted.class, AfterMissingTargetsFiltered.class); } DefaultDeleteBuilder(
            Class<T> type,
            ITargetCayenneService targetCayenneService,
            ITokenManager tokenManager,
            ITaskService taskService,
            MapperBuilder mapperBuilder); @Override DefaultDeleteBuilder<T> stageListener(Object listener); @Override DefaultDeleteBuilder<T> batchSize(int batchSize); @Override DefaultDeleteBuilder<T> targetFilter(Expression targetFilter); @Override DefaultDeleteBuilder<T> sourceMatchExtractor(String extractorName); @Override DefaultDeleteBuilder<T> matchBy(Mapper mapper); @Override DefaultDeleteBuilder<T> matchBy(String... keyAttributes); @Override DefaultDeleteBuilder<T> matchBy(Property<?>... matchAttributes); @Override DefaultDeleteBuilder<T> matchById(); @Override DeleteTask<T> task();  }
@Test public void testCreateListenersBuilder() { ListenersBuilder listenersBuilder = builder.createListenersBuilder(); DeleteListener1 l1 = new DeleteListener1(); DeleteListener2 l2 = new DeleteListener2(); NotAListener l3 = new NotAListener(); listenersBuilder.addListener(l1); listenersBuilder.addListener(l2); listenersBuilder.addListener(l3); Map<Class<? extends Annotation>, List<StageListener>> listeners = listenersBuilder.getListeners(); assertNotNull(listeners.get(AfterTargetsMapped.class)); assertNotNull(listeners.get(AfterSourceKeysExtracted.class)); assertNotNull(listeners.get(AfterMissingTargetsFiltered.class)); assertEquals(1, listeners.get(AfterTargetsMapped.class).size()); assertEquals(2, listeners.get(AfterSourceKeysExtracted.class).size()); assertEquals(1, listeners.get(AfterMissingTargetsFiltered.class).size()); }