Merge branch 'release/5.1.0'
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / application / CdmApplicationController.java
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.ITermService;
66 import eu.etaxonomy.cdm.api.service.IUserService;
67 import eu.etaxonomy.cdm.api.service.IVocabularyService;
68 import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
69 import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
70 import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
71 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
72 import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
73 import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;
74 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
75 import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
76 import eu.etaxonomy.cdm.database.DbSchemaValidation;
77 import eu.etaxonomy.cdm.database.ICdmDataSource;
78 import eu.etaxonomy.cdm.model.common.CdmBase;
79 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
80 import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
81 import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
82 import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
83
84 /**
85 * @author a.mueller
86 */
87 public class CdmApplicationController implements ICdmRepository {
88 private static final Logger logger = Logger.getLogger(CdmApplicationController.class);
89
90 public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultApplicationContext.xml";
91
92 public AbstractApplicationContext applicationContext;
93 protected ICdmRepository configuration;
94 private final Resource applicationContextResource;
95
96 private final IProgressMonitor progressMonitor;
97
98 final protected static DbSchemaValidation defaultDbSchemaValidation = DbSchemaValidation.VALIDATE;
99
100
101 /**
102 * Constructor, opens a spring ApplicationContext by using the default data source
103 *
104 * @throws DataSourceNotFoundException
105 */
106 public static CdmApplicationController NewInstance() throws DataSourceNotFoundException{
107 logger.info("Start CdmApplicationController with default data source");
108 CdmPersistentDataSource dataSource = getDefaultDatasource();
109 DbSchemaValidation dbSchemaValidation = defaultDbSchemaValidation;
110 return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
111 }
112
113
114 /**
115 * Constructor, opens a spring ApplicationContext by using the default data source
116 *
117 * @param dbSchemaValidation
118 * validation type for database schema
119 * @throws DataSourceNotFoundException
120 */
121 public static CdmApplicationController NewInstance(DbSchemaValidation dbSchemaValidation) throws DataSourceNotFoundException{
122 logger.info("Start CdmApplicationController with default data source");
123 CdmPersistentDataSource dataSource = getDefaultDatasource();
124 return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
125 }
126
127
128 /**
129 * Constructor, opens an spring ApplicationContext by using the according data source
130 * and the default database schema validation type
131 *
132 * @param dataSource
133 */
134 public static CdmApplicationController NewInstance(ICdmDataSource dataSource){
135 return CdmApplicationController.NewInstance(null, dataSource, defaultDbSchemaValidation, false);
136 }
137
138
139 public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){
140 return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
141 }
142
143
144 public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){
145 return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, omitTermLoading);
146 }
147
148 public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,
149 DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){
150 return CdmApplicationController.NewInstance(applicationContextResource, dataSource, dbSchemaValidation,
151 null, omitTermLoading, null);
152 }
153 public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,
154 DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor){
155 return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation,
156 null, omitTermLoading, progressMonitor, null);
157 }
158 public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,
159 DbSchemaValidation dbSchemaValidation, HibernateConfiguration hibernateConfig,
160 boolean omitTermLoading, IProgressMonitor progressMonitor){
161 return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation,
162 hibernateConfig, omitTermLoading, progressMonitor, null);
163 }
164
165
166 //TODO discuss need for listeners before commit to trunk
167 // public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners) {
168 // return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, progressMonitor,listeners);
169 // }
170
171 /**
172 * @return
173 */
174 protected static ClassPathResource getClasspathResource(){
175 return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);
176 }
177
178
179 /**
180 * @return
181 * @throws DataSourceNotFoundException
182 */
183 protected static CdmPersistentDataSource getDefaultDatasource() throws DataSourceNotFoundException{
184 CdmPersistentDataSource dataSource = CdmPersistentDataSource.NewDefaultInstance();
185 return dataSource;
186 }
187
188
189 /**
190 *
191 * FIXME:Remoting this constructor is added only to allow extension of this cntroller
192 * class. and should be removed after refactoring
193 */
194 protected CdmApplicationController(){
195 applicationContextResource = null;
196 progressMonitor = null;
197 }
198
199
200 /**
201 * Constructor, opens an spring 2.5 ApplicationContext by using the according data
202 * source
203 *
204 * @param dataSource
205 * @param dbSchemaValidation
206 * @param omitTermLoading
207 */
208 protected CdmApplicationController(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
209 HibernateConfiguration hibernateConfig,
210 boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners){
211 logger.info("Start CdmApplicationController with datasource: " + dataSource.getName());
212
213 if (dbSchemaValidation == null) {
214 dbSchemaValidation = defaultDbSchemaValidation;
215 }
216 this.applicationContextResource = applicationContextResource != null ? applicationContextResource : getClasspathResource();
217 this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
218
219 setNewDataSource(dataSource, dbSchemaValidation, hibernateConfig, omitTermLoading, listeners);
220 }
221
222
223 /**
224 * Sets the application context to a new spring ApplicationContext by using the
225 * according data source and initializes the Controller.
226 *
227 * @param dataSource
228 */
229 private boolean setNewDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,
230 HibernateConfiguration hibernateConfig,
231 boolean omitTermLoading, List<ApplicationListener> listeners){
232
233 if (dbSchemaValidation == null) {
234 dbSchemaValidation = defaultDbSchemaValidation;
235 }
236 logger.info("Connecting to '" + dataSource.getName() + "'");
237
238 MonitoredGenericApplicationContext applicationContext = new MonitoredGenericApplicationContext();
239 int refreshTasks = 45;
240 int nTasks = 5 + refreshTasks;
241 // nTasks += applicationContext.countTasks();
242 progressMonitor.beginTask("Connecting to '" + dataSource.getName() + "'", nTasks);
243
244 // progressMonitor.worked(1);
245
246 BeanDefinition datasourceBean = dataSource.getDatasourceBean();
247 datasourceBean.setAttribute("isLazy", false);
248 progressMonitor.subTask("Registering datasource.");
249 applicationContext.registerBeanDefinition("dataSource", datasourceBean);
250 progressMonitor.worked(1);
251
252 BeanDefinition hibernatePropBean = dataSource.getHibernatePropertiesBean(dbSchemaValidation, hibernateConfig);
253 applicationContext.registerBeanDefinition("hibernateProperties", hibernatePropBean);
254
255 XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
256 progressMonitor.subTask("Registering resources.");
257 xmlReader.loadBeanDefinitions(applicationContextResource);
258 progressMonitor.worked(1);
259
260 //omitTerms
261 if (omitTermLoading == true) {
262 String initializerName = "persistentTermInitializer";
263 BeanDefinition beanDef = applicationContext.getBeanDefinition(initializerName);
264 MutablePropertyValues values = beanDef.getPropertyValues();
265 values.addPropertyValue("omit", omitTermLoading);
266 }
267
268 if (listeners != null) {
269 for (ApplicationListener<?> listener : listeners) {
270 applicationContext.addApplicationListener(listener);
271 }
272 }
273
274 // String message = "Start application context. This might take a while ...";
275 //// progressMonitor.subTask(message);
276 // SubProgressMonitor subMonitor= new SubProgressMonitor(progressMonitor, 10);
277 // subMonitor.beginTask(message, 2);
278 // applicationContext.setProgressMonitor(subMonitor);
279
280 applicationContext.refresh(new SubProgressMonitor(progressMonitor, refreshTasks));
281 applicationContext.start();
282 // progressMonitor.worked(1);
283
284 progressMonitor.subTask("Cleaning up.");
285 setApplicationContext(applicationContext);
286 progressMonitor.worked(1);
287
288 progressMonitor.done();
289 return true;
290 }
291
292 /**
293 * Overrides all default with values in hibernate config, if defined
294 * @param hibernatePropBean
295 * @param hibernateConfig
296 */
297 private void registerHibernateConfig(BeanDefinition hibernatePropBean, HibernateConfiguration hibernateConfig) {
298 setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_ENVERS,
299 hibernateConfig.getRegisterEnvers());
300 setHibernateProperty(hibernatePropBean, HibernateConfiguration.REGISTER_SEARCH,
301 hibernateConfig.getRegisterSearch());
302 setHibernateProperty(hibernatePropBean, HibernateConfiguration.SHOW_SQL,
303 hibernateConfig.getShowSql());
304 setHibernateProperty(hibernatePropBean, HibernateConfiguration.FORMAT_SQL,
305 hibernateConfig.getFormatSql());
306 }
307
308
309 private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, Boolean value) {
310 if (value != null){
311 setHibernateProperty(hibernatePropBean, key, String.valueOf(value));
312 }
313 }
314 private void setHibernateProperty(BeanDefinition hibernatePropBean, String key, String value) {
315 if (value != null){
316 Properties props = (Properties)hibernatePropBean.getPropertyValues().get("properties");
317 props.setProperty(key, value);
318 }
319 }
320
321
322 /**
323 * Tests if some DefinedTermsAreMissing.
324 *
325 * @return true, if at least one is missing, else false
326 */
327 public boolean testDefinedTermsAreMissing(){
328 UUID englishUuid = UUID.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
329 DefinedTermBase<?> english = this.getTermService().load(englishUuid);
330 if (english == null || !english.getUuid().equals(englishUuid)) {
331 return true;
332 }
333 else {
334 return false;
335 }
336 }
337
338
339 /**
340 * Changes the ApplicationContext to the new dataSource
341 *
342 * @param dataSource
343 */
344 public boolean changeDataSource(ICdmDataSource dataSource){
345 //logger.info("Change datasource to : " + dataSource);
346 return setNewDataSource(dataSource, DbSchemaValidation.VALIDATE, null, false, null);
347 }
348
349
350 /**
351 * Changes the ApplicationContext to the new dataSource
352 *
353 * @param dataSource
354 * @param dbSchemaValidation
355 */
356 public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){
357 //logger.info("Change datasource to : " + dataSource);
358 return setNewDataSource(dataSource, dbSchemaValidation, null, false, 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 logger.info("Change datasource to : " + dataSource);
371 return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, null);
372 }
373
374
375 /**
376 * Changes the ApplicationContext to the new dataSource
377 *
378 * @param dataSource
379 * @param dbSchemaValidation
380 * @param omitTermLoading
381 */
382 public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,
383 List<ApplicationListener> listeners){
384 logger.info("Change datasource to : " + dataSource);
385 return setNewDataSource(dataSource, dbSchemaValidation, null, omitTermLoading, listeners);
386 }
387
388
389 /**
390 * Sets a new application Context.
391 *
392 * @param ac
393 */
394 public void setApplicationContext(AbstractApplicationContext ac){
395 closeApplicationContext(); //closes old application context if necessary
396 applicationContext = ac;
397 applicationContext.registerShutdownHook();
398 init();
399 }
400
401 @Override
402 public void finalize(){
403 close();
404 }
405
406 /**
407 * closes the application
408 */
409 public void close(){
410 closeApplicationContext();
411 }
412
413
414 /**
415 * closes the application context
416 */
417 protected void closeApplicationContext(){
418 if (applicationContext != null) {
419 logger.info("Close ApplicationContext");
420 applicationContext.close();
421 }
422 }
423
424
425 protected void init(){
426 logger.debug("Init " + this.getClass().getName() + " ... ");
427 if (logger.isDebugEnabled()) {
428 for (String beanName : applicationContext.getBeanDefinitionNames()) {
429 logger.debug(beanName);
430 }
431 }
432 //TODO delete next row (was just for testing)
433 if (logger.isInfoEnabled()) {
434 logger.info("Registered Beans: ");
435 String[] beanNames = applicationContext.getBeanDefinitionNames();
436 for (String beanName : beanNames) {
437 logger.info(beanName);
438 }
439 }
440 configuration = (ICdmRepository) applicationContext.getBean("cdmRepository");
441 try {
442 //FIXME:Remoting catching exection to allow for remoting
443 getDatabaseService().setApplicationController(this);
444 }
445 catch (UnsupportedOperationException uoe) {
446 logger.warn("getDatabaseService() is not implmented for current application context");
447 }
448 }
449
450
451 /* ****** Services ******** */
452 @Override
453 public final IAnnotationService getAnnotationService(){
454 return configuration.getAnnotationService();
455 }
456
457 @Override
458 public final INameService getNameService(){
459 return configuration.getNameService();
460 }
461
462
463 @Override
464 public final ITaxonService getTaxonService(){
465 return configuration.getTaxonService();
466 }
467
468
469 @Override
470 public final IClassificationService getClassificationService(){
471 return configuration.getClassificationService();
472 }
473
474
475 @Override
476 public final ITaxonNodeService getTaxonNodeService(){
477 try{
478 return configuration.getTaxonNodeService();
479 } catch (Exception e){
480 e.printStackTrace();
481 }
482 return null;
483 }
484
485
486 @Override
487 public final IReferenceService getReferenceService(){
488 return configuration.getReferenceService();
489 }
490
491
492 @Override
493 public final IAgentService getAgentService(){
494 return configuration.getAgentService();
495 }
496
497
498 @Override
499 public final IDatabaseService getDatabaseService(){
500 return configuration.getDatabaseService();
501 }
502
503
504 @Override
505 public final ITermService getTermService(){
506 return configuration.getTermService();
507 }
508
509
510 @Override
511 public final IDescriptionService getDescriptionService(){
512 return configuration.getDescriptionService();
513 }
514
515
516 @Override
517 public final IOccurrenceService getOccurrenceService(){
518 return configuration.getOccurrenceService();
519 }
520
521 @Override
522 public IAmplificationService getAmplificationService(){
523 return configuration.getAmplificationService();
524 }
525
526 @Override
527 public ISequenceService getSequenceService(){
528 return configuration.getSequenceService();
529 }
530
531 @Override
532 public IEventBaseService getEventBaseService() {
533 return configuration.getEventBaseService();
534 }
535
536
537
538 @Override
539 public final IPrimerService getPrimerService(){
540 return configuration.getPrimerService();
541 }
542
543
544 @Override
545 public final IMediaService getMediaService(){
546 return configuration.getMediaService();
547 }
548
549
550 @Override
551 public final IMetadataService getMetadataService(){
552 return configuration.getMetadataService();
553 }
554
555
556 @Override
557 public final ICommonService getCommonService(){
558 return configuration.getCommonService();
559 }
560
561
562 @Override
563 public final ILocationService getLocationService(){
564 return configuration.getLocationService();
565 }
566
567
568 @Override
569 public final IUserService getUserService(){
570 return configuration.getUserService();
571 }
572
573
574 @Override
575 public final IGrantedAuthorityService getGrantedAuthorityService(){
576 return configuration.getGrantedAuthorityService();
577 }
578
579
580 @Override
581 public IGroupService getGroupService(){
582 return configuration.getGroupService();
583 }
584
585
586 @Override
587 public final ICollectionService getCollectionService(){
588 return configuration.getCollectionService();
589 }
590
591
592 @Override
593 public final IFeatureTreeService getFeatureTreeService(){
594 return configuration.getFeatureTreeService();
595 }
596
597 @Override
598 public final IPreferenceService getPreferenceService(){
599 return configuration.getPreferenceService();
600 }
601
602
603 @Override
604 public final IFeatureNodeService getFeatureNodeService(){
605 return configuration.getFeatureNodeService();
606 }
607
608
609 @Override
610 public final IVocabularyService getVocabularyService(){
611 return configuration.getVocabularyService();
612 }
613
614
615 @Override
616 public final IIdentificationKeyService getIdentificationKeyService(){
617 return configuration.getIdentificationKeyService();
618 }
619
620
621 @Override
622 public final IPolytomousKeyService getPolytomousKeyService(){
623 return configuration.getPolytomousKeyService();
624 }
625
626
627 @Override
628 public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){
629 return configuration.getPolytomousKeyNodeService();
630 }
631
632
633 /**
634 * {@inheritDoc}
635 */
636 @Override
637 public IProgressMonitorService getProgressMonitorService() {
638 return configuration.getProgressMonitorService();
639 }
640
641
642 @Override
643 public IEntityValidationService getEntityValidationService(){
644 return configuration.getEntityValidationService();
645 }
646
647
648 @Override
649 public IEntityConstraintViolationService getEntityConstraintViolationService(){
650 return configuration.getEntityConstraintViolationService();
651 }
652
653 @Override
654 public final IDescriptiveDataSetService getDescriptiveDataSetService(){
655 return configuration.getDescriptiveDataSetService();
656 }
657
658
659 @Override
660 public final ConversationHolder NewConversation(){
661 //return (ConversationHolder)applicationContext.getBean("conversationHolder");
662 return configuration.NewConversation();
663 }
664
665
666 /* **** Security ***** */
667
668 @Override
669 public void authenticate(String username, String password){
670 UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);
671 Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);
672 SecurityContext context = SecurityContextHolder.getContext();
673 context.setAuthentication(authentication);
674 }
675
676 @Override
677 public final ProviderManager getAuthenticationManager(){
678 return configuration.getAuthenticationManager();
679 }
680
681
682 @Override
683 public ICdmPermissionEvaluator getPermissionEvaluator(){
684 return configuration.getPermissionEvaluator();
685 }
686
687 /**
688 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication,
689 * java.lang.Object, java.lang.Object)
690 *
691 * @param targetDomainObject
692 * @param permission
693 * @return
694 */
695 public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject, EnumSet<CRUD> permission){
696 SecurityContext context = SecurityContextHolder.getContext();
697 return getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject, permission);
698 }
699
700
701 @Override
702 public final PlatformTransactionManager getTransactionManager(){
703 return configuration.getTransactionManager();
704 }
705
706
707 @Override
708 public final Object getBean(String name){
709 return this.applicationContext.getBean(name);
710 }
711
712
713 /*
714 * OLD TRANSACTION STUFF
715 */
716
717 /* **** flush ********** */
718 public void flush(){
719 SessionFactory sf = (SessionFactory) applicationContext.getBean("sessionFactory");
720 sf.getCurrentSession().flush();
721 }
722
723
724 public SessionFactory getSessionFactory(){
725 return (SessionFactory) applicationContext.getBean("sessionFactory");
726 }
727
728
729 @Override
730 public TransactionStatus startTransaction(){
731 return startTransaction(false);
732 }
733
734
735 @Override
736 public TransactionStatus startTransaction(Boolean readOnly){
737 return configuration.startTransaction(readOnly);
738 }
739
740 @Override
741 public void commitTransaction(TransactionStatus txStatus){
742 PlatformTransactionManager txManager = configuration.getTransactionManager();
743 txManager.commit(txStatus);
744 return;
745 }
746
747
748 /**
749 * {@inheritDoc}
750 */
751 @Override
752 public IRightsService getRightsService() {
753 return configuration.getRightsService();
754 }
755
756
757 /**
758 * {@inheritDoc}
759 */
760 @Override
761 public IRegistrationService getRegistrationService() {
762 return configuration.getRegistrationService();
763 }
764
765 }
766