Skip to content

Commit

Permalink
[#795] fix offset parameter in spring data rest integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Mobe91 authored and beikov committed May 10, 2019
1 parent 9780fcc commit 0c53796
Show file tree
Hide file tree
Showing 12 changed files with 75 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import com.blazebit.persistence.spring.data.base.query.AbstractCriteriaQueryParameterBinder;
import com.blazebit.persistence.spring.data.base.query.JpaParameters;
import com.blazebit.persistence.spring.data.base.query.ParameterMetadataProvider;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import org.springframework.data.domain.Pageable;

/**
* Concrete version for Spring Data 1.x.
Expand All @@ -34,6 +36,11 @@ public CriteriaQueryParameterBinder(JpaParameters parameters, Object[] values, I

@Override
protected int getOffset() {
return getPageable().getOffset();
Pageable pageable = getPageable();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return pageable.getOffset();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.blazebit.persistence.spring.data.base.query.JpaParameters;
import com.blazebit.persistence.spring.data.base.query.ParameterBinder;
import com.blazebit.persistence.spring.data.base.query.ParameterMetadataProvider;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import com.blazebit.persistence.view.EntityViewManager;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.provider.PersistenceProvider;
Expand Down Expand Up @@ -62,7 +63,11 @@ protected int getOffset(Pageable pageable) {
if (pageable == null) {
return 0;
}
return pageable.getOffset();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return pageable.getOffset();
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.blazebit.persistence.spring.data.base.repository.AbstractEntityViewAwareRepository;
import com.blazebit.persistence.spring.data.repository.EntityViewRepository;
import com.blazebit.persistence.spring.data.repository.EntityViewSpecificationExecutor;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import com.blazebit.persistence.view.EntityViewManager;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Pageable;
Expand Down Expand Up @@ -66,6 +67,10 @@ public E findById(ID id) {

@Override
protected int getOffset(Pageable pageable) {
return pageable.getOffset();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return pageable.getOffset();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import com.blazebit.persistence.spring.data.base.query.AbstractCriteriaQueryParameterBinder;
import com.blazebit.persistence.spring.data.base.query.JpaParameters;
import com.blazebit.persistence.spring.data.base.query.ParameterMetadataProvider;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import org.springframework.data.domain.Pageable;

/**
* Concrete version for Spring Data 2.x.
Expand All @@ -34,6 +36,11 @@ public CriteriaQueryParameterBinder(JpaParameters parameters, Object[] values, I

@Override
protected int getOffset() {
return (int) getPageable().getOffset();
Pageable pageable = getPageable();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return (int) pageable.getOffset();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.blazebit.persistence.spring.data.base.query.JpaParameters;
import com.blazebit.persistence.spring.data.base.query.ParameterBinder;
import com.blazebit.persistence.spring.data.base.query.ParameterMetadataProvider;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import com.blazebit.persistence.view.EntityViewManager;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.provider.PersistenceProvider;
Expand Down Expand Up @@ -60,7 +61,11 @@ protected boolean isExists(PartTree tree) {
@Override
protected int getOffset(Pageable pageable) {
if (pageable.isPaged()) {
return (int) pageable.getOffset();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return (int) pageable.getOffset();
}
}
return 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.blazebit.persistence.CriteriaBuilderFactory;
import com.blazebit.persistence.spring.data.base.repository.AbstractEntityViewAwareRepository;
import com.blazebit.persistence.spring.data.repository.EntityViewRepository;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import com.blazebit.persistence.view.EntityViewManager;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import org.springframework.data.domain.Example;
Expand Down Expand Up @@ -73,6 +74,10 @@ private Object convert(Optional<Object> optional, Class<?> targetType) {

@Override
protected int getOffset(Pageable pageable) {
return (int) pageable.getOffset();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return (int) pageable.getOffset();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import com.blazebit.persistence.spring.data.base.query.AbstractCriteriaQueryParameterBinder;
import com.blazebit.persistence.spring.data.base.query.JpaParameters;
import com.blazebit.persistence.spring.data.base.query.ParameterMetadataProvider;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import org.springframework.data.domain.Pageable;

/**
* Concrete version for Spring Data 2.x.
Expand All @@ -34,6 +36,11 @@ public CriteriaQueryParameterBinder(JpaParameters parameters, Object[] values, I

@Override
protected int getOffset() {
return (int) getPageable().getOffset();
Pageable pageable = getPageable();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return (int) pageable.getOffset();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.blazebit.persistence.spring.data.base.query.JpaParameters;
import com.blazebit.persistence.spring.data.base.query.ParameterBinder;
import com.blazebit.persistence.spring.data.base.query.ParameterMetadataProvider;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import com.blazebit.persistence.view.EntityViewManager;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.provider.PersistenceProvider;
Expand Down Expand Up @@ -60,7 +61,11 @@ protected boolean isExists(PartTree tree) {
@Override
protected int getOffset(Pageable pageable) {
if (pageable.isPaged()) {
return (int) pageable.getOffset();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return (int) pageable.getOffset();
}
}
return 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.blazebit.persistence.CriteriaBuilderFactory;
import com.blazebit.persistence.spring.data.base.repository.AbstractEntityViewAwareRepository;
import com.blazebit.persistence.spring.data.repository.EntityViewRepository;
import com.blazebit.persistence.spring.data.repository.KeysetPageable;
import com.blazebit.persistence.view.EntityViewManager;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
import org.springframework.data.domain.Example;
Expand Down Expand Up @@ -83,6 +84,10 @@ public void setRepositoryMethodMetadata(CrudMethodMetadata crudMethodMetadata) {

@Override
protected int getOffset(Pageable pageable) {
return (int) pageable.getOffset();
if (pageable instanceof KeysetPageable) {
return ((KeysetPageable) pageable).getIntOffset();
} else {
return (int) pageable.getOffset();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public KeysetPageRequest(KeysetPage keysetPage, Sort sort, int offset, int pageS

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

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ public KeysetPageable resolveArgument(MethodParameter methodParameter, ModelAndV

int offset;
if (StringUtils.hasText(offsetString)) {
offset = parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, false);
offset = parseAndApplyBoundaries(offsetString, Integer.MAX_VALUE, false);
} else if (StringUtils.hasText(pageString)) {
offset = pageSize * parseAndApplyBoundaries(pageString, Integer.MAX_VALUE, true);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,19 @@ public void testDocumentControllerDefaults() throws Exception {
.andExpect(jsonPath("$.keysetPage.highest.tuple[0]", is(d2.getId().intValue())));
}

@Test
public void testDocumentControllerOffsetParameter() throws Exception {
// Given
createDocument("D1");
Document d2 = createDocument("D2");

// When / Then
mockMvc.perform(get("/document-views?offset={offset}&size={size}", 1, 2))
.andExpect(status().isOk())
.andExpect(jsonPath("$.numberOfElements", is(1)))
.andExpect(jsonPath("$.content[0].id", is(d2.getId().intValue())));
}

private Document createDocument(String name) {
return createDocument(name, null);
}
Expand Down

0 comments on commit 0c53796

Please sign in to comment.