Project

General

Profile

Download (25.5 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.IDescriptiveDataSetService;
43
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
44
import eu.etaxonomy.cdm.api.service.IEntityValidationService;
45
import eu.etaxonomy.cdm.api.service.IEventBaseService;
46
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
47
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
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.molecular.IAmplificationService;
72
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
73
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
74
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
75
import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
76
import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;
77
import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
78
import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
79
import eu.etaxonomy.cdm.database.DbSchemaValidation;
80
import eu.etaxonomy.cdm.database.ICdmDataSource;
81
import eu.etaxonomy.cdm.model.common.CdmBase;
82
import eu.etaxonomy.cdm.model.permission.CRUD;
83
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
84
import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
85
import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
86

    
87
/**
88
 * @author a.mueller
89
 */
90
public class CdmApplicationController implements ICdmRepository {
91

    
92
    private static final Logger logger = Logger.getLogger(CdmApplicationController.class);
93

    
94
	public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultApplicationContext.xml";
95

    
96
	public AbstractApplicationContext applicationContext;
97
	protected ICdmRepository configuration;
98
	private final Resource applicationContextResource;
99

    
100
	private final IProgressMonitor progressMonitor;
101

    
102
	final protected static DbSchemaValidation defaultDbSchemaValidation = DbSchemaValidation.VALIDATE;
103

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

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

    
129

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

    
140

    
141
	public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){
142
		return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
143
	}
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
	/**
174
	 * @return
175
	 */
176
	protected static ClassPathResource getClasspathResource(){
177
		return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);
178
	}
179

    
180

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

    
190

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

    
201

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

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

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

    
224

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

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

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

    
246
		//		progressMonitor.worked(1);
247

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

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

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

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

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

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

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

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

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

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

    
310

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

    
323

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

    
340

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

    
351

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

    
363

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

    
376

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

    
390

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

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

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

    
415

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

    
426

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

    
452

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

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

    
464

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

    
470

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

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

    
481

    
482
	@Override
483
	public final ITaxonNodeService getTaxonNodeService(){
484
	    try{
485
	        return configuration.getTaxonNodeService();
486
	    } catch (Exception e){
487
	        e.printStackTrace();
488
	    }
489
	    return null;
490
	}
491

    
492

    
493
	@Override
494
	public final IReferenceService getReferenceService(){
495
		return configuration.getReferenceService();
496
	}
497

    
498

    
499
	@Override
500
	public final IAgentService getAgentService(){
501
		return configuration.getAgentService();
502
	}
503

    
504

    
505
	@Override
506
	public final IDatabaseService getDatabaseService(){
507
		return configuration.getDatabaseService();
508
	}
509

    
510

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

    
516

    
517
	@Override
518
	public final IDescriptionService getDescriptionService(){
519
		return configuration.getDescriptionService();
520
	}
521

    
522

    
523
	@Override
524
	public final IOccurrenceService getOccurrenceService(){
525
		return configuration.getOccurrenceService();
526
	}
527

    
528
	@Override
529
	public IAmplificationService getAmplificationService(){
530
		return configuration.getAmplificationService();
531
	}
532

    
533
	@Override
534
	public ISequenceService getSequenceService(){
535
		return configuration.getSequenceService();
536
	}
537

    
538
	@Override
539
	public IEventBaseService getEventBaseService() {
540
	    return configuration.getEventBaseService();
541
	}
542

    
543

    
544

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

    
550

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

    
556

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

    
562

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

    
568

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

    
574

    
575
	@Override
576
	public final IUserService getUserService(){
577
		return configuration.getUserService();
578
	}
579

    
580

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

    
586

    
587
	@Override
588
	public IGroupService getGroupService(){
589
		return configuration.getGroupService();
590
	}
591

    
592

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

    
598

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

    
604
    @Override
605
    public final ITermTreeService getTermTreeService(){
606
        return configuration.getTermTreeService();
607
    }
608

    
609
	@Override
610
	public final IPreferenceService getPreferenceService(){
611
	    return configuration.getPreferenceService();
612
	}
613

    
614

    
615
	@Override
616
	public final IFeatureNodeService getFeatureNodeService(){
617
		return configuration.getFeatureNodeService();
618
	}
619

    
620
    @Override
621
    public final ITermNodeService getTermNodeService(){
622
        return configuration.getTermNodeService();
623
    }
624

    
625

    
626
	@Override
627
	public final IVocabularyService getVocabularyService(){
628
		return configuration.getVocabularyService();
629
	}
