From 5c439c38f40b7a8815a9802732698b2e90c70741 Mon Sep 17 00:00:00 2001 From: Stephanie Gredell Date: Wed, 24 Jan 2024 23:42:01 -0800 Subject: [PATCH] Initial commit of paginator class --- app/src/main/java/musicbot/Paginator.java | 65 +++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 app/src/main/java/musicbot/Paginator.java diff --git a/app/src/main/java/musicbot/Paginator.java b/app/src/main/java/musicbot/Paginator.java new file mode 100644 index 0000000..fa9fd6e --- /dev/null +++ b/app/src/main/java/musicbot/Paginator.java @@ -0,0 +1,65 @@ +package musicbot; + +import java.util.ArrayList; +import java.util.List; + +public class Paginator { + + public static class PaginatedItems { + private List list = new ArrayList(); + private static boolean isLastPage = true; + private static int nextPageNum; + + public void set(List items){ + list = items; + } + + public void setNextPageNum(final int nextPage) { + nextPageNum = nextPage; + } + + public int getNextPageNum() { + return nextPageNum; + } + + public void setIsLastPage(final boolean isLastPageBool) { + isLastPage = isLastPageBool; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public List get() { + return list; + } + } + + public PaginatedItems paginate( + final List tracks, + final int numItemsPerPage, + final int pageNumber + ) { + if (tracks.isEmpty()) { + return new PaginatedItems<>(); + } + + final int maxSize = tracks.size(); + final int maxPage = (int) Math.floor(maxSize / numItemsPerPage); + final int maxIndex = numItemsPerPage * pageNumber; + final int baseIndex = maxIndex - numItemsPerPage; + final int nextPage = pageNumber + 1; + final PaginatedItems paginatedItems = new PaginatedItems<>(); + + if (nextPage <= maxPage) { + paginatedItems.set(tracks.subList(baseIndex, maxIndex)); + paginatedItems.setIsLastPage(false); + paginatedItems.setNextPageNum(nextPage); + } else { + paginatedItems.set(tracks.subList(maxIndex, maxSize)); + paginatedItems.setIsLastPage(true); + } + + return paginatedItems; + } +}