1 /*
2 * Copyright 2006-2007 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.test;
17
18 import java.util.Collection;
19
20 import org.springframework.batch.core.JobExecution;
21 import org.springframework.batch.core.JobInstance;
22 import org.springframework.batch.core.JobParameters;
23 import org.springframework.batch.core.StepExecution;
24 import org.springframework.batch.core.converter.DefaultJobParametersConverter;
25 import org.springframework.batch.item.ExecutionContext;
26 import org.springframework.batch.support.PropertiesConverter;
27
28 /**
29 * Convenience methods for creating test instances of {@link JobExecution},
30 * {@link JobInstance} and {@link StepExecution}.
31 *
32 * @author Dave Syer
33 *
34 */
35 public class MetaDataInstanceFactory {
36
37 /**
38 * The default name for a job ("job")
39 */
40 public static final String DEFAULT_JOB_NAME = "job";
41
42 /**
43 * The default id for a job instance (12L)
44 */
45 public static final long DEFAULT_JOB_INSTANCE_ID = 12L;
46
47 /**
48 * The default id for a job execution (123L)
49 */
50 public static final long DEFAULT_JOB_EXECUTION_ID = 123L;
51
52 /**
53 * The default name for a step ("step")
54 */
55 public static final String DEFAULT_STEP_NAME = "step";
56
57 /**
58 * The default id for a step execution (1234L)
59 */
60 public static final long DEFAULT_STEP_EXECUTION_ID = 1234L;
61
62 /**
63 * Create a {@link JobInstance} with the parameters provided.
64 *
65 * @param jobName the name of the job
66 * @param instanceId the Id of the {@link JobInstance}
67 * @param jobParameters comma or new line separated name=value pairs
68 * @return a {@link JobInstance}
69 */
70 public static JobInstance createJobInstance(String jobName, Long instanceId, String jobParameters) {
71 JobParameters params = new DefaultJobParametersConverter().getJobParameters(PropertiesConverter
72 .stringToProperties(jobParameters));
73 return createJobInstance(jobName, instanceId, params);
74 }
75
76 /**
77 * Create a {@link JobInstance} with the parameters provided.
78 *
79 * @param jobName the name of the job
80 * @param instanceId the Id of the {@link JobInstance}
81 * @param jobParameters an instance of {@link JobParameters}
82 * @return a {@link JobInstance}
83 */
84 public static JobInstance createJobInstance(String jobName, Long instanceId, JobParameters jobParameters) {
85 return new JobInstance(instanceId, jobParameters, jobName);
86 }
87
88 /**
89 * Create a {@link JobInstance} with the parameters provided.
90 *
91 * @param jobName the name of the job
92 * @param instanceId the Id of the {@link JobInstance}
93 * @return a {@link JobInstance} with empty {@link JobParameters}
94 */
95 public static JobInstance createJobInstance(String jobName, Long instanceId) {
96 return new JobInstance(instanceId, new JobParameters(), jobName);
97 }
98
99 /**
100 * Create a {@link JobInstance} with default parameters.
101 *
102 * @return a {@link JobInstance} with name=DEFAULT_JOB_NAME,
103 * id=DEFAULT_JOB_INSTANCE_ID and empty parameters
104 */
105 public static JobInstance createJobInstance() {
106 return new JobInstance(DEFAULT_JOB_INSTANCE_ID, new JobParameters(), DEFAULT_JOB_NAME);
107 }
108
109 /**
110 * Create a {@link JobExecution} with default parameters.
111 *
112 * @return a {@link JobExecution} with id=DEFAULT_JOB_EXECUTION_ID
113 */
114 public static JobExecution createJobExecution() {
115 return createJobExecution(DEFAULT_JOB_EXECUTION_ID);
116 }
117
118 /**
119 * Create a {@link JobExecution} with the parameters provided.
120 *
121 * @param executionId the id for the {@link JobExecution}
122 * @return a {@link JobExecution} with valid {@link JobInstance}
123 */
124 public static JobExecution createJobExecution(Long executionId) {
125 return createJobExecution(DEFAULT_JOB_NAME, DEFAULT_JOB_INSTANCE_ID, executionId);
126 }
127
128 /**
129 * Create a {@link JobExecution} with the parameters provided.
130 *
131 * @param jobName the name of the job
132 * @param instanceId the id for the {@link JobInstance}
133 * @param executionId the id for the {@link JobExecution}
134 * @return a {@link JobExecution} with empty {@link JobParameters}
135 */
136 public static JobExecution createJobExecution(String jobName, Long instanceId, Long executionId) {
137 return createJobExecution(jobName, instanceId, executionId, new JobParameters());
138 }
139
140 /**
141 * Create a {@link JobExecution} with the parameters provided.
142 *
143 * @param jobName the name of the job
144 * @param instanceId the Id of the {@link JobInstance}
145 * @param executionId the id for the {@link JobExecution}
146 * @param jobParameters comma or new line separated name=value pairs
147 * @return a {@link JobExecution}
148 */
149 public static JobExecution createJobExecution(String jobName, Long instanceId, Long executionId,
150 String jobParameters) {
151 JobParameters params = new DefaultJobParametersConverter().getJobParameters(PropertiesConverter
152 .stringToProperties(jobParameters));
153 return createJobExecution(jobName, instanceId, executionId, params);
154 }
155
156 /**
157 * Create a {@link JobExecution} with the parameters provided.
158 *
159 * @param jobName the name of the job
160 * @param instanceId the Id of the {@link JobInstance}
161 * @param executionId the id for the {@link JobExecution}
162 * @param jobParameters an instance of {@link JobParameters}
163 * @return a {@link JobExecution}
164 */
165 public static JobExecution createJobExecution(String jobName, Long instanceId, Long executionId,
166 JobParameters jobParameters) {
167 return new JobExecution(createJobInstance(jobName, instanceId, jobParameters), executionId);
168 }
169
170 /**
171 * Create a {@link StepExecution} with default parameters.
172 *
173 * @return a {@link StepExecution} with stepName="step" and
174 * id=DEFAULT_STEP_EXECUTION_ID
175 */
176 public static StepExecution createStepExecution() {
177 return createStepExecution(DEFAULT_STEP_NAME, DEFAULT_STEP_EXECUTION_ID);
178 }
179
180 /**
181 * Create a {@link StepExecution} with the parameters provided.
182 *
183 * @param stepName the stepName for the {@link StepExecution}
184 * @param executionId the id for the {@link StepExecution}
185 * @return a {@link StepExecution} with a {@link JobExecution} having
186 * default properties
187 */
188 public static StepExecution createStepExecution(String stepName, Long executionId) {
189 return createStepExecution(createJobExecution(), stepName, executionId);
190 }
191
192 /**
193 * Create a {@link StepExecution} with the parameters provided.
194 *
195 * @param stepName the stepName for the {@link StepExecution}
196 * @param executionId the id for the {@link StepExecution}
197 * @return a {@link StepExecution} with the given {@link JobExecution}
198 */
199 public static StepExecution createStepExecution(JobExecution jobExecution, String stepName, Long executionId) {
200 StepExecution stepExecution = jobExecution.createStepExecution(stepName);
201 stepExecution.setId(executionId);
202 return stepExecution;
203 }
204
205 /**
206 * Create a {@link JobExecution} with the parameters provided with attached
207 * step executions.
208 *
209 * @param executionId the {@link JobExecution} id
210 * @param stepNames the names of the step executions
211 * @return a {@link JobExecution} with step executions as specified, each
212 * with a unique id
213 */
214 public static JobExecution createJobExecutionWithStepExecutions(Long executionId, Collection<String> stepNames) {
215 JobExecution jobExecution = createJobExecution(DEFAULT_JOB_NAME, DEFAULT_JOB_INSTANCE_ID, executionId);
216 Long stepExecutionId = DEFAULT_STEP_EXECUTION_ID;
217 for (String stepName : stepNames) {
218 createStepExecution(jobExecution, stepName, stepExecutionId);
219 stepExecutionId++;
220 }
221 return jobExecution;
222 }
223
224 /**
225 * Create a {@link StepExecution} and all its parent entities with default
226 * values, but using the {@link ExecutionContext} and {@link JobParameters}
227 * provided.
228 *
229 * @param jobParameters come {@link JobParameters}
230 * @param executionContext some {@link ExecutionContext}
231 *
232 * @return a {@link StepExecution} with the execution context provided
233 */
234 public static StepExecution createStepExecution(JobParameters jobParameters, ExecutionContext executionContext) {
235 StepExecution stepExecution = createStepExecution(jobParameters);
236 stepExecution.setExecutionContext(executionContext);
237 return stepExecution;
238 }
239
240 /**
241 * Create a {@link StepExecution} and all its parent entities with default
242 * values, but using the {@link JobParameters} provided.
243 *
244 * @param jobParameters some {@link JobParameters}
245 * @return a {@link StepExecution} with the job parameters provided
246 */
247 public static StepExecution createStepExecution(JobParameters jobParameters) {
248 JobExecution jobExecution = createJobExecution(DEFAULT_JOB_NAME, DEFAULT_JOB_INSTANCE_ID,
249 DEFAULT_JOB_EXECUTION_ID, jobParameters);
250 return jobExecution.createStepExecution(DEFAULT_STEP_NAME);
251 }
252
253 /**
254 * Create a {@link StepExecution} and all its parent entities with default
255 * values, but using the {@link ExecutionContext} provided.
256 *
257 * @param executionContext some {@link ExecutionContext}
258 * @return a {@link StepExecution} with the execution context provided
259 */
260 public static StepExecution createStepExecution(ExecutionContext executionContext) {
261 StepExecution stepExecution = createStepExecution();
262 stepExecution.setExecutionContext(executionContext);
263 return stepExecution;
264 }
265
266 }