Skip to content

Commit

Permalink
Update the paging calculation, to correctly handle requests from the …
Browse files Browse the repository at this point in the history
…Scroller plugin

Fix #23
  • Loading branch information
darrachequesne committed Aug 18, 2016
1 parent 73db1d6 commit 5aefdde
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ public <R> DataTablesOutput<R> findAll(DataTablesInput input, Predicate addition
Predicate preFilteringPredicate, Converter<T, R> converter) {
DataTablesOutput<R> output = new DataTablesOutput<R>();
output.setDraw(input.getDraw());
if (input.getLength() == 0) {
return output;
}

try {
long recordsTotal = preFilteringPredicate == null ? count() : count(preFilteringPredicate);
if (recordsTotal == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public <R> DataTablesOutput<R> findAll(DataTablesInput input,
Converter<T, R> converter) {
DataTablesOutput<R> output = new DataTablesOutput<R>();
output.setDraw(input.getDraw());
if (input.getLength() == 0) {
return output;
}

try {
long recordsTotal =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.ArrayList;
import java.util.List;

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
Expand Down Expand Up @@ -42,7 +41,7 @@ public static Pageable getPageable(DataTablesInput input) {
input.setStart(0);
input.setLength(Integer.MAX_VALUE);
}
return new PageRequest(input.getStart() / input.getLength(), input.getLength(), sort);
return new DataTablesPageRequest(input.getStart(), input.getLength(), sort);
}

public static boolean isBoolean(String filterValue) {
Expand All @@ -55,4 +54,57 @@ public static String getLikeFilterValue(String filterValue) {
+ "%";
}

private static class DataTablesPageRequest implements Pageable {

private final int offset;
private final int pageSize;
private final Sort sort;

public DataTablesPageRequest(int offset, int pageSize, Sort sort) {
this.offset = offset;
this.pageSize = pageSize;
this.sort = sort;
}

@Override
public int getOffset() {
return offset;
}

@Override
public int getPageSize() {
return pageSize;
}

@Override
public Sort getSort() {
return sort;
}

@Override
public Pageable next() {
throw new UnsupportedOperationException();
}

@Override
public Pageable previousOrFirst() {
throw new UnsupportedOperationException();
}

@Override
public Pageable first() {
throw new UnsupportedOperationException();
}

@Override
public boolean hasPrevious() {
throw new UnsupportedOperationException();
}

@Override
public int getPageNumber() {
throw new UnsupportedOperationException();
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,8 @@ public void testWithZeroLength() {
input.setLength(0);
DataTablesOutput<User> output = userRepository.findAll(input);
assertNotNull(output);
assertNotNull(output.getError());
assertEquals(output.getError(), "java.lang.ArithmeticException: / by zero");
assertEquals(0, output.getData().size());
assertEquals(0, output.getRecordsFiltered());
}

@Test
Expand Down Expand Up @@ -278,6 +278,27 @@ public UserDto convert(User user) {
assertEquals("BLOCKED", user.getStatus());
}

@Test
public void testWithFancyPaging() {
DataTablesInput input = getBasicInput();

input.setLength(5);
input.setStart(7);
DataTablesOutput<User> output = userRepository.findAll(input);
assertNotNull(output);
assertNull(output.getError());
assertEquals(5, output.getData().size());
assertEquals(8, (int) output.getData().get(0).getId());
assertEquals(8 + 5 - 1, (int) output.getData().get(4).getId());

input.setLength(7);
input.setStart(22);
output = userRepository.findAll(input);
assertNotNull(output);
assertEquals(2, output.getData().size());
assertEquals(23, (int) output.getData().get(0).getId());
}

/**
*
* @return basic input parameters
Expand Down

0 comments on commit 5aefdde

Please sign in to comment.