This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git

commit 5282d7d0cc5a0993da02eb35cfcfdd94bec8c7ee
Author: Gary Gregory <gardgreg...@gmail.com>
AuthorDate: Sun Jun 19 08:58:28 2022 -0400

    Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime).
    
    Add FileUtils.isFileNewer(File, OffsetDateTime).
    Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime).
    Add FileUtils.isFileOlder(File, OffsetDateTime).
---
 src/changes/changes.xml                            |  8 ++-
 src/main/java/org/apache/commons/io/FileUtils.java | 69 +++++++++++++++++++++-
 .../java/org/apache/commons/io/FileUtilsTest.java  | 27 +++++++--
 3 files changed, 96 insertions(+), 8 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 9d21f5a2..efc3fe4a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -372,7 +372,13 @@ The <action> type attribute can be add,update,fix,remove.
         Add PathUtils.touch(Path).
       </action>
       <action dev="ggregory" type="add" due-to="Gary Gregory">
-        Add Add FileSystem.getIllegalFileNameCodePoints().
+        Add FileSystem.getIllegalFileNameCodePoints().
+      </action>
+      <action dev="ggregory" type="add" due-to="Isira Seneviratne, Gary 
Gregory">
+        Add FileUtils.isFileNewer(File, ChronoLocalDate, OffsetTime).
+        Add FileUtils.isFileNewer(File, OffsetDateTime).
+        Add FileUtils.isFileOlder(File, ChronoLocalDate, OffsetTime).
+        Add FileUtils.isFileOlder(File, OffsetDateTime).
       </action>
       <!-- UPDATE -->
       <action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
diff --git a/src/main/java/org/apache/commons/io/FileUtils.java 
b/src/main/java/org/apache/commons/io/FileUtils.java
index 193a983f..aa747983 100644
--- a/src/main/java/org/apache/commons/io/FileUtils.java
+++ b/src/main/java/org/apache/commons/io/FileUtils.java
@@ -46,6 +46,7 @@ import java.nio.file.attribute.FileTime;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalTime;
+import java.time.OffsetDateTime;
 import java.time.OffsetTime;
 import java.time.ZoneId;
 import java.time.chrono.ChronoLocalDate;
@@ -1497,7 +1498,7 @@ public class FileUtils {
 
     /**
      * Tests whether the specified {@link File} is a directory or not. 
Implemented as a
-     * null-safe delegate to {@code Files.isDirectory(Path path, LinkOption... 
options)}.
+     * null-safe delegate to {@link Files#isDirectory(Path path, LinkOption... 
options)}.
      *
      * @param   file the path to the file.
      * @param   options options indicating how symbolic links are handled
@@ -1571,6 +1572,24 @@ public class FileUtils {
         return isFileNewer(file, chronoLocalDate.atTime(localTime));
     }
 
+    /**
+     * Tests if the specified {@link File} is newer than the specified {@link 
ChronoLocalDate} at the specified
+     * {@link OffsetTime}.
+     *
+     * @param file the {@link File} of which the modification date must be 
compared
+     * @param chronoLocalDate the date reference
+     * @param offsetTime the time reference
+     * @return true if the {@link File} exists and has been modified after the 
given {@link ChronoLocalDate} at the given
+     *         {@link OffsetTime}.
+     * @throws NullPointerException if the file, local date or zone ID is 
{@code null}
+     * @since 2.12.0
+     */
+    public static boolean isFileNewer(final File file, final ChronoLocalDate 
chronoLocalDate, final OffsetTime offsetTime) {
+        Objects.requireNonNull(chronoLocalDate, "chronoLocalDate");
+        Objects.requireNonNull(offsetTime, "offsetTime");
+        return isFileNewer(file, 
chronoLocalDate.atTime(offsetTime.toLocalTime()));
+    }
+
     /**
      * Tests if the specified {@link File} is newer than the specified {@link 
ChronoLocalDateTime}
      * at the system-default time zone.
@@ -1697,6 +1716,20 @@ public class FileUtils {
         return UncheckedIO.get(() -> PathUtils.isNewer(file.toPath(), 
timeMillis));
     }
 
+    /**
+     * Tests if the specified {@link File} is newer than the specified {@link 
OffsetDateTime}.
+     *
+     * @param file the {@link File} of which the modification date must be 
compared
+     * @param offsetDateTime the date reference
+     * @return true if the {@link File} exists and has been modified before 
the given {@link OffsetDateTime}.
+     * @throws NullPointerException if the file or zoned date time is {@code 
null}
+     * @since 2.12.0
+     */
+    public static boolean isFileNewer(final File file, final OffsetDateTime 
offsetDateTime) {
+        Objects.requireNonNull(offsetDateTime, "offsetDateTime");
+        return isFileNewer(file, offsetDateTime.toInstant());
+    }
+
     /**
      * Tests if the specified {@link File} is older than the specified {@link 
ChronoLocalDate}
      * at the current time.
@@ -1745,6 +1778,24 @@ public class FileUtils {
         return isFileOlder(file, chronoLocalDate.atTime(localTime));
     }
 
+    /**
+     * Tests if the specified {@link File} is older than the specified {@link 
ChronoLocalDate} at the specified
+     * {@link OffsetTime}.
+     *
+     * @param file the {@link File} of which the modification date must be 
compared
+     * @param chronoLocalDate the date reference
+     * @param offsetTime the time reference
+     * @return true if the {@link File} exists and has been modified after the 
given {@link ChronoLocalDate} at the given
+     *         {@link OffsetTime}.
+     * @throws NullPointerException if the file, local date or zone ID is 
{@code null}
+     * @since 2.12.0
+     */
+    public static boolean isFileOlder(final File file, final ChronoLocalDate 
chronoLocalDate, final OffsetTime offsetTime) {
+        Objects.requireNonNull(chronoLocalDate, "chronoLocalDate");
+        Objects.requireNonNull(offsetTime, "offsetTime");
+        return isFileOlder(file, 
chronoLocalDate.atTime(offsetTime.toLocalTime()));
+    }
+
     /**
      * Tests if the specified {@link File} is older than the specified {@link 
ChronoLocalDateTime}
      * at the system-default time zone.
@@ -1869,9 +1920,23 @@ public class FileUtils {
         return UncheckedIO.get(() -> PathUtils.isOlder(file.toPath(), 
timeMillis));
     }
 
+    /**
+     * Tests if the specified {@link File} is older than the specified {@link 
OffsetDateTime}.
+     *
+     * @param file the {@link File} of which the modification date must be 
compared
+     * @param offsetDateTime the date reference
+     * @return true if the {@link File} exists and has been modified before 
the given {@link OffsetDateTime}.
+     * @throws NullPointerException if the file or zoned date time is {@code 
null}
+     * @since 2.12.0
+     */
+    public static boolean isFileOlder(final File file, final OffsetDateTime 
offsetDateTime) {
+        Objects.requireNonNull(offsetDateTime, "offsetDateTime");
+        return isFileOlder(file, offsetDateTime.toInstant());
+    }
+
     /**
      * Tests whether the specified {@link File} is a regular file or not. 
Implemented as a
-     * null-safe delegate to {@code Files.isRegularFile(Path path, 
LinkOption... options)}.
+     * null-safe delegate to {@link Files#isRegularFile(Path path, 
LinkOption... options)}.
      *
      * @param   file the path to the file.
      * @param   options options indicating how symbolic links are handled
diff --git a/src/test/java/org/apache/commons/io/FileUtilsTest.java 
b/src/test/java/org/apache/commons/io/FileUtilsTest.java
index 109bdc95..eea1dde8 100644
--- a/src/test/java/org/apache/commons/io/FileUtilsTest.java
+++ b/src/test/java/org/apache/commons/io/FileUtilsTest.java
@@ -48,7 +48,10 @@ import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
 import java.time.ZoneId;
+import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1684,10 +1687,12 @@ public class FileUtilsTest extends AbstractTempDirTest {
         final long now = date.getTime();
         final Instant instant = date.toInstant();
         final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, 
ZoneId.systemDefault());
+        final OffsetDateTime offsetDateTime = zonedDateTime.toOffsetDateTime();
         final LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
         final LocalDate localDate = zonedDateTime.toLocalDate();
         final LocalDate localDatePlusDay = localDate.plusDays(1);
         final LocalTime localTime = LocalTime.ofSecondOfDay(0);
+        final OffsetTime offsetTime = OffsetTime.of(localTime, ZoneOffset.UTC);
 
         do {
             try {
@@ -1714,24 +1719,30 @@ public class FileUtilsTest extends AbstractTempDirTest {
         assertFalse(FileUtils.isFileNewer(oldFile, now), "Old File - Newer - 
Mili");
         assertFalse(FileUtils.isFileNewer(oldFile, instant), "Old File - Newer 
- Instant");
         assertFalse(FileUtils.isFileNewer(oldFile, zonedDateTime), "Old File - 
Newer - ZonedDateTime");
+        assertFalse(FileUtils.isFileNewer(oldFile, offsetDateTime), "Old File 
- Newer - OffsetDateTime");
         assertFalse(FileUtils.isFileNewer(oldFile, localDateTime), "Old File - 
Newer - LocalDateTime");
         assertFalse(FileUtils.isFileNewer(oldFile, localDateTime, 
ZoneId.systemDefault()), "Old File - Newer - LocalDateTime,ZoneId");
         assertFalse(FileUtils.isFileNewer(oldFile, localDate), "Old File - 
Newer - LocalDate");
-        assertTrue(FileUtils.isFileNewer(oldFile, localDate, localTime), "Old 
File - Newer - LocalDate,ZoneId");
+        assertTrue(FileUtils.isFileNewer(oldFile, localDate, localTime), "Old 
File - Newer - LocalDate,LocalTime");
+        assertTrue(FileUtils.isFileNewer(oldFile, localDate, offsetTime), "Old 
File - Newer - LocalDate,OffsetTime");
         assertFalse(FileUtils.isFileNewer(oldFile, localDatePlusDay), "Old 
File - Newer - LocalDate plus one day");
-        assertFalse(FileUtils.isFileNewer(oldFile, localDatePlusDay, 
localTime), "Old File - Newer - LocalDate plus one day,ZoneId");
+        assertFalse(FileUtils.isFileNewer(oldFile, localDatePlusDay, 
localTime), "Old File - Newer - LocalDate plus one day,LocalTime");
+        assertFalse(FileUtils.isFileNewer(oldFile, localDatePlusDay, 
offsetTime), "Old File - Newer - LocalDate plus one day,OffsetTime");
 
         assertTrue(FileUtils.isFileNewer(newFile, reference), "New File - 
Newer - File");
         assertTrue(FileUtils.isFileNewer(newFile, date), "New File - Newer - 
Date");
         assertTrue(FileUtils.isFileNewer(newFile, now), "New File - Newer - 
Mili");
         assertTrue(FileUtils.isFileNewer(newFile, instant), "New File - Newer 
- Instant");
         assertTrue(FileUtils.isFileNewer(newFile, zonedDateTime), "New File - 
Newer - ZonedDateTime");
+        assertTrue(FileUtils.isFileNewer(newFile, offsetDateTime), "New File - 
Newer - OffsetDateTime");
         assertTrue(FileUtils.isFileNewer(newFile, localDateTime), "New File - 
Newer - LocalDateTime");
         assertTrue(FileUtils.isFileNewer(newFile, localDateTime, 
ZoneId.systemDefault()), "New File - Newer - LocalDateTime,ZoneId");
         assertFalse(FileUtils.isFileNewer(newFile, localDate), "New File - 
Newer - LocalDate");
-        assertTrue(FileUtils.isFileNewer(newFile, localDate, localTime), "New 
File - Newer - LocalDate,ZoneId");
+        assertTrue(FileUtils.isFileNewer(newFile, localDate, localTime), "New 
File - Newer - LocalDate,LocalTime");
+        assertTrue(FileUtils.isFileNewer(newFile, localDate, offsetTime), "New 
File - Newer - LocalDate,OffsetTime");
         assertFalse(FileUtils.isFileNewer(newFile, localDatePlusDay), "New 
File - Newer - LocalDate plus one day");
-        assertFalse(FileUtils.isFileNewer(newFile, localDatePlusDay, 
localTime), "New File - Newer - LocalDate plus one day,ZoneId");
+        assertFalse(FileUtils.isFileNewer(newFile, localDatePlusDay, 
localTime), "New File - Newer - LocalDate plus one day,LocalTime");
+        assertFalse(FileUtils.isFileNewer(newFile, localDatePlusDay, 
offsetTime), "New File - Newer - LocalDate plus one day,OffsetTime");
         assertFalse(FileUtils.isFileNewer(invalidFile, reference), "Invalid - 
Newer - File");
         final String invalidFileName = invalidFile.getName();
         assertThrows(IllegalArgumentException.class, () -> 
FileUtils.isFileNewer(newFile, invalidFile));
@@ -1742,24 +1753,30 @@ public class FileUtilsTest extends AbstractTempDirTest {
         assertTrue(FileUtils.isFileOlder(oldFile, now), "Old File - Older - 
Mili");
         assertTrue(FileUtils.isFileOlder(oldFile, instant), "Old File - Older 
- Instant");
         assertTrue(FileUtils.isFileOlder(oldFile, zonedDateTime), "Old File - 
Older - ZonedDateTime");
+        assertTrue(FileUtils.isFileOlder(oldFile, offsetDateTime), "Old File - 
Older - OffsetDateTime");
         assertTrue(FileUtils.isFileOlder(oldFile, localDateTime), "Old File - 
Older - LocalDateTime");
         assertTrue(FileUtils.isFileOlder(oldFile, localDateTime, 
ZoneId.systemDefault()), "Old File - Older - LocalDateTime,LocalTime");
         assertTrue(FileUtils.isFileOlder(oldFile, localDate), "Old File - 
Older - LocalDate");
-        assertFalse(FileUtils.isFileOlder(oldFile, localDate, localTime), "Old 
File - Older - LocalDate,ZoneId");
+        assertFalse(FileUtils.isFileOlder(oldFile, localDate, localTime), "Old 
File - Older - LocalDate,LocalTime");
+        assertFalse(FileUtils.isFileOlder(oldFile, localDate, offsetTime), 
"Old File - Older - LocalDate,OffsetTime");
         assertTrue(FileUtils.isFileOlder(oldFile, localDatePlusDay), "Old File 
- Older - LocalDate plus one day");
         assertTrue(FileUtils.isFileOlder(oldFile, localDatePlusDay, 
localTime), "Old File - Older - LocalDate plus one day,LocalTime");
+        assertTrue(FileUtils.isFileOlder(oldFile, localDatePlusDay, 
offsetTime), "Old File - Older - LocalDate plus one day,OffsetTime");
 
         assertFalse(FileUtils.isFileOlder(newFile, reference), "New File - 
Older - File");
         assertFalse(FileUtils.isFileOlder(newFile, date), "New File - Older - 
Date");
         assertFalse(FileUtils.isFileOlder(newFile, now), "New File - Older - 
Mili");
         assertFalse(FileUtils.isFileOlder(newFile, instant), "New File - Older 
- Instant");
         assertFalse(FileUtils.isFileOlder(newFile, zonedDateTime), "New File - 
Older - ZonedDateTime");
+        assertFalse(FileUtils.isFileOlder(newFile, offsetDateTime), "New File 
- Older - OffsetDateTime");
         assertFalse(FileUtils.isFileOlder(newFile, localDateTime), "New File - 
Older - LocalDateTime");
         assertFalse(FileUtils.isFileOlder(newFile, localDateTime, 
ZoneId.systemDefault()), "New File - Older - LocalDateTime,ZoneId");
         assertTrue(FileUtils.isFileOlder(newFile, localDate), "New File - 
Older - LocalDate");
         assertFalse(FileUtils.isFileOlder(newFile, localDate, localTime), "New 
File - Older - LocalDate,LocalTime");
+        assertFalse(FileUtils.isFileOlder(newFile, localDate, offsetTime), 
"New File - Older - LocalDate,OffsetTime");
         assertTrue(FileUtils.isFileOlder(newFile, localDatePlusDay), "New File 
- Older - LocalDate plus one day");
         assertTrue(FileUtils.isFileOlder(newFile, localDatePlusDay, 
localTime), "New File - Older - LocalDate plus one day,LocalTime");
+        assertTrue(FileUtils.isFileOlder(newFile, localDatePlusDay, 
offsetTime), "New File - Older - LocalDate plus one day,OffsetTime");
 
         assertFalse(FileUtils.isFileOlder(invalidFile, reference), "Invalid - 
Older - File");
         assertThrows(IllegalArgumentException.class, () -> 
FileUtils.isFileOlder(newFile, invalidFile));

Reply via email to