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;
* {@link EntityCallback} to populate auditing related fields on an entity about to be saved. * {@link EntityCallback} to populate auditing related fields on an entity about to be saved.
* *
* @author Mark Paluch * @author Mark Paluch
* @author yangchef1 * @author HeeChul Yang
* @since 2.2 * @since 2.2
*/ */
public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Ordered { public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Ordered {
@ -47,17 +47,26 @@ public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Or
this.auditingHandlerFactory = auditingHandlerFactory; this.auditingHandlerFactory = auditingHandlerFactory;
} }
@Override
public Object onBeforeConvert(Object entity, String collection) {
return auditingHandlerFactory.getObject().markAudited(entity);
}
@Override @Override
public int getOrder() { public int getOrder() {
return this.order; 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) { public void setOrder(int order) {
this.order = 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;
public class ReactiveAuditingEntityCallback implements ReactiveBeforeConvertCallback<Object>, Ordered { public class ReactiveAuditingEntityCallback implements ReactiveBeforeConvertCallback<Object>, Ordered {
private final ObjectFactory<ReactiveIsNewAwareAuditingHandler> auditingHandlerFactory; private final ObjectFactory<ReactiveIsNewAwareAuditingHandler> auditingHandlerFactory;
private int order = 100;
/** /**
* Creates a new {@link ReactiveAuditingEntityCallback} using the given {@link MappingContext} and * Creates a new {@link ReactiveAuditingEntityCallback} using the given {@link MappingContext} and
@ -48,12 +49,24 @@ public class ReactiveAuditingEntityCallback implements ReactiveBeforeConvertCall
} }
@Override @Override
public Publisher<Object> onBeforeConvert(Object entity, String collection) { public int getOrder() {
return auditingHandlerFactory.getObject().markAudited(entity); 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 @Override
public int getOrder() { public Publisher<Object> onBeforeConvert(Object entity, String collection) {
return 100; 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;
public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallback<Object>, Ordered { public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallback<Object>, Ordered {
private final BeanValidationDelegate delegate; private final BeanValidationDelegate delegate;
private int order = 100;
/** /**
* Creates a new {@link ReactiveValidatingEntityCallback} using the given {@link Validator}. * Creates a new {@link ReactiveValidatingEntityCallback} using the given {@link Validator}.
@ -49,6 +50,23 @@ public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallb
this.delegate = new BeanValidationDelegate(validator); 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 @Override
public Mono<Object> onBeforeSave(Object entity, Document document, String collection) { public Mono<Object> onBeforeSave(Object entity, Document document, String collection) {
@ -60,10 +78,4 @@ public class ReactiveValidatingEntityCallback implements ReactiveBeforeSaveCallb
return Mono.just(entity); 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;
* *
* @author Rene Felgenträger * @author Rene Felgenträger
* @author Mark Paluch * @author Mark Paluch
* @author yangchef1 * @author HeeChul Yang
* @since 4.5 * @since 4.5
*/ */
public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ordered { public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ordered {
@ -50,6 +50,23 @@ public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ord
this.delegate = new BeanValidationDelegate(validator); 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 @Override
public Object onBeforeSave(Object entity, Document document, String collection) { public Object onBeforeSave(Object entity, Document document, String collection) {
@ -61,13 +78,4 @@ public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ord
return entity; 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;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.core.Ordered;
import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.annotation.LastModifiedDate;
@ -40,10 +40,10 @@ import org.springframework.data.mongodb.core.mapping.Unwrapped;
* Unit tests for {@link AuditingEntityCallback}. * Unit tests for {@link AuditingEntityCallback}.
* *
* @author Mark Paluch * @author Mark Paluch
* @author yangchef1 * @author HeeChul Yang
*/ */
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class AuditingEntityCallbackUnitTests { class AuditingEntityCallbackUnitTests {
private final MongoMappingContext mappingContext = new MongoMappingContext(); private final MongoMappingContext mappingContext = new MongoMappingContext();
@ -88,17 +88,12 @@ public class AuditingEntityCallbackUnitTests {
@Test // DATAMONGO-2261 @Test // DATAMONGO-2261
void hasExplicitOrder() { void hasExplicitOrder() {
assertThat(callback).isInstanceOf(Ordered.class);
assertThat(callback.getOrder()).isEqualTo(100); assertThat(callback.getOrder()).isEqualTo(100);
} }
@Test // GH-4914 @Test // GH-4914
void allowsChangingOrderDynamically() { void allowsChangingOrderDynamically() {
assertThat(callback).isInstanceOf(Ordered.class);
assertThat(callback.getOrder()).isEqualTo(100);
callback.setOrder(50); callback.setOrder(50);
assertThat(callback.getOrder()).isEqualTo(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 @@
/*
* 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 @@
*/ */
package org.springframework.data.mongodb.core.mapping.event; package org.springframework.data.mongodb.core.mapping.event;
import static org.assertj.core.api.Assertions.*;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validation; import jakarta.validation.Validation;
import jakarta.validation.ValidatorFactory; import jakarta.validation.ValidatorFactory;
@ -64,6 +66,13 @@ class ReactiveValidatingEntityCallbackUnitTests {
.verifyComplete(); .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) { record Coordinates(@NotNull @Min(0) Integer x, @NotNull @Min(0) Integer y) {
Document toDocument() { 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;
import org.bson.Document; import org.bson.Document;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.core.Ordered;
/** /**
* Unit tests for {@link ValidatingEntityCallback}. * Unit tests for {@link ValidatingEntityCallback}.
@ -68,9 +67,6 @@ class ValidatingEntityCallbackUnitTests {
@Test // GH-4914 @Test // GH-4914
void allowsChangingOrderDynamically() { void allowsChangingOrderDynamically() {
assertThat(callback).isInstanceOf(Ordered.class);
assertThat(callback.getOrder()).isEqualTo(100);
callback.setOrder(50); callback.setOrder(50);
assertThat(callback.getOrder()).isEqualTo(50); assertThat(callback.getOrder()).isEqualTo(50);
} }

Loading…
Cancel
Save