diff --git a/CHANGELOG.md b/CHANGELOG.md index e83e29f6..9e9d4f96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Beadledom Changelog +## 3.2 - In development + +### Additions +* Add OffsetPaginatedListDto interface to the pagination module. + ## 3.1 - 12 September 2018 ### Additions diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index c6cfff12..9eb50609 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -20,6 +20,7 @@ This file contains the list of developers who contributed to this repository * Cal Fisher [@cbfshr][cal-fisher] * Ian Kottman [@ikottman][ian-kottman] * Will Pruyn [@lulzWill][will-pruyn] +* Kyle Roush [@kyleroush][kyle-roush] [john-leacox]: https://github.com/johnlcox [jacob-williams]: https://github.com/brokensandals @@ -37,5 +38,6 @@ This file contains the list of developers who contributed to this repository [cal-fisher]: https://github.com/cbfshr [ian-kottman]: https://github.com/ikottman [will-pruyn]: https://github.com/lulzWill +[kyle-roush]: https://github.com/kyleroush Thanks to everyone who helped in building this repository. diff --git a/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/JsonOneOffsetPaginatedListDto.java b/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/JsonOneOffsetPaginatedListDto.java index 68e2bfad..1f2d4aa1 100644 --- a/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/JsonOneOffsetPaginatedListDto.java +++ b/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/JsonOneOffsetPaginatedListDto.java @@ -1,5 +1,6 @@ package com.cerner.beadledom.client.example.model; +import com.cerner.beadledom.pagination.models.OffsetPaginatedListDto; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/OffsetPaginatedListDto.java b/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/OffsetPaginatedListDto.java deleted file mode 100644 index 6fa34425..00000000 --- a/client/beadledom-client-example/example-api/src/main/java/com/cerner/beadledom/client/example/model/OffsetPaginatedListDto.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.cerner.beadledom.client.example.model; - -import com.cerner.beadledom.pagination.OffsetPaginatedList; - -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; -import javax.annotation.Nullable; - -/** - * Offset based pagination list. - * - *

Represents an offset based paginated list in a rest response. Is used on the client side - * instead of {@link OffsetPaginatedList} to circumvent type erasure. - */ -public interface OffsetPaginatedListDto { - - @JsonProperty("totalResults") - @Nullable - Long totalResults(); - - @JsonProperty("firstLink") - String firstLink(); - - @JsonProperty("lastLink") - @Nullable - String lastLink(); - - @JsonProperty("prevLink") - @Nullable - String prevLink(); - - @JsonProperty("nextLink") - @Nullable - String nextLink(); - - @JsonProperty("items") - List items(); - - interface Builder, T> { - - @JsonProperty("items") - B items(List items); - - @JsonProperty("totalResults") - B totalResults(Long totalResults); - - @JsonProperty("firstLink") - B firstLink(String firstLink); - - @JsonProperty("lastLink") - B lastLink(String lastLink); - - @JsonProperty("nextLink") - B nextLink(String nextLink); - - @JsonProperty("prevLink") - B prevLink(String prevLink); - } -} diff --git a/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListDtoImpl.java b/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListDtoImpl.java new file mode 100644 index 00000000..050b8312 --- /dev/null +++ b/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListDtoImpl.java @@ -0,0 +1,54 @@ +package com.cerner.beadledom.pagination; + +import com.cerner.beadledom.pagination.models.OffsetPaginatedListDto; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.google.auto.value.AutoValue; +import java.util.ArrayList; + +/** + * Offset based pagination list. + * + *

Represents an offset based paginated list in a rest response. + * + * @author John Leacox + * @since 3.2 + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@AutoValue +@JsonPropertyOrder({ + "items", + "totalResults", + "firstLink", + "lastLink", + "nextLink", + "prevLink" +}) +@JsonDeserialize(builder = OffsetPaginatedListDtoImpl.Builder.class) +abstract class OffsetPaginatedListDtoImpl implements OffsetPaginatedListDto { + + /** + * Creates a builder for {@link OffsetPaginatedListDtoImpl}. + * + * @return instance of {@link Builder} + */ + public static Builder builder() { + return new AutoValue_OffsetPaginatedListDtoImpl.Builder() + .items(new ArrayList<>()); + } + + @AutoValue.Builder + @JsonPOJOBuilder(withPrefix = "") + public abstract static class Builder implements OffsetPaginatedListDto.Builder, T> { + @JsonCreator + private static OffsetPaginatedListDtoImpl.Builder create() { + return OffsetPaginatedListDtoImpl.builder(); + } + + public abstract OffsetPaginatedListDtoImpl build(); + + } +} diff --git a/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptor.java b/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptor.java index d1c63cd2..2760ae16 100644 --- a/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptor.java +++ b/pagination/src/main/java/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptor.java @@ -32,7 +32,7 @@ public void aroundWriteTo(WriterInterceptorContext context) // Must use raw types because of erasure @SuppressWarnings("unchecked") - OffsetPaginatedListDto listWithLinks = OffsetPaginatedListDto.builder() + OffsetPaginatedListDto listWithLinks = OffsetPaginatedListDtoImpl.builder() .items(list.items()) .totalResults(list.metadata().totalResults()) .firstLink(links.firstLink()) diff --git a/pagination/src/main/java/com/cerner/beadledom/pagination/models/OffsetPaginatedListDto.java b/pagination/src/main/java/com/cerner/beadledom/pagination/models/OffsetPaginatedListDto.java index ca677875..d29cf7e7 100644 --- a/pagination/src/main/java/com/cerner/beadledom/pagination/models/OffsetPaginatedListDto.java +++ b/pagination/src/main/java/com/cerner/beadledom/pagination/models/OffsetPaginatedListDto.java @@ -1,97 +1,61 @@ package com.cerner.beadledom.pagination.models; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.cerner.beadledom.pagination.OffsetPaginatedList; + import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; -import com.google.auto.value.AutoValue; -import com.wordnik.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; /** * Offset based pagination list. * - *

