Browse Source

Polishing.

Fix author tags. Reorder methods, add since tags.

Extend reactive callbacks with configurable order.

See #4914
Original pull request: #4968
issue/4985
Mark Paluch 6 months ago
parent
commit
2ecab81eb4
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 21
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallback.java
  2. 21
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAuditingEntityCallback.java
  3. 24
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveValidatingEntityCallback.java
  4. 28
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallback.java
  5. 11
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallbackUnitTests.java
  6. 56
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAuditingEntityCallbackUnitTests.java
  7. 9
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ReactiveValidatingEntityCallbackUnitTests.java
  8. 4
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallbackUnitTests.java

21
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallback.java

@ -27,7 +27,7 @@ import org.springframework.util.Assert; @@ -27,7 +27,7 @@ import org.springframework.util.Assert;
* {@link EntityCallback} to populate auditing related fields on an entity about to be saved.
*
* @author Mark Paluch
* @author yangchef1
* @author HeeChul Yang
* @since 2.2
*/
public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Ordered {
@ -47,17 +47,26 @@ public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Or @@ -47,17 +47,26 @@ public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Or
this.auditingHandlerFactory = auditingHandlerFactory;
}
@Override
public Object onBeforeConvert(Object entity, String collection) {
return auditingHandlerFactory.getObject().markAudited(entity);
}
@Override
public int getOrder() {
return this.order;
}
/**
* Specify the order value for this {@link BeforeConvertCallback}.
* <p>
* The default value is {@code 100}.
*
* @see org.springframework.core.Ordered#getOrder()
* @since 5.0
*/
public void setOrder(int order) {
this.order = order;
}
@Override
public Object onBeforeConvert(Object entity, String collection) {
return auditingHandlerFactory.getObject().markAudited(entity);
}
}

21
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAuditingEntityCallback.java

@ -34,6 +34,7 @@ import org.springframework.util.Assert; @@ -34,6 +34,7 @@ import org.springframework.util.Assert;
public class ReactiveAuditingEntityCallback implements ReactiveBeforeConvertCallback<Object>, Ordered {
private final ObjectFactory<ReactiveIsNewAwareAuditingHandler> auditingHandlerFactory;
private int order = 100;
/**
* Creates a new {@link ReactiveAuditingEntityCallback} using the given {@link MappingContext} and
@ -48,12 +49,24 @@ public class ReactiveAuditingEntityCallback implements ReactiveBeforeConvertCall @@ -48,12 +49,24 @@ public class ReactiveAuditingEntityCallback implements ReactiveBeforeConvertCall
}
@Override
public Publisher<Object> onBeforeConvert(Object entity, String collection) {
return auditingHandlerFactory.getObject().markAudited(entity);
public int getOrder() {
return this.order;
}
/**
* Specify the order value for this {@link BeforeConvertCallback}.
* <p>
* The default value is {@code 100}.
*
* @see org.springframework.core.Ordered#getOrder()
* @since 5.0
*/
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
return 100;
public Publisher<Object> onBeforeConvert(Object entity, String collection) {
return auditingHandlerFactory.getObject().markAudited(entity);
}
}

24
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ReactiveValidatingEntityCallback.java

@ -39,6 +39,7 @@ import org.springframework.core.Ordered; @@ -39,6 +39,7 @@ import org.springframework.core.Ordered;
public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallback<Object>, Ordered {
private final BeanValidationDelegate delegate;
private int order = 100;
/**
* Creates a new {@link ReactiveValidatingEntityCallback} using the given {@link Validator}.
@ -49,6 +50,23 @@ public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallb @@ -49,6 +50,23 @@ public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallb
this.delegate = new BeanValidationDelegate(validator);
}
@Override
public int getOrder() {
return this.order;
}
/**
* Specify the order value for this {@link ReactiveValidatingEntityCallback}.
* <p>
* The default value is {@code 100}.
*
* @see org.springframework.core.Ordered#getOrder()
* @since 5.0
*/
public void setOrder(int order) {
this.order = order;
}
@Override
public Mono<Object> onBeforeSave(Object entity, Document document, String collection) {
@ -60,10 +78,4 @@ public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallb @@ -60,10 +78,4 @@ public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallb
return Mono.just(entity);
}
@Override
public int getOrder() {
return 100;
}
}

28
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallback.java

