diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java
index 5a7231baa..2b93d5461 100644
--- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java
+++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2013 the original author or authors.
+ * Copyright 2006-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,8 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
+import org.springframework.lang.Nullable;
+
/**
* Value object representing runtime parameters to a batch job. Because the
* parameters have no individual meaning outside of the JobParameters they are
@@ -35,6 +37,7 @@ import java.util.Properties;
*
* @author Lucas Ward
* @author Michael Minella
+ * @author Mahmoud Ben Hassine
* @since 1.0
*/
@SuppressWarnings("serial")
@@ -54,14 +57,15 @@ public class JobParameters implements Serializable {
* Typesafe Getter for the Long represented by the provided key.
*
* @param key The key to get a value for
- * @return The Long value
+ * @return The Long value or {@code null} if the key is absent
*/
+ @Nullable
public Long getLong(String key){
if (!parameters.containsKey(key)) {
- return 0L;
+ return null;
}
Object value = parameters.get(key).getValue();
- return value==null ? 0L : ((Long)value).longValue();
+ return value==null ? null : ((Long)value).longValue();
}
/**
@@ -72,7 +76,10 @@ public class JobParameters implements Serializable {
* @param defaultValue to return if the value doesn't exist
* @return the parameter represented by the provided key, defaultValue
* otherwise.
+ * @deprecated Use {@link JobParameters#getLong(java.lang.String, java.lang.Long)}
+ * instead. This method will be removed in a future release.
*/
+ @Deprecated
public Long getLong(String key, long defaultValue){
if(parameters.containsKey(key)){
return getLong(key);
@@ -82,12 +89,32 @@ public class JobParameters implements Serializable {
}
}
+ /**
+ * Typesafe Getter for the Long represented by the provided key. If the
+ * key does not exist, the default value will be returned.
+ *
+ * @param key to return the value for
+ * @param defaultValue to return if the value doesn't exist
+ * @return the parameter represented by the provided key, defaultValue
+ * otherwise.
+ */
+ @Nullable
+ public Long getLong(String key, @Nullable Long defaultValue){
+ if(parameters.containsKey(key)){
+ return getLong(key);
+ }
+ else{
+ return defaultValue;
+ }
+ }
+
/**
* Typesafe Getter for the String represented by the provided key.
*
* @param key The key to get a value for
- * @return The String value
+ * @return The String value or {@code null} if the key is absent
*/
+ @Nullable
public String getString(String key){
JobParameter value = parameters.get(key);
return value==null ? null : value.toString();
@@ -102,7 +129,8 @@ public class JobParameters implements Serializable {
* @return the parameter represented by the provided key, defaultValue
* otherwise.
*/
- public String getString(String key, String defaultValue){
+ @Nullable
+ public String getString(String key, @Nullable String defaultValue){
if(parameters.containsKey(key)){
return getString(key);
}
@@ -115,14 +143,15 @@ public class JobParameters implements Serializable {
* Typesafe Getter for the Long represented by the provided key.
*
* @param key The key to get a value for
- * @return The Double value
+ * @return The Double value or {@code null} if the key is absent
*/
+ @Nullable
public Double getDouble(String key){
if (!parameters.containsKey(key)) {
- return 0.0;
+ return null;
}
Double value = (Double)parameters.get(key).getValue();
- return value==null ? 0.0 : value.doubleValue();
+ return value==null ? null : value.doubleValue();
}
/**
@@ -133,7 +162,10 @@ public class JobParameters implements Serializable {
* @param defaultValue to return if the value doesn't exist
* @return the parameter represented by the provided key, defaultValue
* otherwise.
+ * @deprecated Use {@link JobParameters#getDouble(java.lang.String, java.lang.Double)}
+ * instead. This method will be removed in a future release.
*/
+ @Deprecated
public Double getDouble(String key, double defaultValue){
if(parameters.containsKey(key)){
return getDouble(key);
@@ -143,12 +175,33 @@ public class JobParameters implements Serializable {
}
}
+ /**
+ * Typesafe Getter for the Double represented by the provided key. If the
+ * key does not exist, the default value will be returned.
+ *
+ * @param key to return the value for
+ * @param defaultValue to return if the value doesn't exist
+ * @return the parameter represented by the provided key, defaultValue
+ * otherwise.
+ */
+ @Nullable
+ public Double getDouble(String key, @Nullable Double defaultValue){
+ if(parameters.containsKey(key)){
+ return getDouble(key);
+ }
+ else{
+ return defaultValue;
+ }
+ }
+
/**
* Typesafe Getter for the Date represented by the provided key.
*
* @param key The key to get a value for
- * @return The java.util.Date value
+ * @return The java.util.Date value or {@code null} if the key
+ * is absent
*/
+ @Nullable
public Date getDate(String key){
return this.getDate(key,null);
}
@@ -162,7 +215,8 @@ public class JobParameters implements Serializable {
* @return the parameter represented by the provided key, defaultValue
* otherwise.
*/
- public Date getDate(String key, Date defaultValue){
+ @Nullable
+ public Date getDate(String key, @Nullable Date defaultValue){
if(parameters.containsKey(key)){
return (Date)parameters.get(key).getValue();
}
diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java
index 2da832c0b..548a364f4 100644
--- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java
+++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java
@@ -33,6 +33,7 @@ import org.springframework.batch.core.launch.support.RunIdIncrementer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -131,10 +132,10 @@ public class JobParametersBuilderTests {
this.parametersBuilder.addDouble("DOUBLE", null);
JobParameters parameters = this.parametersBuilder.toJobParameters();
- assertEquals(null, parameters.getDate("SCHEDULE_DATE"));
- assertEquals(0L, parameters.getLong("LONG").longValue());
- assertEquals(null, parameters.getString("STRING"));
- assertEquals(0, parameters.getLong("DOUBLE").doubleValue(), 1e-15);
+ assertNull(parameters.getDate("SCHEDULE_DATE"));
+ assertNull(parameters.getLong("LONG"));
+ assertNull(parameters.getString("STRING"));
+ assertNull(parameters.getLong("DOUBLE"));
}
@Test
diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java
index 1b7ff2715..973a139bf 100644
--- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java
+++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2014 the original author or authors.
+ * Copyright 2008-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@ import org.springframework.util.SerializationUtils;
* @author Lucas Ward
* @author Dave Syer
* @author Michael Minella
+ * @author Mahmoud Ben Hassine
*
*/
public class JobParametersTests {
@@ -74,7 +75,7 @@ public class JobParametersTests {
@Test
public void testGetNullString() {
parameters = new JobParameters(Collections.singletonMap("string.key1", new JobParameter((String) null, true)));
- assertEquals(null, parameters.getDate("string.key1"));
+ assertNull(parameters.getDate("string.key1"));
}
@Test
@@ -98,23 +99,23 @@ public class JobParametersTests {
@Test
public void testGetNullDate() {
parameters = new JobParameters(Collections.singletonMap("date.key1", new JobParameter((Date)null, true)));
- assertEquals(null, parameters.getDate("date.key1"));
+ assertNull(parameters.getDate("date.key1"));
}
@Test
public void testGetEmptyLong() {
parameters = new JobParameters(Collections.singletonMap("long1", new JobParameter((Long)null, true)));
- assertEquals(0L, parameters.getLong("long1").longValue());
+ assertNull(parameters.getLong("long1"));
}
@Test
public void testGetMissingLong() {
- assertEquals(0L, parameters.getLong("missing.long1").longValue());
+ assertNull(parameters.getLong("missing.long1"));
}
@Test
public void testGetMissingDouble() {
- assertEquals(0.0, parameters.getDouble("missing.double1"), 0.0001);
+ assertNull(parameters.getDouble("missing.double1"));
}
@Test
@@ -209,8 +210,8 @@ public class JobParametersTests {
}
@Test
- public void testLongReturns0WhenKeyDoesntExit(){
- assertEquals(0L,new JobParameters().getLong("keythatdoesntexist").longValue());
+ public void testLongReturnsNullWhenKeyDoesntExit(){
+ assertNull(new JobParameters().getLong("keythatdoesntexist"));
}
@Test
@@ -219,8 +220,8 @@ public class JobParametersTests {
}
@Test
- public void testDoubleReturns0WhenKeyDoesntExit(){
- assertEquals(0.0,new JobParameters().getLong("keythatdoesntexist"), 0.0001);
+ public void testDoubleReturnsNullWhenKeyDoesntExit(){
+ assertNull(new JobParameters().getDouble("keythatdoesntexist"));
}
@Test