Project

General

Profile

Download (24.7 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.log4j.Logger;
18
import org.hibernate.SessionFactory;
19
import org.springframework.beans.MutablePropertyValues;
20
import org.springframework.beans.factory.config.BeanDefinition;
21
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
22
import org.springframework.context.ApplicationListener;
23
import org.springframework.context.support.AbstractApplicationContext;
24
import org.springframework.core.io.ClassPathResource;
25
import org.springframework.core.io.Resource;
26
import org.springframework.security.authentication.ProviderManager;
27
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
28
import org.springframework.security.core.Authentication;
29
import org.springframework.security.core.context.SecurityContext;
30
import org.springframework.security.core.context.SecurityContextHolder;
31
import org.springframework.transaction.PlatformTransactionManager;
32
import org.springframework.transaction.TransactionStatus;
33

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

    
85
/**
86
 * @author a.mueller
87
 */
88
public class CdmApplicationController implements ICdmRepository {
89
	private static final Logger logger = Logger.getLogger(CdmApplicationController.class);
90

    
91
	public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultApplicationContext.xml";
92

    
93
	public AbstractApplicationContext applicationContext;
94
	protected ICdmRepository configuration;
95
	private final Resource applicationContextResource;
96

    
97
	private final IProgressMonitor progressMonitor;
98

    
99
	final protected static DbSchemaValidation defaultDbSchemaValidation = DbSchemaValidation.VALIDATE;
100

    
101

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

    
114

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

    
128

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

    
139

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

    
144

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

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

    
166

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

    
172
	/**
173
	 * @return
174
	 */
175
	protected static ClassPathResource getClasspathResource(){
176
		return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);
177
	}
178

    
179

    
180
	/**
181
	 * @return
182
	 * @throws DataSourceNotFoundException
183
	 */
184
	protected static CdmPersistentDataSource getDefaultDatasource() throws DataSourceNotFoundException{
185
		CdmPersistentDataSource dataSource = CdmPersistentDataSource.NewDefaultInstance();
186
		return dataSource;
187
	}
188

    
189

    
190
	/**
191
	 *
192
	 * FIXME:Remoting this constructor is added only to allow extension of this cntroller
193
	 * class. and should be removed after refactoring
194
	 */
195
	protected CdmApplicationController(){
196
		applicationContextResource = null;
197
		progressMonitor = null;
198
	}
199

    
200

    
201
	/**
202
	 * Constructor, opens an spring 2.5 ApplicationContext by using the according data
203
	 * source
204
	 *
205
	 * @param dataSource
206
	 * @param dbSchemaValidation
207
	 * @param omitTermLoading
208
	 */
209
	protected CdmApplicationController(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
210
	        HibernateConfiguration hibernateConfig,
211
	        boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners){
212
		logger.info("Start CdmApplicationController with datasource: " + dataSource.getName());
213

    
214
		if (dbSchemaValidation == null) {
215
			dbSchemaValidation = defaultDbSchemaValidation;
216
		}
217
		this.applicationContextResource = applicationContextResource != null ? applicationContextResource : getClasspathResource();
218
		this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
219

    
220
		setNewDataSource(dataSource, dbSchemaValidation, hibernateConfig, omitTermLoading, listeners);
221
	}
222

    
223

    
224
	/**
225
	 * Sets the application context to a new spring ApplicationContext by using the
226
	 * according data source and initializes the Controller.
227
	 *
228
	 * @param dataSource
229
	 */
230
	private boolean setNewDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
231
	        HibernateConfiguration hibernateConfig,
232
	        boolean omitTermLoading, List<ApplicationListener> listeners){
233

    
234
		if (dbSchemaValidation == null) {
235
			dbSchemaValidation = defaultDbSchemaValidation;
236
		}
237
		logger.info("Connecting to '" + dataSource.getName() + "'");
238

    
239
		MonitoredGenericApplicationContext applicationContext = new MonitoredGenericApplicationContext();
240
		int refreshTasks = 45;
241
		int nTasks = 5 + refreshTasks;
242
		//		nTasks += applicationContext.countTasks();
243
		progressMonitor.beginTask("Connecting to '" + dataSource.getName() + "'", nTasks);
244

    
245
		//		progressMonitor.worked(1);
246

    
247
		BeanDefinition datasourceBean = dataSource.getDatasourceBean();
248
		datasourceBean.setAttribute("isLazy", false);
249
		progressMonitor.subTask("Registering datasource.");
250
		applicationContext.registerBeanDefinition("dataSource", datasourceBean);
251
		progressMonitor.worked(1);
252

    
253
		BeanDefinition hibernatePropBean = dataSource.getHibernatePropertiesBean(dbSchemaValidation, hibernateConfig);
254
		applicationContext.registerBeanDefinition("hibernateProperties", hibernatePropBean);
255

    
256
		XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
257
		progressMonitor.subTask("Registering resources.");
258
		xmlReader.loadBeanDefinitions(applicationContextResource);
259
		progressMonitor.worked(1);
260

    
261
		//omitTerms
262
		if (omitTermLoading == true) {
263
			String initializerName = "persistentTermInitializer";
264
			BeanDefinition beanDef = applicationContext.getBeanDefinition(initializerName);
265
			MutablePropertyValues values = beanDef.getPropertyValues();
266
			values.addPropertyValue("omit", omitTermLoading);
267
		}
268

    
269
		if (listeners != null) {
270
			for (ApplicationListener<?> listener : listeners) {
271
				applicationContext.addApplicationListener(listener);
272
			}
273
		}
274

    
275
		//		String message = "Start application context. This might take a while ...";
276
		////		progressMonitor.subTask(message);
277
		//		SubProgressMonitor subMonitor= new SubProgressMonitor(progressMonitor, 10);
278
		//		subMonitor.beginTask(message, 2);
279
		//		applicationContext.setProgressMonitor(subMonitor);
280

    
281
		applicationContext.refresh(new SubProgressMonitor(progressMonitor, refreshTasks));
282
		applicationContext.start();
283
		//		progressMonitor.worked(1);
284

    
285
		progressMonitor.subTask("Cleaning up.");
286
		setApplicationContext(applicationContext);
287
		progressMonitor.worked(1);
288

    
289
		progressMonitor.done();
290
		return true;
291
	}