630

    
631

    
632
	@Override
633
	public final IIdentificationKeyService getIdentificationKeyService(){
634
		return configuration.getIdentificationKeyService();
635
	}
636

    
637

    
638
	@Override
639
	public final IPolytomousKeyService getPolytomousKeyService(){
640
		return configuration.getPolytomousKeyService();
641
	}
642

    
643

    
644
	@Override
645
	public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){
646
		return configuration.getPolytomousKeyNodeService();
647
	}
648

    
649

    
650
    /**
651
     * {@inheritDoc}
652
     */
653
    @Override
654
    public IProgressMonitorService getProgressMonitorService() {
655
        return configuration.getProgressMonitorService();
656
    }
657

    
658

    
659
	@Override
660
	public IEntityValidationService getEntityValidationService(){
661
		return configuration.getEntityValidationService();
662
	}
663

    
664

    
665
	@Override
666
	public IEntityConstraintViolationService getEntityConstraintViolationService(){
667
		return configuration.getEntityConstraintViolationService();
668
	}
669

    
670
	@Override
671
	public final IDescriptiveDataSetService getDescriptiveDataSetService(){
672
		return configuration.getDescriptiveDataSetService();
673
	}
674

    
675

    
676
	@Override
677
	public final ConversationHolder NewConversation(){
678
		//return (ConversationHolder)applicationContext.getBean("conversationHolder");
679
		return configuration.NewConversation();
680
	}
681

    
682

    
683
	/* **** Security ***** */
684

    
685
	@Override
686
	public void authenticate(String username, String password){
687
		UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);
688
		Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);
689
		SecurityContext context = SecurityContextHolder.getContext();
690
		context.setAuthentication(authentication);
691
	}
692

    
693
	@Override
694
	public final ProviderManager getAuthenticationManager(){
695
		return configuration.getAuthenticationManager();
696
	}
697

    
698

    
699
	@Override
700
	public ICdmPermissionEvaluator getPermissionEvaluator(){
701
		return configuration.getPermissionEvaluator();
702
	}
703

    
704
	/**
705
	 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication,
706
	 *      java.lang.Object, java.lang.Object)
707
	 *
708
	 * @param targetDomainObject
709
	 * @param permission
710
	 * @return
711
	 */
712
	public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject, EnumSet<CRUD> permission){
713
		SecurityContext context = SecurityContextHolder.getContext();
714
		return getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject, permission);
715
	}
716

    
717

    
718
	@Override
719
	public final PlatformTransactionManager getTransactionManager(){
720
		return configuration.getTransactionManager();
721
	}
722

    
723

    
724
	@Override
725
	public final Object getBean(String name){
726
		return this.applicationContext.getBean(name);
727
	}
728

    
729

    
730
	/*
731
	 * OLD TRANSACTION STUFF
732
	 */
733

    
734
	/* **** flush ********** */
735
	public void flush(){
736
		SessionFactory sf = (SessionFactory) applicationContext.getBean("sessionFactory");
737
		sf.getCurrentSession().flush();
738
	}
739

    
740

    
741
	public SessionFactory getSessionFactory(){
742
		return (SessionFactory) applicationContext.getBean("sessionFactory");
743
	}
744

    
745

    
746
	@Override
747
	public TransactionStatus startTransaction(){
748
		return startTransaction(false);
749
	}
750

    
751

    
752
	@Override
753
	public TransactionStatus startTransaction(Boolean readOnly){
754
		return configuration.startTransaction(readOnly);
755
	}
756

    
757
	@Override
758
	public void commitTransaction(TransactionStatus txStatus){
759
		PlatformTransactionManager txManager = configuration.getTransactionManager();
760
		txManager.commit(txStatus);
761
		return;
762
	}
763

    
764
    @Override
765
    public void rollbackTransaction(TransactionStatus txStatus){
766
        PlatformTransactionManager txManager = configuration.getTransactionManager();
767
        txManager.rollback(txStatus);
768
        return;
769
    }
770

    
771

    
772
    /**
773
     * {@inheritDoc}
774
     */
775
    @Override
776
    public IRightsService getRightsService() {
777
        return configuration.getRightsService();
778
    }
779

    
780

    
781
    /**
782
     * {@inheritDoc}
783
     */
784
    @Override
785
    public IRegistrationService getRegistrationService() {
786
        return configuration.getRegistrationService();
787
    }
788

    
789
}
790

    
(3-3/12)