Skip to content

Commit 6ca1657

Browse files
committed
Add support for Java 8 Date/Time APIs as job parameters
The support to use any type as a job parameter was added in #3960. This commit introduces convenience methods where appropriate to use Java 8 Date/Time APIs as job parameters. Resolves #1035
1 parent fd9dca3 commit 6ca1657

File tree

2 files changed

+180
-0
lines changed

2 files changed

+180
-0
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package org.springframework.batch.core;
1818

1919
import java.io.Serializable;
20+
import java.time.LocalDate;
21+
import java.time.LocalDateTime;
22+
import java.time.LocalTime;
2023
import java.util.ArrayList;
2124
import java.util.Collections;
2225
import java.util.Date;
@@ -208,6 +211,111 @@ public Date getDate(String key, @Nullable Date defaultValue) {
208211
}
209212
}
210213

214+
/**
215+
* Typesafe getter for the {@link LocalDate} represented by the provided key.
216+
* @param key The key for which to get a value.
217+
* @return the {@link LocalDate} value or {@code null} if the key is absent.
218+
*/
219+
@Nullable
220+
public LocalDate getLocalDate(String key) {
221+
if (!parameters.containsKey(key)) {
222+
return null;
223+
}
224+
JobParameter<?> jobParameter = parameters.get(key);
225+
if (!jobParameter.getType().equals(LocalDate.class)) {
226+
throw new IllegalArgumentException("Key " + key + " is not of type java.time.LocalDate");
227+
}
228+
return (LocalDate) jobParameter.getValue();
229+
}
230+
231+
/**
232+
* Typesafe getter for the {@link LocalDate} represented by the provided key. If the
233+
* key does not exist, the default value is returned.
234+
* @param key The key for which to return the value.
235+
* @param defaultValue The default value to return if the value does not exist.
236+
* @return the parameter represented by the provided key or, if that is missing, the
237+
* default value.
238+
*/
239+
@Nullable
240+
public LocalDate getLocalDate(String key, @Nullable LocalDate defaultValue) {
241+
if (parameters.containsKey(key)) {
242+
return getLocalDate(key);
243+
}
244+
else {
245+
return defaultValue;
246+
}
247+
}
248+
249+
/**
250+
* Typesafe getter for the {@link LocalTime} represented by the provided key.
251+
* @param key The key for which to get a value.
252+
* @return the {@link LocalTime} value or {@code null} if the key is absent.
253+
*/
254+
@Nullable
255+
public LocalTime getLocalTime(String key) {
256+
if (!parameters.containsKey(key)) {
257+
return null;
258+
}
259+
JobParameter<?> jobParameter = parameters.get(key);
260+
if (!jobParameter.getType().equals(LocalTime.class)) {
261+
throw new IllegalArgumentException("Key " + key + " is not of type java.time.LocalTime");
262+
}
263+
return (LocalTime) jobParameter.getValue();
264+
}
265+
266+
/**
267+
* Typesafe getter for the {@link LocalTime} represented by the provided key. If the
268+
* key does not exist, the default value is returned.
269+
* @param key The key for which to return the value.
270+
* @param defaultValue The default value to return if the value does not exist.
271+
* @return the parameter represented by the provided key or, if that is missing, the
272+
* default value.
273+
*/
274+
@Nullable
275+
public LocalTime getLocalTime(String key, @Nullable LocalTime defaultValue) {
276+
if (parameters.containsKey(key)) {
277+
return getLocalTime(key);
278+
}
279+
else {
280+
return defaultValue;
281+
}
282+
}
283+
284+
/**
285+
* Typesafe getter for the {@link LocalDateTime} represented by the provided key.
286+
* @param key The key for which to get a value.
287+
* @return the {@link LocalDateTime} value or {@code null} if the key is absent.
288+
*/
289+
@Nullable
290+
public LocalDateTime getLocalDateTime(String key) {
291+
if (!parameters.containsKey(key)) {
292+
return null;
293+
}
294+
JobParameter<?> jobParameter = parameters.get(key);
295+
if (!jobParameter.getType().equals(LocalDateTime.class)) {
296+
throw new IllegalArgumentException("Key " + key + " is not of type java.time.LocalDateTime");
297+
}
298+
return (LocalDateTime) jobParameter.getValue();
299+
}
300+
301+
/**
302+
* Typesafe getter for the {@link LocalDateTime} represented by the provided key. If
303+
* the key does not exist, the default value is returned.
304+
* @param key The key for which to return the value.
305+
* @param defaultValue The default value to return if the value does not exist.
306+
* @return the parameter represented by the provided key or, if that is missing, the
307+
* default value.
308+
*/
309+
@Nullable
310+
public LocalDateTime getLocalDateTime(String key, @Nullable LocalDateTime defaultValue) {
311+
if (parameters.containsKey(key)) {
312+
return getLocalDateTime(key);
313+
}
314+
else {
315+
return defaultValue;
316+
}
317+
}
318+
211319
@Nullable
212320
public JobParameter<?> getParameter(String key) {
213321
Assert.notNull(key, "key must not be null");

spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.springframework.batch.core;
1818

19+
import java.time.LocalDate;
20+
import java.time.LocalDateTime;
21+
import java.time.LocalTime;
1922
import java.util.Date;
2023
import java.util.HashMap;
2124
import java.util.LinkedHashMap;
@@ -131,6 +134,75 @@ public JobParametersBuilder addDate(String key, @NonNull Date parameter, boolean
131134
return this;
132135
}
133136

137+
/**
138+
* Add a new identifying {@link LocalDate} parameter for the given key.
139+
* @param key The parameter name.
140+
* @param parameter The runtime parameter. Must not be {@code null}.
141+
* @return a reference to this object.
142+
*/
143+
public JobParametersBuilder addLocalDate(String key, @NonNull LocalDate parameter) {
144+
return addLocalDate(key, parameter, true);
145+
}
146+
147+
/**
148+
* Add a new {@link LocalDate} parameter for the given key.
149+
* @param key The parameter name.
150+
* @param parameter The runtime parameter. Must not be {@code null}.
151+
* @param identifying Indicates if the parameter is used as part of identifying a job
152+
* instance
153+
* @return a reference to this object.
154+
*/
155+
public JobParametersBuilder addLocalDate(String key, @NonNull LocalDate parameter, boolean identifying) {
156+
this.parameterMap.put(key, new JobParameter(parameter, LocalDate.class, identifying));
157+
return this;
158+
}
159+
160+
/**
161+
* Add a new identifying {@link LocalTime} parameter for the given key.
162+
* @param key The parameter name.
163+
* @param parameter The runtime parameter. Must not be {@code null}.
164+
* @return a reference to this object.
165+
*/
166+
public JobParametersBuilder addLocalTime(String key, @NonNull LocalTime parameter) {
167+
return addLocalTime(key, parameter, true);
168+
}
169+
170+
/**
171+
* Add a new {@link LocalTime} parameter for the given key.
172+
* @param key The parameter name.
173+
* @param parameter The runtime parameter. Must not be {@code null}.
174+
* @param identifying Indicates if the parameter is used as part of identifying a job
175+
* instance
176+
* @return a reference to this object.
177+
*/
178+
public JobParametersBuilder addLocalTime(String key, @NonNull LocalTime parameter, boolean identifying) {
179+
this.parameterMap.put(key, new JobParameter(parameter, LocalTime.class, identifying));
180+
return this;
181+
}
182+
183+
/**
184+
* Add a new identifying {@link LocalDateTime} parameter for the given key.
185+
* @param key The parameter name.
186+
* @param parameter The runtime parameter. Must not be {@code null}.
187+
* @return a reference to this object.
188+
*/
189+
public JobParametersBuilder addLocalDateTime(String key, @NonNull LocalDateTime parameter) {
190+
return addLocalDateTime(key, parameter, true);
191+
}
192+
193+
/**
194+
* Add a new {@link LocalDateTime} parameter for the given key.
195+
* @param key The parameter name.
196+
* @param parameter The runtime parameter. Must not be {@code null}.
197+
* @param identifying Indicates if the parameter is used as part of identifying a job
198+
* instance
199+
* @return a reference to this object.
200+
*/
201+
public JobParametersBuilder addLocalDateTime(String key, @NonNull LocalDateTime parameter, boolean identifying) {
202+
this.parameterMap.put(key, new JobParameter(parameter, LocalDateTime.class, identifying));
203+
return this;
204+
}
205+
134206
/**
135207
* Add a new identifying {@link Long} parameter for the given key.
136208
* @param key The parameter accessor.

0 commit comments

Comments
 (0)