@ -33,7 +33,7 @@ import org.springframework.core.Ordered; @@ -33,7 +33,7 @@ import org.springframework.core.Ordered;
*
* @author Rene Felgenträger
* @author Mark Paluch
* @author yangchef1
* @author HeeChul Yang
* @since 4.5
*/
public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ordered {
@ -50,6 +50,23 @@ public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ord @@ -50,6 +50,23 @@ public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ord
this.delegate = new BeanValidationDelegate(validator);
}
@Override
public int getOrder() {
return this.order;
}
/**
* Specify the order value for this {@link BeforeConvertCallback}.
* <p>
* The default value is {@code 100}.
*
* @see org.springframework.core.Ordered#getOrder()
* @since 5.0
*/
public void setOrder(int order) {
this.order = order;
}
@Override
public Object onBeforeSave(Object entity, Document document, String collection) {
@ -61,13 +78,4 @@ public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ord @@ -61,13 +78,4 @@ public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ord
return entity;
}
@Override
public int getOrder() {
return this.order;
}
public void setOrder(int order) {
this.order = order;
}
}

11
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallbackUnitTests.java

@ -27,7 +27,7 @@ import org.junit.jupiter.api.BeforeEach; @@ -27,7 +27,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.Ordered;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
@ -40,10 +40,10 @@ import org.springframework.data.mongodb.core.mapping.Unwrapped; @@ -40,10 +40,10 @@ import org.springframework.data.mongodb.core.mapping.Unwrapped;
* Unit tests for {@link AuditingEntityCallback}.
*
* @author Mark Paluch
* @author yangchef1
* @author HeeChul Yang
*/
@ExtendWith(MockitoExtension.class)
public class AuditingEntityCallbackUnitTests {
class AuditingEntityCallbackUnitTests {
private final MongoMappingContext mappingContext = new MongoMappingContext();
@ -88,17 +88,12 @@ public class AuditingEntityCallbackUnitTests { @@ -88,17 +88,12 @@ public class AuditingEntityCallbackUnitTests {
@Test // DATAMONGO-2261
void hasExplicitOrder() {
assertThat(callback).isInstanceOf(Ordered.class);
assertThat(callback.getOrder()).isEqualTo(100);
}
@Test // GH-4914
void allowsChangingOrderDynamically() {
assertThat(callback).isInstanceOf(Ordered.class);
assertThat(callback.getOrder()).isEqualTo(100);
callback.setOrder(50);
assertThat(callback.getOrder()).isEqualTo(50);
}

56
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ReactiveAuditingEntityCallbackUnitTests.java

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
/*
* Copyright 2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.core.mapping.event;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.data.auditing.ReactiveIsNewAwareAuditingHandler;
import org.springframework.data.mapping.context.PersistentEntities;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
/**
* Unit tests for {@link ReactiveAuditingEntityCallback}.
*
* @author Mark Paluch
*/
class ReactiveAuditingEntityCallbackUnitTests {
private final MongoMappingContext mappingContext = new MongoMappingContext();
private ReactiveIsNewAwareAuditingHandler handler;
private ReactiveAuditingEntityCallback callback;
@BeforeEach
void setUp() {
mappingContext.getPersistentEntity(AuditingEntityCallbackUnitTests.Sample.class);
handler = spy(new ReactiveIsNewAwareAuditingHandler(PersistentEntities.of(mappingContext)));
callback = new ReactiveAuditingEntityCallback(() -> handler);
}
@Test // GH-4914
void allowsChangingOrderDynamically() {
callback.setOrder(50);
assertThat(callback.getOrder()).isEqualTo(50);
}
}

9
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ReactiveValidatingEntityCallbackUnitTests.java

@ -15,6 +15,8 @@ @@ -15,6 +15,8 @@
*/
package org.springframework.data.mongodb.core.mapping.event;
import static org.assertj.core.api.Assertions.*;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validation;
import jakarta.validation.ValidatorFactory;
@ -64,6 +66,13 @@ class ReactiveValidatingEntityCallbackUnitTests { @@ -64,6 +66,13 @@ class ReactiveValidatingEntityCallbackUnitTests {
.verifyComplete();
}
@Test // GH-4914
void allowsChangingOrderDynamically() {
callback.setOrder(50);
assertThat(callback.getOrder()).isEqualTo(50);
}
record Coordinates(@NotNull @Min(0) Integer x, @NotNull @Min(0) Integer y) {
Document toDocument() {

4
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallbackUnitTests.java

@ -26,7 +26,6 @@ import jakarta.validation.constraints.NotNull; @@ -26,7 +26,6 @@ import jakarta.validation.constraints.NotNull;
import org.bson.Document;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.core.Ordered;
/**
* Unit tests for {@link ValidatingEntityCallback}.
@ -68,9 +67,6 @@ class ValidatingEntityCallbackUnitTests { @@ -68,9 +67,6 @@ class ValidatingEntityCallbackUnitTests {
@Test // GH-4914
void allowsChangingOrderDynamically() {
assertThat(callback).isInstanceOf(Ordered.class);
assertThat(callback.getOrder()).isEqualTo(100);
callback.setOrder(50);
assertThat(callback.getOrder()).isEqualTo(50);
}

Loading…
Cancel
Save