From 71d2bfb254c76f3ae15458560ab25228a9fe5e25 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 26 Jan 2017 09:53:13 +0100 Subject: [PATCH] DATAKV-159 - Open up API for extension. Alter generic type declarations to open up repository related API for better extensibility. --- .../data/keyvalue/core/KeyValueTemplate.java | 12 ++++++------ .../BasicKeyValuePersistentEntity.java | 4 ++-- .../mapping/KeyValuePersistentEntity.java | 3 ++- .../mapping/KeyValuePersistentProperty.java | 12 +++++------- .../context/KeyValueMappingContext.java | 19 ++++++------------- 5 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java b/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java index d06eb84..f9a3204 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java +++ b/src/main/java/org/springframework/data/keyvalue/core/KeyValueTemplate.java @@ -52,7 +52,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub private static final PersistenceExceptionTranslator DEFAULT_PERSISTENCE_EXCEPTION_TRANSLATOR = new KeyValuePersistenceExceptionTranslator(); private final KeyValueAdapter adapter; - private final MappingContext, ? extends KeyValuePersistentProperty> mappingContext; + private final MappingContext, ? extends KeyValuePersistentProperty> mappingContext; private final IdentifierGenerator identifierGenerator; private PersistenceExceptionTranslator exceptionTranslator = DEFAULT_PERSISTENCE_EXCEPTION_TRANSLATOR; @@ -78,7 +78,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub * @param mappingContext must not be {@literal null}. */ public KeyValueTemplate(KeyValueAdapter adapter, - MappingContext, ? extends KeyValuePersistentProperty> mappingContext) { + MappingContext, ? extends KeyValuePersistentProperty> mappingContext) { Assert.notNull(adapter, "Adapter must not be null!"); Assert.notNull(mappingContext, "MappingContext must not be null!"); @@ -131,7 +131,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub @Override public T insert(T objectToInsert) { - KeyValuePersistentEntity entity = getKeyValuePersistentEntity(objectToInsert); + KeyValuePersistentEntity entity = getKeyValuePersistentEntity(objectToInsert); GeneratingIdAccessor generatingIdAccessor = new GeneratingIdAccessor(entity.getPropertyAccessor(objectToInsert), entity.getIdProperty() @@ -143,7 +143,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub return objectToInsert; } - private KeyValuePersistentEntity getKeyValuePersistentEntity(Object objectToInsert) { + private KeyValuePersistentEntity getKeyValuePersistentEntity(Object objectToInsert) { return this.mappingContext.getPersistentEntity(ClassUtils.getUserClass(objectToInsert)) .orElseThrow(() -> new IllegalArgumentException( @@ -190,7 +190,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub @Override public void update(Object objectToUpdate) { - KeyValuePersistentEntity entity = getKeyValuePersistentEntity(objectToUpdate); + KeyValuePersistentEntity entity = getKeyValuePersistentEntity(objectToUpdate); if (!entity.hasIdProperty()) { throw new InvalidDataAccessApiUsageException( @@ -329,7 +329,7 @@ public class KeyValueTemplate implements KeyValueOperations, ApplicationEventPub public T delete(T objectToDelete) { Class type = (Class) ClassUtils.getUserClass(objectToDelete); - KeyValuePersistentEntity entity = getKeyValuePersistentEntity(objectToDelete); + KeyValuePersistentEntity entity = getKeyValuePersistentEntity(objectToDelete); return delete((Serializable) entity.getIdentifierAccessor(objectToDelete).getIdentifier() .orElseThrow(() -> new IllegalArgumentException("Unable to extract 'id' for object to be deleted")), type); diff --git a/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java b/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java index ec12840..d9f8bb3 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java +++ b/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java @@ -26,8 +26,8 @@ import org.springframework.util.StringUtils; * @author Oliver Gierke * @param */ -public class BasicKeyValuePersistentEntity extends BasicPersistentEntity implements - KeyValuePersistentEntity { +public class BasicKeyValuePersistentEntity> + extends BasicPersistentEntity implements KeyValuePersistentEntity { private static final KeySpaceResolver DEFAULT_FALLBACK_RESOLVER = ClassNameKeySpaceResolver.INSTANCE; diff --git a/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentEntity.java b/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentEntity.java index abd3bc5..58cce33 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentEntity.java +++ b/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentEntity.java @@ -21,7 +21,8 @@ import org.springframework.data.mapping.model.MutablePersistentEntity; * @author Christoph Strobl * @param */ -public interface KeyValuePersistentEntity extends MutablePersistentEntity { +public interface KeyValuePersistentEntity> + extends MutablePersistentEntity { /** * Get the {@literal keySpace} a given entity assigns to. diff --git a/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentProperty.java b/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentProperty.java index 980dadb..0fd45cc 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentProperty.java +++ b/src/main/java/org/springframework/data/keyvalue/core/mapping/KeyValuePersistentProperty.java @@ -15,9 +15,6 @@ */ package org.springframework.data.keyvalue.core.mapping; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Field; - import org.springframework.data.mapping.Association; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -30,9 +27,10 @@ import org.springframework.data.mapping.model.SimpleTypeHolder; * * @author Christoph Strobl */ -public class KeyValuePersistentProperty extends AnnotationBasedPersistentProperty { +public class KeyValuePersistentProperty

> + extends AnnotationBasedPersistentProperty

{ - public KeyValuePersistentProperty(Property property, PersistentEntity owner, + public KeyValuePersistentProperty(Property property, PersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { super(property, owner, simpleTypeHolder); } @@ -42,7 +40,7 @@ public class KeyValuePersistentProperty extends AnnotationBasedPersistentPropert * @see org.springframework.data.mapping.model.AbstractPersistentProperty#createAssociation() */ @Override - protected Association createAssociation() { - return new Association(this, null); + protected Association

createAssociation() { + return new Association

((P) this, null); } } diff --git a/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java b/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java index fdd8df3..bb9cdfe 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java +++ b/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java @@ -15,9 +15,6 @@ */ package org.springframework.data.keyvalue.core.mapping.context; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Field; - import org.springframework.data.keyvalue.core.mapping.BasicKeyValuePersistentEntity; import org.springframework.data.keyvalue.core.mapping.KeySpaceResolver; import org.springframework.data.keyvalue.core.mapping.KeyValuePersistentEntity; @@ -35,8 +32,8 @@ import org.springframework.data.util.TypeInformation; * @author Christoph Strobl * @author Oliver Gierke */ -public class KeyValueMappingContext extends - AbstractMappingContext, KeyValuePersistentProperty> { +public class KeyValueMappingContext, P extends KeyValuePersistentProperty

> + extends AbstractMappingContext { private KeySpaceResolver fallbackKeySpaceResolver; @@ -49,17 +46,13 @@ public class KeyValueMappingContext extends this.fallbackKeySpaceResolver = fallbackKeySpaceResolver; } - /* - * (non-Javadoc) - * @see org.springframework.data.mapping.context.AbstractMappingContext#createPersistentEntity(org.springframework.data.util.TypeInformation) - */ @Override - protected KeyValuePersistentEntity createPersistentEntity(TypeInformation typeInformation) { - return new BasicKeyValuePersistentEntity(typeInformation, fallbackKeySpaceResolver); + protected E createPersistentEntity(TypeInformation typeInformation) { + return (E) new BasicKeyValuePersistentEntity(typeInformation, fallbackKeySpaceResolver); } @Override - protected KeyValuePersistentProperty createPersistentProperty(Property property, KeyValuePersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { - return new KeyValuePersistentProperty(property, owner, simpleTypeHolder); + protected P createPersistentProperty(Property property, E owner, SimpleTypeHolder simpleTypeHolder) { + return (P) new KeyValuePersistentProperty(property, owner, simpleTypeHolder); } }