19
19
import org .springframework .beans .BeansException ;
20
20
import org .springframework .context .ApplicationContext ;
21
21
import org .springframework .context .ApplicationContextAware ;
22
+ import org .springframework .context .ConfigurableApplicationContext ;
22
23
import org .springframework .data .couchbase .CouchbaseClientFactory ;
23
24
import org .springframework .data .couchbase .core .convert .CouchbaseConverter ;
24
25
import org .springframework .data .couchbase .core .convert .translation .JacksonTranslationService ;
25
26
import org .springframework .data .couchbase .core .convert .translation .TranslationService ;
27
+ import org .springframework .data .couchbase .core .index .CouchbasePersistentEntityIndexCreator ;
28
+ import org .springframework .data .couchbase .core .mapping .CouchbaseMappingContext ;
29
+ import org .springframework .data .couchbase .core .mapping .CouchbasePersistentEntity ;
30
+ import org .springframework .data .couchbase .core .mapping .CouchbasePersistentProperty ;
31
+ import org .springframework .data .mapping .context .MappingContext ;
32
+ import org .springframework .lang .Nullable ;
26
33
27
34
import com .couchbase .client .java .Collection ;
28
35
@@ -40,7 +47,9 @@ public class CouchbaseTemplate implements CouchbaseOperations, ApplicationContex
40
47
private final CouchbaseClientFactory clientFactory ;
41
48
private final CouchbaseConverter converter ;
42
49
private final CouchbaseTemplateSupport templateSupport ;
50
+ private final MappingContext <? extends CouchbasePersistentEntity <?>, CouchbasePersistentProperty > mappingContext ;
43
51
private final ReactiveCouchbaseTemplate reactiveCouchbaseTemplate ;
52
+ private @ Nullable CouchbasePersistentEntityIndexCreator indexCreator ;
44
53
45
54
public CouchbaseTemplate (final CouchbaseClientFactory clientFactory , final CouchbaseConverter converter ) {
46
55
this (clientFactory , converter , new JacksonTranslationService ());
@@ -52,6 +61,14 @@ public CouchbaseTemplate(final CouchbaseClientFactory clientFactory, final Couch
52
61
this .converter = converter ;
53
62
this .templateSupport = new CouchbaseTemplateSupport (converter , translationService );
54
63
this .reactiveCouchbaseTemplate = new ReactiveCouchbaseTemplate (clientFactory , converter , translationService );
64
+
65
+ this .mappingContext = this .converter .getMappingContext ();
66
+ if (mappingContext instanceof CouchbaseMappingContext ) {
67
+ CouchbaseMappingContext cmc = (CouchbaseMappingContext ) mappingContext ;
68
+ if (cmc .isAutoIndexCreation ()) {
69
+ indexCreator = new CouchbasePersistentEntityIndexCreator (cmc , this );
70
+ }
71
+ }
55
72
}
56
73
57
74
@ Override
@@ -140,7 +157,28 @@ public ReactiveCouchbaseTemplate reactive() {
140
157
141
158
@ Override
142
159
public void setApplicationContext (final ApplicationContext applicationContext ) throws BeansException {
160
+ prepareIndexCreator (applicationContext );
143
161
templateSupport .setApplicationContext (applicationContext );
144
162
reactiveCouchbaseTemplate .setApplicationContext (applicationContext );
145
163
}
164
+
165
+ private void prepareIndexCreator (final ApplicationContext context ) {
166
+ String [] indexCreators = context .getBeanNamesForType (CouchbasePersistentEntityIndexCreator .class );
167
+
168
+ for (String creator : indexCreators ) {
169
+ CouchbasePersistentEntityIndexCreator creatorBean = context .getBean (creator ,
170
+ CouchbasePersistentEntityIndexCreator .class );
171
+ if (creatorBean .isIndexCreatorFor (mappingContext )) {
172
+ return ;
173
+ }
174
+ }
175
+
176
+ if (context instanceof ConfigurableApplicationContext && indexCreator != null ) {
177
+ ((ConfigurableApplicationContext ) context ).addApplicationListener (indexCreator );
178
+ if (mappingContext instanceof CouchbaseMappingContext ) {
179
+ CouchbaseMappingContext cmc = (CouchbaseMappingContext ) mappingContext ;
180
+ cmc .setIndexCreator (indexCreator );
181
+ }
182
+ }
183
+ }
146
184
}
0 commit comments