Project

General

Profile

Download (24.9 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.cdm.api.application;
11

    
12
import java.util.EnumSet;
13
import java.util.List;
14
import java.util.Properties;
15
import java.util.UUID;
16

    
17
import org.apache.logging.log4j.LogManager;
18
import org.apache.logging.log4j.Logger;
19
import org.hibernate.SessionFactory;
20
import org.springframework.beans.MutablePropertyValues;
21
import org.springframework.beans.factory.config.BeanDefinition;
22
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
23
import org.springframework.context.ApplicationListener;
24
import org.springframework.context.support.AbstractApplicationContext;
25
import org.springframework.core.io.ClassPathResource;
26
import org.springframework.core.io.Resource;
27
import org.springframework.security.authentication.ProviderManager;
28
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
29
import org.springframework.security.core.Authentication;
30
import org.springframework.security.core.context.SecurityContext;
31
import org.springframework.security.core.context.SecurityContextHolder;
32
import org.springframework.transaction.PlatformTransactionManager;
33
import org.springframework.transaction.TransactionStatus;
34

    
35
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
36
import eu.etaxonomy.cdm.api.service.IAgentService;
37
import eu.etaxonomy.cdm.api.service.IAnnotationService;
38
import eu.etaxonomy.cdm.api.service.IClassificationService;
39
import eu.etaxonomy.cdm.api.service.ICollectionService;
40
import eu.etaxonomy.cdm.api.service.ICommonService;
41
import eu.etaxonomy.cdm.api.service.IDatabaseService;
42
import eu.etaxonomy.cdm.api.service.IDescriptionElementService;
43
import eu.etaxonomy.cdm.api.service.IDescriptionService;
44
import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
45
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
46
import eu.etaxonomy.cdm.api.service.IEntityValidationService;
47
import eu.etaxonomy.cdm.api.service.IEventBaseService;
48
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
49
import eu.etaxonomy.cdm.api.service.IGroupService;
50
import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;
51
import eu.etaxonomy.cdm.api.service.ILocationService;
52
import eu.etaxonomy.cdm.api.service.IMediaService;
53
import eu.etaxonomy.cdm.api.service.IMetadataService;
54
import eu.etaxonomy.cdm.api.service.INameService;
55
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
56
import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
57
import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
58
import eu.etaxonomy.cdm.api.service.IPreferenceService;
59
import eu.etaxonomy.cdm.api.service.IProgressMonitorService;
60
import eu.etaxonomy.cdm.api.service.IReferenceService;
61
import eu.etaxonomy.cdm.api.service.IRegistrationService;
62
import eu.etaxonomy.cdm.api.service.IRightsService;
63
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
64
import eu.etaxonomy.cdm.api.service.ITaxonService;
65
import eu.etaxonomy.cdm.api.service.ITermNodeService;
66
import eu.etaxonomy.cdm.api.service.ITermService;
67
import eu.etaxonomy.cdm.api.service.ITermTreeService;
68
import eu.etaxonomy.cdm.api.service.IUserService;
69
import eu.etaxonomy.cdm.api.service.IVocabularyService;
70
import eu.etaxonomy.cdm.api.service.longrunningService.ILongRunningTasksService;
71
import eu.etaxonomy.cdm.api.service.media.MediaInfoFactory;
72
import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
73
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
74
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
75
import eu.etaxonomy.cdm.api.service.security.IAccountRegistrationService;
76
import eu.etaxonomy.cdm.api.service.security.IPasswordResetService;
77
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
78
import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
79
import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;
80
import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
81
import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
82
import eu.etaxonomy.cdm.database.DbSchemaValidation;
83
import eu.etaxonomy.cdm.database.ICdmDataSource;
84
import eu.etaxonomy.cdm.model.common.CdmBase;
85
import eu.etaxonomy.cdm.model.permission.CRUD;
86
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
87
import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
88
import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator;
89

    
90
/**
91
 * @author a.mueller
92
 */
93
public class CdmApplicationController implements ICdmRepository {
94

    
95
    private static final Logger logger = LogManager.getLogger(CdmApplicationController.class);
96

    
97
	public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultApplicationContext.xml";
98

    
99
	public AbstractApplicationContext applicationContext;
100
	protected ICdmRepository configuration;
101
	private final Resource applicationContextResource;
102

    
103
	private final IProgressMonitor progressMonitor;
104

    
105
	final protected static DbSchemaValidation defaultDbSchemaValidation = DbSchemaValidation.VALIDATE;
106

    
107
	/**
108
	 * Constructor, opens a spring ApplicationContext by using the default data source
109
	 *
110
	 * @throws DataSourceNotFoundException
111
	 */
112
	public static CdmApplicationController NewInstance() throws DataSourceNotFoundException{
113
		logger.info("Start CdmApplicationController with default data source");
114
		CdmPersistentDataSource dataSource = getDefaultDatasource();
115
		DbSchemaValidation dbSchemaValidation = defaultDbSchemaValidation;
116
		return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
117
	}
118

    
119
	/**
120
	 * Constructor, opens a spring ApplicationContext by using the default data source
121
	 *
122
	 * @param dbSchemaValidation
123
	 *            validation type for database schema
124
	 * @throws DataSourceNotFoundException
125
	 */
126
	public static CdmApplicationController NewInstance(DbSchemaValidation dbSchemaValidation) throws DataSourceNotFoundException{
127
		logger.info("Start CdmApplicationController with default data source");
128
		CdmPersistentDataSource dataSource = getDefaultDatasource();
129
		return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
130
	}
131

    
132

    
133
	/**
134
	 * Constructor, opens an spring ApplicationContext by using the according data source
135
	 * and the default database schema validation type
136
	 */
137
	public static CdmApplicationController NewInstance(ICdmDataSource dataSource){
138
		return CdmApplicationController.NewInstance(null, dataSource, defaultDbSchemaValidation, false);
139
	}
140

    
141

    
142
	public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){
143
		return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
144
	}
145

    
146
	public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){
147
		return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, omitTermLoading);
