1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.provisioning.java;
20
21 import java.nio.charset.StandardCharsets;
22 import java.util.Properties;
23 import java.util.concurrent.Executor;
24 import java.util.concurrent.Executors;
25 import java.util.concurrent.ThreadPoolExecutor;
26 import javax.sql.DataSource;
27 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
28 import org.apache.syncope.core.persistence.api.DomainHolder;
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.AuditConfDAO;
38 import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
39 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
40 import org.apache.syncope.core.persistence.api.dao.DelegationDAO;
41 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
42 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
43 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
44 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
45 import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
46 import org.apache.syncope.core.persistence.api.dao.JobStatusDAO;
47 import org.apache.syncope.core.persistence.api.dao.MailTemplateDAO;
48 import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
49 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
50 import org.apache.syncope.core.persistence.api.dao.PlainAttrValueDAO;
51 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
52 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
53 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
54 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
55 import org.apache.syncope.core.persistence.api.dao.ReportDAO;
56 import org.apache.syncope.core.persistence.api.dao.ReportExecDAO;
57 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
58 import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
59 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
60 import org.apache.syncope.core.persistence.api.dao.TaskExecDAO;
61 import org.apache.syncope.core.persistence.api.dao.UserDAO;
62 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
63 import org.apache.syncope.core.persistence.api.dao.WAConfigDAO;
64 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
65 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
66 import org.apache.syncope.core.persistence.api.entity.task.TaskUtilsFactory;
67 import org.apache.syncope.core.persistence.api.search.SearchCondVisitor;
68 import org.apache.syncope.core.provisioning.api.AnyObjectProvisioningManager;
69 import org.apache.syncope.core.provisioning.api.AuditManager;
70 import org.apache.syncope.core.provisioning.api.ConnIdBundleManager;
71 import org.apache.syncope.core.provisioning.api.ConnectorManager;
72 import org.apache.syncope.core.provisioning.api.DerAttrHandler;
73 import org.apache.syncope.core.provisioning.api.GroupProvisioningManager;
74 import org.apache.syncope.core.provisioning.api.IntAttrNameParser;
75 import org.apache.syncope.core.provisioning.api.MappingManager;
76 import org.apache.syncope.core.provisioning.api.UserProvisioningManager;
77 import org.apache.syncope.core.provisioning.api.VirAttrHandler;
78 import org.apache.syncope.core.provisioning.api.cache.VirAttrCache;
79 import org.apache.syncope.core.provisioning.api.data.AccessTokenDataBinder;
80 import org.apache.syncope.core.provisioning.api.data.AnyObjectDataBinder;
81 import org.apache.syncope.core.provisioning.api.data.AnyTypeClassDataBinder;
82 import org.apache.syncope.core.provisioning.api.data.AnyTypeDataBinder;
83 import org.apache.syncope.core.provisioning.api.data.ApplicationDataBinder;
84 import org.apache.syncope.core.provisioning.api.data.AttrRepoDataBinder;
85 import org.apache.syncope.core.provisioning.api.data.AuditDataBinder;
86 import org.apache.syncope.core.provisioning.api.data.AuthModuleDataBinder;
87 import org.apache.syncope.core.provisioning.api.data.AuthProfileDataBinder;
88 import org.apache.syncope.core.provisioning.api.data.ClientAppDataBinder;
89 import org.apache.syncope.core.provisioning.api.data.ConnInstanceDataBinder;
90 import org.apache.syncope.core.provisioning.api.data.DelegationDataBinder;
91 import org.apache.syncope.core.provisioning.api.data.DynRealmDataBinder;
92 import org.apache.syncope.core.provisioning.api.data.FIQLQueryDataBinder;
93 import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
94 import org.apache.syncope.core.provisioning.api.data.ImplementationDataBinder;
95 import org.apache.syncope.core.provisioning.api.data.NotificationDataBinder;
96 import org.apache.syncope.core.provisioning.api.data.OIDCJWKSDataBinder;
97 import org.apache.syncope.core.provisioning.api.data.PolicyDataBinder;
98 import org.apache.syncope.core.provisioning.api.data.RealmDataBinder;
99 import org.apache.syncope.core.provisioning.api.data.RelationshipTypeDataBinder;
100 import org.apache.syncope.core.provisioning.api.data.RemediationDataBinder;
101 import org.apache.syncope.core.provisioning.api.data.ReportDataBinder;
102 import org.apache.syncope.core.provisioning.api.data.ResourceDataBinder;
103 import org.apache.syncope.core.provisioning.api.data.RoleDataBinder;
104 import org.apache.syncope.core.provisioning.api.data.SAML2IdPEntityDataBinder;
105 import org.apache.syncope.core.provisioning.api.data.SAML2SPEntityDataBinder;
106 import org.apache.syncope.core.provisioning.api.data.SRARouteDataBinder;
107 import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder;
108 import org.apache.syncope.core.provisioning.api.data.SecurityQuestionDataBinder;
109 import org.apache.syncope.core.provisioning.api.data.TaskDataBinder;
110 import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
111 import org.apache.syncope.core.provisioning.api.data.WAConfigDataBinder;
112 import org.apache.syncope.core.provisioning.api.data.wa.WAClientAppDataBinder;
113 import org.apache.syncope.core.provisioning.api.job.JobManager;
114 import org.apache.syncope.core.provisioning.api.notification.NotificationJobDelegate;
115 import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
116 import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
117 import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
118 import org.apache.syncope.core.provisioning.java.cache.CaffeineVirAttrCache;
119 import org.apache.syncope.core.provisioning.java.data.AccessTokenDataBinderImpl;
120 import org.apache.syncope.core.provisioning.java.data.AnyObjectDataBinderImpl;
121 import org.apache.syncope.core.provisioning.java.data.AnyTypeClassDataBinderImpl;
122 import org.apache.syncope.core.provisioning.java.data.AnyTypeDataBinderImpl;
123 import org.apache.syncope.core.provisioning.java.data.ApplicationDataBinderImpl;
124 import org.apache.syncope.core.provisioning.java.data.AttrRepoDataBinderImpl;
125 import org.apache.syncope.core.provisioning.java.data.AuditDataBinderImpl;
126 import org.apache.syncope.core.provisioning.java.data.AuthModuleDataBinderImpl;
127 import org.apache.syncope.core.provisioning.java.data.AuthProfileDataBinderImpl;
128 import org.apache.syncope.core.provisioning.java.data.ClientAppDataBinderImpl;
129 import org.apache.syncope.core.provisioning.java.data.ConnInstanceDataBinderImpl;
130 import org.apache.syncope.core.provisioning.java.data.DelegationDataBinderImpl;
131 import org.apache.syncope.core.provisioning.java.data.DynRealmDataBinderImpl;
132 import org.apache.syncope.core.provisioning.java.data.FIQLQueryDataBinderImpl;
133 import org.apache.syncope.core.provisioning.java.data.GroupDataBinderImpl;
134 import org.apache.syncope.core.provisioning.java.data.ImplementationDataBinderImpl;
135 import org.apache.syncope.core.provisioning.java.data.NotificationDataBinderImpl;
136 import org.apache.syncope.core.provisioning.java.data.OIDCJWKSDataBinderImpl;
137 import org.apache.syncope.core.provisioning.java.data.PolicyDataBinderImpl;
138 import org.apache.syncope.core.provisioning.java.data.RealmDataBinderImpl;
139 import org.apache.syncope.core.provisioning.java.data.RelationshipTypeDataBinderImpl;
140 import org.apache.syncope.core.provisioning.java.data.RemediationDataBinderImpl;
141 import org.apache.syncope.core.provisioning.java.data.ReportDataBinderImpl;
142 import org.apache.syncope.core.provisioning.java.data.ResourceDataBinderImpl;
143 import org.apache.syncope.core.provisioning.java.data.RoleDataBinderImpl;
144 import org.apache.syncope.core.provisioning.java.data.SAML2IdPEntityDataBinderImpl;
145 import org.apache.syncope.core.provisioning.java.data.SAML2SPEntityDataBinderImpl;
146 import org.apache.syncope.core.provisioning.java.data.SRARouteDataBinderImpl;
147 import org.apache.syncope.core.provisioning.java.data.SchemaDataBinderImpl;
148 import org.apache.syncope.core.provisioning.java.data.SecurityQuestionDataBinderImpl;
149 import org.apache.syncope.core.provisioning.java.data.TaskDataBinderImpl;
150 import org.apache.syncope.core.provisioning.java.data.UserDataBinderImpl;
151 import org.apache.syncope.core.provisioning.java.data.WAConfigDataBinderImpl;
152 import org.apache.syncope.core.provisioning.java.data.wa.WAClientAppDataBinderImpl;
153 import org.apache.syncope.core.provisioning.java.job.DefaultJobManager;
154 import org.apache.syncope.core.provisioning.java.job.JobStatusUpdater;
155 import org.apache.syncope.core.provisioning.java.job.SchedulerDBInit;
156 import org.apache.syncope.core.provisioning.java.job.SyncopeSpringBeanJobFactory;
157 import org.apache.syncope.core.provisioning.java.job.SystemLoadReporterJob;
158 import org.apache.syncope.core.provisioning.java.job.notification.MailNotificationJobDelegate;
159 import org.apache.syncope.core.provisioning.java.job.notification.NotificationJob;
160 import org.apache.syncope.core.provisioning.java.notification.DefaultNotificationManager;
161 import org.apache.syncope.core.provisioning.java.propagation.DefaultPropagationManager;
162 import org.apache.syncope.core.provisioning.java.propagation.PriorityPropagationTaskExecutor;
163 import org.apache.syncope.core.provisioning.java.pushpull.InboundMatcher;
164 import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
165 import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
166 import org.apache.syncope.core.provisioning.java.utils.TemplateUtils;
167 import org.apache.syncope.core.spring.security.DefaultCredentialChecker;
168 import org.apache.syncope.core.spring.security.PasswordGenerator;
169 import org.apache.syncope.core.spring.security.SecurityProperties;
170 import org.apache.syncope.core.spring.security.jws.AccessTokenJWSSigner;
171 import org.apache.syncope.core.workflow.api.AnyObjectWorkflowAdapter;
172 import org.apache.syncope.core.workflow.api.GroupWorkflowAdapter;
173 import org.apache.syncope.core.workflow.api.UserWorkflowAdapter;
174 import org.springframework.beans.factory.annotation.Qualifier;
175 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
176 import org.springframework.boot.context.properties.EnableConfigurationProperties;
177 import org.springframework.context.ApplicationContext;
178 import org.springframework.context.ApplicationEventPublisher;
179 import org.springframework.context.annotation.Bean;
180 import org.springframework.context.annotation.Configuration;
181 import org.springframework.context.annotation.DependsOn;
182 import org.springframework.context.annotation.Lazy;
183 import org.springframework.context.annotation.Primary;
184 import org.springframework.core.io.ClassPathResource;
185 import org.springframework.core.task.AsyncTaskExecutor;
186 import org.springframework.core.task.support.TaskExecutorAdapter;
187 import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
188 import org.springframework.mail.javamail.JavaMailSender;
189 import org.springframework.scheduling.annotation.AsyncConfigurer;
190 import org.springframework.scheduling.annotation.EnableAsync;
191 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
192 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
193 import org.springframework.transaction.PlatformTransactionManager;
194
195 @EnableAsync
196 @EnableConfigurationProperties(ProvisioningProperties.class)
197 @Configuration(proxyBeanMethods = false)
198 public class ProvisioningContext {
199
200 @ConditionalOnMissingBean
201 @Bean
202 public AsyncConnectorFacade asyncConnectorFacade() {
203 return new AsyncConnectorFacade();
204 }
205
206
207
208
209
210
211
212 @Bean
213 @Primary
214 public ThreadPoolTaskExecutor asyncConnectorFacadeExecutor(final ProvisioningProperties props) {
215 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
216 executor.setCorePoolSize(props.getAsyncConnectorFacadeExecutor().getCorePoolSize());
217 executor.setMaxPoolSize(props.getAsyncConnectorFacadeExecutor().getMaxPoolSize());
218 executor.setQueueCapacity(props.getAsyncConnectorFacadeExecutor().getQueueCapacity());
219 executor.setAwaitTerminationSeconds(props.getAsyncConnectorFacadeExecutor().getAwaitTerminationSeconds());
220 executor.setWaitForTasksToCompleteOnShutdown(true);
221 executor.setThreadNamePrefix("AsyncConnectorFacadeExecutor-");
222 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
223 executor.initialize();
224 return executor;
225 }
226
227 @Bean
228 public AsyncConfigurer asyncConfigurer(
229 @Qualifier("asyncConnectorFacadeExecutor")
230 final ThreadPoolTaskExecutor asyncConnectorFacadeExecutor) {
231
232 return new AsyncConfigurer() {
233
234 @Override
235 public Executor getAsyncExecutor() {
236 return asyncConnectorFacadeExecutor;
237 }
238 };
239 }
240
241
242
243
244
245
246
247
248 @Bean
249 public AsyncTaskExecutor jobStatusUpdaterThreadExecutor() {
250 return new TaskExecutorAdapter(Executors.newSingleThreadExecutor());
251 }
252
253
254
255
256
257
258
259 @Bean
260 public ThreadPoolTaskExecutor propagationTaskExecutorAsyncExecutor(final ProvisioningProperties props) {
261 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
262 executor.setCorePoolSize(props.getPropagationTaskExecutorAsyncExecutor().getCorePoolSize());
263 executor.setMaxPoolSize(props.getPropagationTaskExecutorAsyncExecutor().getMaxPoolSize());
264 executor.setQueueCapacity(props.getPropagationTaskExecutorAsyncExecutor().getQueueCapacity());
265 executor.setWaitForTasksToCompleteOnShutdown(true);
266 executor.setAwaitTerminationSeconds(
267 props.getPropagationTaskExecutorAsyncExecutor().getAwaitTerminationSeconds());
268 executor.setThreadNamePrefix("PropagationTaskExecutor-");
269 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
270 executor.initialize();
271 return executor;
272 }
273
274 @Bean
275 public SchedulerDBInit quartzDataSourceInit(
276 @Qualifier("MasterDataSource")
277 final DataSource masterDataSource,
278 final ProvisioningProperties props) {
279
280 SchedulerDBInit init = new SchedulerDBInit();
281 init.setDataSource(masterDataSource);
282
283 ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
284 databasePopulator.setContinueOnError(true);
285 databasePopulator.setIgnoreFailedDrops(true);
286 databasePopulator.setSqlScriptEncoding(StandardCharsets.UTF_8.name());
287 databasePopulator.setScripts(new ClassPathResource("/quartz/" + props.getQuartz().getSql()));
288 init.setDatabasePopulator(databasePopulator);
289
290 return init;
291 }
292
293 @DependsOn("quartzDataSourceInit")
294 @Lazy(false)
295 @Bean
296 public SchedulerFactoryBean scheduler(
297 @Qualifier("MasterDataSource")
298 final DataSource masterDataSource,
299 @Qualifier("MasterTransactionManager")
300 final PlatformTransactionManager masterTransactionManager,
301 final ProvisioningProperties props,
302 final ApplicationContext ctx) {
303
304 SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
305 scheduler.setAutoStartup(true);
306 scheduler.setApplicationContext(ctx);
307 scheduler.setWaitForJobsToCompleteOnShutdown(props.getQuartz().isWaitForJobsToCompleteOnShutdown());
308 scheduler.setOverwriteExistingJobs(true);
309 scheduler.setDataSource(masterDataSource);
310 scheduler.setTransactionManager(masterTransactionManager);
311 scheduler.setJobFactory(new SyncopeSpringBeanJobFactory());
312
313 Properties quartzProperties = new Properties();
314 quartzProperties.setProperty(
315 "org.quartz.scheduler.idleWaitTime",
316 String.valueOf(props.getQuartz().getIdleWaitTime()));
317 quartzProperties.setProperty(
318 "org.quartz.jobStore.misfireThreshold",
319 String.valueOf(props.getQuartz().getMisfireThreshold()));
320 quartzProperties.setProperty(
321 "org.quartz.jobStore.driverDelegateClass",
322 props.getQuartz().getDelegate().getName());
323 quartzProperties.setProperty(
324 "org.quartz.jobStore.class",
325 "org.springframework.scheduling.quartz.LocalDataSourceJobStore");
326 quartzProperties.setProperty("org.quartz.threadPool.makeThreadsDaemons", "true");
327 quartzProperties.setProperty("org.quartz.scheduler.makeSchedulerThreadDaemon", "true");
328 quartzProperties.setProperty("org.quartz.jobStore.isClustered", "true");
329 quartzProperties.setProperty("org.quartz.jobStore.clusterCheckinInterval", "20000");
330 quartzProperties.setProperty("org.quartz.scheduler.instanceName", "SyncopeClusteredScheduler");
331 quartzProperties.setProperty("org.quartz.scheduler.instanceId", "AUTO");
332 quartzProperties.setProperty("org.quartz.scheduler.jmx.export", "true");
333 scheduler.setQuartzProperties(quartzProperties);
334
335 return scheduler;
336 }
337
338 @ConditionalOnMissingBean
339 @Bean
340 public JobManager jobManager(
341 final ProvisioningProperties props,
342 final DomainHolder domainHolder,
343 final SecurityProperties securityProperties,
344 final SchedulerFactoryBean scheduler,
345 final TaskDAO taskDAO,
346 final ReportDAO reportDAO,
347 final ImplementationDAO implementationDAO,
348 final TaskUtilsFactory taskUtilsFactory,
349 final ConfParamOps confParamOps) {
350
351 DefaultJobManager jobManager = new DefaultJobManager(
352 domainHolder,
353 scheduler,
354 taskDAO,
355 reportDAO,
356 implementationDAO,
357 taskUtilsFactory,
358 confParamOps,
359 securityProperties);
360 jobManager.setDisableQuartzInstance(props.getQuartz().isDisableInstance());
361 return jobManager;
362 }
363
364 @ConditionalOnMissingBean
365 @Bean
366 public JobStatusUpdater jobStatusUpdater(final JobStatusDAO jobStatusDAO, final EntityFactory entityFactory) {
367 return new JobStatusUpdater(jobStatusDAO, entityFactory);
368 }
369
370 @ConditionalOnMissingBean
371 @Bean
372 public ConnectorManager connectorManager(
373 final EntityFactory entityFactory,
374 final ConnIdBundleManager connIdBundleManager,
375 final RealmDAO realmDAO,
376 final ExternalResourceDAO resourceDAO,
377 final ConnInstanceDataBinder connInstanceDataBinder,
378 final AsyncConnectorFacade asyncConnectorFacade) {
379
380 return new DefaultConnectorManager(
381 connIdBundleManager,
382 realmDAO,
383 resourceDAO,
384 connInstanceDataBinder,
385 asyncConnectorFacade,
386 entityFactory);
387 }
388
389 @ConditionalOnMissingBean
390 @Bean
391 public ConnectorLoader connectorLoader(final ConnectorManager connectorManager) {
392 return new ConnectorLoader(connectorManager);
393 }
394
395 @ConditionalOnMissingBean
396 @Bean
397 public InboundMatcher inboundMatcher(
398 final AnyUtilsFactory anyUtilsFactory,
399 final UserDAO userDAO,
400 final AnyObjectDAO anyObjectDAO,
401 final GroupDAO groupDAO,
402 final AnySearchDAO anySearchDAO,
403 final RealmDAO realmDAO,
404 final VirSchemaDAO virSchemaDAO,
405 final ImplementationDAO implementationDAO,
406 final VirAttrHandler virAttrHandler,
407 final IntAttrNameParser intAttrNameParser) {
408
409 return new InboundMatcher(
410 userDAO,
411 anyObjectDAO,
412 groupDAO,
413 anySearchDAO,
414 realmDAO,
415 virSchemaDAO,
416 implementationDAO,
417 virAttrHandler,
418 intAttrNameParser,
419 anyUtilsFactory);
420 }
421
422 @ConditionalOnMissingBean
423 @Bean
424 public OutboundMatcher outboundMatcher(
425 final AnyUtilsFactory anyUtilsFactory,
426 final MappingManager mappingManager,
427 final UserDAO userDAO,
428 final VirSchemaDAO virSchemaDAO,
429 final VirAttrHandler virAttrHandler) {
430
431 return new OutboundMatcher(mappingManager, userDAO, anyUtilsFactory, virSchemaDAO, virAttrHandler);
432 }
433
434 @ConditionalOnMissingBean
435 @Bean
436 public DerAttrHandler derAttrHandler(final AnyUtilsFactory anyUtilsFactory) {
437 return new DefaultDerAttrHandler(anyUtilsFactory);
438 }
439
440 @ConditionalOnMissingBean
441 @Bean
442 public VirAttrHandler virAttrHandler(
443 final AnyUtilsFactory anyUtilsFactory,
444 final ConnectorManager connectorManager,
445 final VirAttrCache virAttrCache,
446 @Lazy final OutboundMatcher outboundMatcher) {
447
448 return new DefaultVirAttrHandler(connectorManager, virAttrCache, outboundMatcher, anyUtilsFactory);
449 }
450
451 @ConditionalOnMissingBean
452 @Bean
453 public MappingManager mappingManager(
454 final AnyUtilsFactory anyUtilsFactory,
455 final AnyTypeDAO anyTypeDAO,
456 final UserDAO userDAO,
457 final AnyObjectDAO anyObjectDAO,
458 final GroupDAO groupDAO,
459 final RelationshipTypeDAO relationshipTypeDAO,
460 final RealmDAO realmDAO,
461 final ApplicationDAO applicationDAO,
462 final ImplementationDAO implementationDAO,
463 final DerAttrHandler derAttrHandler,
464 final VirAttrHandler virAttrHandler,
465 final VirAttrCache virAttrCache,
466 final IntAttrNameParser intAttrNameParser) {
467
468 return new DefaultMappingManager(
469 anyTypeDAO,
470 userDAO,
471 anyObjectDAO,
472 groupDAO,
473 relationshipTypeDAO,
474 realmDAO,
475 applicationDAO,
476 implementationDAO,
477 derAttrHandler,
478 virAttrHandler,
479 virAttrCache,
480 anyUtilsFactory,
481 intAttrNameParser);
482 }
483
484 @ConditionalOnMissingBean
485 @Bean
486 public TemplateUtils templateUtils(final UserDAO userDAO, final GroupDAO groupDAO) {
487 return new TemplateUtils(userDAO, groupDAO);
488 }
489
490 @ConditionalOnMissingBean
491 @Bean
492 public ConnObjectUtils connObjectUtils(
493 final PasswordGenerator passwordGenerator,
494 final AnyUtilsFactory anyUtilsFactory,
495 final MappingManager mappingManager,
496 final TemplateUtils templateUtils,
497 final RealmDAO realmDAO,
498 final UserDAO userDAO,
499 final ExternalResourceDAO resourceDAO) {
500
501 return new ConnObjectUtils(
502 templateUtils,
503 realmDAO,
504 userDAO,
505 resourceDAO,
506 passwordGenerator,
507 mappingManager,
508 anyUtilsFactory);
509 }
510
511 @ConditionalOnMissingBean
512 @Bean
513 public PropagationManager propagationManager(
514 final EntityFactory entityFactory,
515 final AnyUtilsFactory anyUtilsFactory,
516 final VirSchemaDAO virSchemaDAO,
517 final ExternalResourceDAO resourceDAO,
518 final ConnObjectUtils connObjectUtils,
519 final MappingManager mappingManager,
520 final DerAttrHandler derAttrHandler) {
521
522 return new DefaultPropagationManager(
523 virSchemaDAO,
524 resourceDAO,
525 entityFactory,
526 connObjectUtils,
527 mappingManager,
528 derAttrHandler,
529 anyUtilsFactory);
530 }
531
532 @ConditionalOnMissingBean
533 @Bean
534 public ConnIdBundleManager connIdBundleManager(final ProvisioningProperties props) {
535 return new DefaultConnIdBundleManager(props.getConnIdLocation());
536 }
537
538 @ConditionalOnMissingBean
539 @Bean
540 public IntAttrNameParser intAttrNameParser(
541 final AnyUtilsFactory anyUtilsFactory,
542 final PlainSchemaDAO plainSchemaDAO,
543 final DerSchemaDAO derSchemaDAO,
544 final VirSchemaDAO virSchemaDAO) {
545
546 return new IntAttrNameParser(plainSchemaDAO, derSchemaDAO, virSchemaDAO, anyUtilsFactory);
547 }
548
549 @ConditionalOnMissingBean
550 @Bean
551 public PropagationTaskExecutor propagationTaskExecutor(
552 @Qualifier("propagationTaskExecutorAsyncExecutor")
553 final ThreadPoolTaskExecutor propagationTaskExecutorAsyncExecutor,
554 final TaskUtilsFactory taskUtilsFactory,
555 final AnyUtilsFactory anyUtilsFactory,
556 final ConnectorManager connectorManager,
557 final ConnObjectUtils connObjectUtils,
558 final TaskDAO taskDAO,
559 final ExternalResourceDAO resourceDAO,
560 final PlainSchemaDAO plainSchemaDAO,
561 final NotificationManager notificationManager,
562 final AuditManager auditManager,
563 final TaskDataBinder taskDataBinder,
564 final OutboundMatcher outboundMatcher,
565 final PlainAttrValidationManager validator,
566 final ApplicationEventPublisher publisher) {
567
568 return new PriorityPropagationTaskExecutor(
569 connectorManager,
570 connObjectUtils,
571 taskDAO,
572 resourceDAO,
573 plainSchemaDAO,
574 notificationManager,
575 auditManager,
576 taskDataBinder,
577 anyUtilsFactory,
578 taskUtilsFactory,
579 outboundMatcher,
580 validator,
581 publisher,
582 propagationTaskExecutorAsyncExecutor);
583 }
584
585 @ConditionalOnMissingBean
586 @Bean
587 public UserProvisioningManager userProvisioningManager(
588 final UserWorkflowAdapter uwfAdapter,
589 final PropagationManager propagationManager,
590 final PropagationTaskExecutor taskExecutor,
591 final UserDAO userDAO,
592 final VirAttrHandler virtAttrHandler) {
593
594 return new DefaultUserProvisioningManager(
595 uwfAdapter,
596 propagationManager,
597 taskExecutor,
598 userDAO,
599 virtAttrHandler);
600 }
601
602 @ConditionalOnMissingBean
603 @Bean
604 public GroupProvisioningManager groupProvisioningManager(
605 final GroupWorkflowAdapter gwfAdapter,
606 final PropagationManager propagationManager,
607 final PropagationTaskExecutor taskExecutor,
608 final GroupDataBinder groupDataBinder,
609 final GroupDAO groupDAO,
610 final VirAttrHandler virtAttrHandler) {
611
612 return new DefaultGroupProvisioningManager(
613 gwfAdapter,
614 propagationManager,
615 taskExecutor,
616 groupDataBinder,
617 groupDAO,
618 virtAttrHandler);
619 }
620
621 @ConditionalOnMissingBean
622 @Bean
623 public AnyObjectProvisioningManager anyObjectProvisioningManager(
624 final AnyObjectWorkflowAdapter awfAdapter,
625 final PropagationManager propagationManager,
626 final PropagationTaskExecutor taskExecutor,
627 final AnyObjectDAO anyObjectDAO,
628 final VirAttrHandler virtAttrHandler) {
629
630 return new DefaultAnyObjectProvisioningManager(
631 awfAdapter,
632 propagationManager,
633 taskExecutor,
634 anyObjectDAO,
635 virtAttrHandler);
636 }
637
638 @ConditionalOnMissingBean
639 @Bean
640 public VirAttrCache virAttrCache(final ProvisioningProperties props) {
641 VirAttrCache virAttrCache = new CaffeineVirAttrCache();
642 virAttrCache.setCacheSpec(props.getVirAttrCacheSpec());
643 return virAttrCache;
644 }
645
646 @ConditionalOnMissingBean
647 @Bean
648 public NotificationManager notificationManager(
649 final EntityFactory entityFactory,
650 final SearchCondVisitor searchCondVisitor,
651 final DerSchemaDAO derSchemaDAO,
652 final VirSchemaDAO virSchemaDAO,
653 final NotificationDAO notificationDAO,
654 final AnyObjectDAO anyObjectDAO,
655 final UserDAO userDAO,
656 final GroupDAO groupDAO,
657 final AnySearchDAO anySearchDAO,
658 final AnyMatchDAO anyMatchDAO,
659 final TaskDAO taskDAO,
660 final UserDataBinder userDataBinder,
661 final GroupDataBinder groupDataBinder,
662 final AnyObjectDataBinder anyObjectDataBinder,
663 final ConfParamOps confParamOps,
664 final DerAttrHandler derAttrHandler,
665 final VirAttrHandler virAttrHandler,
666 final IntAttrNameParser intAttrNameParser) {
667
668 return new DefaultNotificationManager(
669 derSchemaDAO,
670 virSchemaDAO,
671 notificationDAO,
672 anyObjectDAO,
673 userDAO,
674 groupDAO,
675 anySearchDAO,
676 anyMatchDAO,
677 taskDAO,
678 derAttrHandler,
679 virAttrHandler,
680 userDataBinder,
681 groupDataBinder,
682 anyObjectDataBinder,
683 confParamOps,
684 entityFactory,
685 intAttrNameParser,
686 searchCondVisitor);
687 }
688
689 @ConditionalOnMissingBean
690 @Bean
691 public AuditManager auditManager(final AuditConfDAO auditConfDAO) {
692 return new DefaultAuditManager(auditConfDAO);
693 }
694
695 @ConditionalOnMissingBean
696 @Bean
697 public SystemLoadReporterJob systemLoadReporterJob(final ApplicationContext ctx) {
698 return new SystemLoadReporterJob(ctx);
699 }
700
701 @ConditionalOnMissingBean
702 @Bean
703 public NotificationJobDelegate notificationJobDelegate(
704 final TaskUtilsFactory taskUtilsFactory,
705 final TaskDAO taskDAO,
706 final AuditManager auditManager,
707 final NotificationManager notificationManager,
708 final ApplicationEventPublisher publisher,
709 final JavaMailSender mailSender) {
710
711 return new MailNotificationJobDelegate(
712 taskDAO,
713 taskUtilsFactory,
714 auditManager,
715 notificationManager,
716 publisher,
717 mailSender);
718 }
719
720 @ConditionalOnMissingBean
721 @Bean
722 public NotificationJob notificationJob(
723 final NotificationJobDelegate delegate,
724 final DomainHolder domainHolder,
725 final SecurityProperties securityProperties) {
726
727 return new NotificationJob(securityProperties, domainHolder, delegate);
728 }
729
730 @ConditionalOnMissingBean
731 @Bean
732 public AccessTokenDataBinder accessTokenDataBinder(
733 final EntityFactory entityFactory,
734 final SecurityProperties securityProperties,
735 final AccessTokenJWSSigner jwsSigner,
736 final AccessTokenDAO accessTokenDAO,
737 final ConfParamOps confParamOps,
738 final DefaultCredentialChecker credentialChecker) {
739
740 return new AccessTokenDataBinderImpl(
741 securityProperties,
742 jwsSigner,
743 accessTokenDAO,
744 confParamOps,
745 entityFactory,
746 credentialChecker);
747 }
748
749 @ConditionalOnMissingBean
750 @Bean
751 public AnyObjectDataBinder anyObjectDataBinder(
752 final EntityFactory entityFactory,
753 final AnyUtilsFactory anyUtilsFactory,
754 final AnyTypeDAO anyTypeDAO,
755 final RealmDAO realmDAO,
756 final AnyTypeClassDAO anyTypeClassDAO,
757 final AnyObjectDAO anyObjectDAO,
758 final UserDAO userDAO,
759 final GroupDAO groupDAO,
760 final PlainSchemaDAO plainSchemaDAO,
761 final PlainAttrDAO plainAttrDAO,
762 final PlainAttrValueDAO plainAttrValueDAO,
763 final ExternalResourceDAO resourceDAO,
764 final RelationshipTypeDAO relationshipTypeDAO,
765 final DerAttrHandler derAttrHandler,
766 final VirAttrHandler virAttrHandler,
767 final MappingManager mappingManager,
768 final IntAttrNameParser intAttrNameParser,
769 final OutboundMatcher outboundMatcher,
770 final PlainAttrValidationManager validator) {
771
772 return new AnyObjectDataBinderImpl(
773 anyTypeDAO,
774 realmDAO,
775 anyTypeClassDAO,
776 anyObjectDAO,
777 userDAO,
778 groupDAO,
779 plainSchemaDAO,
780 plainAttrDAO,
781 plainAttrValueDAO,
782 resourceDAO,
783 relationshipTypeDAO,
784 entityFactory,
785 anyUtilsFactory,
786 derAttrHandler,
787 virAttrHandler,
788 mappingManager,
789 intAttrNameParser,
790 outboundMatcher,
791 validator);
792 }
793
794 @ConditionalOnMissingBean
795 @Bean
796 public AnyTypeClassDataBinder anyTypeClassDataBinder(
797 final EntityFactory entityFactory,
798 final PlainSchemaDAO plainSchemaDAO,
799 final DerSchemaDAO derSchemaDAO,
800 final VirSchemaDAO virSchemaDAO,
801 final AnyTypeDAO anyTypeDAO) {
802
803 return new AnyTypeClassDataBinderImpl(plainSchemaDAO, derSchemaDAO, virSchemaDAO, anyTypeDAO, entityFactory);
804 }
805
806 @ConditionalOnMissingBean
807 @Bean
808 public AnyTypeDataBinder anyTypeDataBinder(
809 final EntityFactory entityFactory,
810 final SecurityProperties securityProperties,
811 final AnyTypeDAO anyTypeDAO,
812 final AnyTypeClassDAO anyTypeClassDAO,
813 final AccessTokenDAO accessTokenDAO) {
814
815 return new AnyTypeDataBinderImpl(
816 securityProperties,
817 anyTypeDAO,
818 anyTypeClassDAO,
819 accessTokenDAO,
820 entityFactory);
821 }
822
823 @ConditionalOnMissingBean
824 @Bean
825 public ApplicationDataBinder applicationDataBinder(
826 final ApplicationDAO applicationDAO,
827 final EntityFactory entityFactory) {
828
829 return new ApplicationDataBinderImpl(applicationDAO, entityFactory);
830 }
831
832 @ConditionalOnMissingBean
833 @Bean
834 public AuditDataBinder auditDataBinder() {
835 return new AuditDataBinderImpl();
836 }
837
838 @ConditionalOnMissingBean
839 @Bean
840 public AuthModuleDataBinder authModuleDataBinder(final EntityFactory entityFactory) {
841 return new AuthModuleDataBinderImpl(entityFactory);
842 }
843
844 @ConditionalOnMissingBean
845 @Bean
846 public AttrRepoDataBinder attrRepoDataBinder(final EntityFactory entityFactory) {
847 return new AttrRepoDataBinderImpl(entityFactory);
848 }
849
850 @ConditionalOnMissingBean
851 @Bean
852 public AuthProfileDataBinder authProfileDataBinder(final EntityFactory entityFactory) {
853 return new AuthProfileDataBinderImpl(entityFactory);
854 }
855
856 @ConditionalOnMissingBean
857 @Bean
858 public ClientAppDataBinder clientAppDataBinder(
859 final PolicyDAO policyDAO,
860 final RealmDAO realmDAO,
861 final EntityFactory entityFactory) {
862
863 return new ClientAppDataBinderImpl(policyDAO, realmDAO, entityFactory);
864 }
865
866 @ConditionalOnMissingBean
867 @Bean
868 public ConnInstanceDataBinder connInstanceDataBinder(
869 final EntityFactory entityFactory,
870 final ConnIdBundleManager connIdBundleManager,
871 final ConnInstanceDAO connInstanceDAO,
872 final RealmDAO realmDAO) {
873
874 return new ConnInstanceDataBinderImpl(connIdBundleManager, connInstanceDAO, realmDAO, entityFactory);
875 }
876
877 @ConditionalOnMissingBean
878 @Bean
879 public DelegationDataBinder delegationDataBinder(
880 final UserDAO userDAO,
881 final RoleDAO roleDAO,
882 final EntityFactory entityFactory) {
883
884 return new DelegationDataBinderImpl(userDAO, roleDAO, entityFactory);
885 }
886
887 @ConditionalOnMissingBean
888 @Bean
889 public FIQLQueryDataBinder fiqlQueryDataBinder(
890 final SearchCondVisitor searchCondVisitor,
891 final UserDAO userDAO,
892 final EntityFactory entityFactory) {
893
894 return new FIQLQueryDataBinderImpl(searchCondVisitor, userDAO, entityFactory);
895 }
896
897 @ConditionalOnMissingBean
898 @Bean
899 public DynRealmDataBinder dynRealmDataBinder(
900 final AnyTypeDAO anyTypeDAO,
901 final DynRealmDAO dynRealmDAO,
902 final SearchCondVisitor searchCondVisitor,
903 final EntityFactory entityFactory) {
904
905 return new DynRealmDataBinderImpl(anyTypeDAO, dynRealmDAO, entityFactory, searchCondVisitor);
906 }
907
908 @ConditionalOnMissingBean
909 @Bean
910 public GroupDataBinder groupDataBinder(
911 final EntityFactory entityFactory,
912 final SearchCondVisitor searchCondVisitor,
913 final AnyUtilsFactory anyUtilsFactory,
914 final AnyTypeDAO anyTypeDAO,
915 final RealmDAO realmDAO,
916 final AnyTypeClassDAO anyTypeClassDAO,
917 final AnyObjectDAO anyObjectDAO,
918 final UserDAO userDAO,
919 final GroupDAO groupDAO,
920 final PlainSchemaDAO plainSchemaDAO,
921 final PlainAttrDAO plainAttrDAO,
922 final PlainAttrValueDAO plainAttrValueDAO,
923 final ExternalResourceDAO resourceDAO,
924 final RelationshipTypeDAO relationshipTypeDAO,
925 final DerAttrHandler derAttrHandler,
926 final VirAttrHandler virAttrHandler,
927 final MappingManager mappingManager,
928 final IntAttrNameParser intAttrNameParser,
929 final OutboundMatcher outboundMatcher,
930 final PlainAttrValidationManager validator) {
931
932 return new GroupDataBinderImpl(
933 anyTypeDAO,
934 realmDAO,
935 anyTypeClassDAO,
936 anyObjectDAO,
937 userDAO,
938 groupDAO,
939 plainSchemaDAO,
940 plainAttrDAO,
941 plainAttrValueDAO,
942 resourceDAO,
943 relationshipTypeDAO,
944 entityFactory,
945 anyUtilsFactory,
946 derAttrHandler,
947 virAttrHandler,
948 mappingManager,
949 intAttrNameParser,
950 outboundMatcher,
951 searchCondVisitor,
952 validator);
953 }
954
955 @ConditionalOnMissingBean
956 @Bean
957 public ImplementationDataBinder implementationDataBinder(final EntityFactory entityFactory) {
958 return new ImplementationDataBinderImpl(entityFactory);
959 }
960
961 @ConditionalOnMissingBean
962 @Bean
963 public NotificationDataBinder notificationDataBinder(
964 final EntityFactory entityFactory,
965 final MailTemplateDAO mailTemplateDAO,
966 final AnyTypeDAO anyTypeDAO,
967 final ImplementationDAO implementationDAO,
968 final IntAttrNameParser intAttrNameParser) {
969
970 return new NotificationDataBinderImpl(
971 mailTemplateDAO,
972 anyTypeDAO,
973 implementationDAO,
974 entityFactory,
975 intAttrNameParser);
976
977 }
978
979 @ConditionalOnMissingBean
980 @Bean
981 public OIDCJWKSDataBinder oidcJWKSDataBinder(final EntityFactory entityFactory) {
982 return new OIDCJWKSDataBinderImpl(entityFactory);
983 }
984
985 @ConditionalOnMissingBean
986 @Bean
987 public PolicyDataBinder policyDataBinder(
988 final EntityFactory entityFactory,
989 final ExternalResourceDAO resourceDAO,
990 final RealmDAO realmDAO,
991 final AnyTypeDAO anyTypeDAO,
992 final ImplementationDAO implementationDAO) {
993
994 return new PolicyDataBinderImpl(resourceDAO, realmDAO, anyTypeDAO, implementationDAO, entityFactory);
995 }
996
997 @ConditionalOnMissingBean
998 @Bean
999 public RealmDataBinder realmDataBinder(
1000 final EntityFactory entityFactory,
1001 final AnyTypeDAO anyTypeDAO,
1002 final ImplementationDAO implementationDAO,
1003 final RealmDAO realmDAO,
1004 final PolicyDAO policyDAO,
1005 final ExternalResourceDAO resourceDAO) {
1006
1007 return new RealmDataBinderImpl(
1008 anyTypeDAO,
1009 implementationDAO,
1010 realmDAO,
1011 policyDAO,
1012 resourceDAO,
1013 entityFactory);
1014 }
1015
1016 @ConditionalOnMissingBean
1017 @Bean
1018 public RelationshipTypeDataBinder relationshipTypeDataBinder(final EntityFactory entityFactory) {
1019 return new RelationshipTypeDataBinderImpl(entityFactory);
1020 }
1021
1022 @ConditionalOnMissingBean
1023 @Bean
1024 public RemediationDataBinder remediationDataBinder() {
1025 return new RemediationDataBinderImpl();
1026 }
1027
1028 @ConditionalOnMissingBean
1029 @Bean
1030 public ReportDataBinder reportDataBinder(
1031 final ReportExecDAO reportExecDAO,
1032 final ImplementationDAO implementationDAO,
1033 final SchedulerFactoryBean scheduler) {
1034
1035 return new ReportDataBinderImpl(reportExecDAO, implementationDAO, scheduler);
1036 }
1037
1038 @ConditionalOnMissingBean
1039 @Bean
1040 public ResourceDataBinder resourceDataBinder(
1041 final EntityFactory entityFactory,
1042 final AnyTypeDAO anyTypeDAO,
1043 final ConnInstanceDAO connInstanceDAO,
1044 final PolicyDAO policyDAO,
1045 final VirSchemaDAO virSchemaDAO,
1046 final AnyTypeClassDAO anyTypeClassDAO,
1047 final ImplementationDAO implementationDAO,
1048 final PlainSchemaDAO plainSchemaDAO,
1049 final IntAttrNameParser intAttrNameParser,
1050 final PropagationTaskExecutor propagationTaskExecutor) {
1051
1052 return new ResourceDataBinderImpl(
1053 anyTypeDAO,
1054 connInstanceDAO,
1055 policyDAO,
1056 virSchemaDAO,
1057 anyTypeClassDAO,
1058 implementationDAO,
1059 plainSchemaDAO,
1060 entityFactory,
1061 intAttrNameParser,
1062 propagationTaskExecutor);
1063 }
1064
1065 @ConditionalOnMissingBean
1066 @Bean
1067 public RoleDataBinder roleDataBinder(
1068 final EntityFactory entityFactory,
1069 final SearchCondVisitor searchCondVisitor,
1070 final RealmDAO realmDAO,
1071 final DynRealmDAO dynRealmDAO,
1072 final RoleDAO roleDAO,
1073 final ApplicationDAO applicationDAO) {
1074
1075 return new RoleDataBinderImpl(realmDAO, dynRealmDAO, roleDAO, applicationDAO, entityFactory, searchCondVisitor);
1076 }
1077
1078 @ConditionalOnMissingBean
1079 @Bean
1080 public SAML2IdPEntityDataBinder saml2IdPEntityDataBinder(final EntityFactory entityFactory) {
1081 return new SAML2IdPEntityDataBinderImpl(entityFactory);
1082 }
1083
1084 @ConditionalOnMissingBean
1085 @Bean
1086 public SAML2SPEntityDataBinder saml2SPEntityDataBinder(final EntityFactory entityFactory) {
1087 return new SAML2SPEntityDataBinderImpl(entityFactory);
1088 }
1089
1090 @ConditionalOnMissingBean
1091 @Bean
1092 public SRARouteDataBinder sraRouteDataBinder() {
1093 return new SRARouteDataBinderImpl();
1094 }
1095
1096 @ConditionalOnMissingBean
1097 @Bean
1098 public SchemaDataBinder schemaDataBinder(
1099 final EntityFactory entityFactory,
1100 final AnyUtilsFactory anyUtilsFactory,
1101 final AnyTypeClassDAO anyTypeClassDAO,
1102 final PlainSchemaDAO plainSchemaDAO,
1103 final DerSchemaDAO derSchemaDAO,
1104 final VirSchemaDAO virSchemaDAO,
1105 final ExternalResourceDAO resourceDAO,
1106 final AnyTypeDAO anyTypeDAO,
1107 final ImplementationDAO implementationDAO) {
1108
1109 return new SchemaDataBinderImpl(
1110 anyTypeClassDAO,
1111 plainSchemaDAO,
1112 derSchemaDAO,
1113 virSchemaDAO,
1114 resourceDAO,
1115 anyTypeDAO,
1116 implementationDAO,
1117 entityFactory,
1118 anyUtilsFactory);
1119 }
1120
1121 @ConditionalOnMissingBean
1122 @Bean
1123 public SecurityQuestionDataBinder securityQuestionDataBinder(final EntityFactory entityFactory) {
1124 return new SecurityQuestionDataBinderImpl(entityFactory);
1125 }
1126
1127 @ConditionalOnMissingBean
1128 @Bean
1129 public TaskDataBinder taskDataBinder(
1130 final EntityFactory entityFactory,
1131 final TaskUtilsFactory taskUtilsFactory,
1132 final RealmDAO realmDAO,
1133 final ExternalResourceDAO resourceDAO,
1134 final TaskExecDAO taskExecDAO,
1135 final AnyTypeDAO anyTypeDAO,
1136 final ImplementationDAO implementationDAO,
1137 final SchedulerFactoryBean scheduler) {
1138
1139 return new TaskDataBinderImpl(
1140 realmDAO,
1141 resourceDAO,
1142 taskExecDAO,
1143 anyTypeDAO,
1144 implementationDAO,
1145 entityFactory,
1146 scheduler,
1147 taskUtilsFactory);
1148 }
1149
1150 @ConditionalOnMissingBean
1151 @Bean
1152 public UserDataBinder userDataBinder(
1153 final EntityFactory entityFactory,
1154 final AnyUtilsFactory anyUtilsFactory,
1155 final SecurityProperties securityProperties,
1156 final AnyTypeDAO anyTypeDAO,
1157 final RealmDAO realmDAO,
1158 final AnyTypeClassDAO anyTypeClassDAO,
1159 final AnyObjectDAO anyObjectDAO,
1160 final UserDAO userDAO,
1161 final GroupDAO groupDAO,
1162 final PlainSchemaDAO plainSchemaDAO,
1163 final PlainAttrDAO plainAttrDAO,
1164 final PlainAttrValueDAO plainAttrValueDAO,
1165 final ExternalResourceDAO resourceDAO,
1166 final RelationshipTypeDAO relationshipTypeDAO,
1167 final DerAttrHandler derAttrHandler,
1168 final VirAttrHandler virAttrHandler,
1169 final MappingManager mappingManager,
1170 final IntAttrNameParser intAttrNameParser,
1171 final OutboundMatcher outboundMatcher,
1172 final PlainAttrValidationManager validator,
1173 final RoleDAO roleDAO,
1174 final SecurityQuestionDAO securityQuestionDAO,
1175 final ApplicationDAO applicationDAO,
1176 final AccessTokenDAO accessTokenDAO,
1177 final DelegationDAO delegationDAO,
1178 final ConfParamOps confParamOps) {
1179
1180 return new UserDataBinderImpl(
1181 anyTypeDAO,
1182 realmDAO,
1183 anyTypeClassDAO,
1184 anyObjectDAO,
1185 userDAO,
1186 groupDAO,
1187 plainSchemaDAO,
1188 plainAttrDAO,
1189 plainAttrValueDAO,
1190 resourceDAO,
1191 relationshipTypeDAO,
1192 entityFactory,
1193 anyUtilsFactory,
1194 derAttrHandler,
1195 virAttrHandler,
1196 mappingManager,
1197 intAttrNameParser,
1198 outboundMatcher,
1199 validator,
1200 roleDAO,
1201 securityQuestionDAO,
1202 applicationDAO,
1203 accessTokenDAO,
1204 delegationDAO,
1205 confParamOps,
1206 securityProperties);
1207 }
1208
1209 @ConditionalOnMissingBean
1210 @Bean
1211 public WAConfigDataBinder waConfigDataBinder(
1212 final WAConfigDAO waConfigDAO,
1213 final EntityFactory entityFactory) {
1214
1215 return new WAConfigDataBinderImpl(waConfigDAO, entityFactory);
1216 }
1217
1218 @ConditionalOnMissingBean
1219 @Bean
1220 public WAClientAppDataBinder waClientAppDataBinder(
1221 final ClientAppDataBinder clientAppDataBinder,
1222 final PolicyDataBinder policyDataBinder,
1223 final AuthModuleDataBinder authModuleDataBinder,
1224 final AuthModuleDAO authModuleDAO) {
1225
1226 return new WAClientAppDataBinderImpl(
1227 clientAppDataBinder,
1228 policyDataBinder,
1229 authModuleDataBinder,
1230 authModuleDAO);
1231 }
1232 }