diff --git a/src/main/java/org/rometools/feed/module/sle/SleUtility.java b/src/main/java/org/rometools/feed/module/sle/SleUtility.java index b92ac6f..a08c106 100644 --- a/src/main/java/org/rometools/feed/module/sle/SleUtility.java +++ b/src/main/java/org/rometools/feed/module/sle/SleUtility.java @@ -56,11 +56,11 @@ public final class SleUtility { * @param groups Group fields (from the SimpleListExtension module) * @return Grouped list of entries. */ - public static List group(final List values, final Group[] groups) { - final SortableList list = values instanceof SortableList ? (SortableList) values : new SortableList(values); - final GroupStrategy gs = new GroupStrategy(); + public static List group(final List values, final Group[] groups) { + final SortableList list = getSortableList(values); + final GroupStrategy strategy = new GroupStrategy(); for (int i = groups.length - 1; i >= 0; i--) { - list.sortOnProperty(groups[i], true, gs); + list.sortOnProperty(groups[i], true, strategy); } return list; } @@ -73,13 +73,8 @@ public final class SleUtility { * @param ascending Sort ascending/descending. * @return Sorted list of values */ - public static List sort(final List values, final Sort sort, final boolean ascending) { - final SortableList list; - if (values instanceof SortableList) { - list = (SortableList) values; - } else { - list = new SortableList(values); - } + public static List sort(final List values, final Sort sort, final boolean ascending) { + final SortableList list = getSortableList(values); list.sortOnProperty(sort, ascending, new SortStrategy()); return list; } @@ -93,8 +88,8 @@ public final class SleUtility { * @param ascending Sort ascending/descending * @return Grouped and sorted list of entries. */ - public static List sortAndGroup(final List values, final Group[] groups, final Sort sort, final boolean ascending) { - List list = sort(values, sort, ascending); + public static List sortAndGroup(final List values, final Group[] groups, final Sort sort, final boolean ascending) { + List list = sort(values, sort, ascending); list = group(list, groups); return list; } @@ -115,4 +110,14 @@ public final class SleUtility { feed.copyFrom(copy); } + private static SortableList getSortableList(final List list) { + SortableList sortableList; + if (list instanceof SortableList) { + sortableList = (SortableList) list; + } else { + sortableList = new SortableList(list); + } + return sortableList; + } + } diff --git a/src/main/java/org/rometools/feed/module/sle/SortableList.java b/src/main/java/org/rometools/feed/module/sle/SortableList.java index d1c8318..7bf557b 100644 --- a/src/main/java/org/rometools/feed/module/sle/SortableList.java +++ b/src/main/java/org/rometools/feed/module/sle/SortableList.java @@ -5,11 +5,11 @@ import java.util.Collection; import com.sun.syndication.feed.module.Extendable; -class SortableList extends ArrayList { +class SortableList extends ArrayList { private static final long serialVersionUID = 1L; - public SortableList(final Collection c) { + public SortableList(final Collection c) { super(c); } @@ -20,10 +20,10 @@ class SortableList extends ArrayList { for (int i = 0; i < size() - 1; i++) { for (int j = i + 1; j < size(); j++) { - final Extendable o1 = get(i); + final T o1 = get(i); final Comparable oc1 = strat.getValue(o1, value); - final Extendable o2 = get(j); + final T o2 = get(j); final Comparable oc2 = strat.getValue(o2, value); System.out.println(oc1 + " < " + oc2); diff --git a/src/test/java/org/rometools/feed/module/sle/GroupAndSortTest.java b/src/test/java/org/rometools/feed/module/sle/GroupAndSortTest.java index e215175..75c5f50 100644 --- a/src/test/java/org/rometools/feed/module/sle/GroupAndSortTest.java +++ b/src/test/java/org/rometools/feed/module/sle/GroupAndSortTest.java @@ -37,41 +37,41 @@ public class GroupAndSortTest extends AbstractTestCase { final File testdata = new File(super.getTestFile("data/bookexample.xml")); final SyndFeed feed = new SyndFeedInput().build(testdata); - final List feedEntries = feed.getEntries(); - final List entries = new ArrayList(feedEntries); + List entries = feed.getEntries(); - final SimpleListExtension sle = (SimpleListExtension) feed.getModule(SimpleListExtension.URI); - final Sort[] sortFields = sle.getSortFields(); + final SimpleListExtension extention = (SimpleListExtension) feed.getModule(SimpleListExtension.URI); + final Sort[] sortFields = extention.getSortFields(); final Sort sortByDate = sortFields[1]; final Sort sortByTitle = sortFields[2]; // sort by date ascending - List sortedEntries = SleUtility.sort(entries, sortByDate, true); - SyndEntry entry = (SyndEntry) sortedEntries.get(0); + List sortedEntries = SleUtility.sort(entries, sortByDate, true); + SyndEntry entry = sortedEntries.get(0); assertEquals("Great Journeys of the Past", entry.getTitle()); // sort by date descending sortedEntries = SleUtility.sort(entries, sortByDate, false); - entry = (SyndEntry) sortedEntries.get(0); + entry = sortedEntries.get(0); assertEquals("Horror Stories, vol 16", entry.getTitle()); // sort by date ascending sortedEntries = SleUtility.sort(entries, sortByDate, true); // update first entry and reinitialize - entry = (SyndEntry) sortedEntries.get(0); + entry = sortedEntries.get(0); entry.setTitle("ZZZZZ"); SleUtility.initializeForSorting(feed); + entries = feed.getEntries(); // sort by title desc sortedEntries = SleUtility.sort(entries, sortByTitle, false); - entry = (SyndEntry) sortedEntries.get(0); + entry = sortedEntries.get(0); assertEquals("ZZZZZ", entry.getTitle()); // sort by title asc sortedEntries = SleUtility.sort(entries, sortByTitle, true); - entry = (SyndEntry) sortedEntries.get(0); + entry = sortedEntries.get(0); assertEquals("Horror Stories, vol 16", entry.getTitle()); }