From af24d345e1e19f1b84e7827ce10962d14cab3712 Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Wed, 7 Jan 2026 19:27:04 +0200 Subject: [PATCH] SPARK-1730: Extract CONTACT_ITEM_COMPARATOR --- .../java/org/jivesoftware/spark/UserManager.java | 9 +++------ .../org/jivesoftware/spark/ui/ContactGroup.java | 13 +++++-------- .../org/jivesoftware/spark/ui/ContactItem.java | 4 ++++ .../jivesoftware/spark/ui/RosterPickList.java | 16 +--------------- .../plugin/privacy/ui/PrivacyAddDialogUI.java | 16 +++------------- 5 files changed, 16 insertions(+), 42 deletions(-) diff --git a/core/src/main/java/org/jivesoftware/spark/UserManager.java b/core/src/main/java/org/jivesoftware/spark/UserManager.java index d9a05cfee..cb92dcff7 100644 --- a/core/src/main/java/org/jivesoftware/spark/UserManager.java +++ b/core/src/main/java/org/jivesoftware/spark/UserManager.java @@ -70,6 +70,8 @@ import java.util.List; import java.util.Map; import java.util.TimerTask; +import static org.jivesoftware.spark.ui.ContactItem.CONTACT_ITEM_COMPARATOR; + /** * Handles all users in the agent application. Each user or chatting user can be referenced from the User * Manager. You would use the UserManager to get visitors in a chat room or secondary agents. @@ -402,7 +404,7 @@ public class UserManager { } // Sort - contacts.sort(itemComparator); + contacts.sort(CONTACT_ITEM_COMPARATOR); final JContactItemField contactField = new JContactItemField( new ArrayList<>( contacts )); @@ -515,11 +517,6 @@ public class UserManager { }); } - /** - * Sorts ContactItems. - */ - final Comparator itemComparator = Comparator.comparing(item -> item.getDisplayName().toLowerCase()); - } diff --git a/core/src/main/java/org/jivesoftware/spark/ui/ContactGroup.java b/core/src/main/java/org/jivesoftware/spark/ui/ContactGroup.java index 9d8b3bf28..7053b9830 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/ContactGroup.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/ContactGroup.java @@ -38,6 +38,8 @@ import java.util.*; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import static org.jivesoftware.spark.ui.ContactItem.CONTACT_ITEM_COMPARATOR; + /** * Container representing a RosterGroup within the Contact List. */ @@ -238,7 +240,7 @@ public class ContactGroup extends CollapsiblePane implements MouseListener { } if (!preferences.isOfflineGroupVisible()) { - offlineContacts.sort(itemComparator); + offlineContacts.sort(CONTACT_ITEM_COMPARATOR); int index = offlineContacts.indexOf(offlineItem); int totalListSize = contactItems.size(); @@ -543,7 +545,7 @@ public class ContactGroup extends CollapsiblePane implements MouseListener { */ public List getContactItems() { final List list = new ArrayList<>(contactItems); - list.sort(itemComparator); + list.sort(CONTACT_ITEM_COMPARATOR); return list; } @@ -809,15 +811,10 @@ public class ContactGroup extends CollapsiblePane implements MouseListener { public Collection getOfflineContacts() { final List list = new ArrayList<>(offlineContacts); - list.sort(itemComparator); + list.sort(CONTACT_ITEM_COMPARATOR); return list; } - /** - * Sorts ContactItems. - */ - private final static Comparator itemComparator = Comparator.comparing(item -> item.getDisplayName().toLowerCase()); - /** * Returns true if this ContactGroup is the Offline Group. * diff --git a/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java b/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java index 87165841c..119a20bb3 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java @@ -24,6 +24,7 @@ import java.awt.Insets; import java.io.File; import java.net.MalformedURLException; import java.net.URL; +import java.util.Comparator; import javax.swing.Icon; import javax.swing.ImageIcon; @@ -58,6 +59,9 @@ import org.jxmpp.util.XmppStringUtils; public class ContactItem extends JPanel { private static final long serialVersionUID = 1514044406550293152L; + + public final static Comparator CONTACT_ITEM_COMPARATOR = Comparator.comparing(ContactItem::getDisplayName, String.CASE_INSENSITIVE_ORDER); + private final JLabel imageLabel; private final JLabel displayNameLabel; private final JLabel descriptionLabel; diff --git a/core/src/main/java/org/jivesoftware/spark/ui/RosterPickList.java b/core/src/main/java/org/jivesoftware/spark/ui/RosterPickList.java index 2b044cd6c..a9808522f 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/RosterPickList.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/RosterPickList.java @@ -79,7 +79,7 @@ public class RosterPickList extends JPanel { } // Sort Users - userList.sort(itemComparator); + userList.sort(ContactItem.CONTACT_ITEM_COMPARATOR); for (ContactItem item : userList) { model.addElement(item); @@ -148,18 +148,4 @@ public class RosterPickList extends JPanel { return selectedContacts; } - - /** - * Sorts ContactItems. - */ - final Comparator itemComparator = ( item1, item2 ) -> { - String nickname1 = item1.getDisplayName(); - String nickname2 = item2.getDisplayName(); - if (nickname1 == null || nickname2 == null) { - return 0; - } - - return nickname1.compareToIgnoreCase(nickname2); - }; - } diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/privacy/ui/PrivacyAddDialogUI.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/privacy/ui/PrivacyAddDialogUI.java index 3c4798e93..9988521c8 100644 --- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/privacy/ui/PrivacyAddDialogUI.java +++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/privacy/ui/PrivacyAddDialogUI.java @@ -23,7 +23,6 @@ import java.awt.Insets; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; -import java.util.Comparator; import java.util.List; @@ -51,6 +50,8 @@ import org.jivesoftware.spark.component.TitlePanel; import org.jivesoftware.spark.ui.ContactItem; import org.jivesoftware.spark.util.log.Log; +import static org.jivesoftware.spark.ui.ContactItem.CONTACT_ITEM_COMPARATOR; + /** * @author Bergunde Holger */ @@ -138,7 +139,7 @@ public class PrivacyAddDialogUI extends JPanel { } } - _userList.sort(itemComparator); + _userList.sort(CONTACT_ITEM_COMPARATOR); model.clear(); for (ContactItem item : _userList) { @@ -234,16 +235,5 @@ public class PrivacyAddDialogUI extends JPanel { return selectedContacts; } - /** - * Sorts ContactItems. - */ - final Comparator itemComparator = ( item1, item2 ) -> { - String nickname1 = item1.getDisplayName(); - String nickname2 = item2.getDisplayName(); - if (nickname1 == null || nickname2 == null) { - return 0; - } - return nickname1.compareToIgnoreCase(nickname2); - }; }