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 org.apache.syncope.core.persistence.api.attrvalue.validation.PlainAttrValidationManager;
22 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
23 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
24 import org.apache.syncope.core.persistence.api.dao.AuditConfDAO;
25 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
26 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
27 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
28 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
29 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
30 import org.apache.syncope.core.persistence.api.dao.UserDAO;
31 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
32 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
33 import org.apache.syncope.core.persistence.jpa.dao.OpenSearchAnySearchDAO;
34 import org.apache.syncope.core.persistence.jpa.dao.OpenSearchAuditConfDAO;
35 import org.apache.syncope.core.persistence.jpa.dao.OpenSearchRealmDAO;
36 import org.apache.syncope.ext.opensearch.client.OpenSearchProperties;
37 import org.opensearch.client.opensearch.OpenSearchClient;
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 OpenSearchPersistenceContext {
46
47 @ConditionalOnMissingBean(name = "openSearchAnySearchDAO")
48 @Bean
49 public AnySearchDAO anySearchDAO(
50 final OpenSearchProperties 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 OpenSearchClient client) {
61
62 return new OpenSearchAnySearchDAO(
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 = "openSearchRealmDAO")
77 @Bean
78 public RealmDAO realmDAO(
79 final @Lazy RoleDAO roleDAO,
80 final ApplicationEventPublisher publisher,
81 final OpenSearchProperties props,
82 final OpenSearchClient client) {
83
84 return new OpenSearchRealmDAO(roleDAO, publisher, client, props.getIndexMaxResultWindow());
85 }
86
87 @ConditionalOnMissingBean(name = "openSearchAuditConfDAO")
88 @Bean
89 public AuditConfDAO auditConfDAO(
90 final OpenSearchProperties props,
91 final OpenSearchClient client) {
92
93 return new OpenSearchAuditConfDAO(client, props.getIndexMaxResultWindow());
94 }
95 }