]> source.dussan.org Git - jgit.git/commitdiff
PersonIdent: Add ctors that accept Instant in addition to Date 92/189192/5
authorDavid Ostrovsky <david@ostrovsky.org>
Wed, 29 Dec 2021 20:18:52 +0000 (21:18 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 2 Mar 2022 15:38:44 +0000 (16:38 +0100)
Error Prone is flagging Date-API as obsolete and recommends to migrate
to Instant and LocalDate. Given that more JGit users starting to migrate
to new Time API, offer ctors that accept Instant type and also add new
getter that returns when attribute as Instant type.

Change-Id: I64a36bf40f191495c6889c1dff314ede06848880

org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0001_PersonIdentTest.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/PersonIdent.java

index e9bab7c4ad87e25da58c6f5bd1426dfd8d6c2943..36708451030c1ef8ab16953d1aeaf4a0e48aa9ea 100644 (file)
@@ -13,6 +13,8 @@ package org.eclipse.jgit.lib;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.time.Instant;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.TimeZone;
 
@@ -42,6 +44,34 @@ public class T0001_PersonIdentTest {
                                p.toExternalString());
        }
 
+       @Test
+       public void testNewIdentInstant() {
+               PersonIdent p = new PersonIdent("A U Thor", "author@example.com",
+                               Instant.ofEpochMilli(1142878501000L),
+                               ZoneId.of("America/New_York"));
+               assertEquals("A U Thor", p.getName());
+               assertEquals("author@example.com", p.getEmailAddress());
+               assertEquals(Instant.ofEpochMilli(1142878501000L),
+                               p.getWhenAsInstant());
+               assertEquals("A U Thor <author@example.com> 1142878501 -0500",
+                               p.toExternalString());
+               assertEquals(ZoneId.of("GMT-05:00"), p.getZoneId());
+       }
+
+       @Test
+       public void testNewIdentInstant2() {
+               final PersonIdent p = new PersonIdent("A U Thor", "author@example.com",
+                               Instant.ofEpochMilli(1142878501000L),
+                               ZoneId.of("Asia/Kolkata"));
+               assertEquals("A U Thor", p.getName());
+               assertEquals("author@example.com", p.getEmailAddress());
+               assertEquals(Instant.ofEpochMilli(1142878501000L),
+                               p.getWhenAsInstant());
+               assertEquals("A U Thor <author@example.com> 1142878501 +0530",
+                               p.toExternalString());
+               assertEquals(ZoneId.of("GMT+05:30"), p.getZoneId());
+       }
+
        @SuppressWarnings("unused")
        @Test(expected = IllegalArgumentException.class)
        public void nullForNameShouldThrowIllegalArgumentException() {
index 428a6b959cd869b9065901c5849293f4a425aa3a..93710299b4a45576b8964615c89cedd8c55dd076 100644 (file)
@@ -14,6 +14,8 @@ package org.eclipse.jgit.lib;
 
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
@@ -205,6 +207,20 @@ public class PersonIdent implements Serializable {
                this(pi.getName(), pi.getEmailAddress(), aWhen.getTime(), pi.tzOffset);
        }
 
+       /**
+        * Copy a {@link org.eclipse.jgit.lib.PersonIdent}, but alter the clone's
+        * time stamp
+        *
+        * @param pi
+        *            original {@link org.eclipse.jgit.lib.PersonIdent}
+        * @param aWhen
+        *            local time as Instant
+        * @since 6.1
+        */
+       public PersonIdent(PersonIdent pi, Instant aWhen) {
+               this(pi.getName(), pi.getEmailAddress(), aWhen.toEpochMilli(), pi.tzOffset);
+       }
+
        /**
         * Construct a PersonIdent from simple data
         *
@@ -221,6 +237,27 @@ public class PersonIdent implements Serializable {
                                .getTime()) / (60 * 1000));
        }
 
+       /**
+        * Construct a PersonIdent from simple data
+        *
+        * @param aName
+        *            a {@link java.lang.String} object.
+        * @param aEmailAddress
+        *            a {@link java.lang.String} object.
+        * @param aWhen
+        *            local time stamp
+        * @param zoneId
+        *            time zone id
+        * @since 6.1
+        */
+       public PersonIdent(final String aName, String aEmailAddress, Instant aWhen,
+                       ZoneId zoneId) {
+               this(aName, aEmailAddress, aWhen.toEpochMilli(),
+                               TimeZone.getTimeZone(zoneId)
+                                               .getOffset(aWhen
+                               .toEpochMilli()) / (60 * 1000));
+       }
+
        /**
         * Copy a PersonIdent, but alter the clone's time stamp
         *
@@ -303,6 +340,16 @@ public class PersonIdent implements Serializable {
                return new Date(when);
        }
 
+       /**
+        * Get when attribute as instant
+        *
+        * @return timestamp
+        * @since 6.1
+        */
+       public Instant getWhenAsInstant() {
+               return Instant.ofEpochMilli(when);
+       }
+
        /**
         * Get this person's declared time zone
         *
@@ -312,6 +359,16 @@ public class PersonIdent implements Serializable {
                return getTimeZone(tzOffset);
        }
 
+       /**
+        * Get the time zone id
+        *
+        * @return the time zone id
+        * @since 6.1
+        */
+       public ZoneId getZoneId() {
+               return getTimeZone().toZoneId();
+       }
+
        /**
         * Get this person's declared time zone as minutes east of UTC.
         *