Merge branch 'release/4.10.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.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