diff --git a/changelog.html b/changelog.html index 27cd5726d..2e89159ad 100644 --- a/changelog.html +++ b/changelog.html @@ -44,8 +44,11 @@
2.1.11 Unreleased version
+2.2.0 March 15, 2026
2.1.10 June 24, 2025
diff --git a/pom.xml b/pom.xml index 43a166573..bb46bfd89 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@null The result of
- * this method is determined as follows:
- * o1 and o2 are the same object
- * according to the == operator, return
- * true.
- * o1 or o2 is
- * null, return false.
- * o1.equals(o2).
- * - *
- * For array types, one of theequals methods in
- * {@link java.util.Arrays} should be used instead of this method.
- * Note that arrays with more than one dimension will require some
- * custom code in order to implement equals properly.
- */
- public static final boolean areEqual(Object o1, Object o2) {
- if (o1 == o2) {
- return true;
- }
- else if (o1 == null || o2 == null) {
- return false;
- }
- else {
- return o1.equals(o2);
- }
- }
-
- /**
- * This is a utility method that compares two Booleans when one or
- * both of the objects might be null The result of
- * this method is determined as follows:
- * b1 and b2 are both TRUE or
- * neither b1 nor b2 is TRUE,
- * return true.
- * false.
- *
- */
- public static final boolean areBooleansEqual(Boolean b1, Boolean b2) {
- // !jwetherb treat NULL the same as Boolean.FALSE
- return (b1 == Boolean.TRUE && b2 == Boolean.TRUE) ||
- (b1 != Boolean.TRUE && b2 != Boolean.TRUE);
- }
-
- /**
- * This is a utility method that compares two objects when one or
- * both of the objects might be null. The result
- * returned by this method is determined as follows:
- *
o1 and o2 are the same object
- * according to the == operator, return
- * false.
- * o1 or o2 is
- * null, return true.
- * !o1.equals(o2).
- * - *
- * For array types, one of theequals methods in
- * {@link java.util.Arrays} should be used instead of this method.
- * Note that arrays with more than one dimension will require some
- * custom code in order to implement equals properly.
- */
- public static final boolean areDifferent(Object o1, Object o2) {
- return !areEqual(o1, o2);
- }
-
-
- /**
- * This is a utility method that compares two Booleans when one or
- * both of the objects might be null The result of
- * this method is determined as follows:
- * b1 and b2 are both TRUE or
- * neither b1 nor b2 is TRUE,
- * return false.
- * true.
- *
- */
- public static final boolean areBooleansDifferent(Boolean b1, Boolean b2) {
- return !areBooleansEqual(b1, b2);
- }
-
-
- /**
- * Returns Fixed-delay execution is appropriate for recurring activities
* that require "smoothness." In other words, it is appropriate for
@@ -131,8 +131,8 @@ public void schedule(TimerTask task, Date time) {
* @param task task to be scheduled.
* @param delay delay in milliseconds before task is to be executed.
* @param period time in milliseconds between successive task executions.
- * @throws IllegalArgumentException if delay is negative, or
- * delay + System.currentTimeMillis() is negative.
+ * @throws IllegalArgumentException if Fixed-delay execution is appropriate for recurring activities
* that require "smoothness." In other words, it is appropriate for
@@ -167,7 +167,7 @@ public void schedule(TimerTask task, long delay, long period) {
* @param task task to be scheduled.
* @param firstTime First time at which task is to be executed.
* @param period time in milliseconds between successive task executions.
- * @throws IllegalArgumentException if time.getTime() is negative.
+ * @throws IllegalArgumentException if Fixed-rate execution is appropriate for recurring activities that
* are sensitive to absolute time, such as ringing a chime every
@@ -203,8 +203,8 @@ public void schedule(TimerTask task, Date firstTime, long period) {
* @param task task to be scheduled.
* @param delay delay in milliseconds before task is to be executed.
* @param period time in milliseconds between successive task executions.
- * @throws IllegalArgumentException if delay is negative, or
- * delay + System.currentTimeMillis() is negative.
+ * @throws IllegalArgumentException if Fixed-rate execution is appropriate for recurring activities that
* are sensitive to absolute time, such as ringing a chime every
@@ -240,7 +240,7 @@ public void scheduleAtFixedRate(TimerTask task, long delay, long period) {
* @param task task to be scheduled.
* @param firstTime First time at which task is to be executed.
* @param period time in milliseconds between successive task executions.
- * @throws IllegalArgumentException if time.getTime() is negative.
+ * @throws IllegalArgumentException if
- *
- *
* The basic functionality is to query the server for the latest client
* version and return that information. The version comparison is left to
* the client itself, so as to keep the SparkVersionManager simple.
- * true if the specified array is not null
- * and contains a non-null element. Returns false
- * if the array is null or if all the array elements are null.
- */
- public static final boolean hasNonNullElement(Object[] array) {
- if (array != null) {
- final int n = array.length;
- for (int i = 0; i < n; i++) {
- if (array[i] != null) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Returns a single string that is the concatenation of all the
- * strings in the specified string array. A single space is
- * put between each string array element. Null array elements
- * are skipped. If the array itself is null, the empty string
- * is returned. This method is guaranteed to return a non-null
- * value, if no expections are thrown.
- */
- public static final String concat(String[] strs) {
- return concat(strs, " "); //NOTRANS
- }
-
- /**
- * Returns a single string that is the concatenation of all the
- * strings in the specified string array. The strings are separated
- * by the specified delimiter. Null array elements are skipped. If
- * the array itself is null, the empty string is returned. This
- * method is guaranteed to return a non-null value, if no expections
- * are thrown.
- */
- public static final String concat(String[] strs, String delim) {
- if (strs != null) {
- final StringBuffer buf = new StringBuffer();
- final int n = strs.length;
- for (int i = 0; i < n; i++) {
- final String str = strs[i];
- if (str != null) {
- buf.append(str).append(delim);
- }
- }
- final int length = buf.length();
- if (length > 0) {
- // Trim trailing space.
- buf.setLength(length - 1);
- }
- return buf.toString();
- }
- else {
- return ""; // NOTRANS
- }
- }
-
- /**
- * Returns true if the specified {@link String} is not
- * null and has a length greater than zero. This is
- * a very frequently occurring check.
- */
- public static final boolean hasLength(String s) {
- return (s != null && s.length() > 0);
- }
-
-
- /**
- * Returns null if the specified string is empty or
- * null. Otherwise the string itself is returned.
- */
- public static final String nullifyIfEmpty(String s) {
- return hasLength(s) ? s : null;
- }
-
- /**
- * Returns null if the specified object is null
- * or if its toString() representation is empty.
- * Otherwise, the toString() representation of the
- * object itself is returned.
- */
- public static final String nullifyingToString(Object o) {
- return o != null ? nullifyIfEmpty(o.toString()) : null;
- }
-
- /**
- * Determines if a string has been changed.
- *
- * @param oldString is the initial value of the String
- * @param newString is the new value of the String
- * @return true If both oldString and newString are null or if they are
- * both not null and equal to each other. Otherwise returns false.
- */
- public static boolean hasStringChanged(String oldString, String newString) {
- if (oldString == null && newString == null) {
- return false;
- }
- else if ((oldString == null && newString != null)
- || (oldString != null && newString == null)) {
- return true;
- }
- else {
- return !oldString.equals(newString);
- }
- }
-
- /**
- * Returns a formatted String from time.
- *
- * @param diff the amount of elapsed time.
- * @return the formatte String.
- */
- public static String getTimeFromLong(long diff) {
- final String HOURS = "h";
- final String MINUTES = "min";
- //final String SECONDS = "sec";
-
- final long MS_IN_A_DAY = 1000 * 60 * 60 * 24;
- final long MS_IN_AN_HOUR = 1000 * 60 * 60;
- final long MS_IN_A_MINUTE = 1000 * 60;
- final long MS_IN_A_SECOND = 1000;
- //Date currentTime = new Date();
- //long numDays = diff / MS_IN_A_DAY;
- diff = diff % MS_IN_A_DAY;
- long numHours = diff / MS_IN_AN_HOUR;
- diff = diff % MS_IN_AN_HOUR;
- long numMinutes = diff / MS_IN_A_MINUTE;
- diff = diff % MS_IN_A_MINUTE;
- //long numSeconds = diff / MS_IN_A_SECOND;
- diff = diff % MS_IN_A_SECOND;
- //long numMilliseconds = diff;
-
- StringBuffer buf = new StringBuffer();
- if (numHours > 0) {
- buf.append(numHours + " " + HOURS + ", ");
- }
-
- if (numMinutes > 0) {
- buf.append(numMinutes + " " + MINUTES);
- }
-
- //buf.append(numSeconds + " " + SECONDS);
-
- String result = buf.toString();
-
- if (numMinutes < 1) {
- result = "< 1 minute";
- }
-
- return result;
- }
-
-
- /**
- * Build a List of all elements in an Iterator.
- */
- public static get() method will return null
* upon completion.
* @throws java.util.concurrent.RejectedExecutionException if task cannot be scheduled
* for execution.
@@ -83,8 +83,8 @@ public Future> submit(Runnable task) {
*
* @param task task to be scheduled.
* @param delay delay in milliseconds before task is to be executed.
- * @throws IllegalArgumentException if delay is negative, or
- * delay + System.currentTimeMillis() is negative.
+ * @throws IllegalArgumentException if delay is negative, or
+ * delay + System.currentTimeMillis() is negative.
* @throws IllegalStateException if task was already scheduled or
* cancelled, or timer was cancelled.
*/
@@ -98,7 +98,7 @@ public void schedule(TimerTask task, long delay) {
*
* @param task task to be scheduled.
* @param time time at which task is to be executed.
- * @throws IllegalArgumentException if time.getTime() is negative.
+ * @throws IllegalArgumentException if time.getTime() is negative.
* @throws IllegalStateException if task was already scheduled or
* cancelled, timer was cancelled, or timer thread terminated.
*/
@@ -117,7 +117,7 @@ public void schedule(TimerTask task, Date time) {
* background activity), subsequent executions will be delayed as well.
* In the long run, the frequency of execution will generally be slightly
* lower than the reciprocal of the specified period (assuming the system
- * clock underlying Object.wait(long) is accurate).
+ * clock underlying Object.wait(long) is accurate).
*
* delay is negative, or
+ * delay + System.currentTimeMillis() is negative.
* @throws IllegalStateException if task was already scheduled or
* cancelled, timer was cancelled, or timer thread terminated.
*/
@@ -153,7 +153,7 @@ public void schedule(TimerTask task, long delay, long period) {
* background activity), subsequent executions will be delayed as well.
* In the long run, the frequency of execution will generally be slightly
* lower than the reciprocal of the specified period (assuming the system
- * clock underlying Object.wait(long) is accurate).
+ * clock underlying Object.wait(long) is accurate).
*
* time.getTime() is negative.
* @throws IllegalStateException if task was already scheduled or
* cancelled, timer was cancelled, or timer thread terminated.
*/
@@ -188,7 +188,7 @@ public void schedule(TimerTask task, Date firstTime, long period) {
* activity), two or more executions will occur in rapid succession to
* "catch up." In the long run, the frequency of execution will be
* exactly the reciprocal of the specified period (assuming the system
- * clock underlying Object.wait(long) is accurate).
+ * clock underlying Object.wait(long) is accurate).
*
* delay is negative, or
+ * delay + System.currentTimeMillis() is negative.
* @throws IllegalStateException if task was already scheduled or
* cancelled, timer was cancelled, or timer thread terminated.
*/
@@ -225,7 +225,7 @@ public void scheduleAtFixedRate(TimerTask task, long delay, long period) {
* activity), two or more executions will occur in rapid succession to
* "catch up." In the long run, the frequency of execution will be
* exactly the reciprocal of the specified period (assuming the system
- * clock underlying Object.wait(long) is accurate).
+ * clock underlying Object.wait(long) is accurate).
*
* time.getTime() is negative.
* @throws IllegalStateException if task was already scheduled or
* cancelled, timer was cancelled, or timer thread terminated.
*/
diff --git a/src/java/org/jivesoftware/openfire/plugin/spark/manager/SparkDownloadServlet.java b/src/java/org/jivesoftware/openfire/plugin/spark/manager/SparkDownloadServlet.java
index 4286845e4..6c291861f 100644
--- a/src/java/org/jivesoftware/openfire/plugin/spark/manager/SparkDownloadServlet.java
+++ b/src/java/org/jivesoftware/openfire/plugin/spark/manager/SparkDownloadServlet.java
@@ -33,9 +33,8 @@
import java.util.List;
/**
- * Provides support for downloading the Jive Spark IM client.
- * (Spark).