148
	}
149

    
150
	public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,
151
			DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){
152
		return CdmApplicationController.NewInstance(applicationContextResource, dataSource, dbSchemaValidation,
153
		        null, omitTermLoading, null);
154
	}
155
    public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,
156
            DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor){
157
        return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation,
158
                null, omitTermLoading, progressMonitor, null);
159
    }
160
	public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,
161
			DbSchemaValidation dbSchemaValidation, HibernateConfiguration hibernateConfig,
162
			boolean omitTermLoading, IProgressMonitor progressMonitor){
163
		return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation,
164
		        hibernateConfig, omitTermLoading, progressMonitor, null);
165
	}
166

    
167

    
168
	//TODO discuss need for listeners before commit to trunk
169
	//	public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners) {
170
	//		return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, progressMonitor,listeners);
171
	//	}
172

    
173
	protected static ClassPathResource getClasspathResource(){
174
		return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);
175
	}
176

    
177
	protected static CdmPersistentDataSource getDefaultDatasource() throws DataSourceNotFoundException{
178
		CdmPersistentDataSource dataSource = CdmPersistentDataSource.NewDefaultInstance();
179
		return dataSource;
180
	}
181

    
182
	/**
183
	 * Constructor, opens an spring 2.5 ApplicationContext by using the according data
184
	 * source
185
	 */
186
	protected CdmApplicationController(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
187
	        HibernateConfiguration hibernateConfig,
188
	        boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners){
189
		logger.info("Start CdmApplicationController with datasource: " + dataSource.getName());
190

    
191
		if (dbSchemaValidation == null) {
192
			dbSchemaValidation = defaultDbSchemaValidation;
193
		}
194
		this.applicationContextResource = applicationContextResource != null ? applicationContextResource : getClasspathResource();
195
		this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
196

    
197
		setNewDataSource(dataSource, dbSchemaValidation, hibernateConfig, omitTermLoading, listeners);
198
	}
199

    
200
	/**
201
    *
202
    * FIXME:Remoting this constructor is added only to allow extension of this controller
203
    * class and should be removed after re-factoring
204
    */
205
   protected CdmApplicationController(){
206
       applicationContextResource = null;
207
       progressMonitor = null;
208
   }
