1 | /* |
2 | * Copyright 2006-2011 the original author or authors. |
3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. |
6 | * You may obtain a copy of the License at |
7 | * |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * |
10 | * Unless required by applicable law or agreed to in writing, software |
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. |
15 | */ |
16 | package org.springframework.batch.core.step.builder; |
17 | |
18 | import org.springframework.batch.core.Step; |
19 | import org.springframework.batch.core.job.flow.Flow; |
20 | import org.springframework.batch.core.job.flow.FlowStep; |
21 | |
22 | /** |
23 | * A step builder for {@link FlowStep} instances. A flow step delegates processing to a nested flow composed of other |
24 | * steps. |
25 | * |
26 | * @author Dave Syer |
27 | * |
28 | * @since 2.2 |
29 | */ |
30 | public class FlowStepBuilder extends StepBuilderHelper<FlowStepBuilder> { |
31 | |
32 | private Flow flow; |
33 | |
34 | /** |
35 | * Create a new builder initialized with any properties in the parent. The parent is copied, so it can be re-used. |
36 | * |
37 | * @param parent a parent helper containing common step properties |
38 | */ |
39 | public FlowStepBuilder(StepBuilderHelper<?> parent) { |
40 | super(parent); |
41 | } |
42 | |
43 | /** |
44 | * Provide a flow to execute during the step. |
45 | * |
46 | * @param flow the flow to execute |
47 | * @return this for fluent chaining |
48 | */ |
49 | public FlowStepBuilder flow(Flow flow) { |
50 | this.flow = flow; |
51 | return this; |
52 | } |
53 | |
54 | /** |
55 | * Build a step that executes the flow provided, normally composed of other steps. The flow is not executed in a |
56 | * transaction because the individual steps are supposed to manage their own transaction state. |
57 | * |
58 | * @return a flow step |
59 | */ |
60 | public Step build() { |
61 | FlowStep step = new FlowStep(); |
62 | step.setName(getName()); |
63 | step.setFlow(flow); |
64 | super.enhance(step); |
65 | try { |
66 | step.afterPropertiesSet(); |
67 | } |
68 | catch (Exception e) { |
69 | throw new StepBuilderException(e); |
70 | } |
71 | return step; |
72 | } |
73 | |
74 | } |