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