209

    
210
	/**
211
	 * Sets the application context to a new spring ApplicationContext by using the
212
	 * according data source and initializes the Controller.
213
	 *
214
	 * @param dataSource
215
	 */
216
	private boolean setNewDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
217
	        HibernateConfiguration hibernateConfig,
218
	        boolean omitTermLoading, List<ApplicationListener> listeners){
219

    
220
		if (dbSchemaValidation == null) {
221
			dbSchemaValidation = defaultDbSchemaValidation;
222
		}
223
		logger.info("Connecting to '" + dataSource.getName() + "'");
224

    
225
		MonitoredGenericApplicationContext applicationContext = new MonitoredGenericApplicationContext();
226
		int refreshTasks = 45;
227
		int nTasks = 5 + refreshTasks;
228
		//		nTasks += applicationContext.countTasks();
229
		progressMonitor.beginTask("Connecting to '" + dataSource.getName() + "'", nTasks);
230

    
231
		//		progressMonitor.worked(1);
232

    
233
		BeanDefinition datasourceBean = dataSource.getDatasourceBean();
234
		datasourceBean.setAttribute("isLazy", false);
235
		progressMonitor.subTask("Registering datasource.");
236
		applicationContext.registerBeanDefinition("dataSource", datasourceBean);
237
		progressMonitor.worked(1);
238

    
239
		BeanDefinition hibernatePropBean = dataSource.getHibernatePropertiesBean(dbSchemaValidation, hibernateConfig);
240
		applicationContext.registerBeanDefinition("hibernateProperties", hibernatePropBean);
241

    
242
		XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
243
		progressMonitor.subTask("Registering resources.");
244
		xmlReader.loadBeanDefinitions(applicationContextResource);
245
		progressMonitor.worked(1);
246

    
247
		//omitTerms
248
		if (omitTermLoading == true) {
249
			String initializerName = "persistentTermInitializer";
250
			BeanDefinition beanDef = applicationContext.getBeanDefinition(initializerName);
251
			MutablePropertyValues values = beanDef.getPropertyValues();
252
			values.addPropertyValue("omit", omitTermLoading);
253
		}
254

    
255
		if (listeners != null) {
256
			for (ApplicationListener<?> listener : listeners) {
257
				applicationContext.addApplicationListener(listener);
258
			}
259
		}
260

    
261
		//		String message = "Start application context. This might take a while ...";
262
		////		progressMonitor.subTask(message);
263
		//		SubProgressMonitor subMonitor= new SubProgressMonitor(progressMonitor, 10);
264
		//		subMonitor.beginTask(message, 2);
265
		//		applicationContext.setProgressMonitor(subMonitor);
266

    
267
		applicationContext.refresh(new SubProgressMonitor(progressMonitor, refreshTasks));
268
		applicationContext.start();
269
		//		progressMonitor.worked(1);
270

    
271
		progressMonitor.subTask("Cleaning up.");
272
		setApplicationContext(applicationContext);
273
		progressMonitor.worked(1);
274

    
275
		progressMonitor.done();
276
		return true;
277
	}
278

    
279
	/**
280
     * Overrides all default with values in hibernate config, if defined
281
     * @param hibernatePropBean
282
     * @param hibernateConfig
283
     */
284
    private void registerHibernateConfig(BeanDefinition hibernatePropBean, HibernateConfiguration hibernateConfig) {
285
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_ENVERS,
286
                hibernateConfig.getRegisterEnvers());
287
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_SEARCH,
288
                hibernateConfig.getRegisterSearch());
289
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.SHOW_SQL,
290
                hibernateConfig.getShowSql());
291
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.FORMAT_SQL,
292
                hibernateConfig.getFormatSql());
293
    }
294

    
295

    
296
    private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, Boolean value) {
297
	    if (value != null){
298
	        setHibernateProperty(hibernatePropBean, key, String.valueOf(value));
299
	    }
300
	}
301
    private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, String value) {
302
        if (value != null){
303
            Properties props = (Properties)hibernatePropBean.getPropertyValues().get("properties");
304
            props.setProperty(key, value);
305
        }
306
    }
307

    
308

    
309
	/**
310
	 * Tests if some DefinedTermsAreMissing.
311
	 *
312
	 * @return true, if at least one is missing, else false
313
	 */
