Skip to content

Commit 31bd354

Browse files
committed
Allow customizing order for AuditingEntityCallback and ValidatingEntityCallback.
Added corresponding test cases for this functionality. Closes #4914 Signed-off-by: yangchef1 <[email protected]>
1 parent d37fa9e commit 31bd354

File tree

4 files changed

+36
-2
lines changed

4 files changed

+36
-2
lines changed

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@
2727
* {@link EntityCallback} to populate auditing related fields on an entity about to be saved.
2828
*
2929
* @author Mark Paluch
30+
* @author yangchef1
3031
* @since 2.2
3132
*/
3233
public class AuditingEntityCallback implements BeforeConvertCallback<Object>, Ordered {
3334

3435
private final ObjectFactory<IsNewAwareAuditingHandler> auditingHandlerFactory;
36+
private int order = 100;
3537

3638
/**
3739
* Creates a new {@link AuditingEntityCallback} using the given {@link MappingContext} and {@link AuditingHandler}
@@ -52,6 +54,10 @@ public Object onBeforeConvert(Object entity, String collection) {
5254

5355
@Override
5456
public int getOrder() {
55-
return 100;
57+
return this.order;
58+
}
59+
60+
public void setOrder(int order) {
61+
this.order = order;
5662
}
5763
}

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@
3333
*
3434
* @author Rene Felgenträger
3535
* @author Mark Paluch
36+
* @author yangchef1
3637
* @since 4.5
3738
*/
3839
public class ValidatingEntityCallback implements BeforeSaveCallback<Object>, Ordered {
3940

4041
private final BeanValidationDelegate delegate;
42+
private int order = 100;
4143

4244
/**
4345
* Creates a new {@link ValidatingEntityCallback} using the given {@link Validator}.
@@ -62,7 +64,10 @@ public Object onBeforeSave(Object entity, Document document, String collection)
6264

6365
@Override
6466
public int getOrder() {
65-
return 100;
67+
return this.order;
6668
}
6769

70+
public void setOrder(int order) {
71+
this.order = order;
72+
}
6873
}

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

+11
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
* Unit tests for {@link AuditingEntityCallback}.
4141
*
4242
* @author Mark Paluch
43+
* @author yangchef1
4344
*/
4445
@ExtendWith(MockitoExtension.class)
4546
public class AuditingEntityCallbackUnitTests {
@@ -92,6 +93,16 @@ void hasExplicitOrder() {
9293
assertThat(callback.getOrder()).isEqualTo(100);
9394
}
9495

96+
@Test // GH-4914
97+
void allowsChangingOrderDynamically() {
98+
99+
assertThat(callback).isInstanceOf(Ordered.class);
100+
assertThat(callback.getOrder()).isEqualTo(100);
101+
102+
callback.setOrder(50);
103+
assertThat(callback.getOrder()).isEqualTo(50);
104+
}
105+
95106
@Test // DATAMONGO-2261
96107
void propagatesChangedInstanceToEvent() {
97108

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

+12
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@
2626
import org.bson.Document;
2727
import org.junit.jupiter.api.BeforeEach;
2828
import org.junit.jupiter.api.Test;
29+
import org.springframework.core.Ordered;
2930

3031
/**
3132
* Unit tests for {@link ValidatingEntityCallback}.
3233
*
3334
* @author Rene Felgenträger
3435
* @author Mark Paluch
36+
* @author yangchef1
3537
*/
3638
class ValidatingEntityCallbackUnitTests {
3739

@@ -63,6 +65,16 @@ void validateSuccessful() {
6365
assertThat(entity).isEqualTo(coordinates);
6466
}
6567

68+
@Test // GH-4914
69+
void allowsChangingOrderDynamically() {
70+
71+
assertThat(callback).isInstanceOf(Ordered.class);
72+
assertThat(callback.getOrder()).isEqualTo(100);
73+
74+
callback.setOrder(50);
75+
assertThat(callback.getOrder()).isEqualTo(50);
76+
}
77+
6678
record Coordinates(@NotNull @Min(0) Integer x, @NotNull @Min(0) Integer y) {
6779

6880
Document toDocument() {

0 commit comments

Comments
 (0)