import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
public class OffsetBasedPageRequest implements Pageable {
private int offset;
private int limit;
private Sort sort;
public OffsetBasedPageRequest(int offset, int limit, Sort sort) {
this.offset = offset;
this.limit = limit;
this.sort = sort;
}
public OffsetBasedPageRequest(int offset, int limit) {
this.offset = offset;
this.limit = limit;
}
@Override
public int getPageNumber() {
return offset / limit;
}
@Override
public int getPageSize() {
return limit;
}
@Override
public Pageable next() {
return new OffsetBasedPageRequest(offset + limit, limit, sort);
}
@Override
public Pageable previousOrFirst() {
if(offset == 0) {
return this;
}
if(offset < limit) {
return new OffsetBasedPageRequest(0, offset, sort);
}
return new OffsetBasedPageRequest(offset - limit, limit, sort);
}
@Override
public Pageable first() {
return new OffsetBasedPageRequest(0, limit, sort);
}
@Override
public boolean hasPrevious() {
return offset > 0;
}
@Override
public long getOffset() {
return offset;
}
@Override
public Sort getSort() {
return sort;
}
}