From aa7262b0380bce2376c7f74d6d2820ebfab09095 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 7 Jul 2023 14:51:03 +0200 Subject: [PATCH] Delombok code. Closes #2286 --- lombok.config | 2 - pom.xml | 1 - .../core/UriToEntityConverterUnitTests.java | 37 +++++- .../data/rest/core/domain/Order.java | 21 ++- .../data/rest/core/domain/Person.java | 51 +++++++- .../data/rest/core/domain/Profile.java | 26 +++- .../support/ResourceStringUtilsTests.java | 29 ++--- spring-data-rest-tests/pom.xml | 7 - .../data/rest/webmvc/jpa/Book.java | 29 ++++- .../data/rest/webmvc/jpa/Category.java | 26 +++- .../data/rest/webmvc/jpa/CreditCard.java | 32 +++-- .../data/rest/webmvc/jpa/Dinner.java | 10 +- .../data/rest/webmvc/jpa/Guest.java | 26 +++- .../data/rest/webmvc/jpa/Meal.java | 10 +- .../data/rest/webmvc/jpa/Room.java | 10 +- .../data/rest/webmvc/jpa/Suite.java | 10 +- .../spring-data-rest-tests-mongodb/pom.xml | 2 +- .../data/rest/tests/mongodb/User.java | 22 +++- .../config/JsonPatchHandlerUnitTests.java | 35 ++++- .../data/rest/tests/security/Order.java | 22 +++- .../data/rest/tests/security/Person.java | 27 +++- .../data/rest/tests/shop/Address.java | 36 +++++- .../data/rest/tests/shop/Customer.java | 32 ++++- .../data/rest/tests/shop/LineItem.java | 61 +++++++-- .../data/rest/tests/shop/LineItemType.java | 39 ++++-- .../data/rest/tests/shop/Order.java | 96 ++++++++++++-- .../data/rest/tests/shop/Product.java | 62 +++++++-- spring-data-rest-webmvc/pom.xml | 7 - .../HalFormsAdaptingResponseBodyAdvice.java | 15 ++- .../webmvc/json/patch/JsonPointerMapping.java | 9 +- .../rest/webmvc/ResourceStatusUnitTests.java | 16 ++- .../json/DomainObjectReaderUnitTests.java | 120 ++++++++++++++---- ...rsistentEntityJackson2ModuleUnitTests.java | 34 ++++- .../json/patch/AddOperationUnitTests.java | 21 ++- .../webmvc/json/patch/SpelPathUnitTests.java | 66 +++++++++- .../data/rest/webmvc/json/patch/Todo.java | 106 +++++++++++++++- .../data/rest/webmvc/json/patch/TodoList.java | 27 +++- .../data/rest/webmvc/json/patch/TodoType.java | 38 +++++- 38 files changed, 989 insertions(+), 231 deletions(-) delete mode 100644 lombok.config diff --git a/lombok.config b/lombok.config deleted file mode 100644 index e50c7ea43..000000000 --- a/lombok.config +++ /dev/null @@ -1,2 +0,0 @@ -lombok.nonNull.exceptionType = IllegalArgumentException -lombok.log.fieldName = LOG diff --git a/pom.xml b/pom.xml index 0c2e6e58a..be6980ccc 100644 --- a/pom.xml +++ b/pom.xml @@ -133,7 +133,6 @@ ${hamcrest} test - diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/UriToEntityConverterUnitTests.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/UriToEntityConverterUnitTests.java index 7a71d936b..38cdc8667 100755 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/UriToEntityConverterUnitTests.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/UriToEntityConverterUnitTests.java @@ -18,8 +18,6 @@ package org.springframework.data.rest.core; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; -import lombok.Value; - import java.net.URI; import java.util.List; import java.util.Optional; @@ -49,6 +47,7 @@ import org.springframework.data.rest.core.UriToEntityConverterUnitTests.JMolecul import org.springframework.data.util.Streamable; import org.springframework.data.util.TypeInformation; import org.springframework.format.support.DefaultFormattingConversionService; +import org.springframework.util.ObjectUtils; /** * Unit tests for {@link UriToEntityConverter}. @@ -197,9 +196,37 @@ class UriToEntityConverterUnitTests { return JMoleculesIdentifier.of(UUID.randomUUID()); } - @Value(staticConstructor = "of") - static class JMoleculesIdentifier implements Identifier { - UUID id; + static final class JMoleculesIdentifier implements Identifier { + private final UUID id; + + private JMoleculesIdentifier(UUID id) { + this.id = id; + } + + public static JMoleculesIdentifier of(UUID id) { + return new JMoleculesIdentifier(id); + } + + public UUID getId() { + return this.id; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + JMoleculesIdentifier that = (JMoleculesIdentifier) o; + + return ObjectUtils.nullSafeEquals(id, that.id); + } + + @Override + public int hashCode() { + return ObjectUtils.nullSafeHashCode(id); + } } } diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Order.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Order.java index 00f24d7a5..19f982845 100644 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Order.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Order.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.core.domain; -import lombok.Value; - import java.util.UUID; import org.springframework.data.annotation.Id; @@ -25,9 +23,20 @@ import org.springframework.data.annotation.Reference; /** * @author Oliver Gierke */ -@Value -class Order { +final class Order { - @Id UUID id = UUID.randomUUID(); - @Reference Person creator; + @Id private final UUID id = UUID.randomUUID(); + @Reference private final Person creator; + + public Order(Person creator) { + this.creator = creator; + } + + public UUID getId() { + return this.id; + } + + public Person getCreator() { + return this.creator; + } } diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Person.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Person.java index 75dd42fd0..5202973ff 100644 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Person.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Person.java @@ -15,10 +15,6 @@ */ package org.springframework.data.rest.core.domain; -import lombok.AccessLevel; -import lombok.Data; -import lombok.RequiredArgsConstructor; - import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -26,7 +22,7 @@ import java.util.List; import java.util.UUID; import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.PersistenceConstructor; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.annotation.Reference; import org.springframework.data.rest.core.annotation.RestResource; @@ -36,8 +32,6 @@ import org.springframework.data.rest.core.annotation.RestResource; * @author Jon Brisbin * @author Oliver Gierke */ -@Data -@RequiredArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__(@PersistenceConstructor)) public class Person { private final @Id UUID id; @@ -51,8 +45,51 @@ public class Person { private @RestResource(path = "father-mapped") @Reference Person father; private Date created = Calendar.getInstance().getTime(); + @PersistenceCreator + private Person(UUID id, String firstName, String lastName) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + } + public Person addSibling(Person p) { siblings.add(p); return this; } + + public UUID getId() { + return this.id; + } + + public String getFirstName() { + return this.firstName; + } + + public String getLastName() { + return this.lastName; + } + + public List getSiblings() { + return this.siblings; + } + + public Person getFather() { + return this.father; + } + + public Date getCreated() { + return this.created; + } + + public void setSiblings(List siblings) { + this.siblings = siblings; + } + + public void setFather(Person father) { + this.father = father; + } + + public void setCreated(Date created) { + this.created = created; + } } diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Profile.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Profile.java index 59908d1dc..c519982b7 100644 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Profile.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/domain/Profile.java @@ -15,9 +15,6 @@ */ package org.springframework.data.rest.core.domain; -import lombok.Value; -import lombok.experimental.NonFinal; - import java.util.UUID; import org.springframework.data.annotation.Id; @@ -26,10 +23,25 @@ import org.springframework.data.annotation.Id; * @author Jon Brisbin * @author Oliver Gierke */ -@NonFinal -@Value public class Profile { - @Id UUID id = UUID.randomUUID(); - String name, type; + @Id private final UUID id = UUID.randomUUID(); + private final String name, type; + + public Profile(String name, String type) { + this.name = name; + this.type = type; + } + + public UUID getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public String getType() { + return this.type; + } } diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/support/ResourceStringUtilsTests.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/support/ResourceStringUtilsTests.java index 85b154f48..88e60b32c 100755 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/support/ResourceStringUtilsTests.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/support/ResourceStringUtilsTests.java @@ -17,8 +17,6 @@ package org.springframework.data.rest.core.support; import static org.assertj.core.api.Assertions.*; -import lombok.Value; - import java.util.stream.Stream; import org.junit.jupiter.api.DynamicTest; @@ -34,36 +32,31 @@ class ResourceStringUtilsTests { @TestFactory Stream shouldDetectTextPresence() { - return DynamicTest.stream(fixtures(), Fixture::getName, it -> { - assertThat(ResourceStringUtils.hasTextExceptSlash(it.getActual())).isEqualTo(it.hasText); + return DynamicTest.stream(fixtures(), Fixture::name, it -> { + assertThat(ResourceStringUtils.hasTextExceptSlash(it.actual())).isEqualTo(it.hasText); }); } @TestFactory Stream shouldRemoveLeadingSlashIfAny() { - return DynamicTest.stream(fixtures(), Fixture::getName, it -> { - assertThat(ResourceStringUtils.removeLeadingSlash(it.getActual())).isEqualTo(it.getExpected()); + return DynamicTest.stream(fixtures(), Fixture::name, it -> { + assertThat(ResourceStringUtils.removeLeadingSlash(it.actual())).isEqualTo(it.expected()); }); } static Stream fixtures() { - return Stream.of( - Fixture.of("empty string has no text and should remain empty", "", "", false), - Fixture.of("blank string has no text and should remain as is", " ", " ", false), - Fixture.of("string made of only a leading slash has no text and should be returned empty", "/", "", false), - Fixture.of("blank string with only slashes has no text and should be returned as is", " / ", " / ", + return Stream.of(new Fixture("empty string has no text and should remain empty", "", "", false), + new Fixture("blank string has no text and should remain as is", " ", " ", false), + new Fixture("string made of only a leading slash has no text and should be returned empty", "/", "", false), + new Fixture("blank string with only slashes has no text and should be returned as is", " / ", " / ", false), - Fixture.of("normal string has text and should be returned as such", "hello", "hello", true), - Fixture.of("normal string with leading slash has text and should be returned without leading slash", "/hello", + new Fixture("normal string has text and should be returned as such", "hello", "hello", true), + new Fixture("normal string with leading slash has text and should be returned without leading slash", "/hello", "hello", true)); } - @Value(staticConstructor = "of") - static class Fixture { - - String name, actual, expected; - boolean hasText; + record Fixture(String name, String actual, String expected, boolean hasText) { } } diff --git a/spring-data-rest-tests/pom.xml b/spring-data-rest-tests/pom.xml index a75138d57..eefd2e305 100644 --- a/spring-data-rest-tests/pom.xml +++ b/spring-data-rest-tests/pom.xml @@ -39,13 +39,6 @@ ${groovy.version} - - org.projectlombok - lombok - ${lombok} - provided - - diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Book.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Book.java index ad4f8c61a..a6b35c881 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Book.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Book.java @@ -21,9 +21,6 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToMany; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; import java.util.HashSet; import java.util.Set; @@ -68,13 +65,33 @@ public class Book { this.offer = offer; } - @Getter @Embeddable - @AllArgsConstructor - @NoArgsConstructor static class Offer { double price; String currency; + + public Offer(double price, String currency) { + this.price = price; + this.currency = currency; + } + + public Offer() {} + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Category.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Category.java index f63f884a5..959e2deb3 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Category.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Category.java @@ -19,12 +19,10 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Version; -import lombok.Data; /** * @author Dario Seidl */ -@Data @Entity class Category { @@ -38,4 +36,28 @@ class Category { public Category(String name) { this.name = name; } + + public Long getId() { + return this.id; + } + + public Long getVersion() { + return this.version; + } + + public String getName() { + return this.name; + } + + public void setId(Long id) { + this.id = id; + } + + public void setVersion(Long version) { + this.version = version; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/CreditCard.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/CreditCard.java index 519eb7937..4056d0b7a 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/CreditCard.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/CreditCard.java @@ -18,10 +18,6 @@ package org.springframework.data.rest.webmvc.jpa; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; import com.fasterxml.jackson.annotation.JsonUnwrapped; @@ -29,19 +25,35 @@ import com.fasterxml.jackson.annotation.JsonUnwrapped; * @author Oliver Gierke */ @Entity -@Getter -@NoArgsConstructor(force = true) -@RequiredArgsConstructor public class CreditCard { @Id Long id; final @JsonUnwrapped CCN ccn; + public CreditCard(CCN ccn) { + this.ccn = ccn; + } + + public Long getId() { + return this.id; + } + + public CCN getCcn() { + return this.ccn; + } + @Embeddable - @Getter - @NoArgsConstructor(force = true) - @AllArgsConstructor public static class CCN { String ccn; + + public CCN(String ccn) { + this.ccn = ccn; + } + + public CCN() {} + + public String getCcn() { + return this.ccn; + } } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Dinner.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Dinner.java index 0a12314ed..587f55d45 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Dinner.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Dinner.java @@ -17,12 +17,10 @@ package org.springframework.data.rest.webmvc.jpa; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; -import lombok.Data; /** * @author Alex Leigh */ -@Data @Entity @DiscriminatorValue("D") public class Dinner extends Meal { @@ -35,4 +33,12 @@ public class Dinner extends Meal { public String getType() { return TYPE; } + + public String getDinnerCode() { + return this.dinnerCode; + } + + public void setDinnerCode(String dinnerCode) { + this.dinnerCode = dinnerCode; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Guest.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Guest.java index 2951a7000..0575bb571 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Guest.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Guest.java @@ -21,7 +21,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; -import lombok.Data; import java.util.ArrayList; import java.util.List; @@ -29,7 +28,6 @@ import java.util.List; /** * @author Alex Leigh */ -@Data @Entity public class Guest { @@ -45,4 +43,28 @@ public class Guest { public void addMeal(Meal meal) { this.meals.add(meal); } + + public Long getId() { + return this.id; + } + + public Room getRoom() { + return this.room; + } + + public List getMeals() { + return this.meals; + } + + public void setId(Long id) { + this.id = id; + } + + public void setRoom(Room room) { + this.room = room; + } + + public void setMeals(List meals) { + this.meals = meals; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Meal.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Meal.java index 074ece236..f7223318a 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Meal.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Meal.java @@ -19,7 +19,6 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Inheritance; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -27,7 +26,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; /** * @author Alex Leigh */ -@Data @Entity @Inheritance @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type") @@ -37,4 +35,12 @@ public abstract class Meal { @Id @GeneratedValue private Long id; public abstract String getType(); + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Room.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Room.java index 0ac5b9f9e..0e4a3dac7 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Room.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Room.java @@ -20,7 +20,6 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Inheritance; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -28,7 +27,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; /** * @author Alex Leigh */ -@Data @Entity @Inheritance @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type") @@ -39,4 +37,12 @@ public abstract class Room { private Long id; public abstract String getType(); + + public Long getId() { + return this.id; + } + + public void setId(Long id) { + this.id = id; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Suite.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Suite.java index 4d6fc8d4d..b7b8b33ca 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Suite.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/main/java/org/springframework/data/rest/webmvc/jpa/Suite.java @@ -17,12 +17,10 @@ package org.springframework.data.rest.webmvc.jpa; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; -import lombok.Data; /** * @author Alex Leigh */ -@Data @Entity @DiscriminatorValue("S") public class Suite extends Room { @@ -35,4 +33,12 @@ public class Suite extends Room { public String getType() { return TYPE; } + + public String getSuiteCode() { + return this.suiteCode; + } + + public void setSuiteCode(String suiteCode) { + this.suiteCode = suiteCode; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-mongodb/pom.xml b/spring-data-rest-tests/spring-data-rest-tests-mongodb/pom.xml index 0b1c3c22c..2d897986c 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-mongodb/pom.xml +++ b/spring-data-rest-tests/spring-data-rest-tests-mongodb/pom.xml @@ -36,7 +36,7 @@ org.mongodb mongodb-driver-sync - 4.9.0 + 4.10.1 diff --git a/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/main/java/org/springframework/data/rest/tests/mongodb/User.java b/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/main/java/org/springframework/data/rest/tests/mongodb/User.java index c2ec243b8..28cc085d4 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/main/java/org/springframework/data/rest/tests/mongodb/User.java +++ b/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/main/java/org/springframework/data/rest/tests/mongodb/User.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.tests.mongodb; -import lombok.Value; - import java.math.BigInteger; import java.time.LocalDateTime; import java.util.HashMap; @@ -74,9 +72,21 @@ public class User { public static class TypeWithPattern {} - @Value - public static class Nested { - public @DBRef(lazy = true) User user; - public String foo = "foo"; + public static final class Nested { + public final @DBRef(lazy = true) User user; + public final String foo = "foo"; + + public Nested(User user) { + this.user = user; + } + + public User getUser() { + return this.user; + } + + public String getFoo() { + return this.foo; + } + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/config/JsonPatchHandlerUnitTests.java b/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/config/JsonPatchHandlerUnitTests.java index cdc16692a..69881c73f 100755 --- a/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/config/JsonPatchHandlerUnitTests.java +++ b/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/config/JsonPatchHandlerUnitTests.java @@ -19,8 +19,6 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import static org.springframework.data.rest.tests.mongodb.TestUtils.*; -import lombok.Data; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -178,12 +176,43 @@ class JsonPatchHandlerUnitTests { } @JsonIgnoreProperties("password") - @Data static class WithIgnoredProperties { String name, lastname, password; @JsonIgnore String ssn; + public String getName() { + return this.name; + } + + public String getLastname() { + return this.lastname; + } + + public String getPassword() { + return this.password; + } + + public String getSsn() { + return this.ssn; + } + + public void setName(String name) { + this.name = name; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public void setPassword(String password) { + this.password = password; + } + + @JsonIgnore + public void setSsn(String ssn) { + this.ssn = ssn; + } } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Order.java b/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Order.java index 3d72ada78..27b8a586d 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Order.java +++ b/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Order.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.tests.security; -import lombok.Value; - import java.util.UUID; import org.springframework.data.annotation.Id; @@ -24,9 +22,21 @@ import org.springframework.data.annotation.Id; /** * @author Oliver Gierke */ -@Value -public class Order { +public final class Order { + + @Id private final UUID id = UUID.randomUUID(); + private final Person customer; + + public Order(Person customer) { + this.customer = customer; + } + + public UUID getId() { + return this.id; + } + + public Person getCustomer() { + return this.customer; + } - @Id UUID id = UUID.randomUUID(); - Person customer; } diff --git a/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Person.java b/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Person.java index d3464c922..cd9d5c5d1 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Person.java +++ b/spring-data-rest-tests/spring-data-rest-tests-security/src/main/java/org/springframework/data/rest/tests/security/Person.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.tests.security; -import lombok.Value; - import java.util.UUID; import org.springframework.data.annotation.Id; @@ -24,9 +22,26 @@ import org.springframework.data.annotation.Id; /** * @author Oliver Gierke */ -@Value -public class Person { +public final class Person { + + @Id private final UUID id = UUID.randomUUID(); + private final String firstname, lastname; + + public Person(String firstname, String lastname) { + this.firstname = firstname; + this.lastname = lastname; + } + + public UUID getId() { + return this.id; + } + + public String getFirstname() { + return this.firstname; + } + + public String getLastname() { + return this.lastname; + } - @Id UUID id = UUID.randomUUID(); - String firstname, lastname; } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Address.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Address.java index b9139a9d9..c2b19027d 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Address.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Address.java @@ -15,9 +15,6 @@ */ package org.springframework.data.rest.tests.shop; -import lombok.Data; -import lombok.RequiredArgsConstructor; - import java.util.UUID; import org.springframework.data.annotation.Id; @@ -25,14 +22,43 @@ import org.springframework.data.annotation.Id; /** * @author Oliver Gierke */ -@Data -@RequiredArgsConstructor public class Address { private @Id UUID id = UUID.randomUUID(); private final String street, zipCode, city, state; + public Address(String street, String zipCode, String city, String state) { + this.street = street; + this.zipCode = zipCode; + this.city = city; + this.state = state; + } + public String toString() { return String.format("%s, %s %s, %s", street, zipCode, city, state); } + + public UUID getId() { + return this.id; + } + + public String getStreet() { + return this.street; + } + + public String getZipCode() { + return this.zipCode; + } + + public String getCity() { + return this.city; + } + + public String getState() { + return this.state; + } + + public void setId(UUID id) { + this.id = id; + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Customer.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Customer.java index f41eb97a7..392ceff6f 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Customer.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Customer.java @@ -15,9 +15,6 @@ */ package org.springframework.data.rest.tests.shop; -import lombok.Data; -import lombok.RequiredArgsConstructor; - import java.util.UUID; import org.springframework.data.annotation.Id; @@ -25,8 +22,6 @@ import org.springframework.data.annotation.Id; /** * @author Oliver Gierke */ -@Data -@RequiredArgsConstructor public class Customer { private final @Id UUID id = UUID.randomUUID(); @@ -34,6 +29,33 @@ public class Customer { private final Gender gender; private final Address address; + public Customer(String firstname, String lastname, Gender gender, Address address) { + this.firstname = firstname; + this.lastname = lastname; + this.gender = gender; + this.address = address; + } + + public UUID getId() { + return this.id; + } + + public String getFirstname() { + return this.firstname; + } + + public String getLastname() { + return this.lastname; + } + + public Gender getGender() { + return this.gender; + } + + public Address getAddress() { + return this.address; + } + static enum Gender { MALE, FEMALE; } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItem.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItem.java index dc76efdc4..8a5bb95ad 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItem.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItem.java @@ -15,9 +15,6 @@ */ package org.springframework.data.rest.tests.shop; -import lombok.Data; -import lombok.EqualsAndHashCode; - import java.math.BigDecimal; import java.util.Arrays; import java.util.List; @@ -27,20 +24,14 @@ import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Reference; import org.springframework.data.rest.core.config.Projection; import org.springframework.data.rest.tests.shop.Product.ProductNameOnlyProjection; +import org.springframework.util.ObjectUtils; /** * @author Oliver Gierke * @author Craig Andrews */ -@Data -@EqualsAndHashCode(of = "id") public class LineItem { - @Projection(name = "productsOnly", types = LineItem.class) - public interface LineItemProductsOnlyProjection { - List getProducts(); - } - private final @Id UUID id = UUID.randomUUID(); private final String description; private final BigDecimal price; @@ -62,4 +53,54 @@ public class LineItem { this.product = product; this.products = Arrays.asList(product, product); } + + public UUID getId() { + return this.id; + } + + public String getDescription() { + return this.description; + } + + public BigDecimal getPrice() { + return this.price; + } + + public Product getProduct() { + return this.product; + } + + public List getProducts() { + return this.products; + } + + public LineItemType getType() { + return this.type; + } + + public List getTypes() { + return this.types; + } + + @Projection(name = "productsOnly", types = LineItem.class) + public interface LineItemProductsOnlyProjection { + List getProducts(); + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + LineItem lineItem = (LineItem) o; + + return ObjectUtils.nullSafeEquals(id, lineItem.id); + } + + @Override + public int hashCode() { + return ObjectUtils.nullSafeHashCode(id); + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItemType.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItemType.java index a83c41935..7279194d6 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItemType.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/LineItemType.java @@ -15,24 +15,45 @@ */ package org.springframework.data.rest.tests.shop; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.ToString; - import java.util.UUID; import org.springframework.data.annotation.Id; +import org.springframework.util.ObjectUtils; /** * @author Oliver Gierke */ -@Getter -@EqualsAndHashCode(of = "id") -@ToString -@RequiredArgsConstructor public class LineItemType { private final @Id UUID id = UUID.randomUUID(); private final String name; + + public LineItemType(String name) { + this.name = name; + } + + public UUID getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + LineItemType that = (LineItemType) o; + + return ObjectUtils.nullSafeEquals(id, that.id); + } + + @Override + public int hashCode() { + return ObjectUtils.nullSafeHashCode(id); + } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Order.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Order.java index 1fe779cf5..2bbb8edd3 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Order.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Order.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.tests.shop; -import lombok.Value; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -29,32 +27,106 @@ import org.springframework.data.annotation.Reference; import org.springframework.data.rest.core.config.Projection; import org.springframework.data.rest.tests.shop.LineItem.LineItemProductsOnlyProjection; import org.springframework.data.rest.tests.shop.Order.OrderIdentifier; +import org.springframework.util.ObjectUtils; /** * @author Oliver Gierke * @author Craig Andrews */ -@Value -public class Order implements AggregateRoot { - - @Projection(name = "itemsOnly", types = Order.class) - public interface OrderItemsOnlyProjection { - List getItems(); - } +public final class Order implements AggregateRoot { private final @Id OrderIdentifier id = new OrderIdentifier(UUID.randomUUID()); private final List items = new ArrayList<>(); private final @Reference Customer customer; + public Order(Customer customer) { + this.customer = customer; + } + + public OrderIdentifier getId() { + return this.id; + } + + public List getItems() { + return this.items; + } + + public Customer getCustomer() { + return this.customer; + } + public Order add(LineItem item) { this.items.add(item); return this; } - @Value - static class OrderIdentifier implements Identifier, Serializable { + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Order order = (Order) o; + + if (!ObjectUtils.nullSafeEquals(id, order.id)) { + return false; + } + if (!ObjectUtils.nullSafeEquals(items, order.items)) { + return false; + } + return ObjectUtils.nullSafeEquals(customer, order.customer); + } + + @Override + public int hashCode() { + int result = ObjectUtils.nullSafeHashCode(id); + result = 31 * result + ObjectUtils.nullSafeHashCode(items); + result = 31 * result + ObjectUtils.nullSafeHashCode(customer); + return result; + } + + @Projection(name = "itemsOnly", types = Order.class) + public interface OrderItemsOnlyProjection { + List getItems(); + } + + static final class OrderIdentifier implements Identifier, Serializable { private static final long serialVersionUID = -3362660123468974881L; - UUID id; + private final UUID id; + + public OrderIdentifier(UUID id) { + this.id = id; + } + + public UUID getId() { + return this.id; + } + + public boolean equals(final Object o) { + if (o == this) + return true; + if (!(o instanceof OrderIdentifier)) + return false; + final OrderIdentifier other = (OrderIdentifier) o; + final Object this$id = this.getId(); + final Object other$id = other.getId(); + if (this$id == null ? other$id != null : !this$id.equals(other$id)) + return false; + return true; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $id = this.getId(); + result = result * PRIME + ($id == null ? 43 : $id.hashCode()); + return result; + } + + public String toString() { + return "Order.OrderIdentifier(id=" + this.getId() + ")"; + } } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Product.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Product.java index 7b6569260..bf5d52c35 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Product.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/main/java/org/springframework/data/rest/tests/shop/Product.java @@ -15,31 +15,73 @@ */ package org.springframework.data.rest.tests.shop; -import lombok.RequiredArgsConstructor; -import lombok.Value; -import lombok.experimental.NonFinal; - import java.math.BigDecimal; import java.util.UUID; import org.springframework.data.annotation.Id; import org.springframework.data.rest.core.config.Projection; +import org.springframework.util.ObjectUtils; /** * @author Oliver Gierke * @author Craig Andrews */ -@NonFinal -@Value -@RequiredArgsConstructor public class Product { + private final @Id UUID id = UUID.randomUUID(); + private final String name; + private final BigDecimal price; + + public Product(String name, BigDecimal price) { + this.name = name; + this.price = price; + } + + public UUID getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public BigDecimal getPrice() { + return this.price; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Product product = (Product) o; + + if (!ObjectUtils.nullSafeEquals(id, product.id)) { + return false; + } + if (!ObjectUtils.nullSafeEquals(name, product.name)) { + return false; + } + return ObjectUtils.nullSafeEquals(price, product.price); + } + + @Override + public int hashCode() { + int result = ObjectUtils.nullSafeHashCode(id); + result = 31 * result + ObjectUtils.nullSafeHashCode(name); + result = 31 * result + ObjectUtils.nullSafeHashCode(price); + return result; + } + + public String toString() { + return "Product(id=" + this.getId() + ", name=" + this.getName() + ", price=" + this.getPrice() + ")"; + } + @Projection(name = "nameOnly", types = Product.class) public interface ProductNameOnlyProjection { String getName(); } - private final @Id UUID id = UUID.randomUUID(); - private final String name; - private final BigDecimal price; } diff --git a/spring-data-rest-webmvc/pom.xml b/spring-data-rest-webmvc/pom.xml index 6c9412090..1f7f67e52 100644 --- a/spring-data-rest-webmvc/pom.xml +++ b/spring-data-rest-webmvc/pom.xml @@ -49,13 +49,6 @@ provided - - org.projectlombok - lombok - ${lombok} - true - - diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/HalFormsAdaptingResponseBodyAdvice.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/HalFormsAdaptingResponseBodyAdvice.java index 49beb6922..1b29318e3 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/HalFormsAdaptingResponseBodyAdvice.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/HalFormsAdaptingResponseBodyAdvice.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.webmvc.config; -import lombok.SneakyThrows; - import java.util.Arrays; import java.util.List; @@ -55,7 +53,6 @@ class HalFormsAdaptingResponseBodyAdvice> } @Override - @SneakyThrows public RepresentationModel beforeBodyWrite(@Nullable RepresentationModel body, MethodParameter returnType, MediaType selectedContentType, Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { @@ -67,8 +64,7 @@ class HalFormsAdaptingResponseBodyAdvice> List accept = request.getHeaders().getAccept(); - boolean hasAffordances = body != null && body.getLinks().stream() - .anyMatch(it -> !it.getAffordances().isEmpty()); + boolean hasAffordances = body != null && body.getLinks().stream().anyMatch(it -> !it.getAffordances().isEmpty()); // Affordances registered -> we're fine as we will render templates if (hasAffordances) { @@ -90,6 +86,13 @@ class HalFormsAdaptingResponseBodyAdvice> } // Reject the request otherwise - throw new HttpMediaTypeNotAcceptableException(SUPPORTED_MEDIA_TYPES); + HalFormsAdaptingResponseBodyAdvice.throwException(new HttpMediaTypeNotAcceptableException(SUPPORTED_MEDIA_TYPES)); + + throw new UnsupportedOperationException(); + } + + @SuppressWarnings("unchecked") + private static void throwException(Throwable exception) throws T { + throw (T) exception; } } diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/patch/JsonPointerMapping.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/patch/JsonPointerMapping.java index e7d1f1683..8ba7f5d9f 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/patch/JsonPointerMapping.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/json/patch/JsonPointerMapping.java @@ -15,8 +15,6 @@ */ package org.springframework.data.rest.webmvc.json.patch; -import lombok.RequiredArgsConstructor; - import java.util.Optional; import java.util.function.BiFunction; @@ -29,7 +27,6 @@ import org.springframework.util.StringUtils; /** * @author Oliver Drotbohm */ -@RequiredArgsConstructor class JsonPointerMapping { private final BiFunction, Optional> reader, writer; @@ -40,6 +37,12 @@ class JsonPointerMapping { this.writer = context::getWritableProperty; } + public JsonPointerMapping(BiFunction, Optional> reader, + BiFunction, Optional> writer) { + this.reader = reader; + this.writer = writer; + } + /** * Maps the given JSON Pointer to the given type to ultimately read the attribute pointed to. * diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceStatusUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceStatusUnitTests.java index 4ae40271f..8429fbbdd 100755 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceStatusUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/ResourceStatusUnitTests.java @@ -19,8 +19,6 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import lombok.Value; - import java.util.Date; import java.util.function.Supplier; @@ -114,8 +112,16 @@ class ResourceStatusUnitTests { assertThat(statusAndHeaders.toResponseEntity(supplier).getStatusCode()).isEqualTo(HttpStatus.NOT_MODIFIED); } - @Value - static class Sample { - @Version int version; + static final class Sample { + @Version private final int version; + + public Sample(int version) { + this.version = version; + } + + public int getVersion() { + return this.version; + } + } } diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/DomainObjectReaderUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/DomainObjectReaderUnitTests.java index 92ecc2bba..11ed30fad 100755 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/DomainObjectReaderUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/DomainObjectReaderUnitTests.java @@ -19,13 +19,6 @@ import static com.fasterxml.jackson.annotation.JsonProperty.Access.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; -import lombok.Value; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -50,6 +43,7 @@ import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.data.rest.core.mapping.ResourceMappings; import org.springframework.data.rest.webmvc.mapping.Associations; +import org.springframework.util.ObjectUtils; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; @@ -797,10 +791,14 @@ class DomainObjectReaderUnitTests { } @JsonAutoDetect(fieldVisibility = Visibility.ANY) - @NoArgsConstructor - @AllArgsConstructor static class Item { String some; + + public Item(String some) { + this.some = some; + } + + public Item() {} } @JsonAutoDetect(fieldVisibility = Visibility.ANY) @@ -809,11 +807,41 @@ class DomainObjectReaderUnitTests { } @JsonAutoDetect(fieldVisibility = Visibility.ANY) - @NoArgsConstructor - @AllArgsConstructor - @EqualsAndHashCode static class LocalizedValue { String value; + + public LocalizedValue(String value) { + this.value = value; + } + + public LocalizedValue() {} + + public boolean equals(final Object o) { + if (o == this) + return true; + if (!(o instanceof LocalizedValue)) + return false; + final LocalizedValue other = (LocalizedValue) o; + if (!other.canEqual((Object) this)) + return false; + final Object this$value = this.value; + final Object other$value = other.value; + if (this$value == null ? other$value != null : !this$value.equals(other$value)) + return false; + return true; + } + + protected boolean canEqual(final Object other) { + return other instanceof LocalizedValue; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $value = this.value; + result = result * PRIME + ($value == null ? 43 : $value.hashCode()); + return result; + } } @JsonAutoDetect(getterVisibility = Visibility.ANY) @@ -833,7 +861,7 @@ class DomainObjectReaderUnitTests { String getFoo(); } - static enum SampleEnum implements EnumInterface { + enum SampleEnum implements EnumInterface { FIRST { @@ -856,16 +884,51 @@ class DomainObjectReaderUnitTests { List enums = new ArrayList(); } - @EqualsAndHashCode - @AllArgsConstructor static class SampleWithReference { - private @Getter @Reference List nested; + private @Reference List nested; + + public SampleWithReference(List nested) { + this.nested = nested; + } + + public List getNested() { + return this.nested; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + SampleWithReference that = (SampleWithReference) o; + + return ObjectUtils.nullSafeEquals(nested, that.nested); + } + + @Override + public int hashCode() { + return ObjectUtils.nullSafeHashCode(nested); + } } @Immutable - @Value - static class Nested { - int x, y; + static final class Nested { + private final int x, y; + + public Nested(int x, int y) { + this.x = x; + this.y = y; + } + + public int getX() { + return this.x; + } + + public int getY() { + return this.y; + } } // DATAREST-1030 @@ -882,11 +945,14 @@ class DomainObjectReaderUnitTests { String name; } - @RequiredArgsConstructor static class SelectValueByIdSerializer extends JsonDeserializer { private final Map values; + public SelectValueByIdSerializer(Map values) { + this.values = values; + } + @Override public T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { @@ -907,9 +973,17 @@ class DomainObjectReaderUnitTests { } // DATAREST-1068 - @Value - static class ArrayHolder { - String[] array; + static final class ArrayHolder { + + private final String[] array; + + ArrayHolder(String[] array) { + this.array = array; + } + + public String[] getArray() { + return array; + } } // DATAREST-1026 diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityJackson2ModuleUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityJackson2ModuleUnitTests.java index 7028068cd..40b5b53b0 100755 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityJackson2ModuleUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityJackson2ModuleUnitTests.java @@ -19,9 +19,6 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import lombok.Data; -import lombok.Getter; - import java.io.IOException; import java.net.URI; import java.util.Arrays; @@ -289,7 +286,6 @@ class PersistentEntityJackson2ModuleUnitTests { } } - @Getter @JsonInclude(Include.NON_NULL) static class PetOwner { @@ -297,6 +293,18 @@ class PersistentEntityJackson2ModuleUnitTests { Home home; @JsonProperty("package") Package _package; + + public Pet getPet() { + return this.pet; + } + + public Home getHome() { + return this.home; + } + + public Package get_package() { + return this._package; + } } static class Package {} @@ -330,9 +338,16 @@ class PersistentEntityJackson2ModuleUnitTests { // GH-1926 - @Data static class Wrapper { ValueType value; + + public ValueType getValue() { + return this.value; + } + + public void setValue(ValueType value) { + this.value = value; + } } static class ValueType { @@ -341,9 +356,16 @@ class PersistentEntityJackson2ModuleUnitTests { // GH-2056 - @Data static class Surrounding { CustomType custom = new CustomType(); + + public CustomType getCustom() { + return this.custom; + } + + public void setCustom(CustomType custom) { + this.custom = custom; + } } static class CustomType {} diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/AddOperationUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/AddOperationUnitTests.java index 1cef6f18f..cd06e2e96 100755 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/AddOperationUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/AddOperationUnitTests.java @@ -17,10 +17,6 @@ package org.springframework.data.rest.webmvc.json.patch; import static org.assertj.core.api.Assertions.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.util.ArrayList; import java.util.List; @@ -159,10 +155,21 @@ class AddOperationUnitTests { assertThat(outer.todoList.getTodos()).containsExactly(todos.get(0), todos.get(1), newTodo); } - @Data - @AllArgsConstructor - @NoArgsConstructor public static class TodoListWrapper { public TodoList todoList; + + public TodoListWrapper(TodoList todoList) { + this.todoList = todoList; + } + + public TodoListWrapper() {} + + public TodoList getTodoList() { + return this.todoList; + } + + public void setTodoList(TodoList todoList) { + this.todoList = todoList; + } } } diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/SpelPathUnitTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/SpelPathUnitTests.java index 6fe045cb6..92a445943 100755 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/SpelPathUnitTests.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/SpelPathUnitTests.java @@ -17,9 +17,6 @@ package org.springframework.data.rest.webmvc.json.patch; import static org.assertj.core.api.Assertions.*; -import lombok.Data; -import lombok.Getter; - import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -184,18 +181,75 @@ class SpelPathUnitTests { // DATAREST-1338 - @Data static class Person { String name; @JsonIgnore String hiddenProperty; - @Getter(onMethod = @__(@JsonIgnore)) String hiddenGetter; + String hiddenGetter; @JsonProperty("demaner") String renamed; LocalDate birthday; + + public String getName() { + return this.name; + } + + public String getHiddenProperty() { + return this.hiddenProperty; + } + + public String getRenamed() { + return this.renamed; + } + + public LocalDate getBirthday() { + return this.birthday; + } + + public void setName(String name) { + this.name = name; + } + + @JsonIgnore + public void setHiddenProperty(String hiddenProperty) { + this.hiddenProperty = hiddenProperty; + } + + public void setHiddenGetter(String hiddenGetter) { + this.hiddenGetter = hiddenGetter; + } + + @JsonProperty("demaner") + public void setRenamed(String renamed) { + this.renamed = renamed; + } + + public void setBirthday(LocalDate birthday) { + this.birthday = birthday; + } + + @JsonIgnore + public String getHiddenGetter() { + return this.hiddenGetter; + } } - @Data static class MapWrapper { Map people; Map peopleByInt; + + public Map getPeople() { + return this.people; + } + + public Map getPeopleByInt() { + return this.peopleByInt; + } + + public void setPeople(Map people) { + this.people = people; + } + + public void setPeopleByInt(Map peopleByInt) { + this.peopleByInt = peopleByInt; + } } } diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/Todo.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/Todo.java index abb433d0a..57ed95b8f 100644 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/Todo.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/Todo.java @@ -16,21 +16,18 @@ package org.springframework.data.rest.webmvc.json.patch; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.math.BigInteger; import java.util.ArrayList; import java.util.List; +import org.springframework.util.ObjectUtils; + /** * @author Roy Clarkson * @author Craig Walls * @author Mathias Düsterhöft * @author Oliver Gierke */ -@Data -@NoArgsConstructor class Todo { private Long id; @@ -47,4 +44,103 @@ class Todo { this.description = description; this.complete = complete; } + + public Todo() {} + + public Long getId() { + return this.id; + } + + public String getDescription() { + return this.description; + } + + public boolean isComplete() { + return this.complete; + } + + public TodoType getType() { + return this.type; + } + + public List getItems() { + return this.items; + } + + public List getUninitialized() { + return this.uninitialized; + } + + public BigInteger getAmount() { + return this.amount; + } + + public void setId(Long id) { + this.id = id; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setComplete(boolean complete) { + this.complete = complete; + } + + public void setType(TodoType type) { + this.type = type; + } + + public void setItems(List items) { + this.items = items; + } + + public void setUninitialized(List uninitialized) { + this.uninitialized = uninitialized; + } + + public void setAmount(BigInteger amount) { + this.amount = amount; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Todo todo = (Todo) o; + + if (complete != todo.complete) + return false; + if (!ObjectUtils.nullSafeEquals(id, todo.id)) { + return false; + } + if (!ObjectUtils.nullSafeEquals(description, todo.description)) { + return false; + } + if (!ObjectUtils.nullSafeEquals(type, todo.type)) { + return false; + } + if (!ObjectUtils.nullSafeEquals(items, todo.items)) { + return false; + } + if (!ObjectUtils.nullSafeEquals(uninitialized, todo.uninitialized)) { + return false; + } + return ObjectUtils.nullSafeEquals(amount, todo.amount); + } + + @Override + public int hashCode() { + int result = ObjectUtils.nullSafeHashCode(id); + result = 31 * result + ObjectUtils.nullSafeHashCode(description); + result = 31 * result + (complete ? 1 : 0); + result = 31 * result + ObjectUtils.nullSafeHashCode(type); + result = 31 * result + ObjectUtils.nullSafeHashCode(items); + result = 31 * result + ObjectUtils.nullSafeHashCode(uninitialized); + result = 31 * result + ObjectUtils.nullSafeHashCode(amount); + return result; + } } diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoList.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoList.java index cad81f866..357df5dee 100644 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoList.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoList.java @@ -15,12 +15,9 @@ */ package org.springframework.data.rest.webmvc.json.patch; -import lombok.Data; - import java.io.Serializable; import java.util.List; -@Data class TodoList implements Serializable { private static final long serialVersionUID = 1L; @@ -28,4 +25,28 @@ class TodoList implements Serializable { private List todos; private Todo[] todoArray; private String name; + + public List getTodos() { + return this.todos; + } + + public Todo[] getTodoArray() { + return this.todoArray; + } + + public String getName() { + return this.name; + } + + public void setTodos(List todos) { + this.todos = todos; + } + + public void setTodoArray(Todo[] todoArray) { + this.todoArray = todoArray; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoType.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoType.java index 3e1c01d39..aa1dda614 100644 --- a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoType.java +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/json/patch/TodoType.java @@ -15,17 +15,43 @@ */ package org.springframework.data.rest.webmvc.json.patch; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; +import org.springframework.util.ObjectUtils; /** * @author Mathias Düsterhöft * @author Oliver Gierke */ -@Data -@AllArgsConstructor -@NoArgsConstructor class TodoType { private String value = "none"; + + public TodoType(String value) { + this.value = value; + } + + public TodoType() {} + + public String getValue() { + return this.value; + } + + public void setValue(String value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + TodoType todoType = (TodoType) o; + + return ObjectUtils.nullSafeEquals(value, todoType.value); + } + + @Override + public int hashCode() { + return ObjectUtils.nullSafeHashCode(value); + } }