From 767bd05ce16fa0f06b54412cd9ff79adc7213235 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Thu, 1 May 2014 13:02:44 +0000 Subject: [PATCH] SusiMail: new sorter base class --- .../src/src/i2p/susi/webmail/WebMail.java | 131 ++++++++---------- 1 file changed, 58 insertions(+), 73 deletions(-) diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java index 399b6f0043..f562cb6cb5 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -231,25 +231,24 @@ public class WebMail extends HttpServlet ****/ /** - * sorts Mail objects by sender field + * Base for the various sorters * - * @author susi + * @since 0.9.13 */ - private static class SenderSorter implements Comparator<String> { - private final Comparator collator = Collator.getInstance(); + private abstract static class SorterBase implements Comparator<String> { private final MailCache mailCache; /** * Set MailCache object, where to get Mails from * @param mailCache */ - public SenderSorter( MailCache mailCache ) + protected SorterBase( MailCache mailCache ) { this.mailCache = mailCache; } - /* (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + /** + * Gets mail from the cache, checks for null, then compares */ public int compare(String arg0, String arg1) { Mail a = mailCache.getMail( arg0, MailCache.FETCH_HEADER ); @@ -258,42 +257,61 @@ public class WebMail extends HttpServlet return (b == null) ? 0 : 1; if (b == null) return -1; - String as = a.sender.replace("\"", "").replace("<", "").replace(">", ""); - String bs = b.sender.replace("\"", "").replace("<", "").replace(">", ""); - int rv = collator.compare(as, bs); + int rv = compare(a, b); if (rv != 0) return rv; - return DateSorter.compare(a, b); + return fallbackCompare(a, b); } + + /** + * @param a non-null + * @param b non-null + */ + protected abstract int compare(Mail a, Mail b); + + /** + * @param a non-null + * @param b non-null + */ + private int fallbackCompare(Mail a, Mail b) { + return DateSorter.scompare(a, b); + } } /** - * sorts Mail objects by subject field + * sorts Mail objects by sender field + * * @author susi */ - private static class SubjectSorter implements Comparator<String> { + private static class SenderSorter extends SorterBase { private final Comparator collator = Collator.getInstance(); - private final MailCache mailCache; - /** - * Set MailCache object, where to get Mails from - * @param mailCache - */ + + public SenderSorter( MailCache mailCache ) + { + super(mailCache); + } + + protected int compare(Mail a, Mail b) { + String as = a.sender.replace("\"", "").replace("<", "").replace(">", ""); + String bs = b.sender.replace("\"", "").replace("<", "").replace(">", ""); + return collator.compare(as, bs); + } + } + + /** + * sorts Mail objects by subject field + * @author susi + */ + private static class SubjectSorter extends SorterBase { + private final Comparator collator = Collator.getInstance(); + public SubjectSorter( MailCache mailCache ) { - this.mailCache = mailCache; + super(mailCache); } - /* (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(String arg0, String arg1) { - Mail a = mailCache.getMail( arg0, MailCache.FETCH_HEADER ); - Mail b = mailCache.getMail( arg1, MailCache.FETCH_HEADER ); - if (a == null) - return (b == null) ? 0 : 1; - if (b == null) - return -1; + protected int compare(Mail a, Mail b) { String as = a.formattedSubject; String bs = b.formattedSubject; if (as.toLowerCase().startsWith("re:")) { @@ -324,10 +342,7 @@ public class WebMail extends HttpServlet bs = bs.substring(xfwd.length()).trim(); } } - int rv = collator.compare(as, bs); - if (rv != 0) - return rv; - return DateSorter.compare(a, b); + return collator.compare(as, bs); } } @@ -335,29 +350,15 @@ public class WebMail extends HttpServlet * sorts Mail objects by date field * @author susi */ - private static class DateSorter implements Comparator<String> { + private static class DateSorter extends SorterBase { - private final MailCache mailCache; - /** - * Set MailCache object, where to get Mails from - * @param mailCache - */ public DateSorter( MailCache mailCache ) { - this.mailCache = mailCache; + super(mailCache); } - /* (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(String arg0, String arg1) { - Mail a = mailCache.getMail( arg0, MailCache.FETCH_HEADER ); - Mail b = mailCache.getMail( arg1, MailCache.FETCH_HEADER ); - if (a == null) - return (b == null) ? 0 : 1; - if (b == null) - return -1; - return compare(a, b); + protected int compare(Mail a, Mail b) { + return scompare(a, b); } /** @@ -365,40 +366,24 @@ public class WebMail extends HttpServlet * @param a non-null * @param b non-null */ - public static int compare(Mail a, Mail b) { + public static int scompare(Mail a, Mail b) { return a.date != null ? ( b.date != null ? a.date.compareTo( b.date ) : -1 ) : ( b.date != null ? 1 : 0 ); } } + /** * sorts Mail objects by message size * @author susi */ - private static class SizeSorter implements Comparator<String> { + private static class SizeSorter extends SorterBase { - private final MailCache mailCache; - /** - * Set MailCache object, where to get Mails from - * @param mailCache - */ public SizeSorter( MailCache mailCache ) { - this.mailCache = mailCache; + super(mailCache); } - /* (non-Javadoc) - * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) - */ - public int compare(String arg0, String arg1) { - Mail a = mailCache.getMail( arg0, MailCache.FETCH_HEADER ); - Mail b = mailCache.getMail( arg1, MailCache.FETCH_HEADER ); - if (a == null) - return (b == null) ? 0 : 1; - if (b == null) - return -1; - int rv = a.getSize() - b.getSize(); - if (rv != 0) - return rv; - return DateSorter.compare(a, b); + protected int compare(Mail a, Mail b) { + return a.getSize() - b.getSize(); } } -- GitLab