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 java.util.HashMap;
22 import java.util.Map;
23 import javax.persistence.ValidationMode;
24 import javax.validation.Validator;
25 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
26 import org.apache.syncope.common.keymaster.client.api.DomainOps;
27 import org.apache.syncope.core.persistence.api.DomainHolder;
28 import org.apache.syncope.core.persistence.api.DomainRegistry;
29 import org.apache.syncope.core.persistence.api.attrvalue.validation.PlainAttrValidationManager;
30 import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO;
31 import org.apache.syncope.core.persistence.api.dao.AnyMatchDAO;
32 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
33 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
34 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
35 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
36 import org.apache.syncope.core.persistence.api.dao.ApplicationDAO;
37 import org.apache.syncope.core.persistence.api.dao.AttrRepoDAO;
38 import org.apache.syncope.core.persistence.api.dao.AuditConfDAO;
39 import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
40 import org.apache.syncope.core.persistence.api.dao.AuthProfileDAO;
41 import org.apache.syncope.core.persistence.api.dao.BatchDAO;
42 import org.apache.syncope.core.persistence.api.dao.CASSPClientAppDAO;
43 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
44 import org.apache.syncope.core.persistence.api.dao.DelegationDAO;
45 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
46 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
47 import org.apache.syncope.core.persistence.api.dao.EntityCacheDAO;
48 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
49 import org.apache.syncope.core.persistence.api.dao.FIQLQueryDAO;
50 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
51 import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
52 import org.apache.syncope.core.persistence.api.dao.JobStatusDAO;
53 import org.apache.syncope.core.persistence.api.dao.MailTemplateDAO;
54 import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
55 import org.apache.syncope.core.persistence.api.dao.OIDCJWKSDAO;
56 import org.apache.syncope.core.persistence.api.dao.OIDCRPClientAppDAO;
57 import org.apache.syncope.core.persistence.api.dao.PersistenceInfoDAO;
58 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
59 import org.apache.syncope.core.persistence.api.dao.PlainAttrValueDAO;
60 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
61 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
62 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
63 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
64 import org.apache.syncope.core.persistence.api.dao.RemediationDAO;
65 import org.apache.syncope.core.persistence.api.dao.ReportDAO;
66 import org.apache.syncope.core.persistence.api.dao.ReportExecDAO;
67 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
68 import org.apache.syncope.core.persistence.api.dao.SAML2IdPEntityDAO;
69 import org.apache.syncope.core.persistence.api.dao.SAML2SPClientAppDAO;
70 import org.apache.syncope.core.persistence.api.dao.SAML2SPEntityDAO;
71 import org.apache.syncope.core.persistence.api.dao.SRARouteDAO;
72 import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
73 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
74 import org.apache.syncope.core.persistence.api.dao.TaskExecDAO;
75 import org.apache.syncope.core.persistence.api.dao.UserDAO;
76 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
77 import org.apache.syncope.core.persistence.api.dao.WAConfigDAO;
78 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
79 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
80 import org.apache.syncope.core.persistence.api.entity.am.ClientAppUtilsFactory;
81 import org.apache.syncope.core.persistence.api.entity.policy.PolicyUtilsFactory;
82 import org.apache.syncope.core.persistence.api.entity.task.TaskUtilsFactory;
83 import org.apache.syncope.core.persistence.api.search.SearchCondVisitor;
84 import org.apache.syncope.core.persistence.jpa.attrvalue.validation.DefaultPlainAttrValidationManager;
85 import org.apache.syncope.core.persistence.jpa.content.KeymasterConfParamLoader;
86 import org.apache.syncope.core.persistence.jpa.content.XMLContentExporter;
87 import org.apache.syncope.core.persistence.jpa.content.XMLContentLoader;
88 import org.apache.syncope.core.persistence.jpa.dao.JPAAccessTokenDAO;
89 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyMatchDAO;
90 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyObjectDAO;
91 import org.apache.syncope.core.persistence.jpa.dao.JPAAnySearchDAO;
92 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyTypeClassDAO;
93 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyTypeDAO;
94 import org.apache.syncope.core.persistence.jpa.dao.JPAApplicationDAO;
95 import org.apache.syncope.core.persistence.jpa.dao.JPAAttrRepoDAO;
96 import org.apache.syncope.core.persistence.jpa.dao.JPAAuditConfDAO;
97 import org.apache.syncope.core.persistence.jpa.dao.JPAAuthModuleDAO;
98 import org.apache.syncope.core.persistence.jpa.dao.JPAAuthProfileDAO;
99 import org.apache.syncope.core.persistence.jpa.dao.JPABatchDAO;
100 import org.apache.syncope.core.persistence.jpa.dao.JPACASSPClientAppDAO;
101 import org.apache.syncope.core.persistence.jpa.dao.JPAConnInstanceDAO;
102 import org.apache.syncope.core.persistence.jpa.dao.JPADelegationDAO;
103 import org.apache.syncope.core.persistence.jpa.dao.JPADerSchemaDAO;
104 import org.apache.syncope.core.persistence.jpa.dao.JPADynRealmDAO;
105 import org.apache.syncope.core.persistence.jpa.dao.JPAEntityCacheDAO;
106 import org.apache.syncope.core.persistence.jpa.dao.JPAExternalResourceDAO;
107 import org.apache.syncope.core.persistence.jpa.dao.JPAFIQLQueryDAO;
108 import org.apache.syncope.core.persistence.jpa.dao.JPAGroupDAO;
109 import org.apache.syncope.core.persistence.jpa.dao.JPAImplementationDAO;
110 import org.apache.syncope.core.persistence.jpa.dao.JPAJobStatusDAO;
111 import org.apache.syncope.core.persistence.jpa.dao.JPAMailTemplateDAO;
112 import org.apache.syncope.core.persistence.jpa.dao.JPANotificationDAO;
113 import org.apache.syncope.core.persistence.jpa.dao.JPAOIDCJWKSDAO;
114 import org.apache.syncope.core.persistence.jpa.dao.JPAOIDCRPClientAppDAO;
115 import org.apache.syncope.core.persistence.jpa.dao.JPAPersistenceInfoDAO;
116 import org.apache.syncope.core.persistence.jpa.dao.JPAPlainAttrDAO;
117 import org.apache.syncope.core.persistence.jpa.dao.JPAPlainAttrValueDAO;
118 import org.apache.syncope.core.persistence.jpa.dao.JPAPlainSchemaDAO;
119 import org.apache.syncope.core.persistence.jpa.dao.JPAPolicyDAO;
120 import org.apache.syncope.core.persistence.jpa.dao.JPARealmDAO;
121 import org.apache.syncope.core.persistence.jpa.dao.JPARelationshipTypeDAO;
122 import org.apache.syncope.core.persistence.jpa.dao.JPARemediationDAO;
123 import org.apache.syncope.core.persistence.jpa.dao.JPAReportDAO;
124 import org.apache.syncope.core.persistence.jpa.dao.JPAReportExecDAO;
125 import org.apache.syncope.core.persistence.jpa.dao.JPARoleDAO;
126 import org.apache.syncope.core.persistence.jpa.dao.JPASAML2IdPEntityDAO;
127 import org.apache.syncope.core.persistence.jpa.dao.JPASAML2SPClientAppDAO;
128 import org.apache.syncope.core.persistence.jpa.dao.JPASAML2SPEntityDAO;
129 import org.apache.syncope.core.persistence.jpa.dao.JPASRARouteDAO;
130 import org.apache.syncope.core.persistence.jpa.dao.JPASecurityQuestionDAO;
131 import org.apache.syncope.core.persistence.jpa.dao.JPATaskDAO;
132 import org.apache.syncope.core.persistence.jpa.dao.JPATaskExecDAO;
133 import org.apache.syncope.core.persistence.jpa.dao.JPAUserDAO;
134 import org.apache.syncope.core.persistence.jpa.dao.JPAVirSchemaDAO;
135 import org.apache.syncope.core.persistence.jpa.dao.JPAWAConfigDAO;
136 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
137 import org.apache.syncope.core.persistence.jpa.entity.JPAEntityFactory;
138 import org.apache.syncope.core.persistence.jpa.entity.am.JPAClientAppUtilsFactory;
139 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPolicyUtilsFactory;
140 import org.apache.syncope.core.persistence.jpa.entity.task.JPATaskUtilsFactory;
141 import org.apache.syncope.core.persistence.jpa.spring.CommonEntityManagerFactoryConf;
142 import org.apache.syncope.core.persistence.jpa.spring.DomainTransactionInterceptorInjector;
143 import org.apache.syncope.core.persistence.jpa.spring.MultiJarAwarePersistenceUnitPostProcessor;
144 import org.apache.syncope.core.spring.security.SecurityProperties;
145 import org.slf4j.Logger;
146 import org.slf4j.LoggerFactory;
147 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
148 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
149 import org.springframework.boot.context.properties.EnableConfigurationProperties;
150 import org.springframework.context.ApplicationEventPublisher;
151 import org.springframework.context.ConfigurableApplicationContext;
152 import org.springframework.context.annotation.Bean;
153 import org.springframework.context.annotation.Configuration;
154 import org.springframework.context.annotation.Lazy;
155 import org.springframework.core.env.Environment;
156 import org.springframework.core.io.ResourceLoader;
157 import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
158
159 @EnableConfigurationProperties(PersistenceProperties.class)
160 @Configuration(proxyBeanMethods = false)
161 public class PersistenceContext {
162
163 private static final Logger OPENJPA_LOG = LoggerFactory.getLogger("org.apache.openjpa");
164
165 @Bean
166 public static BeanFactoryPostProcessor domainTransactionInterceptorInjector() {
167 return new DomainTransactionInterceptorInjector();
168 }
169
170 @ConditionalOnMissingBean
171 @Bean
172 public SearchCondVisitor searchCondVisitor() {
173 return new SearchCondVisitor();
174 }
175
176 @Bean
177 public Validator localValidatorFactoryBean() {
178 return new LocalValidatorFactoryBean();
179 }
180
181 @ConditionalOnMissingBean
182 @Bean
183 public PlainAttrValidationManager plainAttrValidationManager() {
184 return new DefaultPlainAttrValidationManager();
185 }
186
187 @ConditionalOnMissingBean
188 @Bean
189 public CommonEntityManagerFactoryConf commonEMFConf(final PersistenceProperties persistenceProperties) {
190 CommonEntityManagerFactoryConf commonEMFConf = new CommonEntityManagerFactoryConf();
191 commonEMFConf.setPackagesToScan("org.apache.syncope.core.persistence.jpa.entity");
192 commonEMFConf.setValidationMode(ValidationMode.NONE);
193 commonEMFConf.setPersistenceUnitPostProcessors(new MultiJarAwarePersistenceUnitPostProcessor());
194 Map<String, Object> jpaPropertyMap = new HashMap<>();
195
196 jpaPropertyMap.put("openjpa.Log", "slf4j");
197 if (OPENJPA_LOG.isDebugEnabled()) {
198 jpaPropertyMap.put("openjpa.Log", "SQL=TRACE");
199 jpaPropertyMap.put("openjpa.ConnectionFactoryProperties",
200 "PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=120");
201 }
202
203 jpaPropertyMap.put("openjpa.NontransactionalWrite", false);
204
205 jpaPropertyMap.put("openjpa.jdbc.MappingDefaults",
206 "ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict,"
207 + "FieldStrategies='"
208 + "java.util.Locale=org.apache.syncope.core.persistence.jpa.openjpa.LocaleValueHandler,"
209 + "java.lang.Boolean=org.apache.syncope.core.persistence.jpa.openjpa.BooleanValueHandler'");
210
211 jpaPropertyMap.put("openjpa.DataCache", "true");
212 jpaPropertyMap.put("openjpa.QueryCache", "true");
213
214 jpaPropertyMap.put("openjpa.RemoteCommitProvider", persistenceProperties.getRemoteCommitProvider());
215
216 commonEMFConf.setJpaPropertyMap(jpaPropertyMap);
217 return commonEMFConf;
218 }
219
220 @ConditionalOnMissingBean
221 @Bean
222 public XMLContentLoader xmlContentLoader(
223 final PersistenceProperties persistenceProperties,
224 final ResourceLoader resourceLoader,
225 final Environment env) {
226
227 return new XMLContentLoader(
228 resourceLoader.getResource(persistenceProperties.getViewsXML()),
229 resourceLoader.getResource(persistenceProperties.getIndexesXML()),
230 env);
231 }
232
233 @ConditionalOnMissingBean
234 @Bean
235 public XMLContentExporter xmlContentExporter(final DomainHolder domainHolder, final RealmDAO realmDAO) {
236 return new XMLContentExporter(domainHolder, realmDAO);
237 }
238
239 @ConditionalOnMissingBean
240 @Bean
241 public KeymasterConfParamLoader keymasterConfParamLoader(final ConfParamOps confParamOps) {
242 return new KeymasterConfParamLoader(confParamOps);
243 }
244
245 @ConditionalOnMissingBean
246 @Bean
247 public DomainRegistry domainRegistry(final ConfigurableApplicationContext ctx) {
248 return new DomainConfFactory(ctx);
249 }
250
251 @ConditionalOnMissingBean
252 @Bean
253 public RuntimeDomainLoader runtimeDomainLoader(
254 final DomainHolder domainHolder,
255 final DomainRegistry domainRegistry,
256 final ConfigurableApplicationContext ctx) {
257
258 return new RuntimeDomainLoader(domainHolder, domainRegistry, ctx);
259 }
260
261 @ConditionalOnMissingBean
262 @Bean
263 public StartupDomainLoader startupDomainLoader(
264 final PersistenceProperties persistenceProperties,
265 final ResourceLoader resourceLoader,
266 final DomainOps domainOps,
267 final DomainHolder domainHolder,
268 final DomainRegistry domainRegistry) {
269
270 return new StartupDomainLoader(domainOps, domainHolder, persistenceProperties, resourceLoader, domainRegistry);
271 }
272
273 @ConditionalOnMissingBean
274 @Bean
275 public EntityFactory entityFactory() {
276 return new JPAEntityFactory();
277 }
278
279 @ConditionalOnMissingBean
280 @Bean
281 public AnyUtilsFactory anyUtilsFactory(
282 final @Lazy UserDAO userDAO,
283 final @Lazy GroupDAO groupDAO,
284 final @Lazy AnyObjectDAO anyObjectDAO,
285 final @Lazy PlainAttrDAO plainAttrDAO,
286 final @Lazy PlainAttrValueDAO plainAttrValueDAO,
287 final @Lazy EntityFactory entityFactory) {
288
289 return new JPAAnyUtilsFactory(userDAO, groupDAO, anyObjectDAO, plainAttrDAO, plainAttrValueDAO, entityFactory);
290 }
291
292 @ConditionalOnMissingBean
293 @Bean
294 public ClientAppUtilsFactory clientAppUtilsFactory() {
295 return new JPAClientAppUtilsFactory();
296 }
297
298 @ConditionalOnMissingBean
299 @Bean
300 public PolicyUtilsFactory policyUtilsFactory() {
301 return new JPAPolicyUtilsFactory();
302 }
303
304 @ConditionalOnMissingBean
305 @Bean
306 public TaskUtilsFactory taskUtilsFactory() {
307 return new JPATaskUtilsFactory();
308 }
309
310 @ConditionalOnMissingBean
311 @Bean
312 public EntityCacheDAO entityCacheDAO() {
313 return new JPAEntityCacheDAO();
314 }
315
316 @ConditionalOnMissingBean
317 @Bean
318 public PersistenceInfoDAO persistenceInfoDAO() {
319 return new JPAPersistenceInfoDAO();
320 }
321
322 @ConditionalOnMissingBean
323 @Bean
324 public AccessTokenDAO accessTokenDAO() {
325 return new JPAAccessTokenDAO();
326 }
327
328 @ConditionalOnMissingBean
329 @Bean
330 public ApplicationDAO applicationDAO(final RoleDAO roleDAO, final @Lazy UserDAO userDAO) {
331 return new JPAApplicationDAO(roleDAO, userDAO);
332 }
333
334 @ConditionalOnMissingBean
335 @Bean
336 public AnyMatchDAO anyMatchDAO(
337 final @Lazy UserDAO userDAO,
338 final @Lazy GroupDAO groupDAO,
339 final @Lazy AnyObjectDAO anyObjectDAO,
340 final RealmDAO realmDAO,
341 final PlainSchemaDAO plainSchemaDAO,
342 final AnyUtilsFactory anyUtilsFactory,
343 final PlainAttrValidationManager validator) {
344
345 return new JPAAnyMatchDAO(
346 userDAO,
347 groupDAO,
348 anyObjectDAO,
349 realmDAO,
350 plainSchemaDAO,
351 anyUtilsFactory,
352 validator);
353 }
354
355 @ConditionalOnMissingBean
356 @Bean
357 public AnyObjectDAO anyObjectDAO(
358 final AnyUtilsFactory anyUtilsFactory,
359 final @Lazy PlainSchemaDAO plainSchemaDAO,
360 final @Lazy DerSchemaDAO derSchemaDAO,
361 final @Lazy DynRealmDAO dynRealmDAO,
362 final @Lazy UserDAO userDAO,
363 final @Lazy GroupDAO groupDAO) {
364
365 return new JPAAnyObjectDAO(
366 anyUtilsFactory,
367 plainSchemaDAO,
368 derSchemaDAO,
369 dynRealmDAO,
370 userDAO,
371 groupDAO);
372 }
373
374 @ConditionalOnMissingBean
375 @Bean
376 public AnySearchDAO anySearchDAO(
377 final RealmDAO realmDAO,
378 final @Lazy DynRealmDAO dynRealmDAO,
379 final @Lazy UserDAO userDAO,
380 final @Lazy GroupDAO groupDAO,
381 final @Lazy AnyObjectDAO anyObjectDAO,
382 final PlainSchemaDAO schemaDAO,
383 final EntityFactory entityFactory,
384 final AnyUtilsFactory anyUtilsFactory,
385 final PlainAttrValidationManager validator) {
386
387 return new JPAAnySearchDAO(
388 realmDAO,
389 dynRealmDAO,
390 userDAO,
391 groupDAO,
392 anyObjectDAO,
393 schemaDAO,
394 entityFactory,
395 anyUtilsFactory,
396 validator);
397 }
398
399 @ConditionalOnMissingBean
400 @Bean
401 public AnyTypeDAO anyTypeDAO(final RemediationDAO remediationDAO) {
402 return new JPAAnyTypeDAO(remediationDAO);
403 }
404
405 @ConditionalOnMissingBean
406 @Bean
407 public AnyTypeClassDAO anyTypeClassDAO(
408 final AnyTypeDAO anyTypeDAO,
409 final PlainSchemaDAO plainSchemaDAO,
410 final DerSchemaDAO derSchemaDAO,
411 final VirSchemaDAO virSchemaDAO,
412 final @Lazy GroupDAO groupDAO,
413 final ExternalResourceDAO resourceDAO) {
414
415 return new JPAAnyTypeClassDAO(anyTypeDAO, plainSchemaDAO, derSchemaDAO, virSchemaDAO, groupDAO, resourceDAO);
416 }
417
418 @ConditionalOnMissingBean
419 @Bean
420 public AuditConfDAO auditConfDAO() {
421 return new JPAAuditConfDAO();
422 }
423
424 @ConditionalOnMissingBean
425 @Bean
426 public AuthModuleDAO authModuleDAO(final PolicyDAO policyDAO) {
427 return new JPAAuthModuleDAO(policyDAO);
428 }
429
430 @ConditionalOnMissingBean
431 @Bean
432 public AttrRepoDAO attrRepoDAO() {
433 return new JPAAttrRepoDAO();
434 }
435
436 @ConditionalOnMissingBean
437 @Bean
438 public AuthProfileDAO authProfileDAO() {
439 return new JPAAuthProfileDAO();
440 }
441
442 @ConditionalOnMissingBean
443 @Bean
444 public BatchDAO batchDAO() {
445 return new JPABatchDAO();
446 }
447
448 @ConditionalOnMissingBean
449 @Bean
450 public CASSPClientAppDAO casSPClientAppDAO() {
451 return new JPACASSPClientAppDAO();
452 }
453
454 @ConditionalOnMissingBean
455 @Bean
456 public ConnInstanceDAO connInstanceDAO(final @Lazy ExternalResourceDAO resourceDAO) {
457 return new JPAConnInstanceDAO(resourceDAO);
458 }
459
460 @ConditionalOnMissingBean
461 @Bean
462 public DelegationDAO delegationDAO() {
463 return new JPADelegationDAO();
464 }
465
466 @ConditionalOnMissingBean
467 @Bean
468 public FIQLQueryDAO fiqlQueryDAO() {
469 return new JPAFIQLQueryDAO();
470 }
471
472 @ConditionalOnMissingBean
473 @Bean
474 public DerSchemaDAO derSchemaDAO(final @Lazy ExternalResourceDAO resourceDAO) {
475 return new JPADerSchemaDAO(resourceDAO);
476 }
477
478 @ConditionalOnMissingBean
479 @Bean
480 public DynRealmDAO dynRealmDAO(
481 final ApplicationEventPublisher publisher,
482 final @Lazy UserDAO userDAO,
483 final @Lazy GroupDAO groupDAO,
484 final @Lazy AnyObjectDAO anyObjectDAO,
485 final AnySearchDAO searchDAO,
486 final AnyMatchDAO anyMatchDAO,
487 final SearchCondVisitor searchCondVisitor) {
488
489 return new JPADynRealmDAO(
490 publisher,
491 userDAO,
492 groupDAO,
493 anyObjectDAO,
494 searchDAO,
495 anyMatchDAO,
496 searchCondVisitor);
497 }
498
499 @ConditionalOnMissingBean
500 @Bean
501 public GroupDAO groupDAO(
502 final ApplicationEventPublisher publisher,
503 final AnyUtilsFactory anyUtilsFactory,
504 final @Lazy PlainSchemaDAO plainSchemaDAO,
505 final @Lazy DerSchemaDAO derSchemaDAO,
506 final @Lazy DynRealmDAO dynRealmDAO,
507 final AnyMatchDAO anyMatchDAO,
508 final PlainAttrDAO plainAttrDAO,
509 final @Lazy UserDAO userDAO,
510 final @Lazy AnyObjectDAO anyObjectDAO,
511 final AnySearchDAO anySearchDAO,
512 final SearchCondVisitor searchCondVisitor) {
513
514 return new JPAGroupDAO(
515 anyUtilsFactory,
516 publisher,
517 plainSchemaDAO,
518 derSchemaDAO,
519 dynRealmDAO,
520 anyMatchDAO,
521 plainAttrDAO,
522 userDAO,
523 anyObjectDAO,
524 anySearchDAO,
525 searchCondVisitor);
526 }
527
528 @ConditionalOnMissingBean
529 @Bean
530 public ImplementationDAO implementationDAO(
531 final @Lazy ExternalResourceDAO resourceDAO,
532 final @Lazy EntityCacheDAO entityCacheDAO) {
533
534 return new JPAImplementationDAO(resourceDAO, entityCacheDAO);
535 }
536
537 @ConditionalOnMissingBean
538 @Bean
539 public JobStatusDAO jobStatusDAO() {
540 return new JPAJobStatusDAO();
541 }
542
543 @ConditionalOnMissingBean
544 @Bean
545 public MailTemplateDAO mailTemplateDAO() {
546 return new JPAMailTemplateDAO();
547 }
548
549 @ConditionalOnMissingBean
550 @Bean
551 public NotificationDAO notificationDAO(final TaskDAO taskDAO) {
552 return new JPANotificationDAO(taskDAO);
553 }
554
555 @ConditionalOnMissingBean
556 @Bean
557 public OIDCJWKSDAO oidcJWKSDAO() {
558 return new JPAOIDCJWKSDAO();
559 }
560
561 @ConditionalOnMissingBean
562 @Bean
563 public OIDCRPClientAppDAO oidcRPClientAppDAO() {
564 return new JPAOIDCRPClientAppDAO();
565 }
566
567 @ConditionalOnMissingBean
568 @Bean
569 public PlainAttrDAO plainAttrDAO() {
570 return new JPAPlainAttrDAO();
571 }
572
573 @ConditionalOnMissingBean
574 @Bean
575 public PlainAttrValueDAO plainAttrValueDAO() {
576 return new JPAPlainAttrValueDAO();
577 }
578
579 @ConditionalOnMissingBean
580 @Bean
581 public PlainSchemaDAO plainSchemaDAO(
582 final AnyUtilsFactory anyUtilsFactory,
583 final PlainAttrDAO plainAttrDAO,
584 final @Lazy ExternalResourceDAO resourceDAO) {
585
586 return new JPAPlainSchemaDAO(anyUtilsFactory, plainAttrDAO, resourceDAO);
587 }
588
589 @ConditionalOnMissingBean
590 @Bean
591 public PolicyDAO policyDAO(
592 final @Lazy RealmDAO realmDAO,
593 final @Lazy ExternalResourceDAO resourceDAO,
594 final @Lazy CASSPClientAppDAO casSPClientAppDAO,
595 final @Lazy OIDCRPClientAppDAO oidcRPClientAppDAO,
596 final @Lazy SAML2SPClientAppDAO saml2SPClientAppDAO,
597 final @Lazy EntityCacheDAO entityCacheDAO) {
598
599 return new JPAPolicyDAO(
600 realmDAO,
601 resourceDAO,
602 casSPClientAppDAO,
603 oidcRPClientAppDAO,
604 saml2SPClientAppDAO,
605 entityCacheDAO);
606 }
607
608 @ConditionalOnMissingBean
609 @Bean
610 public RealmDAO realmDAO(final @Lazy RoleDAO roleDAO, final ApplicationEventPublisher publisher) {
611 return new JPARealmDAO(roleDAO, publisher);
612 }
613
614 @ConditionalOnMissingBean
615 @Bean
616 public RelationshipTypeDAO relationshipTypeDAO() {
617 return new JPARelationshipTypeDAO();
618 }
619
620 @ConditionalOnMissingBean
621 @Bean
622 public RemediationDAO remediationDAO() {
623 return new JPARemediationDAO();
624 }
625
626 @ConditionalOnMissingBean
627 @Bean
628 public ReportDAO reportDAO() {
629 return new JPAReportDAO();
630 }
631
632 @ConditionalOnMissingBean
633 @Bean
634 public ReportExecDAO reportExecDAO() {
635 return new JPAReportExecDAO();
636 }
637
638 @ConditionalOnMissingBean
639 @Bean
640 public ExternalResourceDAO resourceDAO(
641 final TaskDAO taskDAO,
642 final AnyObjectDAO anyObjectDAO,
643 final UserDAO userDAO,
644 final GroupDAO groupDAO,
645 final PolicyDAO policyDAO,
646 final VirSchemaDAO virSchemaDAO,
647 final RealmDAO realmDAO) {
648
649 return new JPAExternalResourceDAO(taskDAO, anyObjectDAO, userDAO, groupDAO, policyDAO, virSchemaDAO, realmDAO);
650 }
651
652 @ConditionalOnMissingBean
653 @Bean
654 public RoleDAO roleDAO(
655 final ApplicationEventPublisher publisher,
656 final @Lazy AnyMatchDAO anyMatchDAO,
657 final @Lazy AnySearchDAO anySearchDAO,
658 final DelegationDAO delegationDAO,
659 final SearchCondVisitor searchCondVisitor) {
660
661 return new JPARoleDAO(anyMatchDAO, publisher, anySearchDAO, delegationDAO, searchCondVisitor);
662 }
663
664 @ConditionalOnMissingBean
665 @Bean
666 public SAML2SPClientAppDAO saml2SPClientAppDAO() {
667 return new JPASAML2SPClientAppDAO();
668 }
669
670 @ConditionalOnMissingBean
671 @Bean
672 public SAML2IdPEntityDAO saml2IdPEntityDAO() {
673 return new JPASAML2IdPEntityDAO();
674 }
675
676 @ConditionalOnMissingBean
677 @Bean
678 public SAML2SPEntityDAO saml2SPEntityDAO() {
679 return new JPASAML2SPEntityDAO();
680 }
681
682 @ConditionalOnMissingBean
683 @Bean
684 public SecurityQuestionDAO securityQuestionDAO(final UserDAO userDAO) {
685 return new JPASecurityQuestionDAO(userDAO);
686 }
687
688 @ConditionalOnMissingBean
689 @Bean
690 public SRARouteDAO sraRouteDAO() {
691 return new JPASRARouteDAO();
692 }
693
694 @ConditionalOnMissingBean
695 @Bean
696 public TaskDAO taskDAO(
697 final RealmDAO realmDAO,
698 final RemediationDAO remediationDAO,
699 final TaskUtilsFactory taskUtilsFactory,
700 final SecurityProperties securityProperties) {
701
702 return new JPATaskDAO(realmDAO, remediationDAO, taskUtilsFactory, securityProperties);
703 }
704
705 @ConditionalOnMissingBean
706 @Bean
707 public TaskExecDAO taskExecDAO(final TaskDAO taskDAO, final TaskUtilsFactory taskUtilsFactory) {
708 return new JPATaskExecDAO(taskDAO, taskUtilsFactory);
709 }
710
711 @ConditionalOnMissingBean
712 @Bean
713 public UserDAO userDAO(
714 final SecurityProperties securityProperties,
715 final AnyUtilsFactory anyUtilsFactory,
716 final @Lazy PlainSchemaDAO plainSchemaDAO,
717 final @Lazy DerSchemaDAO derSchemaDAO,
718 final @Lazy DynRealmDAO dynRealmDAO,
719 final RoleDAO roleDAO,
720 final AccessTokenDAO accessTokenDAO,
721 final @Lazy GroupDAO groupDAO,
722 final DelegationDAO delegationDAO,
723 final FIQLQueryDAO fiqlQueryDAO) {
724
725 return new JPAUserDAO(
726 anyUtilsFactory,
727 plainSchemaDAO,
728 derSchemaDAO,
729 dynRealmDAO,
730 roleDAO,
731 accessTokenDAO,
732 groupDAO,
733 delegationDAO,
734 fiqlQueryDAO,
735 securityProperties);
736 }
737
738 @ConditionalOnMissingBean
739 @Bean
740 public VirSchemaDAO virSchemaDAO(final @Lazy ExternalResourceDAO resourceDAO) {
741 return new JPAVirSchemaDAO(resourceDAO);
742 }
743
744 @ConditionalOnMissingBean
745 @Bean
746 public WAConfigDAO waConfigDAO() {
747 return new JPAWAConfigDAO();
748 }
749 }