292

    
293
	/**
294
     * Overrides all default with values in hibernate config, if defined
295
     * @param hibernatePropBean
296
     * @param hibernateConfig
297
     */
298
    private void registerHibernateConfig(BeanDefinition hibernatePropBean, HibernateConfiguration hibernateConfig) {
299
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_ENVERS,
300
                hibernateConfig.getRegisterEnvers());
301
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_SEARCH,
302
                hibernateConfig.getRegisterSearch());
303
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.SHOW_SQL,
304
                hibernateConfig.getShowSql());
305
        setHibernateProperty(hibernatePropBean, HibernateConfiguration.FORMAT_SQL,
306
                hibernateConfig.getFormatSql());
307
    }
308

    
309

    
310
    private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, Boolean value) {
311
	    if (value != null){
312
	        setHibernateProperty(hibernatePropBean, key, String.valueOf(value));
313
	    }
314
	}
315
    private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, String value) {
316
        if (value != null){
317
            Properties props = (Properties)hibernatePropBean.getPropertyValues().get("properties");
318
            props.setProperty(key, value);
319
        }
320
    }
321

    
322

    
323
	/**
324
	 * Tests if some DefinedTermsAreMissing.
325
	 *
326
	 * @return true, if at least one is missing, else false
327
	 */
328
	public boolean testDefinedTermsAreMissing(){
329
		UUID englishUuid = UUID.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
330
		DefinedTermBase<?> english = this.getTermService().load(englishUuid);
331
		if (english == null || !english.getUuid().equals(englishUuid)) {
332
			return true;
333
		}
334
		else {
335
			return false;
336
		}
337
	}
338

    
339

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

    
350

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

    
362

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

    
375

    
376
	/**
377
	 * Changes the ApplicationContext to the new dataSource
378
	 *
379
	 * @param dataSource
380
	 * @param dbSchemaValidation
381
	 * @param omitTermLoading
382
	 */
383
	public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,
384
			List<ApplicationListener> listeners){
385
		logger.info("Change datasource to : " + dataSource);
386
		return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, listeners);
387
	}
388

    
389

    
390
	/**
391
	 * Sets a new application Context.
392
	 *
393
	 * @param ac
394
	 */
395
	public void setApplicationContext(AbstractApplicationContext ac){
396
		closeApplicationContext(); //closes old application context if necessary
397
		applicationContext = ac;
398
		applicationContext.registerShutdownHook();
399
		init();
400
	}
401

    
402
	@Override
403
	public void finalize(){
404
		close();
405
	}
406

    
407
	/**
408
	 * closes the application
409
	 */
410
	public void close(){
411
		closeApplicationContext();
412
	}
413

    
414

    
415
	/**
416
	 * closes the application context
417
	 */
418
	protected void closeApplicationContext(){
419
		if (applicationContext != null) {
420
			logger.info("Close ApplicationContext");
421
			applicationContext.close();
422
		}
423
	}
424

    
425

    
426
	protected void init(){
427
		logger.debug("Init " + this.getClass().getName() + " ... ");
428
		if (logger.isDebugEnabled()) {
429
			for (String beanName : applicationContext.getBeanDefinitionNames()) {
430
				logger.debug(beanName);
431
			}
432
		}
433
		//TODO delete next row (was just for testing)
434
		if (logger.isInfoEnabled()) {
435
			logger.info("Registered Beans: ");
436
			String[] beanNames = applicationContext.getBeanDefinitionNames();
437
			for (String beanName : beanNames) {
438
				logger.info(beanName);
439
			}
440
		}
441
		configuration = (ICdmRepository) applicationContext.getBean("cdmRepository");
442
		try {
443
			//FIXME:Remoting catching exection to allow for remoting
444
			getDatabaseService().setApplicationController(this);
445
		}
446
		catch (UnsupportedOperationException uoe) {
447
			logger.warn("getDatabaseService() is not implmented for current application context");
448
		}
449
	}
