From 0e44acbb2fec928a1606dc60f427a148fff405c9 Mon Sep 17 00:00:00 2001
From: Mohamed Ragab <moragab@gmail.com>
Date: Wed, 02 May 2012 11:15:01 -0400
Subject: [PATCH] Added a script to facilitate setting the proxy host and port and no proxy hosts, and then it concatenates all the java system properties for setting the java proxy configurations and puts the resulting string in an environment variable JAVA_PROXY_CONFIG, modified the scirpts gitblit,  gitblit-ubuntu, and gitblit-centos to source the java-proxy-config.sh script and then include the resulting java proxy configuration in the java command

---
 src/com/gitblit/utils/TimeUtils.java |  211 +++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 156 insertions(+), 55 deletions(-)

diff --git a/src/com/gitblit/utils/TimeUtils.java b/src/com/gitblit/utils/TimeUtils.java
index 16aea77..662025b 100644
--- a/src/com/gitblit/utils/TimeUtils.java
+++ b/src/com/gitblit/utils/TimeUtils.java
@@ -15,8 +15,16 @@
  */
 package com.gitblit.utils;
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 
+/**
+ * Utility class of time functions.
+ * 
+ * @author James Moger
+ * 
+ */
 public class TimeUtils {
 	public static final long MIN = 1000 * 60L;
 
@@ -28,26 +36,43 @@
 
 	public static final long ONEYEAR = ONEDAY * 365L;
 
-	@SuppressWarnings("deprecation")
+	/**
+	 * Returns true if date is today.
+	 * 
+	 * @param date
+	 * @return true if date is today
+	 */
 	public static boolean isToday(Date date) {
-		Date now = new Date();
-		return now.getDate() == date.getDate() && now.getMonth() == date.getMonth()
-				&& now.getYear() == date.getYear();
+		return (System.currentTimeMillis() - date.getTime()) < ONEDAY;
 	}
 
-	@SuppressWarnings("deprecation")
+	/**
+	 * Returns true if date is yesterday.
+	 * 
+	 * @param date
+	 * @return true if date is yesterday
+	 */
 	public static boolean isYesterday(Date date) {
-		Date now = new Date();
-		return now.getDate() == (date.getDate() + 1) && now.getMonth() == date.getMonth()
-				&& now.getYear() == date.getYear();
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(new Date());
+		cal.add(Calendar.DATE, -1);
+		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
+		return df.format(cal.getTime()).equals(df.format(date));
 	}
 
+	/**
+	 * Returns the string representation of the duration as days, months and/or
+	 * years.
+	 * 
+	 * @param days
+	 * @return duration as string in days, months, and/or years
+	 */
 	public static String duration(int days) {
 		if (days <= 60) {
 			return days + (days > 1 ? " days" : " day");
-		} else if (days <= 365) {
+		} else if (days < 365) {
 			int rem = days % 30;
-			return (days / 30) + " months, " + rem + (rem > 1 ? " days" : " day");
+			return ((days / 30) + (rem >= 15 ? 1 : 0)) + " months";
 		} else {
 			int years = days / 365;
 			int rem = days % 365;
@@ -56,27 +81,30 @@
 				if (rem == 0) {
 					return yearsString;
 				} else {
-					return yearsString + ", " + rem + (rem > 1 ? " days" : " day");
+					return yearsString + (rem >= 15 ? ", 1 month" : "");
 				}
 			} else {
 				int months = rem / 30;
 				int remDays = rem % 30;
-				String monthsString;
-				if (months == 0) {
-					monthsString = yearsString;
-				} else {
-					monthsString = yearsString + ", " + months
-							+ (months > 1 ? " months" : " month");
+				if (remDays >= 15) {
+					months++;
 				}
-				if (remDays == 0) {
-					return monthsString;
-				} else {
-					return monthsString + ", " + remDays + (remDays > 1 ? " days" : " day");
-				}
+				String monthsString = yearsString + ", " + months
+						+ (months > 1 ? " months" : " month");
+				return monthsString;
 			}
 		}
 	}
 
+	/**
+	 * Returns the number of minutes ago between the start time and the end
+	 * time.
+	 * 
+	 * @param date
+	 * @param endTime
+	 * @param roundup
+	 * @return difference in minutes
+	 */
 	public static int minutesAgo(Date date, long endTime, boolean roundup) {
 		long diff = endTime - date.getTime();
 		int mins = (int) (diff / MIN);
@@ -86,10 +114,24 @@
 		return mins;
 	}
 
+	/**
+	 * Return the difference in minutes between now and the date.
+	 * 
+	 * @param date
+	 * @param roundup
+	 * @return minutes ago
+	 */
 	public static int minutesAgo(Date date, boolean roundup) {
 		return minutesAgo(date, System.currentTimeMillis(), roundup);
 	}
 
+	/**
+	 * Return the difference in hours between now and the date.
+	 * 
+	 * @param date
+	 * @param roundup
+	 * @return hours ago
+	 */
 	public static int hoursAgo(Date date, boolean roundup) {
 		long diff = System.currentTimeMillis() - date.getTime();
 		int hours = (int) (diff / ONEHOUR);
@@ -99,81 +141,140 @@
 		return hours;
 	}
 
-	public static int daysAgo(Date date, boolean roundup) {
-		long diff = System.currentTimeMillis() - date.getTime();
+	/**
+	 * Return the difference in days between now and the date.
+	 * 
+	 * @param date
+	 * @return days ago
+	 */
+	public static int daysAgo(Date date) {
+		long today = ONEDAY * (System.currentTimeMillis()/ONEDAY);
+		long day = ONEDAY * (date.getTime()/ONEDAY);
+		long diff = today - day;
 		int days = (int) (diff / ONEDAY);
-		if (roundup && (diff % ONEDAY) > 0) {
-			days++;
-		}
 		return days;
 	}
 
+	/**
+	 * Returns the string representation of the duration between now and the
+	 * date.
+	 * 
+	 * @param date
+	 * @return duration as a string
+	 */
 	public static String timeAgo(Date date) {
 		return timeAgo(date, false);
 	}
 
+	/**
+	 * Returns the CSS class for the date based on its age from Now.
+	 * 
+	 * @param date
+	 * @return the css class
+	 */
 	public static String timeAgoCss(Date date) {
 		return timeAgo(date, true);
 	}
 
+	/**
+	 * Returns the string representation of the duration OR the css class for
+	 * the duration.
+	 * 
+	 * @param date
+	 * @param css
+	 * @return the string representation of the duration OR the css class
+	 */
 	private static String timeAgo(Date date, boolean css) {
-		String ago = null;
 		if (isToday(date) || isYesterday(date)) {
 			int mins = minutesAgo(date, true);
-			if (mins > 120) {
+			if (mins >= 120) {
 				if (css) {
 					return "age1";
 				}
 				int hours = hoursAgo(date, true);
 				if (hours > 23) {
-					ago = "yesterday";
+					return "yesterday";
 				} else {
-					ago = hours + " hour" + (hours > 1 ? "s" : "") + " ago";
+					return hours + " hours ago";
 				}
-			} else {
-				if (css) {
-					return "age0";
-				}
-				ago = mins + " min" + (mins > 1 ? "s" : "") + " ago";
 			}
-		} else {
 			if (css) {
-				return "age2";
+				return "age0";
 			}
-			int days = daysAgo(date, true);
+			return mins + " min" + (mins > 1 ? "s" : "") + " ago";
+		} else {
+			int days = daysAgo(date);
+			if (css) {
+				if (days <= 7) {
+					return "age2";
+				} if (days <= 30) {
+					return "age3";
+				} else {
+					return "age4";
+				}
+			}
 			if (days < 365) {
 				if (days <= 30) {
-					ago = days + " day" + (days > 1 ? "s" : "") + " ago";
+					return days + " days ago";
 				} else if (days <= 90) {
 					int weeks = days / 7;
 					if (weeks == 12) {
-						ago = "3 months ago";
+						return "3 months ago";
 					} else {
-						ago = weeks + " weeks ago";
+						return weeks + " weeks ago";
 					}
-				} else if (days > 90) {
-					int months = days / 30;
-					int weeks = (days % 30) / 7;
-					if (weeks >= 2) {
-						months++;
-					}
-					ago = months + " month" + (months > 1 ? "s" : "") + " ago";
-				} else {
-					ago = days + " day" + (days > 1 ? "s" : "") + " ago";
 				}
+				int months = days / 30;
+				int weeks = (days % 30) / 7;
+				if (weeks >= 2) {
+					months++;
+				}
+				return months + " months ago";
 			} else if (days == 365) {
-				ago = "1 year ago";
+				return "1 year ago";
 			} else {
 				int yr = days / 365;
 				days = days % 365;
 				int months = (yr * 12) + (days / 30);
 				if (months > 23) {
-					ago = yr + " years ago";
+					return yr + " years ago";
 				} else {
-					ago = months + " months ago";
+					return months + " months ago";
 				}
 			}
 		}
-		return ago;
+	}
+
+	/**
+	 * Convert a frequency string into minutes.
+	 * 
+	 * @param frequency
+	 * @return minutes
+	 */
+	public static int convertFrequencyToMinutes(String frequency) {
+		// parse the frequency
+		frequency = frequency.toLowerCase();
+		int mins = 60;
+		if (!StringUtils.isEmpty(frequency)) {
+			try {
+				String str = frequency.trim();
+				if (frequency.indexOf(' ') > -1) {
+					str = str.substring(0, str.indexOf(' ')).trim();
+				}
+				mins = (int) Float.parseFloat(str);
+			} catch (NumberFormatException e) {
+			}
+			if (mins < 5) {
+				mins = 5;
+			}
+		}
+		if (frequency.indexOf("day") > -1) {
+			// convert to minutes
+			mins *= 1440;
+		} else if (frequency.indexOf("hour") > -1) {
+			// convert to minutes
+			mins *= 60;
+		}
+		return mins;
 	}
 }

--
Gitblit v1.9.1