From aaefaa5dcde176189029cbaa3937eba10896fb48 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Wed, 26 Aug 2015 10:42:12 +1200 Subject: [PATCH] #390 - ChangeLog - Add inheritance hierarchy check for @ChangeLog --- .../changelog/DefaultChangeLogRegister.java | 16 +++++++++++++++- .../changelog/DefaultChangeLogRegisterTest.java | 12 ++++++++++++ .../tests/inheritance/model/Configuration.java | 3 +++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegister.java b/src/main/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegister.java index 4d8d1d0da..87c65f8fc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegister.java +++ b/src/main/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegister.java @@ -30,7 +30,7 @@ public class DefaultChangeLogRegister implements ChangeLogRegister { @Override public ChangeLogFilter getChangeFilter(Class beanType) { - ChangeLog changeLog = beanType.getAnnotation(ChangeLog.class); + ChangeLog changeLog = getChangeLog(beanType); if (changeLog == null) { return null; } @@ -48,6 +48,20 @@ public class DefaultChangeLogRegister implements ChangeLogRegister { return new UpdateFilter(insertModeInclude(changeLog.inserts()), updateProps); } + /** + * Find and return the ChangeLog annotation in the inheritance hierarchy. + */ + private ChangeLog getChangeLog(Class beanType) { + ChangeLog changeLog = beanType.getAnnotation(ChangeLog.class); + if (changeLog != null) { + return changeLog; + } + if (Object.class.equals(beanType.getSuperclass())) { + return null; + } + return getChangeLog(beanType.getSuperclass()); + } + /** * Return true if inserts should be included in the change log. */ diff --git a/src/test/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegisterTest.java b/src/test/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegisterTest.java index 1db0c8400..8386683b4 100644 --- a/src/test/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegisterTest.java +++ b/src/test/java/com/avaje/ebeaninternal/server/changelog/DefaultChangeLogRegisterTest.java @@ -2,6 +2,7 @@ package com.avaje.ebeaninternal.server.changelog; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.event.changelog.ChangeLogFilter; +import com.avaje.tests.inheritance.model.ProductConfiguration; import com.avaje.tests.model.basic.Address; import com.avaje.tests.model.basic.Contact; import com.avaje.tests.model.basic.Country; @@ -10,6 +11,7 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -62,4 +64,14 @@ public class DefaultChangeLogRegisterTest extends BaseTestCase { } + @Test + public void test_inheritance() { + + DefaultChangeLogRegister register = new DefaultChangeLogRegister(true); + ChangeLogFilter changeFilter = register.getChangeFilter(ProductConfiguration.class); + assertNotNull(changeFilter); + DefaultChangeLogRegister.BasicFilter basicFilter = (DefaultChangeLogRegister.BasicFilter)changeFilter; + assertTrue(basicFilter.includeInserts); + } + } diff --git a/src/test/java/com/avaje/tests/inheritance/model/Configuration.java b/src/test/java/com/avaje/tests/inheritance/model/Configuration.java index 55d9aa1a1..66700b2fa 100644 --- a/src/test/java/com/avaje/tests/inheritance/model/Configuration.java +++ b/src/test/java/com/avaje/tests/inheritance/model/Configuration.java @@ -1,5 +1,7 @@ package com.avaje.tests.inheritance.model; +import com.avaje.ebean.annotation.ChangeLog; + import javax.persistence.Column; import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; @@ -9,6 +11,7 @@ import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.ManyToOne; +@ChangeLog @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="type", discriminatorType=DiscriminatorType.STRING)