diff --git a/commafeed-server/src/main/java/com/commafeed/backend/FixedSizeSortedSet.java b/commafeed-server/src/main/java/com/commafeed/backend/FixedSizeSortedList.java similarity index 85% rename from commafeed-server/src/main/java/com/commafeed/backend/FixedSizeSortedSet.java rename to commafeed-server/src/main/java/com/commafeed/backend/FixedSizeSortedList.java index 5de30477..cc5e531d 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/FixedSizeSortedSet.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/FixedSizeSortedList.java @@ -10,14 +10,14 @@ import java.util.List; * * */ -public class FixedSizeSortedSet { +public class FixedSizeSortedList { private final List inner; private final Comparator comparator; private final int capacity; - public FixedSizeSortedSet(int capacity, Comparator comparator) { + public FixedSizeSortedList(int capacity, Comparator comparator) { this.inner = new ArrayList<>(Math.max(0, capacity)); this.capacity = capacity < 0 ? Integer.MAX_VALUE : capacity; this.comparator = comparator; diff --git a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index fede9df1..1b8c8215 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -10,7 +10,7 @@ import org.apache.commons.lang3.builder.CompareToBuilder; import org.hibernate.SessionFactory; import com.commafeed.CommaFeedConfiguration; -import com.commafeed.backend.FixedSizeSortedSet; +import com.commafeed.backend.FixedSizeSortedList; import com.commafeed.backend.feed.FeedEntryKeyword; import com.commafeed.backend.feed.FeedEntryKeyword.Mode; import com.commafeed.backend.model.FeedEntry; @@ -199,9 +199,9 @@ public class FeedEntryStatusDAO extends GenericDAO { Comparator comparator = order == ReadingOrder.desc ? STATUS_COMPARATOR_DESC : STATUS_COMPARATOR_ASC; - FixedSizeSortedSet set = new FixedSizeSortedSet<>(capacity, comparator); + FixedSizeSortedList fssl = new FixedSizeSortedList<>(capacity, comparator); for (FeedSubscription sub : subs) { - FeedEntryStatus last = (order != null && set.isFull()) ? set.last() : null; + FeedEntryStatus last = (order != null && fssl.isFull()) ? fssl.last() : null; JPAQuery query = buildQuery(user, sub, unreadOnly, keywords, newerThan, -1, capacity, order, last, tag, minEntryId, maxEntryId); List tuples = query.select(entry.id, entry.updated, status.id, entry.content.title).fetch(); @@ -225,11 +225,11 @@ public class FeedEntryStatusDAO extends GenericDAO { status.setEntry(entry); status.setSubscription(sub); - set.add(status); + fssl.add(status); } } - List placeholders = set.asList(); + List placeholders = fssl.asList(); int size = placeholders.size(); if (size < offset) { return new ArrayList<>(); diff --git a/commafeed-server/src/test/java/com/commafeed/backend/FixedSizeSortedListTest.java b/commafeed-server/src/test/java/com/commafeed/backend/FixedSizeSortedListTest.java new file mode 100644 index 00000000..85f2eb6f --- /dev/null +++ b/commafeed-server/src/test/java/com/commafeed/backend/FixedSizeSortedListTest.java @@ -0,0 +1,90 @@ +package com.commafeed.backend; + +import java.util.Comparator; + +import org.apache.commons.lang3.ObjectUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class FixedSizeSortedListTest { + + private static final Comparator COMP = ObjectUtils::compare; + + private FixedSizeSortedList list; + + @BeforeEach + public void init() { + list = new FixedSizeSortedList<>(3, COMP); + } + + @Test + void testSimpleAdd() { + list.add("0"); + list.add("1"); + list.add("2"); + + Assertions.assertEquals("0", list.asList().get(0)); + Assertions.assertEquals("1", list.asList().get(1)); + Assertions.assertEquals("2", list.asList().get(2)); + } + + @Test + void testIsFull() { + list.add("0"); + list.add("1"); + + Assertions.assertFalse(list.isFull()); + list.add("2"); + Assertions.assertTrue(list.isFull()); + } + + @Test + void testOrder() { + list.add("2"); + list.add("1"); + list.add("0"); + + Assertions.assertEquals("0", list.asList().get(0)); + Assertions.assertEquals("1", list.asList().get(1)); + Assertions.assertEquals("2", list.asList().get(2)); + } + + @Test + void testEviction() { + list.add("7"); + list.add("8"); + list.add("9"); + + list.add("0"); + list.add("1"); + list.add("2"); + + Assertions.assertEquals("0", list.asList().get(0)); + Assertions.assertEquals("1", list.asList().get(1)); + Assertions.assertEquals("2", list.asList().get(2)); + } + + @Test + void testCapacity() { + list.add("0"); + list.add("1"); + list.add("2"); + list.add("3"); + + Assertions.assertEquals(3, list.asList().size()); + } + + @Test + void testLast() { + list.add("0"); + list.add("1"); + list.add("2"); + + Assertions.assertEquals("2", list.last()); + + list.add("3"); + + Assertions.assertEquals("2", list.last()); + } +} diff --git a/commafeed-server/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java b/commafeed-server/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java deleted file mode 100644 index dc1616d4..00000000 --- a/commafeed-server/src/test/java/com/commafeed/backend/FixedSizeSortedSetTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.commafeed.backend; - -import java.util.Comparator; - -import org.apache.commons.lang3.ObjectUtils; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -class FixedSizeSortedSetTest { - - private static final Comparator COMP = ObjectUtils::compare; - - private FixedSizeSortedSet set; - - @BeforeEach - public void init() { - set = new FixedSizeSortedSet<>(3, COMP); - } - - @Test - void testSimpleAdd() { - set.add("0"); - set.add("1"); - set.add("2"); - - Assertions.assertEquals("0", set.asList().get(0)); - Assertions.assertEquals("1", set.asList().get(1)); - Assertions.assertEquals("2", set.asList().get(2)); - } - - @Test - void testIsFull() { - set.add("0"); - set.add("1"); - - Assertions.assertFalse(set.isFull()); - set.add("2"); - Assertions.assertTrue(set.isFull()); - } - - @Test - void testOrder() { - set.add("2"); - set.add("1"); - set.add("0"); - - Assertions.assertEquals("0", set.asList().get(0)); - Assertions.assertEquals("1", set.asList().get(1)); - Assertions.assertEquals("2", set.asList().get(2)); - } - - @Test - void testEviction() { - set.add("7"); - set.add("8"); - set.add("9"); - - set.add("0"); - set.add("1"); - set.add("2"); - - Assertions.assertEquals("0", set.asList().get(0)); - Assertions.assertEquals("1", set.asList().get(1)); - Assertions.assertEquals("2", set.asList().get(2)); - } - - @Test - void testCapacity() { - set.add("0"); - set.add("1"); - set.add("2"); - set.add("3"); - - Assertions.assertEquals(3, set.asList().size()); - } - - @Test - void testLast() { - set.add("0"); - set.add("1"); - set.add("2"); - - Assertions.assertEquals("2", set.last()); - - set.add("3"); - - Assertions.assertEquals("2", set.last()); - } -}