1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.persistence.jpa;
20
21 import co.elastic.clients.elasticsearch.ElasticsearchClient;
22 import org.apache.syncope.core.persistence.api.attrvalue.validation.PlainAttrValidationManager;
23 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
24 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
25 import org.apache.syncope.core.persistence.api.dao.AuditConfDAO;
26 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
27 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
28 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
29 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
30 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
31 import org.apache.syncope.core.persistence.api.dao.UserDAO;
32 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
33 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
34 import org.apache.syncope.core.persistence.jpa.dao.ElasticsearchAnySearchDAO;
35 import org.apache.syncope.core.persistence.jpa.dao.ElasticsearchAuditConfDAO;
36 import org.apache.syncope.core.persistence.jpa.dao.ElasticsearchRealmDAO;
37 import org.apache.syncope.ext.elasticsearch.client.ElasticsearchProperties;
38 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
39 import org.springframework.context.ApplicationEventPublisher;
40 import org.springframework.context.annotation.Bean;
41 import org.springframework.context.annotation.Configuration;
42 import org.springframework.context.annotation.Lazy;
43
44 @Configuration(proxyBeanMethods = false)
45 public class ElasticsearchPersistenceContext {
46
47 @ConditionalOnMissingBean(name = "elasticsearchAnySearchDAO")
48 @Bean
49 public AnySearchDAO anySearchDAO(
50 final ElasticsearchProperties props,
51 final RealmDAO realmDAO,
52 final @Lazy DynRealmDAO dynRealmDAO,
53 final @Lazy UserDAO userDAO,
54 final @Lazy GroupDAO groupDAO,
55 final @Lazy AnyObjectDAO anyObjectDAO,
56 final PlainSchemaDAO schemaDAO,
57 final EntityFactory entityFactory,
58 final AnyUtilsFactory anyUtilsFactory,
59 final PlainAttrValidationManager validator,
60 final ElasticsearchClient client) {
61
62 return new ElasticsearchAnySearchDAO(
63 realmDAO,
64 dynRealmDAO,
65 userDAO,
66 groupDAO,
67 anyObjectDAO,
68 schemaDAO,
69 entityFactory,
70 anyUtilsFactory,
71 validator,
72 client,
73 props.getIndexMaxResultWindow());
74 }
75
76 @ConditionalOnMissingBean(name = "elasticsearchRealmDAO")
77 @Bean
78 public RealmDAO realmDAO(
79 final @Lazy RoleDAO roleDAO,
80 final ApplicationEventPublisher publisher,
81 final ElasticsearchProperties props,
82 final ElasticsearchClient client) {
83
84 return new ElasticsearchRealmDAO(roleDAO, publisher, client, props.getIndexMaxResultWindow());
85 }
86
87 @ConditionalOnMissingBean(name = "elasticsearchAuditConfDAO")
88 @Bean
89 public AuditConfDAO auditConfDAO(
90 final ElasticsearchProperties props,
91 final ElasticsearchClient client) {
92
93 return new ElasticsearchAuditConfDAO(client, props.getIndexMaxResultWindow());
94 }
95 }