1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.ext.elasticsearch.client;
20
21 import co.elastic.clients.elasticsearch.ElasticsearchClient;
22 import java.util.stream.Collectors;
23 import org.apache.http.HttpHost;
24 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
25 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
26 import org.apache.syncope.core.persistence.api.dao.UserDAO;
27 import org.identityconnectors.common.CollectionUtil;
28 import org.springframework.boot.actuate.health.HealthContributor;
29 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
30 import org.springframework.boot.context.properties.EnableConfigurationProperties;
31 import org.springframework.context.annotation.Bean;
32 import org.springframework.context.annotation.Configuration;
33 import org.springframework.context.annotation.Lazy;
34
35 @EnableConfigurationProperties(ElasticsearchProperties.class)
36 @Configuration(proxyBeanMethods = false)
37 public class ElasticsearchClientContext {
38
39 @ConditionalOnMissingBean
40 @Bean
41 public ElasticsearchClientFactoryBean elasticsearchClientFactoryBean(final ElasticsearchProperties props) {
42 return new ElasticsearchClientFactoryBean(
43 CollectionUtil.nullAsEmpty(props.getHosts()).stream().
44 map(HttpHost::create).collect(Collectors.toList()));
45 }
46
47 @ConditionalOnMissingBean
48 @Bean
49 public ElasticsearchUtils elasticsearchUtils(
50 final @Lazy UserDAO userDAO,
51 final @Lazy GroupDAO groupDAO,
52 final @Lazy AnyObjectDAO anyObjectDAO) {
53
54 return new ElasticsearchUtils(userDAO, groupDAO, anyObjectDAO);
55 }
56
57 @ConditionalOnMissingBean
58 @Bean
59 public ElasticsearchIndexManager elasticsearchIndexManager(
60 final ElasticsearchProperties props,
61 final ElasticsearchClient client,
62 final ElasticsearchUtils elasticsearchUtils) {
63
64 return new ElasticsearchIndexManager(
65 client,
66 elasticsearchUtils,
67 props.getNumberOfShards(),
68 props.getNumberOfReplicas());
69 }
70
71 @ConditionalOnMissingBean
72 @Bean
73 public ElasticsearchIndexLoader elasticsearchIndexLoader(final ElasticsearchIndexManager indexManager) {
74 return new ElasticsearchIndexLoader(indexManager);
75 }
76
77 @ConditionalOnMissingBean(name = "syncopeElasticsearchHealthContributor")
78 @Bean(name = {
79 "syncopeElasticsearchHealthContributor", "elasticsearchHealthIndicator", "elasticsearchHealthContributor" })
80 public HealthContributor syncopeElasticsearchHealthContributor(final ElasticsearchClient client) {
81 return new SyncopeElasticsearchHealthContributor(client);
82 }
83 }