diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/runtime/JobParametersFactory.java b/spring-batch-core/src/main/java/org/springframework/batch/core/runtime/JobParametersFactory.java index 2d580e4c9..9db981ad9 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/runtime/JobParametersFactory.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/runtime/JobParametersFactory.java @@ -43,4 +43,12 @@ public interface JobParametersFactory { * @return a {@link JobParameters} properties converted to the correct types. */ public JobParameters getJobParameters(Properties properties); + + /** + * The inverse operation: get a {@link Properties} instance. + * + * @param params + * @return a representation of the parameters as properties + */ + public Properties getProperties(JobParameters params); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/domain/JobParametersBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/domain/JobParametersBuilderTests.java index ad47e962e..5b494d119 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/domain/JobParametersBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/domain/JobParametersBuilderTests.java @@ -4,6 +4,7 @@ package org.springframework.batch.core.domain; import java.util.Date; +import java.util.Iterator; import junit.framework.TestCase; @@ -13,24 +14,37 @@ import junit.framework.TestCase; */ public class JobParametersBuilderTests extends TestCase { - JobParametersBuilder parametersBuilder; + JobParametersBuilder parametersBuilder = new JobParametersBuilder(); Date date = new Date(System.currentTimeMillis()); - protected void setUp() throws Exception { - super.setUp(); - - parametersBuilder = new JobParametersBuilder(); + public void testToJobRuntimeParamters(){ parametersBuilder.addDate("SCHEDULE_DATE", date); parametersBuilder.addLong("LONG", new Long(1)); parametersBuilder.addString("STRING", "string value"); - } - - public void testToJobRuntimeParamters(){ - JobParameters parameters = parametersBuilder.toJobParameters(); - assertEquals(parameters.getDate("SCHEDULE_DATE"), date); - assertEquals(parameters.getLong("LONG"), new Long(1)); - assertEquals(parameters.getString("STRING"), "string value"); + assertEquals(date, parameters.getDate("SCHEDULE_DATE")); + assertEquals(new Long(1), parameters.getLong("LONG")); + assertEquals("string value", parameters.getString("STRING")); + } + + public void testOrderedTypes(){ + parametersBuilder.addDate("SCHEDULE_DATE", date); + parametersBuilder.addLong("LONG", new Long(1)); + parametersBuilder.addString("STRING", "string value"); + Iterator parameters = parametersBuilder.toJobParameters().getParameters().keySet().iterator(); + assertEquals("STRING", parameters.next()); + assertEquals("LONG", parameters.next()); + assertEquals("SCHEDULE_DATE", parameters.next()); + } + + public void testOrderedStrings(){ + parametersBuilder.addString("foo", "value foo"); + parametersBuilder.addString("bar", "value bar"); + parametersBuilder.addString("spam", "value spam"); + Iterator parameters = parametersBuilder.toJobParameters().getParameters().keySet().iterator(); + assertEquals("foo", parameters.next()); + assertEquals("bar", parameters.next()); + assertEquals("spam", parameters.next()); } } diff --git a/spring-batch-execution/src/test/java/org/springframework/batch/execution/bootstrap/support/DefaultJobParametersFactoryTests.java b/spring-batch-execution/src/test/java/org/springframework/batch/execution/bootstrap/support/DefaultJobParametersFactoryTests.java new file mode 100644 index 000000000..81721ba47 --- /dev/null +++ b/spring-batch-execution/src/test/java/org/springframework/batch/execution/bootstrap/support/DefaultJobParametersFactoryTests.java @@ -0,0 +1,72 @@ +/* + * Copyright 2006-2008 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.batch.execution.bootstrap.support; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import junit.framework.TestCase; + +import org.springframework.batch.core.domain.JobParameters; +import org.springframework.batch.core.domain.JobParametersBuilder; +import org.springframework.util.StringUtils; + +/** + * @author Dave Syer + * + */ +public class DefaultJobParametersFactoryTests extends TestCase { + + DefaultJobParametersFactory factory = new DefaultJobParametersFactory(); + + DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); + + public void testGetParameters() throws Exception { + + String jobKey = "job.key=myKey"; + String scheduleDate = "schedule.date(date)=2008/01/23"; + String vendorId = "vendor.id(long)=33243243"; + + String[] args = new String[] { jobKey, scheduleDate, vendorId }; + + JobParameters props = factory.getJobParameters(StringUtils.splitArrayElementsIntoProperties(args, "=")); + assertNotNull(props); + assertEquals("myKey", props.getString("job.key")); + assertEquals(new Long(33243243L), props.getLong("vendor.id")); + Date date = dateFormat.parse("01/23/2008"); + assertEquals(date, props.getDate("schedule.date")); + } + + public void testGetProperties() throws Exception { + + JobParameters parameters = new JobParametersBuilder().addDate("schedule.date", dateFormat.parse("01/23/2008")) + .addString("job.key", "myKey").addLong("vendor.id", new Long(33243243)).toJobParameters(); + + Properties props = factory.getProperties(parameters); + assertNotNull(props); + assertEquals("myKey", props.getProperty("job.key")); + assertEquals("33243243", props.getProperty("vendor.id(long)")); + assertEquals("2008/01/23", props.getProperty("schedule.date(date)")); + } + + public void testEmptyArgs() { + + JobParameters props = factory.getJobParameters(new Properties()); + assertTrue(props.getParameters().isEmpty()); + } +}