Example usage for org.springframework.batch.core.step.item SimpleChunkProvider registerListener

List of usage examples for org.springframework.batch.core.step.item SimpleChunkProvider registerListener

Introduction

In this page you can find the example usage for org.springframework.batch.core.step.item SimpleChunkProvider registerListener.

Prototype

public void registerListener(StepListener listener) 

Source Link

Document

Register a listener for callbacks at the appropriate stages in a process.

Usage

From source file:org.springframework.batch.core.step.item.SimpleStepFactoryBean.java

/**
 * Register explicitly set ({@link #setListeners(StepListener[])}) item
 * listeners and auto-register reader, processor and writer if applicable
 *///from w  ww  . j av a 2 s  .  c  om
private void registerItemListeners(SimpleChunkProvider<T> chunkProvider,
        SimpleChunkProcessor<T, S> chunkProcessor) {

    StepListener[] listeners = getListeners();

    // explicitly set item listeners
    chunkProvider.setListeners(
            BatchListenerFactoryHelper.<ItemReadListener<T>>getListeners(listeners, ItemReadListener.class));
    chunkProvider.setListeners(
            BatchListenerFactoryHelper.<SkipListener<T, S>>getListeners(listeners, SkipListener.class));

    chunkProcessor.setListeners(BatchListenerFactoryHelper.<ItemProcessListener<T, S>>getListeners(listeners,
            ItemProcessListener.class));
    chunkProcessor.setListeners(
            BatchListenerFactoryHelper.<ItemWriteListener<S>>getListeners(listeners, ItemWriteListener.class));
    chunkProcessor.setListeners(
            BatchListenerFactoryHelper.<SkipListener<T, S>>getListeners(listeners, SkipListener.class));

    List<StepListener> listofListeners = Arrays.asList(listeners);
    // auto-register reader, processor and writer
    for (Object itemHandler : new Object[] { getItemReader(), getItemWriter(), getItemProcessor() }) {

        if (listofListeners.contains(itemHandler)) {
            continue;
        }

        if (StepListenerFactoryBean.isListener(itemHandler)) {
            StepListener listener = StepListenerFactoryBean.getListener(itemHandler);
            if (listener instanceof SkipListener<?, ?>) {
                chunkProvider.registerListener(listener);
                chunkProcessor.registerListener(listener);
                // already registered with both so avoid double-registering
                continue;
            }
            if (listener instanceof ItemReadListener<?>) {
                chunkProvider.registerListener(listener);
            }
            if (listener instanceof ItemProcessListener<?, ?> || listener instanceof ItemWriteListener<?>) {
                chunkProcessor.registerListener(listener);
            }
        }
    }
}