Represents an offset based paginated list in a rest response. - * - * @author John Leacox - * @since 3.1 + *

Represents an offset based paginated list in a rest response. Is used on the client side + * instead of {@link OffsetPaginatedList} to circumvent type erasure. */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@AutoValue -@JsonPropertyOrder({ - "items", - "totalResults", - "firstLink", - "lastLink", - "nextLink", - "prevLink" -}) -@JsonDeserialize(builder = OffsetPaginatedListDto.Builder.class) -public abstract class OffsetPaginatedListDto { - @JsonProperty("items") - @ApiModelProperty(value = "Array of items for the current page") - public abstract List items(); +public interface OffsetPaginatedListDto { - @Nullable @JsonProperty("totalResults") - @ApiModelProperty(value = "Total count of items across all pages") - public abstract Long totalResults(); + @Nullable + Long totalResults(); @JsonProperty("firstLink") - public abstract String firstLink(); + String firstLink(); @JsonProperty("lastLink") @Nullable - public abstract String lastLink(); + String lastLink(); @JsonProperty("prevLink") @Nullable - public abstract String prevLink(); + String prevLink(); @JsonProperty("nextLink") @Nullable - public abstract String nextLink(); - - /** - * Creates a builder for {@link OffsetPaginatedListDto}. - * - * @return instance of {@link Builder} - */ - public static Builder builder() { - return new AutoValue_OffsetPaginatedListDto.Builder() - .items(new ArrayList<>()); - } + String nextLink(); + + @JsonProperty("items") + List items(); - @AutoValue.Builder - @JsonPOJOBuilder(withPrefix = "") - public abstract static class Builder { - @JsonCreator - private static OffsetPaginatedListDto.Builder create() { - return OffsetPaginatedListDto.builder(); - } + interface Builder, T> { @JsonProperty("items") - public abstract Builder items(List items); + B items(List items); @JsonProperty("totalResults") - public abstract Builder totalResults(Long totalResults); + B totalResults(Long totalResults); @JsonProperty("firstLink") - public abstract Builder firstLink(String firstLink); + B firstLink(String firstLink); @JsonProperty("lastLink") - public abstract Builder lastLink(String lastLink); + B lastLink(String lastLink); @JsonProperty("nextLink") - public abstract Builder nextLink(String nextLink); + B nextLink(String nextLink); @JsonProperty("prevLink") - public abstract Builder prevLink(String prevLink); + B prevLink(String prevLink); - public abstract OffsetPaginatedListDto build(); + OffsetPaginatedListDto build(); } } diff --git a/pagination/src/test/scala/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptorSpec.scala b/pagination/src/test/scala/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptorSpec.scala index 615f9c1e..ae5e6d9e 100644 --- a/pagination/src/test/scala/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptorSpec.scala +++ b/pagination/src/test/scala/com/cerner/beadledom/pagination/OffsetPaginatedListLinksWriterInterceptorSpec.scala @@ -1,15 +1,13 @@ package com.cerner.beadledom.pagination -import javax.ws.rs.core.UriInfo - import com.cerner.beadledom.pagination.models.OffsetPaginatedListDto +import javax.ws.rs.core.UriInfo import org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext import org.jboss.resteasy.spi.ResteasyUriInfo import org.mockito.ArgumentMatchers.any import org.mockito.Mockito.when import org.scalatest.mockito.MockitoSugar import org.scalatest.{FunSpec, MustMatchers} - import scala.collection.JavaConverters._ /** @@ -20,7 +18,7 @@ import scala.collection.JavaConverters._ class OffsetPaginatedListLinksWriterInterceptorSpec extends FunSpec with MustMatchers with MockitoSugar { describe("OffsetPaginatedListLinksWriterInterceptor") { describe("#aroundWriteTo") { - it("replaces an OffsetPaginatedList entity with an OffsetPaginatedListDto entity") { + it("replaces an OffsetPaginatedList entity with an OffsetPaginatedListDtoImpl entity") { val list = OffsetPaginatedList.builder() .items(List("a", "b").asJava) .metadata("limit", 20, "offset", 0L, null, true)