1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.repeat.policy;
18
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.List;
22
23 import org.springframework.batch.repeat.CompletionPolicy;
24 import org.springframework.batch.repeat.RepeatContext;
25 import org.springframework.batch.repeat.RepeatStatus;
26 import org.springframework.batch.repeat.context.RepeatContextSupport;
27
28
29
30
31
32
33
34
35 public class CompositeCompletionPolicy implements CompletionPolicy {
36
37 CompletionPolicy[] policies = new CompletionPolicy[0];
38
39
40
41
42
43
44 public void setPolicies(CompletionPolicy[] policies) {
45 this.policies = Arrays.asList(policies).toArray(new CompletionPolicy[policies.length]);
46 }
47
48
49
50
51
52
53
54 @Override
55 public boolean isComplete(RepeatContext context, RepeatStatus result) {
56 RepeatContext[] contexts = ((CompositeBatchContext) context).contexts;
57 CompletionPolicy[] policies = ((CompositeBatchContext) context).policies;
58 for (int i = 0; i < policies.length; i++) {
59 if (policies[i].isComplete(contexts[i], result)) {
60 return true;
61 }
62 }
63 return false;
64 }
65
66
67
68
69
70
71 @Override
72 public boolean isComplete(RepeatContext context) {
73 RepeatContext[] contexts = ((CompositeBatchContext) context).contexts;
74 CompletionPolicy[] policies = ((CompositeBatchContext) context).policies;
75 for (int i = 0; i < policies.length; i++) {
76 if (policies[i].isComplete(contexts[i])) {
77 return true;
78 }
79 }
80 return false;
81 }
82
83
84
85
86
87
88 @Override
89 public RepeatContext start(RepeatContext context) {
90 List<RepeatContext> list = new ArrayList<RepeatContext>();
91 for (int i = 0; i < policies.length; i++) {
92 list.add(policies[i].start(context));
93 }
94 return new CompositeBatchContext(context, list);
95
96 }
97
98
99
100
101
102
103 @Override
104 public void update(RepeatContext context) {
105 RepeatContext[] contexts = ((CompositeBatchContext) context).contexts;
106 CompletionPolicy[] policies = ((CompositeBatchContext) context).policies;
107 for (int i = 0; i < policies.length; i++) {
108 policies[i].update(contexts[i]);
109 }
110 ((RepeatContextSupport) context).increment();
111 }
112
113
114
115
116
117
118
119
120 protected class CompositeBatchContext extends RepeatContextSupport {
121
122 private RepeatContext[] contexts;
123
124
125
126
127 private CompletionPolicy[] policies;
128
129 public CompositeBatchContext(RepeatContext context, List<RepeatContext> contexts) {
130 super(context);
131 this.contexts = contexts.toArray(new RepeatContext[contexts.size()]);
132 this.policies = CompositeCompletionPolicy.this.policies;
133 }
134
135 }
136
137 }