314
	public boolean testDefinedTermsAreMissing(){
315
		UUID englishUuid = UUID.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
316
		DefinedTermBase<?> english = this.getTermService().load(englishUuid);
317
		if (english == null || !english.getUuid().equals(englishUuid)) {
318
			return true;
319
		}
320
		else {
321
			return false;
322
		}
323
	}
324

    
325

    
326
	/**
327
	 * Changes the ApplicationContext to the new dataSource
328
	 *
329
	 * @param dataSource
330
	 */
331
	public boolean changeDataSource(ICdmDataSource dataSource){
332
		//logger.info("Change datasource to : " + dataSource);
333
		return setNewDataSource(dataSource, DbSchemaValidation.VALIDATE, null, false, null);
334
	}
335

    
336

    
337
	/**
338
	 * Changes the ApplicationContext to the new dataSource
339
	 *
340
	 * @param dataSource
341
	 * @param dbSchemaValidation
342
	 */
343
	public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){
344
		//logger.info("Change datasource to : " + dataSource);
345
		return setNewDataSource(dataSource, dbSchemaValidation, null, false, null);
346
	}
347

    
348

    
349
	/**
350
	 * Changes the ApplicationContext to the new dataSource
351
	 *
352
	 * @param dataSource
353
	 * @param dbSchemaValidation
354
	 * @param omitTermLoading
355
	 */
356
	public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){
357
		logger.info("Change datasource to : " + dataSource);
358
		return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, null);
359
	}
360

    
361

    
362
	/**
363
	 * Changes the ApplicationContext to the new dataSource
364
	 *
365
	 * @param dataSource
366
	 * @param dbSchemaValidation
367
	 * @param omitTermLoading
368
	 */
369
	public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,
370
			List<ApplicationListener> listeners){
371
		logger.info("Change datasource to : " + dataSource);
372
		return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, listeners);
373
	}
374

    
375

    
376
	/**
377
	 * Sets a new application Context.
378
	 *
379
	 * @param ac
380
	 */
381
	public void setApplicationContext(AbstractApplicationContext ac){
382
		closeApplicationContext(); //closes old application context if necessary
383
		applicationContext = ac;
384
		applicationContext.registerShutdownHook();
385
		init();
386
	}
387

    
388
	@Override
389
	public void finalize(){
390
		close();
391
	}
392

    
393
	/**
394
	 * closes the application
395
	 */
396
	public void close(){
397
		closeApplicationContext();
398
	}
399

    
400

    
401
	/**
402
	 * closes the application context
403
	 */
404
	protected void closeApplicationContext(){
405
		if (applicationContext != null) {
406
			logger.info("Close ApplicationContext");
407
			applicationContext.close();
408
		}
409
	}
410

    
411

    
412
	protected void init(){
413
		logger.debug("Init " + this.getClass().getName() + " ... ");
414
		if (logger.isDebugEnabled()) {
415
			for (String beanName : applicationContext.getBeanDefinitionNames()) {
416
				logger.debug(beanName);
417
			}
418
		}
419
		//TODO delete next row (was just for testing)
420
		if (logger.isInfoEnabled()) {
421
			logger.info("Registered Beans: ");
422
			String[] beanNames = applicationContext.getBeanDefinitionNames();
423
			for (String beanName : beanNames) {
424
				logger.info(beanName);
425
			}
426
		}
427
		configuration = (ICdmRepository) applicationContext.getBean("cdmRepository");
428
		try {
429
			//FIXME:Remoting catching exection to allow for remoting
430
			getDatabaseService().setApplicationController(this);
431
		}
432
		catch (UnsupportedOperationException uoe) {
433
			logger.warn("getDatabaseService() is not implmented for current application context");
434
		}
435
	}
436

    
437

    
438
	/* ****** Services ******** */
439
	@Override
440
	public final IAnnotationService getAnnotationService(){
441
	    return configuration.getAnnotationService();
442
	}
443

    
444
	@Override
445
	public final INameService getNameService(){
446
	    return configuration.getNameService();
447
	}
448

    
449

    
450
	@Override
451
	public final ITaxonService getTaxonService(){
452
		return configuration.getTaxonService();
453
	}
