diff --git a/dspace-api/src/main/java/org/dspace/content/BitstreamServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/BitstreamServiceImpl.java index 8b454fc8fd..2af5010fb5 100644 --- a/dspace-api/src/main/java/org/dspace/content/BitstreamServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/BitstreamServiceImpl.java @@ -95,6 +95,12 @@ public class BitstreamServiceImpl extends DSpaceObjectServiceImpl imp return bitstreamDAO.findAll(context, Bitstream.class); } + @Override + public Iterator findAll(Context context, int limit, int offset) throws SQLException + { + return bitstreamDAO.findAll(context, limit, offset); + } + @Override public Bitstream create(Context context, InputStream is) throws IOException, SQLException { // Store the bits diff --git a/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java index 916be3d62a..7ad0126236 100644 --- a/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java @@ -200,6 +200,11 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl implements It return itemDAO.findAll(context, true); } + @Override + public Iterator findAll(Context context, Integer limit, Integer offset) throws SQLException { + return itemDAO.findAll(context, true, limit, offset); + } + @Override public Iterator findAllUnfiltered(Context context) throws SQLException { return itemDAO.findAll(context, true, true); diff --git a/dspace-api/src/main/java/org/dspace/content/dao/BitstreamDAO.java b/dspace-api/src/main/java/org/dspace/content/dao/BitstreamDAO.java index c568d838e6..268ddab920 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/BitstreamDAO.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/BitstreamDAO.java @@ -26,6 +26,8 @@ import java.util.List; */ public interface BitstreamDAO extends DSpaceObjectLegacySupportDAO { + public Iterator findAll(Context context, int limit, int offset) throws SQLException; + public List findDeletedBitstreams(Context context) throws SQLException; public List findDuplicateInternalIdentifier(Context context, Bitstream bitstream) throws SQLException; diff --git a/dspace-api/src/main/java/org/dspace/content/dao/ItemDAO.java b/dspace-api/src/main/java/org/dspace/content/dao/ItemDAO.java index 80f7fa834d..466b2ce0f8 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/ItemDAO.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/ItemDAO.java @@ -30,6 +30,8 @@ public interface ItemDAO extends DSpaceObjectLegacySupportDAO { public Iterator findAll(Context context, boolean archived) throws SQLException; + public Iterator findAll(Context context, boolean archived, int limit, int offset) throws SQLException; + public Iterator findAll(Context context, boolean archived, boolean withdrawn) throws SQLException; /** diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java index 0377c76abf..0008b9848b 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/BitstreamDAOImpl.java @@ -153,4 +153,12 @@ public class BitstreamDAOImpl extends AbstractHibernateDSODAO impleme " and bit.id not in (select col.logo.id from Collection col)" + " and bit.id not in (select bun.primaryBitstream.id from Bundle bun)")); } + + @Override + public Iterator findAll(Context context, int limit, int offset) throws SQLException { + Query query = createQuery(context, "select b FROM Bitstream b"); + query.setFirstResult(offset); + query.setMaxResults(limit); + return iterate(query); + } } diff --git a/dspace-api/src/main/java/org/dspace/content/dao/impl/ItemDAOImpl.java b/dspace-api/src/main/java/org/dspace/content/dao/impl/ItemDAOImpl.java index 8540fd88ad..df54923da3 100644 --- a/dspace-api/src/main/java/org/dspace/content/dao/impl/ItemDAOImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/dao/impl/ItemDAOImpl.java @@ -55,6 +55,16 @@ public class ItemDAOImpl extends AbstractHibernateDSODAO implements ItemDA return iterate(query); } + @Override + public Iterator findAll(Context context, boolean archived, int limit, int offset) throws SQLException { + Query query = createQuery(context, "FROM Item WHERE inArchive= :in_archive"); + query.setParameter("in_archive", archived); + query.setFirstResult(offset); + query.setMaxResults(limit); + return iterate(query); + } + + @Override public Iterator findAll(Context context, boolean archived, boolean withdrawn) throws SQLException { Query query = createQuery(context, "FROM Item WHERE inArchive= :in_archive or withdrawn = :withdrawn"); diff --git a/dspace-api/src/main/java/org/dspace/content/service/BitstreamService.java b/dspace-api/src/main/java/org/dspace/content/service/BitstreamService.java index 9b3ece58d0..d536f5670c 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/BitstreamService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/BitstreamService.java @@ -27,6 +27,8 @@ public interface BitstreamService extends DSpaceObjectService, DSpace public List findAll(Context context) throws SQLException; + public Iterator findAll(Context context, int limit, int offset) throws SQLException; + /** * Create a new bitstream, with a new ID. The checksum and file size are * calculated. No authorization checks are made in this method. diff --git a/dspace-api/src/main/java/org/dspace/content/service/ItemService.java b/dspace-api/src/main/java/org/dspace/content/service/ItemService.java index a28e947dbf..75aaffda27 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/ItemService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/ItemService.java @@ -69,6 +69,18 @@ public interface ItemService extends DSpaceObjectService, DSpaceObjectLega */ public Iterator findAll(Context context) throws SQLException; + /** + * Get all the items in the archive. Only items with the "in archive" flag + * set are included. The order of the list is indeterminate. + * + * @param context DSpace context object + * @param limit limit + * @param offset offset + * @return an iterator over the items in the archive. + * @throws SQLException if database error + */ + public Iterator findAll(Context context, Integer limit, Integer offset) throws SQLException; + /** * Get all "final" items in the archive, both archived ("in archive" flag) or * withdrawn items are included. The order of the list is indeterminate. diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/BitstreamRestRepository.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/BitstreamRestRepository.java index ea5fafb623..76163f8706 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/BitstreamRestRepository.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/BitstreamRestRepository.java @@ -8,6 +8,8 @@ package org.dspace.app.rest.repository; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.UUID; @@ -57,11 +59,15 @@ public class BitstreamRestRepository extends DSpaceRestRepository findAll(Context context, Pageable pageable) { - List bit = null; + List bit = new ArrayList(); + Iterator it = null; int total = 0; try { total = bs.countTotal(context); - bit = bs.findAll(context); + it = bs.findAll(context, pageable.getPageSize(), pageable.getOffset()); + while(it.hasNext()) { + bit.add(it.next()); + } } catch (SQLException e) { throw new RuntimeException(e.getMessage(), e); } diff --git a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/ItemRestRepository.java b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/ItemRestRepository.java index 8ab401760a..41fa57ce90 100644 --- a/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/ItemRestRepository.java +++ b/dspace-spring-rest/src/main/java/org/dspace/app/rest/repository/ItemRestRepository.java @@ -65,7 +65,7 @@ public class ItemRestRepository extends DSpaceRestRepository { int total = 0; try { total = is.countTotal(context); - it = is.findAll(context); + it = is.findAll(context, pageable.getPageSize(), pageable.getOffset()); while (it.hasNext()) { Item i = it.next(); items.add(i);