BATCH-2232: Fixed generics for RepositoryItemReader#setRepository

This commit is contained in:
Michael Minella
2014-05-15 09:49:55 -05:00
parent c8d77c055d
commit 4fe22fc511
2 changed files with 49 additions and 18 deletions

View File

@@ -15,11 +15,6 @@
*/
package org.springframework.batch.item.data;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.item.ExecutionContext;
@@ -36,6 +31,11 @@ import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.MethodInvoker;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* <p>
* A {@link org.springframework.batch.item.ItemReader} that reads records utilizing
@@ -65,7 +65,7 @@ public class RepositoryItemReader<T> extends AbstractItemCountingItemStreamItemR
protected Log logger = LogFactory.getLog(getClass());
private PagingAndSortingRepository<T, ?> repository;
private PagingAndSortingRepository<?, ?> repository;
private Sort sort;
@@ -118,7 +118,7 @@ public class RepositoryItemReader<T> extends AbstractItemCountingItemStreamItemR
*
* @param repository underlying repository for input to be read from.
*/
public void setRepository(PagingAndSortingRepository<T, ?> repository) {
public void setRepository(PagingAndSortingRepository<?, ?> repository) {
this.repository = repository;
}

View File

@@ -15,23 +15,13 @@
*/
package org.springframework.batch.item.data;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.batch.item.adapter.DynamicMethodInvocationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@@ -39,6 +29,18 @@ import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
public class RepositoryItemReaderTests {
private RepositoryItemReader<Object> reader;
@@ -205,4 +207,33 @@ public class RepositoryItemReaderTests {
assertTrue(dmie.getCause() instanceof NoSuchMethodException);
}
}
@Test
public void testDifferentTypes() throws Exception {
TestRepository differentRepository = mock(TestRepository.class);
RepositoryItemReader<String> reader = new RepositoryItemReader<String>();
sorts = new HashMap<String, Sort.Direction>();
sorts.put("id", Direction.ASC);
reader.setRepository(differentRepository);
reader.setPageSize(1);
reader.setSort(sorts);
reader.setMethodName("findFirstNames");
ArgumentCaptor<PageRequest> pageRequestContainer = ArgumentCaptor.forClass(PageRequest.class);
when(differentRepository.findFirstNames(pageRequestContainer.capture())).thenReturn(new PageImpl<String>(new ArrayList<String>(){{
add("result");
}}));
assertEquals("result", reader.doRead());
Pageable pageRequest = pageRequestContainer.getValue();
assertEquals(0, pageRequest.getOffset());
assertEquals(0, pageRequest.getPageNumber());
assertEquals(1, pageRequest.getPageSize());
assertEquals("id: ASC", pageRequest.getSort().toString());
}
public static interface TestRepository extends PagingAndSortingRepository<Map, Long> {
Page<String> findFirstNames(Pageable pageable);
}
}