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)