summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2021-12-29 21:18:52 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2022-03-02 16:38:44 +0100
commit67097f5de497859216576144ab85e3e4b49503fb (patch)
tree0caa6a0455f364a69c31256036fbfea5a25096ba
parent889b82f0e5b2d6dc7ea82eca3ba13598917877f2 (diff)
downloadjgit-67097f5de497859216576144ab85e3e4b49503fb.tar.gz
jgit-67097f5de497859216576144ab85e3e4b49503fb.zip
PersonIdent: Add ctors that accept Instant in addition to Date
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
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0001_PersonIdentTest.java30
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/PersonIdent.java57
2 files changed, 87 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0001_PersonIdentTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0001_PersonIdentTest.java
index e9bab7c4ad..3670845103 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0001_PersonIdentTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/T0001_PersonIdentTest.java
@@ -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() {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/PersonIdent.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/PersonIdent.java
index 428a6b959c..93710299b4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/PersonIdent.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/PersonIdent.java
@@ -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;
@@ -206,6 +208,20 @@ public class PersonIdent implements Serializable {
}
/**
+ * 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
*
* @param aName a {@link java.lang.String} object.
@@ -222,6 +238,27 @@ public class PersonIdent implements Serializable {
}
/**
+ * 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
*
* @param pi
@@ -304,6 +341,16 @@ public class PersonIdent implements Serializable {
}
/**
+ * Get when attribute as instant
+ *
+ * @return timestamp
+ * @since 6.1
+ */
+ public Instant getWhenAsInstant() {
+ return Instant.ofEpochMilli(when);
+ }
+
+ /**
* Get this person's declared time zone
*
* @return this person's declared time zone; null if time zone is unknown.
@@ -313,6 +360,16 @@ public class PersonIdent implements Serializable {
}
/**
+ * 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.
*
* @return this person's declared time zone as minutes east of UTC. If the