Browse Source

Trigger BeforeConvertEvent when saving an aggregate.

Closes: #910
Original pull request: #913.
pull/1035/head
Jens Schauder 5 years ago committed by Mark Paluch
parent
commit
c044c41651
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 3
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java
  2. 4
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java
  3. 6
      spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/event/BeforeConvertEvent.java
  4. 2
      spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/event/AbstractRelationalEventListenerUnitTests.java

3
spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateTemplate.java

@ -404,6 +404,9 @@ public class JdbcAggregateTemplate implements JdbcAggregateOperations {
} }
private <T> T triggerBeforeConvert(T aggregateRoot) { private <T> T triggerBeforeConvert(T aggregateRoot) {
publisher.publishEvent(new BeforeConvertEvent<>(aggregateRoot));
return entityCallbacks.callback(BeforeConvertCallback.class, aggregateRoot); return entityCallbacks.callback(BeforeConvertCallback.class, aggregateRoot);
} }

4
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/SimpleJdbcRepositoryEventsUnitTests.java

@ -54,6 +54,7 @@ import org.springframework.data.relational.core.mapping.RelationalMappingContext
import org.springframework.data.relational.core.mapping.event.AfterDeleteEvent; import org.springframework.data.relational.core.mapping.event.AfterDeleteEvent;
import org.springframework.data.relational.core.mapping.event.AfterLoadEvent; import org.springframework.data.relational.core.mapping.event.AfterLoadEvent;
import org.springframework.data.relational.core.mapping.event.AfterSaveEvent; import org.springframework.data.relational.core.mapping.event.AfterSaveEvent;
import org.springframework.data.relational.core.mapping.event.BeforeConvertEvent;
import org.springframework.data.relational.core.mapping.event.BeforeDeleteEvent; import org.springframework.data.relational.core.mapping.event.BeforeDeleteEvent;
import org.springframework.data.relational.core.mapping.event.BeforeSaveEvent; import org.springframework.data.relational.core.mapping.event.BeforeSaveEvent;
import org.springframework.data.relational.core.mapping.event.Identifier; import org.springframework.data.relational.core.mapping.event.Identifier;
@ -115,6 +116,7 @@ public class SimpleJdbcRepositoryEventsUnitTests {
assertThat(publisher.events) // assertThat(publisher.events) //
.extracting(e -> (Class) e.getClass()) // .extracting(e -> (Class) e.getClass()) //
.containsExactly( // .containsExactly( //
BeforeConvertEvent.class, //
BeforeSaveEvent.class, // BeforeSaveEvent.class, //
AfterSaveEvent.class // AfterSaveEvent.class //
); );
@ -132,8 +134,10 @@ public class SimpleJdbcRepositoryEventsUnitTests {
assertThat(publisher.events) // assertThat(publisher.events) //
.extracting(e -> (Class) e.getClass()) // .extracting(e -> (Class) e.getClass()) //
.containsExactly( // .containsExactly( //
BeforeConvertEvent.class, //
BeforeSaveEvent.class, // BeforeSaveEvent.class, //
AfterSaveEvent.class, // AfterSaveEvent.class, //
BeforeConvertEvent.class, //
BeforeSaveEvent.class, // BeforeSaveEvent.class, //
AfterSaveEvent.class // AfterSaveEvent.class //
); );

6
spring-data-relational/src/main/java/org/springframework/data/relational/core/mapping/event/BeforeConvertEvent.java

@ -23,7 +23,7 @@ import org.springframework.data.relational.core.conversion.AggregateChange;
* @since 1.1 * @since 1.1
* @author Jens Schauder * @author Jens Schauder
*/ */
public class BeforeConvertEvent<E> extends RelationalSaveEvent<E> { public class BeforeConvertEvent<E> extends RelationalEventWithEntity<E> {
private static final long serialVersionUID = -5716795164911939224L; private static final long serialVersionUID = -5716795164911939224L;
@ -33,7 +33,7 @@ public class BeforeConvertEvent<E> extends RelationalSaveEvent<E> {
* this event is fired before the conversion the change is actually empty, but contains information if the * this event is fired before the conversion the change is actually empty, but contains information if the
* aggregate is considered new in {@link AggregateChange#getKind()}. Must not be {@literal null}. * aggregate is considered new in {@link AggregateChange#getKind()}. Must not be {@literal null}.
*/ */
public BeforeConvertEvent(E instance, AggregateChange<E> change) { public BeforeConvertEvent(E instance) {
super(instance, change); super(instance);
} }
} }

2
spring-data-relational/src/test/java/org/springframework/data/relational/core/mapping/event/AbstractRelationalEventListenerUnitTests.java

@ -46,7 +46,7 @@ public class AbstractRelationalEventListenerUnitTests {
@Test // DATAJDBC-454 @Test // DATAJDBC-454
public void beforeConvert() { public void beforeConvert() {
listener.onApplicationEvent(new BeforeConvertEvent<>(dummyEntity, MutableAggregateChange.forDelete(dummyEntity))); listener.onApplicationEvent(new BeforeConvertEvent<>(dummyEntity));
assertThat(events).containsExactly("beforeConvert"); assertThat(events).containsExactly("beforeConvert");
} }

Loading…
Cancel
Save