1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.item.support;
18
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.springframework.classify.Classifier;
25 import org.springframework.classify.ClassifierSupport;
26 import org.springframework.batch.item.ItemWriter;
27
28
29
30
31
32
33
34
35
36
37 public class ClassifierCompositeItemWriter<T> implements ItemWriter<T> {
38
39 private Classifier<T, ItemWriter<? super T>> classifier = new ClassifierSupport<T, ItemWriter<? super T>>(null);
40
41
42
43
44 public void setClassifier(Classifier<T, ItemWriter<? super T>> classifier) {
45 this.classifier = classifier;
46 }
47
48
49
50
51
52 @Override
53 public void write(List<? extends T> items) throws Exception {
54
55 Map<ItemWriter<? super T>, List<T>> map = new HashMap<ItemWriter<? super T>, List<T>>();
56
57 for (T item : items) {
58 ItemWriter<? super T> key = classifier.classify(item);
59 if (!map.containsKey(key)) {
60 map.put(key, new ArrayList<T>());
61 }
62 map.get(key).add(item);
63 }
64
65 for (ItemWriter<? super T> writer : map.keySet()) {
66 writer.write(map.get(writer));
67 }
68
69 }
70
71 }