1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.springframework.batch.core.listener;
17
18 import java.util.Iterator;
19 import java.util.List;
20
21 import org.springframework.batch.core.ItemProcessListener;
22 import org.springframework.core.Ordered;
23
24
25
26
27
28 public class CompositeItemProcessListener<T, S> implements ItemProcessListener<T, S> {
29
30 private OrderedComposite<ItemProcessListener<? super T, ? super S>> listeners = new OrderedComposite<ItemProcessListener<? super T, ? super S>>();
31
32
33
34
35
36
37 public void setListeners(List<? extends ItemProcessListener<? super T, ? super S>> itemReadListeners) {
38 this.listeners.setItems(itemReadListeners);
39 }
40
41
42
43
44
45
46 public void register(ItemProcessListener<? super T, ? super S> itemReaderListener) {
47 listeners.add(itemReaderListener);
48 }
49
50
51
52
53
54
55
56 @Override
57 public void afterProcess(T item, S result) {
58 for (Iterator<ItemProcessListener<? super T, ? super S>> iterator = listeners.reverse(); iterator.hasNext();) {
59 ItemProcessListener<? super T, ? super S> listener = iterator.next();
60 listener.afterProcess(item, result);
61 }
62 }
63
64
65
66
67
68
69 @Override
70 public void beforeProcess(T item) {
71 for (Iterator<ItemProcessListener<? super T, ? super S>> iterator = listeners.iterator(); iterator.hasNext();) {
72 ItemProcessListener<? super T, ? super S> listener = iterator.next();
73 listener.beforeProcess(item);
74 }
75 }
76
77
78
79
80
81
82
83 @Override
84 public void onProcessError(T item, Exception e) {
85 for (Iterator<ItemProcessListener<? super T, ? super S>> iterator = listeners.reverse(); iterator.hasNext();) {
86 ItemProcessListener<? super T, ? super S> listener = iterator.next();
87 listener.onProcessError(item, e);
88 }
89 }
90
91 }