From a0cb1fa8434e6385fb115951bf74ea8c78a6fd07 Mon Sep 17 00:00:00 2001 From: George Bateman Date: Mon, 25 Sep 2017 12:08:18 +0100 Subject: [PATCH] Reverse dependancy of DateUtils on Touch Also add test --- .../org/apache/tools/ant/taskdefs/Touch.java | 26 ++++----------- .../org/apache/tools/ant/util/DateUtils.java | 32 ++++++++++++++++--- src/tests/antunit/taskdefs/zip-test.xml | 20 ++++++++++++ 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Touch.java b/src/main/org/apache/tools/ant/taskdefs/Touch.java index c6d79b7bd..5b9722bdd 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Touch.java +++ b/src/main/org/apache/tools/ant/taskdefs/Touch.java @@ -39,6 +39,7 @@ import org.apache.tools.ant.types.resources.FileProvider; import org.apache.tools.ant.types.resources.FileResource; import org.apache.tools.ant.types.resources.Touchable; import org.apache.tools.ant.types.resources.Union; +import org.apache.tools.ant.util.DateUtils; import org.apache.tools.ant.util.FileNameMapper; import org.apache.tools.ant.util.FileUtils; @@ -59,31 +60,18 @@ public class Touch extends Task { DateFormat getFallbackFormat(); } + /** + * Provides access to DateUtils.EN_US_DATE_FORMAT_MIN (primary) and + * DateUtils.EN_US_DATE_FORMAT_SEC (fallback). + */ public static final DateFormatFactory DEFAULT_DF_FACTORY = new DateFormatFactory() { - private ThreadLocal primary = - new ThreadLocal() { - @Override - protected DateFormat initialValue() { - return new SimpleDateFormat("MM/dd/yyyy hh:mm a", - Locale.US); - } - }; - private ThreadLocal fallback = - new ThreadLocal() { - @Override - protected DateFormat initialValue() { - return new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", - Locale.US); - } - }; - public DateFormat getPrimaryFormat() { - return primary.get(); + return DateUtils.EN_US_DATE_FORMAT_MIN.get(); } public DateFormat getFallbackFormat() { - return fallback.get(); + return DateUtils.EN_US_DATE_FORMAT_SEC.get(); } }; private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); diff --git a/src/main/org/apache/tools/ant/util/DateUtils.java b/src/main/org/apache/tools/ant/util/DateUtils.java index 37874eed4..992c3fc5d 100644 --- a/src/main/org/apache/tools/ant/util/DateUtils.java +++ b/src/main/org/apache/tools/ant/util/DateUtils.java @@ -29,8 +29,6 @@ import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.tools.ant.taskdefs.Touch; - /** * Helper methods to deal with date/time formatting with a specific * defined format (ISO8601) @@ -93,6 +91,32 @@ public final class DateUtils { private static final ChoiceFormat SECONDS_FORMAT = new ChoiceFormat(LIMITS, SECONDS_PART); + /** + * Provides a thread-local US-style date format. Exactly as used by + * {@code }, to minute precision: + * {@code SimpleDateFormat("MM/dd/yyyy hh:mm a", Locale.US)} + */ + public static final ThreadLocal EN_US_DATE_FORMAT_MIN = + new ThreadLocal() { + @Override + protected DateFormat initialValue() { + return new SimpleDateFormat("MM/dd/yyyy hh:mm a", Locale.US); + } + }; + + /** + * Provides a thread-local US-style date format. Exactly as used by + * {@code }, to second precision: + * {@code SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US)} + */ + public static final ThreadLocal EN_US_DATE_FORMAT_SEC = + new ThreadLocal() { + @Override + protected DateFormat initialValue() { + return new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US); + } + }; + static { MINUTE_SECONDS.setFormat(0, MINUTES_FORMAT); MINUTE_SECONDS.setFormat(1, SECONDS_FORMAT); @@ -332,11 +356,11 @@ public final class DateUtils { } catch (NumberFormatException nfe) {} try { - return Touch.DEFAULT_DF_FACTORY.getPrimaryFormat().parse(dateStr); + return EN_US_DATE_FORMAT_MIN.get().parse(dateStr); } catch (ParseException pe) {} try { - return Touch.DEFAULT_DF_FACTORY.getFallbackFormat().parse(dateStr); + return EN_US_DATE_FORMAT_SEC.get().parse(dateStr); } catch (ParseException pe) {} Matcher m = iso8601normalizer.matcher(dateStr); diff --git a/src/tests/antunit/taskdefs/zip-test.xml b/src/tests/antunit/taskdefs/zip-test.xml index 6a054f13c..c2dfbe34b 100644 --- a/src/tests/antunit/taskdefs/zip-test.xml +++ b/src/tests/antunit/taskdefs/zip-test.xml @@ -182,4 +182,24 @@ + + + + + + + + + + + + + + + + + + + +