View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }