From 4c868e04078cb86088c0f175552ddd396f66f315 Mon Sep 17 00:00:00 2001 From: mikereiche Date: Wed, 17 Feb 2021 09:14:15 -0800 Subject: [PATCH] Revert "DATACOUCH-550 - Refactored the usage of CouchbasePersistentEntityIndexCreator. (#298)" This reverts commit 80bae4bf67c8deb78fa9cef5c685335b62f16efd. --- .../couchbase/core/CouchbaseTemplate.java | 38 +++++++++++++++++++ .../core/CustomTypeKeyIntegrationTests.java | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java b/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java index 4ba4182f0..8b10ac223 100644 --- a/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java +++ b/src/main/java/org/springframework/data/couchbase/core/CouchbaseTemplate.java @@ -19,10 +19,17 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.couchbase.CouchbaseClientFactory; import org.springframework.data.couchbase.core.convert.CouchbaseConverter; import org.springframework.data.couchbase.core.convert.translation.JacksonTranslationService; import org.springframework.data.couchbase.core.convert.translation.TranslationService; +import org.springframework.data.couchbase.core.index.CouchbasePersistentEntityIndexCreator; +import org.springframework.data.couchbase.core.mapping.CouchbaseMappingContext; +import org.springframework.data.couchbase.core.mapping.CouchbasePersistentEntity; +import org.springframework.data.couchbase.core.mapping.CouchbasePersistentProperty; +import org.springframework.data.mapping.context.MappingContext; +import org.springframework.lang.Nullable; import com.couchbase.client.java.Collection; @@ -40,7 +47,9 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationContex private final CouchbaseClientFactory clientFactory; private final CouchbaseConverter converter; private final CouchbaseTemplateSupport templateSupport; + private final MappingContext, CouchbasePersistentProperty> mappingContext; private final ReactiveCouchbaseTemplate reactiveCouchbaseTemplate; + private @Nullable CouchbasePersistentEntityIndexCreator indexCreator; public CouchbaseTemplate(final CouchbaseClientFactory clientFactory, final CouchbaseConverter converter) { this(clientFactory, converter, new JacksonTranslationService()); @@ -52,6 +61,14 @@ public CouchbaseTemplate(final CouchbaseClientFactory clientFactory, final Couch this.converter = converter; this.templateSupport = new CouchbaseTemplateSupport(converter, translationService); this.reactiveCouchbaseTemplate = new ReactiveCouchbaseTemplate(clientFactory, converter, translationService); + + this.mappingContext = this.converter.getMappingContext(); + if (mappingContext instanceof CouchbaseMappingContext) { + CouchbaseMappingContext cmc = (CouchbaseMappingContext) mappingContext; + if (cmc.isAutoIndexCreation()) { + indexCreator = new CouchbasePersistentEntityIndexCreator(cmc, this); + } + } } @Override @@ -140,7 +157,28 @@ public ReactiveCouchbaseTemplate reactive() { @Override public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException { + prepareIndexCreator(applicationContext); templateSupport.setApplicationContext(applicationContext); reactiveCouchbaseTemplate.setApplicationContext(applicationContext); } + + private void prepareIndexCreator(final ApplicationContext context) { + String[] indexCreators = context.getBeanNamesForType(CouchbasePersistentEntityIndexCreator.class); + + for (String creator : indexCreators) { + CouchbasePersistentEntityIndexCreator creatorBean = context.getBean(creator, + CouchbasePersistentEntityIndexCreator.class); + if (creatorBean.isIndexCreatorFor(mappingContext)) { + return; + } + } + + if (context instanceof ConfigurableApplicationContext && indexCreator != null) { + ((ConfigurableApplicationContext) context).addApplicationListener(indexCreator); + if (mappingContext instanceof CouchbaseMappingContext) { + CouchbaseMappingContext cmc = (CouchbaseMappingContext) mappingContext; + cmc.setIndexCreator(indexCreator); + } + } + } } diff --git a/src/test/java/org/springframework/data/couchbase/core/CustomTypeKeyIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/CustomTypeKeyIntegrationTests.java index 65af9594c..655c4a32f 100644 --- a/src/test/java/org/springframework/data/couchbase/core/CustomTypeKeyIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/CustomTypeKeyIntegrationTests.java @@ -48,7 +48,7 @@ public class CustomTypeKeyIntegrationTests extends ClusterAwareIntegrationTests @Test void saveSimpleEntityCorrectlyWithDifferentTypeKey() { - clientFactory.getBucket().waitUntilReady(Duration.ofSeconds(5)); + clientFactory.getBucket().waitUntilReady(Duration.ofSeconds(10)); User user = new User(UUID.randomUUID().toString(), "firstname", "lastname"); // When using 'mocked', this call runs fine when the test class is ran by itself,