This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 10.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.0.x by this push: new 2fe9e5f515 Refactor. Replace BaseSessionComparator with Comparator.comparing... 2fe9e5f515 is described below commit 2fe9e5f5154a59e876bab932bd63e1a37603229f 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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org