1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.springframework.batch.core.launch.support;
17
18 import java.text.DateFormat;
19 import java.text.ParseException;
20 import java.text.SimpleDateFormat;
21 import java.util.Date;
22 import java.util.Map;
23 import java.util.Map.Entry;
24 import java.util.Properties;
25
26 import org.springframework.batch.core.JobParameter;
27 import org.springframework.batch.core.JobParameters;
28 import org.springframework.batch.core.JobParametersBuilder;
29 import org.springframework.batch.core.converter.JobParametersConverter;
30
31
32
33
34
35 public class ScheduledJobParametersFactory implements JobParametersConverter {
36
37 public static final String SCHEDULE_DATE_KEY = "schedule.date";
38
39 private DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
40
41
42
43
44
45
46 @Override
47 public JobParameters getJobParameters(Properties props) {
48
49 if (props == null || props.isEmpty()) {
50 return new JobParameters();
51 }
52
53 JobParametersBuilder propertiesBuilder = new JobParametersBuilder();
54
55 for (Entry<Object, Object> entry : props.entrySet()) {
56 if (entry.getKey().equals(SCHEDULE_DATE_KEY)) {
57 Date scheduleDate;
58 try {
59 scheduleDate = dateFormat.parse(entry.getValue().toString());
60 } catch (ParseException ex) {
61 throw new IllegalArgumentException("Date format is invalid: [" + entry.getValue() + "]");
62 }
63 propertiesBuilder.addDate(entry.getKey().toString(), scheduleDate);
64 } else {
65 propertiesBuilder.addString(entry.getKey().toString(), entry.getValue().toString());
66 }
67 }
68
69 return propertiesBuilder.toJobParameters();
70 }
71
72
73
74
75
76
77 @Override
78 public Properties getProperties(JobParameters params) {
79
80 if (params == null || params.isEmpty()) {
81 return new Properties();
82 }
83
84 Map<String, JobParameter> parameters = params.getParameters();
85 Properties result = new Properties();
86 for (Entry<String, JobParameter> entry : parameters.entrySet()) {
87 String key = entry.getKey();
88 JobParameter jobParameter = entry.getValue();
89 if (key.equals(SCHEDULE_DATE_KEY)) {
90 result.setProperty(key, dateFormat.format(jobParameter.getValue()));
91 } else {
92 result.setProperty(key, "" + jobParameter.getValue());
93 }
94 }
95 return result;
96 }
97
98
99
100
101
102
103 public void setDateFormat(DateFormat dateFormat) {
104 this.dateFormat = dateFormat;
105 }
106 }