Make RelativeDateFormatter available to plugins

Change-Id: I9ab4a50c5eceec3a841c79f120ee67f428038cce
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
Edwin Kempin 2015-07-27 16:37:01 +02:00
parent 010d30592f
commit 76b23722f4
13 changed files with 132 additions and 77 deletions

View File

@ -63,3 +63,16 @@ java_library(
name = 'diffy_image_files',
resources = DIFFY,
)
java_test(
name = 'client_tests',
srcs = glob(['src/test/java/**/*.java']),
deps = [
':client',
'//lib:junit',
'//lib/jgit:jgit',
],
source_under_test = [':client'],
vm_args = ['-Xmx512m'],
visibility = ['//tools/eclipse:classpath'],
)

View File

@ -0,0 +1,36 @@
// Copyright (C) 2015 The Android Open Source Project
//
// 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.google.gerrit.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.Constants;
public interface CommonConstants extends Constants {
public static final CommonConstants C = GWT.create(CommonConstants.class);
String inTheFuture();
String month();
String months();
String year();
String years();
String oneSecondAgo();
String oneMinuteAgo();
String oneHourAgo();
String oneDayAgo();
String oneWeekAgo();
String oneMonthAgo();
String oneYearAgo();
}

View File

@ -0,0 +1,13 @@
inTheFuture = in the future
month = month
months = months
years = years
year = year
oneSecondAgo = 1 second ago
oneMinuteAgo = 1 minute ago
oneHourAgo = 1 hour ago
oneDayAgo = 1 day ago
oneWeekAgo = 1 week ago
oneMonthAgo = 1 month ago
oneYearAgo = 1 year ago

View File

@ -0,0 +1,33 @@
// Copyright (C) 2015 The Android Open Source Project
//
// 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.google.gerrit.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.Messages;
public interface CommonMessages extends Messages {
public static final CommonMessages M = GWT.create(CommonMessages.class);
String secondsAgo(long seconds);
String minutesAgo(long minutes);
String hoursAgo(long hours);
String daysAgo(long days);
String weeksAgo(long weeks);
String monthsAgo(long months);
String yearsAgo(long years);
String years0MonthsAgo(long years, String yearLabel);
String yearsMonthsAgo(long years, String yearLabel, long months,
String monthLabel);
}

View File

@ -0,0 +1,9 @@
secondsAgo = {0} seconds ago
minutesAgo = {0} minutes ago
hoursAgo = {0} hours ago
daysAgo = {0} days ago
weeksAgo = {0} weeks ago
monthsAgo = {0} months ago
years0MonthsAgo = {0} {1} ago
yearsMonthsAgo = {0} {1}, {2} {3} ago
yearsAgo = {0} years ago

View File

