You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/09/21 16:32:15 UTC
[tomcat] branch main updated: Refactor. Replace BaseSessionComparator with Comparator.comparing...
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push:
new 23fec29de2 Refactor. Replace BaseSessionComparator with Comparator.comparing...
23fec29de2 is described below
commit 23fec29de2a486bf61378de95fd5333445273525
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Sep 21 17:31:58 2022 +0100
Refactor. Replace BaseSessionComparator with Comparator.comparing...
Simplifies existing code. No functional change.
---
.../catalina/manager/HTMLManagerServlet.java | 98 ++++++++--------------
.../manager/util/BaseSessionComparator.java | 3 +
2 files changed, 39 insertions(+), 62 deletions(-)
diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java b/java/org/apache/catalina/manager/HTMLManagerServlet.java
index 5e83630f5d..4e6de299bd 100644
--- a/java/org/apache/catalina/manager/HTMLManagerServlet.java
+++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java
@@ -28,10 +28,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;
+import java.util.function.Function;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@@ -44,7 +44,6 @@ import org.apache.catalina.Context;
import org.apache.catalina.DistributedManager;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
-import org.apache.catalina.manager.util.BaseSessionComparator;
import org.apache.catalina.manager.util.SessionUtils;
import org.apache.catalina.util.ContextName;
import org.apache.catalina.util.ServerInfo;
@@ -1079,79 +1078,54 @@ public final class HTMLManagerServlet extends ManagerServlet {
protected Comparator<Session> getComparator(String sortBy) {
Comparator<Session> comparator = null;
if ("CreationTime".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Date>() {
- @Override
- public Comparable<Date> getComparableObject(Session session) {
- return new Date(session.getCreationTime());
- }
- };
+ return Comparator.comparingLong(Session::getCreationTime);
+
} else if ("id".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<String>() {
- @Override
- public Comparable<String> getComparableObject(Session session) {
- return session.getId();
- }
- };
+ return comparingNullable(Session::getId);
+
} else if ("LastAccessedTime".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Date>() {
- @Override
- public Comparable<Date> getComparableObject(Session session) {
- return new Date(session.getLastAccessedTime());
- }
- };
+ return Comparator.comparingLong(Session::getLastAccessedTime);
+
} else if ("MaxInactiveInterval".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Integer>() {
- @Override
- public Comparable<Integer> getComparableObject(Session session) {
- return Integer.valueOf(session.getMaxInactiveInterval());
- }
- };
+ return Comparator.comparingInt(Session::getMaxInactiveInterval);
+
} else if ("new".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Boolean>() {
- @Override
- public Comparable<Boolean> getComparableObject(Session session) {
- return Boolean.valueOf(session.getSession().isNew());
- }
- };
+ return Comparator.comparing(s -> Boolean.valueOf(s.getSession().isNew()));
+
} else if ("locale".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<String>() {
- @Override
- public Comparable<String> getComparableObject(Session session) {
- return JspHelper.guessDisplayLocaleFromSession(session);
- }
- };
+ return Comparator.comparing(JspHelper::guessDisplayLocaleFromSession);
+
} else if ("user".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<String>() {
- @Override
- public Comparable<String> getComparableObject(Session session) {
- return JspHelper.guessDisplayUserFromSession(session);
- }
- };
+ return comparingNullable(JspHelper::guessDisplayUserFromSession);
+
} else if ("UsedTime".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Date>() {
- @Override
- public Comparable<Date> getComparableObject(Session session) {
- return new Date(SessionUtils.getUsedTimeForSession(session));
- }
- };
+ return Comparator.comparingLong(SessionUtils::getUsedTimeForSession);
+
} else if ("InactiveTime".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Date>() {
- @Override
- public Comparable<Date> getComparableObject(Session session) {
- return new Date(SessionUtils.getInactiveTimeForSession(session));
- }
- };
+ return Comparator.comparingLong(SessionUtils::getInactiveTimeForSession);
+
} else if ("TTL".equalsIgnoreCase(sortBy)) {
- comparator = new BaseSessionComparator<Date>() {
- @Override
- public Comparable<Date> getComparableObject(Session session) {
- return new Date(SessionUtils.getTTLForSession(session));
- }
- };
+ return Comparator.comparingLong(SessionUtils::getTTLForSession);
+
}
return comparator;
}
+
+ /*
+ * Like Comparator.comparing() but allows objects being compared to be null.
+ * null values are ordered before all other values.
+ */
+ private static <U extends Comparable<? super U>> Comparator<Session> comparingNullable(
+ Function<Session, ? extends U> keyExtractor) {
+ return (s1, s2) -> {
+ U c1 = keyExtractor.apply(s1);
+ U c2 = keyExtractor.apply(s2);
+ return c1 == null ? (c2 == null ? 0 : -1) : (c2 == null ? 1 : c1.compareTo(c2));
+ };
+ }
+
+
// ------------------------------------------------------ Private Constants
// These HTML sections are broken in relatively small sections, because of
diff --git a/java/org/apache/catalina/manager/util/BaseSessionComparator.java b/java/org/apache/catalina/manager/util/BaseSessionComparator.java
index 30f674ae0e..83ab783acb 100644
--- a/java/org/apache/catalina/manager/util/BaseSessionComparator.java
+++ b/java/org/apache/catalina/manager/util/BaseSessionComparator.java
@@ -26,7 +26,10 @@ import org.apache.catalina.Session;
* @param <T> The type of the session content to be compared
*
* @author Cédrik LIME
+ *
+ * @deprecated Unused. Will be removed in Tomcat 10.1.x
*/
+@Deprecated
public abstract class BaseSessionComparator<T> implements Comparator<Session> {
public abstract Comparable<T> getComparableObject(Session session);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org