DATACMNS-365 - Enhanced auditing subsystem to work with accessor annotations.

Added a MappingAuditableBeanWrapperFactory to be able to use themapping metamodel to lookup annotations on persistent properties. This propagates into AuditingHandler and IsNewAwareAuditingHandler getting new constructors taking a MappingContext to set themselves up correctly. This will probably need store specific updates in the setup of the auditing infrastructure for namespace implementations and annotation based JavaConfig.

Introduced ….getPersistentProperty(Class<? extends Annotation> annotationType) on PersistentEntity to be able to access properties with a given annotation.

Updated SonarGraph architecture description and moved auditing related config classes into auditing.config package.
This commit is contained in:
Oliver Gierke
2014-03-18 15:52:19 +01:00
parent 0e7a444aba
commit e9bcca11be
14 changed files with 680 additions and 158 deletions

View File

@@ -96,6 +96,15 @@ public interface PersistentEntity<T, P extends PersistentProperty<P>> {
*/
P getPersistentProperty(String name);
/**
* Returns the property equipped with an annotation of the given type.
*
* @param annotationType must not be {@literal null}.
* @return
* @since 1.8
*/
P getPersistentProperty(Class<? extends Annotation> annotationType);
/**
* Returns whether the {@link PersistentEntity} has an id property. If this call returns {@literal true},
* {@link #getIdProperty()} will return a non-{@literal null} value.
@@ -158,6 +167,7 @@ public interface PersistentEntity<T, P extends PersistentProperty<P>> {
*
* @param annotationType must not be {@literal null}.
* @return
* @since 1.8
*/
<A extends Annotation> A findAnnotation(Class<A> annotationType);
}

View File

@@ -228,6 +228,33 @@ public class BasicPersistentEntity<T, P extends PersistentProperty<P>> implement
return propertyCache.get(name);
}
/*
* (non-Javadoc)
* @see org.springframework.data.mapping.PersistentEntity#getPersistentProperty(java.lang.Class)
*/
@Override
public P getPersistentProperty(Class<? extends Annotation> annotationType) {
Assert.notNull(annotationType, "Annotation type must not be null!");
for (P property : properties) {
if (property.isAnnotationPresent(annotationType)) {
return property;
}
}
for (Association<P> association : associations) {
P property = association.getInverse();
if (property.isAnnotationPresent(annotationType)) {
return property;
}
}
return null;
}
/*
* (non-Javadoc)
* @see org.springframework.data.mapping.PersistentEntity#getType()