@ -14,7 +14,8 @@
package com.google.gerrit.client;
import com.google.gerrit.client.changes.Util;
import static com.google.gerrit.client.CommonConstants.C;
import static com.google.gerrit.client.CommonMessages.M;
import java.util.Date;
@ -24,17 +25,11 @@ import java.util.Date;
*/
public class RelativeDateFormatter {
static final long SECOND_IN_MILLIS = 1000;
static final long MINUTE_IN_MILLIS = 60 * SECOND_IN_MILLIS;
static final long HOUR_IN_MILLIS = 60 * MINUTE_IN_MILLIS;
static final long DAY_IN_MILLIS = 24 * HOUR_IN_MILLIS;
static final long WEEK_IN_MILLIS = 7 * DAY_IN_MILLIS;
static final long MONTH_IN_MILLIS = 30 * DAY_IN_MILLIS;
static final long YEAR_IN_MILLIS = 365 * DAY_IN_MILLIS;
/**
@ -48,16 +43,16 @@ public class RelativeDateFormatter {
// shouldn't happen in a perfect world
if (ageMillis < 0) {
return Util.C.inTheFuture();
return C.inTheFuture();
}
// seconds
if (ageMillis < upperLimit(MINUTE_IN_MILLIS)) {
long seconds = round(ageMillis, SECOND_IN_MILLIS);
if (seconds == 1) {
return Util.C.oneSecondAgo();
return C.oneSecondAgo();
} else {
return Util.M.secondsAgo(seconds);
return M.secondsAgo(seconds);
}
}
@ -65,9 +60,9 @@ public class RelativeDateFormatter {
if (ageMillis < upperLimit(HOUR_IN_MILLIS)) {
long minutes = round(ageMillis, MINUTE_IN_MILLIS);
if (minutes == 1) {
return Util.C.oneMinuteAgo();
return C.oneMinuteAgo();
} else {
return Util.M.minutesAgo(minutes);
return M.minutesAgo(minutes);
}
}
@ -75,9 +70,9 @@ public class RelativeDateFormatter {
if (ageMillis < upperLimit(DAY_IN_MILLIS)) {
long hours = round(ageMillis, HOUR_IN_MILLIS);
if (hours == 1) {
return Util.C.oneHourAgo();
return C.oneHourAgo();
} else {
return Util.M.hoursAgo(hours);
return M.hoursAgo(hours);
}
}
@ -85,9 +80,9 @@ public class RelativeDateFormatter {
if (ageMillis < 14 * DAY_IN_MILLIS) {
long days = round(ageMillis, DAY_IN_MILLIS);
if (days == 1) {
return Util.C.oneDayAgo();
return C.oneDayAgo();
} else {
return Util.M.daysAgo(days);
return M.daysAgo(days);
}
}
@ -95,9 +90,9 @@ public class RelativeDateFormatter {
if (ageMillis < 10 * WEEK_IN_MILLIS) {
long weeks = round(ageMillis, WEEK_IN_MILLIS);
if (weeks == 1) {
return Util.C.oneWeekAgo();
return C.oneWeekAgo();
} else {
return Util.M.weeksAgo(weeks);
return M.weeksAgo(weeks);
}
}
@ -105,32 +100,31 @@ public class RelativeDateFormatter {
if (ageMillis < YEAR_IN_MILLIS) {
long months = round(ageMillis, MONTH_IN_MILLIS);
if (months == 1) {
return Util.C.oneMonthAgo();
return C.oneMonthAgo();
} else {
return Util.M.monthsAgo(months);
return M.monthsAgo(months);
}
}
// up to 5 years use "year, months" rounded to months
if (ageMillis < 5 * YEAR_IN_MILLIS) {
long years = ageMillis / YEAR_IN_MILLIS;
String yearLabel = (years > 1) ? Util.C.years() : Util.C.year();
String yearLabel = (years > 1) ? C.years() : C.year();
long months = round(ageMillis % YEAR_IN_MILLIS, MONTH_IN_MILLIS);
String monthLabel =
(months > 1) ? Util.C.months() : (months == 1 ? Util.C.month() : "");
String monthLabel = (months > 1) ? C.months() : (months == 1 ? C.month() : "");
if (months == 0) {
return Util.M.years0MonthsAgo(years, yearLabel);
return M.years0MonthsAgo(years, yearLabel);
} else {
return Util.M.yearsMonthsAgo(years, yearLabel, months, monthLabel);
return M.yearsMonthsAgo(years, yearLabel, months, monthLabel);
}
}
// years
long years = round(ageMillis, YEAR_IN_MILLIS);
if (years == 1) {
return Util.C.oneYearAgo();
return C.oneYearAgo();
} else {
return Util.M.yearsAgo(years);
return M.yearsAgo(years);
}
}

View File

@ -19,6 +19,7 @@ import static com.google.gerrit.client.RelativeDateFormatter.HOUR_IN_MILLIS;
import static com.google.gerrit.client.RelativeDateFormatter.MINUTE_IN_MILLIS;
import static com.google.gerrit.client.RelativeDateFormatter.SECOND_IN_MILLIS;
import static com.google.gerrit.client.RelativeDateFormatter.YEAR_IN_MILLIS;
import static org.junit.Assert.assertEquals;
import org.eclipse.jgit.util.RelativeDateFormatter;

View File

@ -61,7 +61,6 @@ java_test(
'//lib/gwt:dev',
'//lib/gwt:user',
'//lib/gwt:gwt-test-utils',
'//lib/jgit:jgit',
],
source_under_test = [':ui_module'],
vm_args = ['-Xmx512m'],

View File

@ -201,19 +201,5 @@ public interface ChangeConstants extends Constants {
String diffAllSideBySide();
String diffAllUnified();
String inTheFuture();
String month();
String months();
String year();
String years();
String oneSecondAgo();
String oneMinuteAgo();
String oneHourAgo();
String oneDayAgo();
String oneWeekAgo();
String oneMonthAgo();
String oneYearAgo();
String votable();
}

View File

@ -183,18 +183,4 @@ buttonClose = Close
diffAllSideBySide = All Side-by-Side
diffAllUnified = All Unified
inTheFuture = in the future
month = month
months = months
years = years
year = year
oneSecondAgo = 1 second ago
oneMinuteAgo = 1 minute ago
oneHourAgo = 1 hour ago
oneDayAgo = 1 day ago
oneWeekAgo = 1 week ago
oneMonthAgo = 1 month ago
oneYearAgo = 1 year ago
votable = Votable:

View File

@ -60,16 +60,5 @@ public interface ChangeMessages extends Messages {
String groupHasTooManyMembers(String group);
String groupManyMembersConfirmation(String group, int memberCount);
String secondsAgo(long seconds);
String minutesAgo(long minutes);
String hoursAgo(long hours);
String daysAgo(long days);
String weeksAgo(long weeks);
String monthsAgo(long months);
String yearsAgo(long years);
String years0MonthsAgo(long years, String yearLabel);
String yearsMonthsAgo(long years, String yearLabel, long months,
String monthLabel);
String insertionsAndDeletions(int insertions, int deletions);
}

View File

@ -43,14 +43,4 @@ groupIsNotAllowed = The group {0} cannot be added as reviewer.
groupHasTooManyMembers = The group {0} has too many members to add them all as reviewers.
groupManyMembersConfirmation = The group {0} has {1} members. Do you want to add them all as reviewers?
secondsAgo = {0} seconds ago
minutesAgo = {0} minutes ago
hoursAgo = {0} hours ago
daysAgo = {0} days ago
weeksAgo = {0} weeks ago
monthsAgo = {0} months ago
years0MonthsAgo = {0} {1} ago
yearsMonthsAgo = {0} {1}, {2} {3} ago
yearsAgo = {0} years ago
insertionsAndDeletions = +{0}, -{1}

View File

@ -16,6 +16,7 @@ package com.google.gerrit.plugin.client;
import com.google.gerrit.client.AccountFormatter;
import com.google.gerrit.client.DateFormatter;
import com.google.gerrit.client.RelativeDateFormatter;
import com.google.gerrit.client.info.AccountInfo;
import java.util.Date;
@ -44,6 +45,11 @@ public class FormatUtil {
return new DateFormatter(Plugin.get().getUserPreferences());
}
/** Format a date using git log's relative date format. */
public static String relativeFormat(Date dt) {
return RelativeDateFormatter.format(dt);
}
/**
* Formats an account as a name and an email address.
* <p>