diff options
author | Angus <angus@rqsd.com> | 2011-10-26 00:56:51 +0100 |
---|---|---|
committer | Angus <angus@rqsd.com> | 2011-10-26 00:56:51 +0100 |
commit | f923ee57617c8690d293909c53a4e109a8c2ba26 (patch) | |
tree | 61ef98c3ae7d2aef382d1e1798b9912fdf4ff33e /src | |
parent | 041bdac9067d4ce9c936ff1c0ae3856f2e240f15 (diff) | |
download | platform_external_jcommander-f923ee57617c8690d293909c53a4e109a8c2ba26.tar.gz platform_external_jcommander-f923ee57617c8690d293909c53a4e109a8c2ba26.tar.bz2 platform_external_jcommander-f923ee57617c8690d293909c53a4e109a8c2ba26.zip |
Added support for ISO 8601 Date arguments and related test.
We currently only support the format yyyy-MM-dd (as it is all I need
right now). In future this should be modified to support all ISO 8601
formats such as yyyy-MM-dd'T'HH:mm:ssZ.
Diffstat (limited to 'src')
4 files changed, 63 insertions, 3 deletions
diff --git a/src/main/java/com/beust/jcommander/converters/ISO8601DateConverter.java b/src/main/java/com/beust/jcommander/converters/ISO8601DateConverter.java new file mode 100644 index 0000000..303f410 --- /dev/null +++ b/src/main/java/com/beust/jcommander/converters/ISO8601DateConverter.java @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2010 the original author or authors. + * See the notice.md file distributed with this work for additional + * information regarding copyright ownership. + * + * 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 com.beust.jcommander.converters; + +import com.beust.jcommander.ParameterException; +import com.beust.jcommander.converters.BaseConverter; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Converts a String to a Date. + * TODO Modify to work with all valid ISO 8601 date formats (currently only works with yyyy-MM-dd). + * + * @author angus + */ +public class ISO8601DateConverter extends BaseConverter<Date> { + + private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + + public ISO8601DateConverter(String optionName) { + super(optionName); + } + + @Override + public Date convert(String value) { + try { + return DATE_FORMAT.parse(value); + } catch (ParseException pe) { + throw new ParameterException(getErrorString(value, String.format("an ISO-8601 formatted date (%s)", DATE_FORMAT.toPattern()))); + } + } +} diff --git a/src/main/java/com/beust/jcommander/internal/DefaultConverterFactory.java b/src/main/java/com/beust/jcommander/internal/DefaultConverterFactory.java index e622722..fed5783 100644 --- a/src/main/java/com/beust/jcommander/internal/DefaultConverterFactory.java +++ b/src/main/java/com/beust/jcommander/internal/DefaultConverterFactory.java @@ -28,9 +28,11 @@ import com.beust.jcommander.converters.FloatConverter; import com.beust.jcommander.converters.DoubleConverter; import com.beust.jcommander.converters.StringConverter; import com.beust.jcommander.converters.BigDecimalConverter; +import com.beust.jcommander.converters.ISO8601DateConverter; import java.io.File; import java.math.BigDecimal; +import java.util.Date; import java.util.Map; public class DefaultConverterFactory implements IStringConverterFactory { @@ -54,6 +56,7 @@ public class DefaultConverterFactory implements IStringConverterFactory { m_classConverters.put(boolean.class, BooleanConverter.class); m_classConverters.put(File.class, FileConverter.class); m_classConverters.put(BigDecimal.class, BigDecimalConverter.class); + m_classConverters.put(Date.class, ISO8601DateConverter.class); } public Class<? extends IStringConverter<?>> getConverter(Class forType) { diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java index 1dd3a25..3b5e410 100644 --- a/src/test/java/com/beust/jcommander/JCommanderTest.java +++ b/src/test/java/com/beust/jcommander/JCommanderTest.java @@ -59,8 +59,11 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.Comparator; import java.util.Iterator; import java.util.List; @@ -71,10 +74,10 @@ import java.util.TreeSet; @Test public class JCommanderTest { - public void simpleArgs() { + public void simpleArgs() throws ParseException { Args1 args = new Args1(); String[] argv = { "-debug", "-log", "2", "-float", "1.2", "-double", "1.3", "-bigdecimal", "1.4", - "-groups", "unit", "a", "b", "c" }; + "-date", "2011-10-26", "-groups", "unit", "a", "b", "c" }; new JCommander(args, argv); Assert.assertTrue(args.debug); @@ -84,6 +87,7 @@ public class JCommanderTest { Assert.assertEquals(args.floa, 1.2f, 0.1f); Assert.assertEquals(args.doub, 1.3f, 0.1f); Assert.assertEquals(args.bigd, new BigDecimal("1.4")); + Assert.assertEquals(args.date, new SimpleDateFormat("yyyy-MM-dd").parse("2011-10-26")); } /** @@ -94,7 +98,7 @@ public class JCommanderTest { Args1 args = new Args1(); String[] argv = { "-log", "2" }; JCommander jc = new JCommander(args, argv); - Assert.assertEquals(jc.getParameters().size(), 7); + Assert.assertEquals(jc.getParameters().size(), 8); } /** diff --git a/src/test/java/com/beust/jcommander/args/Args1.java b/src/test/java/com/beust/jcommander/args/Args1.java index 9e55fb5..093abec 100644 --- a/src/test/java/com/beust/jcommander/args/Args1.java +++ b/src/test/java/com/beust/jcommander/args/Args1.java @@ -20,6 +20,7 @@ package com.beust.jcommander.args; import java.math.BigDecimal; import java.util.List; +import java.util.Date; import org.testng.collections.Lists; @@ -49,4 +50,7 @@ public class Args1 { @Parameter(names = "-bigdecimal", description = "A BigDecimal number") public BigDecimal bigd; + + @Parameter(names = "-date", description = "An ISO 8601 formatted date.") + public Date date; } |