454

    
455

    
456
	@Override
457
	public final IClassificationService getClassificationService(){
458
		return configuration.getClassificationService();
459
	}
460

    
461
	@Override
462
	public final ILongRunningTasksService getLongRunningTasksService(){
463
		return configuration.getLongRunningTasksService();
464
	}
465

    
466

    
467
	@Override
468
	public final ITaxonNodeService getTaxonNodeService(){
469
	    try{
470
	        return configuration.getTaxonNodeService();
471
	    } catch (Exception e){
472
	        e.printStackTrace();
473
	    }
474
	    return null;
475
	}
476

    
477

    
478
	@Override
479
	public final IReferenceService getReferenceService(){
480
		return configuration.getReferenceService();
481
	}
482

    
483

    
484
	@Override
485
	public final IAgentService getAgentService(){
486
		return configuration.getAgentService();
487
	}
488

    
489

    
490
	@Override
491
	public final IDatabaseService getDatabaseService(){
492
		return configuration.getDatabaseService();
493
	}
494

    
495

    
496
	@Override
497
	public final ITermService getTermService(){
498
		return configuration.getTermService();
499
	}
500

    
501
	@Override
502
	public final IDescriptionService getDescriptionService(){
503
		return configuration.getDescriptionService();
504
	}
505

    
506
    @Override
507
    public final IDescriptionElementService getDescriptionElementService(){
508
        return configuration.getDescriptionElementService();
509
    }
510

    
511
	@Override
512
	public final IOccurrenceService getOccurrenceService(){
513
		return configuration.getOccurrenceService();
514
	}
515

    
516
	@Override
517
	public IAmplificationService getAmplificationService(){
518
		return configuration.getAmplificationService();
519
	}
520

    
521
	@Override
522
	public ISequenceService getSequenceService(){
523
		return configuration.getSequenceService();
524
	}
525

    
526
	@Override
527
	public IEventBaseService getEventBaseService() {
528
	    return configuration.getEventBaseService();
529
	}
530

    
531

    
532

    
533
	@Override
534
	public final IPrimerService getPrimerService(){
535
		return configuration.getPrimerService();
536
	}
537

    
538

    
539
	@Override
540
	public final IMediaService getMediaService(){
541
		return configuration.getMediaService();
542
	}
543

    
544

    
545
    @Override
546
    public final IMetadataService getMetadataService(){
547
        return configuration.getMetadataService();
548
    }
549

    
550

    
551
	@Override
552
	public final ICommonService getCommonService(){
553
		return configuration.getCommonService();
554
	}
555

    
556

    
557
	@Override
558
	public final ILocationService getLocationService(){
559
		return configuration.getLocationService();
560
	}
561

    
562

    
563
	@Override
564
	public final IUserService getUserService(){
565
		return configuration.getUserService();
566
	}
567

    
568

    
569
	@Override
570
	public final IGrantedAuthorityService getGrantedAuthorityService(){
571
		return configuration.getGrantedAuthorityService();
572
	}
573

    
574

    
575
	@Override
576
	public IGroupService getGroupService(){
577
		return configuration.getGroupService();
578
	}
579

    
580

    
581
	@Override
582
	public final ICollectionService getCollectionService(){
583
		return configuration.getCollectionService();
584
	}
585

    
586
    @Override
587
    public final ITermTreeService getTermTreeService(){
588
        return configuration.getTermTreeService();
589
    }
590

    
591
	@Override
592
	public final IPreferenceService getPreferenceService(){
593
	    return configuration.getPreferenceService();
594
	}
595

    
596
    @Override
597
    public final ITermNodeService getTermNodeService(){
598
        return configuration.getTermNodeService();
599
    }
600

    
601
	@Override
602
	public final IVocabularyService getVocabularyService(){
603
		return configuration.getVocabularyService();
604
	}
605

    
606
	@Override
607
	public final IIdentificationKeyService getIdentificationKeyService(){
608
		return configuration.getIdentificationKeyService();
609
	}
610

    
611
	@Override
612
	public final IPolytomousKeyService getPolytomousKeyService(){
613
		return configuration.getPolytomousKeyService();
614
	}
