diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/AbstractPaginatedDataItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/AbstractPaginatedDataItemReader.java index 6e5c09a01..6d75321d2 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/AbstractPaginatedDataItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/AbstractPaginatedDataItemReader.java @@ -2,10 +2,21 @@ package org.springframework.batch.item.data; import java.util.Iterator; +import org.springframework.batch.item.ItemReader; +import org.springframework.batch.item.ItemStreamReader; import org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader; +/** + * A base class that handles basic reading logic based on the paginated + * semantics of Spring Data's paginated facilities. It also handles the + * semantics required for restartability based on those facilities. + * + * @author Michael Minella + * @since 2.2 + * @param Type of item to be read + */ public abstract class AbstractPaginatedDataItemReader extends - AbstractItemCountingItemStreamItemReader { +AbstractItemCountingItemStreamItemReader { protected volatile int page = 0; @@ -15,6 +26,11 @@ public abstract class AbstractPaginatedDataItemReader extends private Object lock = new Object(); + /** + * The number of items to be read with each page. + * + * @param pageSize the number of items + */ public void setPageSize(int pageSize) { this.pageSize = pageSize; } @@ -44,7 +60,19 @@ public abstract class AbstractPaginatedDataItemReader extends } } - protected abstract Iterator doPageRead(); + /** + * Method this {@link ItemStreamReader} delegates to + * for the actual work of reading a page. Each time + * this method is called, the resulting {@link Iterator} + * should contain the items read within the next page. + *

+ * If the {@link Iterator} is empty or null when it is + * returned, this {@link ItemReader} will assume that the + * input has been exhausted. + * + * @return an {@link Iterator} containing the items within a page. + */ + protected abstract Iterator doPageRead(); @Override protected void doOpen() throws Exception { @@ -60,7 +88,7 @@ public abstract class AbstractPaginatedDataItemReader extends page = itemLastIndex / pageSize; int current = itemLastIndex % pageSize; - Iterator initialPage = doPageRead(); + Iterator initialPage = doPageRead(); for(; current >= 0; current--) { initialPage.next(); diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/RepositoryItemWriter.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/RepositoryItemWriter.java index 24f9edb83..6da207ca3 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/RepositoryItemWriter.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/data/RepositoryItemWriter.java @@ -84,6 +84,7 @@ public class RepositoryItemWriter implements ItemWriter, InitializingBean { * * @see org.springframework.batch.item.ItemWriter#write(java.util.List) */ + @Override public void write(List items) throws Exception { if(!CollectionUtils.isEmpty(items)) { doWrite(items); @@ -112,8 +113,9 @@ public class RepositoryItemWriter implements ItemWriter, InitializingBean { /** * Check mandatory properties - there must be a repository. */ + @Override public void afterPropertiesSet() throws Exception { - Assert.state(repository != null, "A CRUDRepository is required"); + Assert.state(repository != null, "A CrudRepository implementation is required"); }