summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAngus <angus@rqsd.com>2011-10-26 00:56:51 +0100
committerAngus <angus@rqsd.com>2011-10-26 00:56:51 +0100
commitf923ee57617c8690d293909c53a4e109a8c2ba26 (patch)
tree61ef98c3ae7d2aef382d1e1798b9912fdf4ff33e /src
parent041bdac9067d4ce9c936ff1c0ae3856f2e240f15 (diff)
downloadplatform_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')
-rw-r--r--src/main/java/com/beust/jcommander/converters/ISO8601DateConverter.java49
-rw-r--r--src/main/java/com/beust/jcommander/internal/DefaultConverterFactory.java3
-rw-r--r--src/test/java/com/beust/jcommander/JCommanderTest.java10
-rw-r--r--src/test/java/com/beust/jcommander/args/Args1.java4
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;
}