From 322642515a2d2fa697e9e0634dc89bd9aa28db87 Mon Sep 17 00:00:00 2001 From: Alex Derkach Date: Fri, 24 Nov 2017 22:24:20 +0200 Subject: [PATCH] DATACOUCH-350 - Consider repository type in configuration extensions. We now check in configuration extensions whether the extension is capable to implement the repository by considering whether a repository is a reactive one. This prevents the non-reactive extension from implementing reactive repositories and vice versa. Original pull request: #153. --- ...hbaseRepositoryConfigurationExtension.java | 5 ++++ ...hbaseRepositoryConfigurationExtension.java | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/java/org/springframework/data/couchbase/repository/config/CouchbaseRepositoryConfigurationExtension.java b/src/main/java/org/springframework/data/couchbase/repository/config/CouchbaseRepositoryConfigurationExtension.java index b50cbf90..5a84c3a4 100644 --- a/src/main/java/org/springframework/data/couchbase/repository/config/CouchbaseRepositoryConfigurationExtension.java +++ b/src/main/java/org/springframework/data/couchbase/repository/config/CouchbaseRepositoryConfigurationExtension.java @@ -28,6 +28,7 @@ import org.springframework.data.couchbase.repository.support.CouchbaseRepository import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource; import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport; import org.springframework.data.repository.config.XmlRepositoryConfigurationSource; +import org.springframework.data.repository.core.RepositoryMetadata; import org.w3c.dom.Element; /** @@ -84,4 +85,8 @@ public class CouchbaseRepositoryConfigurationExtension extends RepositoryConfigu protected Collection> getIdentifyingTypes() { return Collections.singleton(CouchbaseRepository.class); } + + protected boolean useRepositoryConfiguration(RepositoryMetadata metadata) { + return !metadata.isReactiveRepository(); + } } diff --git a/src/main/java/org/springframework/data/couchbase/repository/config/ReactiveCouchbaseRepositoryConfigurationExtension.java b/src/main/java/org/springframework/data/couchbase/repository/config/ReactiveCouchbaseRepositoryConfigurationExtension.java index 5f3a4c65..07dd130b 100644 --- a/src/main/java/org/springframework/data/couchbase/repository/config/ReactiveCouchbaseRepositoryConfigurationExtension.java +++ b/src/main/java/org/springframework/data/couchbase/repository/config/ReactiveCouchbaseRepositoryConfigurationExtension.java @@ -15,9 +15,16 @@ */ package org.springframework.data.couchbase.repository.config; +import java.lang.annotation.Annotation; +import java.util.Collection; +import java.util.Collections; + +import org.springframework.data.couchbase.core.mapping.Document; +import org.springframework.data.couchbase.repository.ReactiveCouchbaseRepository; import org.springframework.data.couchbase.repository.support.ReactiveCouchbaseRepositoryFactoryBean; import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport; import org.springframework.data.repository.config.XmlRepositoryConfigurationSource; +import org.springframework.data.repository.core.RepositoryMetadata; import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -62,4 +69,25 @@ public class ReactiveCouchbaseRepositoryConfigurationExtension extends Repositor builder.addPropertyReference("indexManager", BeanNames.COUCHBASE_INDEX_MANAGER); } + /* + * (non-Javadoc) + * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#getIdentifyingAnnotations() + */ + @Override + protected Collection> getIdentifyingAnnotations() { + return Collections.singleton(Document.class); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#getIdentifyingTypes() + */ + @Override + protected Collection> getIdentifyingTypes() { + return Collections.singleton(ReactiveCouchbaseRepository.class); + } + + protected boolean useRepositoryConfiguration(RepositoryMetadata metadata) { + return metadata.isReactiveRepository(); + } }