615

    
616
	@Override
617
	public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){
618
		return configuration.getPolytomousKeyNodeService();
619
	}
620

    
621
    @Override
622
    public IProgressMonitorService getProgressMonitorService() {
623
        return configuration.getProgressMonitorService();
624
    }
625

    
626
	@Override
627
	public IEntityValidationService getEntityValidationService(){
628
		return configuration.getEntityValidationService();
629
	}
630

    
631
	@Override
632
	public IEntityConstraintViolationService getEntityConstraintViolationService(){
633
		return configuration.getEntityConstraintViolationService();
634
	}
635

    
636
	@Override
637
	public final IDescriptiveDataSetService getDescriptiveDataSetService(){
638
		return configuration.getDescriptiveDataSetService();
639
	}
640

    
641
	@Override
642
	public final ConversationHolder NewConversation(){
643
		//return (ConversationHolder)applicationContext.getBean("conversationHolder");
644
		return configuration.NewConversation();
645
	}
646

    
647
    @Override
648
    public IRightsService getRightsService() {
649
        return configuration.getRightsService();
650
    }
651

    
652
    @Override
653
    public IRegistrationService getRegistrationService() {
654
        return configuration.getRegistrationService();
655
    }
656

    
657
    @Override
658
    public MediaInfoFactory getMediaInfoFactory() {
659
        return configuration.getMediaInfoFactory();
660
    }
661

    
662
    @Override
663
    public IPasswordResetService getPasswordResetService() {
664
        return configuration.getPasswordResetService();
665
    }
666

    
667
    @Override
668
    public IAccountRegistrationService getAccountRegistrationService() {
669
        return configuration.getAccountRegistrationService();
670
    }
671

    
672
	/* **** Security ***** */
673

    
674
	@Override
675
	public void authenticate(String username, String password){
676
		UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);
677
		Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);
678
		SecurityContext context = SecurityContextHolder.getContext();
679
		context.setAuthentication(authentication);
680
	}
681

    
682
	@Override
683
	public final ProviderManager getAuthenticationManager(){
684
		return configuration.getAuthenticationManager();
685
	}
686

    
687
	@Override
688
	public ICdmPermissionEvaluator getPermissionEvaluator(){
689
		return configuration.getPermissionEvaluator();
690
	}
691

    
692
	/**
693
	 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication,
694
	 *      java.lang.Object, java.lang.Object)
695
	 *
696
	 * @param targetDomainObject
697
	 * @param permission
698
	 * @return
699
	 */
700
	public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject, EnumSet<CRUD> permission){
701
		SecurityContext context = SecurityContextHolder.getContext();
702
		return getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject, permission);
703
	}
704

    
705
	@Override
706
	public final PlatformTransactionManager getTransactionManager(){
707
		return configuration.getTransactionManager();
708
	}
709

    
710
	@Override
711
	public final Object getBean(String name){
712
		return this.applicationContext.getBean(name);
713
	}
714

    
715
	/*
716
	 * OLD TRANSACTION STUFF
717
	 */
718

    
719
	/* **** flush ********** */
720
	public void flush(){
721
		SessionFactory sf = (SessionFactory) applicationContext.getBean("sessionFactory");
722
		sf.getCurrentSession().flush();
723
	}
724

    
725
	public SessionFactory getSessionFactory(){
726
		return (SessionFactory) applicationContext.getBean("sessionFactory");
727
	}
728

    
729
	@Override
730
	public TransactionStatus startTransaction(){
731
		return startTransaction(false);
732
	}
733

    
734
	@Override
735
	public TransactionStatus startTransaction(Boolean readOnly){
736
		return configuration.startTransaction(readOnly);
737
	}
738

    
739
	@Override
740
	public void commitTransaction(TransactionStatus txStatus){
741
		PlatformTransactionManager txManager = configuration.getTransactionManager();
742
		txManager.commit(txStatus);
743
		return;
744
	}
745

    
746
    @Override
747
    public void rollbackTransaction(TransactionStatus txStatus){
748
        PlatformTransactionManager txManager = configuration.getTransactionManager();
749
        txManager.rollback(txStatus);
750
        return;
751
    }
752

    
753
}
(3-3/12)