450

    
451

    
452
	/* ****** Services ******** */
453
	@Override
454
	public final IAnnotationService getAnnotationService(){
455
	    return configuration.getAnnotationService();
456
	}
457

    
458
	@Override
459
	public final INameService getNameService(){
460
	    return configuration.getNameService();
461
	}
462

    
463

    
464
	@Override
465
	public final ITaxonService getTaxonService(){
466
		return configuration.getTaxonService();
467
	}
468

    
469

    
470
	@Override
471
	public final IClassificationService getClassificationService(){
472
		return configuration.getClassificationService();
473
	}
474

    
475

    
476
	@Override
477
	public final ITaxonNodeService getTaxonNodeService(){
478
		return configuration.getTaxonNodeService();
479
	}
480

    
481

    
482
	@Override
483
	public final IReferenceService getReferenceService(){
484
		return configuration.getReferenceService();
485
	}
486

    
487

    
488
	@Override
489
	public final IAgentService getAgentService(){
490
		return configuration.getAgentService();
491
	}
492

    
493

    
494
	@Override
495
	public final IDatabaseService getDatabaseService(){
496
		return configuration.getDatabaseService();
497
	}
498

    
499

    
500
	@Override
501
	public final ITermService getTermService(){
502
		return configuration.getTermService();
503
	}
504

    
505

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

    
511

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

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

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

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

    
532

    
533

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

    
539

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

    
545

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

    
551

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

    
557

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

    
563

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

    
569

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

    
575

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

    
581

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

    
587

    
588
	@Override
589
	public final IFeatureTreeService getFeatureTreeService(){
590
		return configuration.getFeatureTreeService();
591
	}
592

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

    
598

    
599
	@Override
600
	public final IFeatureNodeService getFeatureNodeService(){
601
		return configuration.getFeatureNodeService();
602
	}
603

    
604

    
605
	@Override
606
	public final IVocabularyService getVocabularyService(){
607
		return configuration.getVocabularyService();
608
	}
609

    
610

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

    
616

    
617
	@Override
618
	public final IPolytomousKeyService getPolytomousKeyService(){
619
		return configuration.getPolytomousKeyService();
620
	}
621

    
622

    
623
	@Override
624
	public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){
625
		return configuration.getPolytomousKeyNodeService();
626
	}
627

    
628

    
629
    /**
630
     * {@inheritDoc}
631
     */
632
    @Override
633
    public IProgressMonitorService getProgressMonitorService() {
634
        return configuration.getProgressMonitorService();
635
    }
636

    
637

    
638
	@Override
639
	public IEntityValidationService getEntityValidationService(){
640
		return configuration.getEntityValidationService();
641
	}
642

    
643

    
644
	@Override
645
	public IEntityConstraintViolationService getEntityConstraintViolationService(){
646
		return configuration.getEntityConstraintViolationService();
647
	}
648

    
649

    
650
	@Override
651
	public final IService<CdmBase> getMainService(){
652
		return configuration.getMainService();
653
	}
654

    
655

    
656
	@Override
657
	public final IWorkingSetService getWorkingSetService(){
658
		return configuration.getWorkingSetService();
659
	}
660

    
661

    
662
	@Override
663
	public final ConversationHolder NewConversation(){
664
		//return (ConversationHolder)applicationContext.getBean("conversationHolder");
665
		return configuration.NewConversation();
666
	}
667

    
668

    
669
	/* **** Security ***** */
670

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

    
679
	@Override
680
	public final ProviderManager getAuthenticationManager(){
681
		return configuration.getAuthenticationManager();
682
	}
683

    
684

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

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

    
703

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

    
709

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

    
715

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

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

    
726

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

    
731

    
732
	@Override
733
	public TransactionStatus startTransaction(){
734
		return startTransaction(false);
735
	}
736

    
737

    
738
	@Override
739
	public TransactionStatus startTransaction(Boolean readOnly){
740
		return configuration.startTransaction(readOnly);
741
	}
742

    
743
	@Override
744
	public void commitTransaction(TransactionStatus txStatus){
745
		PlatformTransactionManager txManager = configuration.getTransactionManager();
746
		txManager.commit(txStatus);
747
		return;
748
	}
749

    
750

    
751
    /**
752
     * {@inheritDoc}
753
     */
754
    @Override
755
    public IRightsService getRightsService() {
756
        return configuration.getRightsService();
757
    }
758

    
759

    
760
    /**
761
     * {@inheritDoc}
762
     */
763
    @Override
764
    public IRegistrationService getRegistrationService() {
765
        return configuration.getRegistrationService();
766
    }
767

    
768
}
769

    
(2-2/9)