add rollback to ICdmRepository and use in TaxonNodeOutStreamPartitioner
[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.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.molecular.IAmplificationService;
71 import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
72 import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
73 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
74 import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
75 import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;
76 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
77 import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
78 import eu.etaxonomy.cdm.database.DbSchemaValidation;
79 import eu.etaxonomy.cdm.database.ICdmDataSource;
80 import eu.etaxonomy.cdm.model.common.CdmBase;
81 import eu.etaxonomy.cdm.model.permission.CRUD;
82 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
83 import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
84 import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
85
86 /**
87 * @author a.mueller
88 */
89 public class CdmApplicationController implements ICdmRepository {
90 private static final Logger logger = Logger.getLogger(CdmApplicationController.class);
91
92 public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/defaultApplicationContext.xml";
93
94 public AbstractApplicationContext applicationContext;
95 protected ICdmRepository configuration;
96 private final Resource applicationContextResource;
97
98 private final IProgressMonitor progressMonitor;
99
100 final protected static DbSchemaValidation defaultDbSchemaValidation = DbSchemaValidation.VALIDATE;
101
102
103 /**
104 * Constructor, opens a spring ApplicationContext by using the default data source
105 *
106 * @throws DataSourceNotFoundException
107 */
108 public static CdmApplicationController NewInstance() throws DataSourceNotFoundException{
109 logger.info("Start CdmApplicationController with default data source");
110 CdmPersistentDataSource dataSource = getDefaultDatasource();
111 DbSchemaValidation dbSchemaValidation = defaultDbSchemaValidation;
112 return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);
113 }
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
477 @Override
478 public final ITaxonNodeService getTaxonNodeService(){
479 try{
480 return configuration.getTaxonNodeService();
481 } catch (Exception e){
482 e.printStackTrace();
483 }
484 return null;
485 }
486
487
488 @Override
489 public final IReferenceService getReferenceService(){
490 return configuration.getReferenceService();
491 }
492
493
494 @Override
495 public final IAgentService getAgentService(){
496 return configuration.getAgentService();
497 }
498
499
500 @Override
501 public final IDatabaseService getDatabaseService(){
502 return configuration.getDatabaseService();
503 }
504
505
506 @Override
507 public final ITermService getTermService(){
508 return configuration.getTermService();
509 }
510
511
512 @Override
513 public final IDescriptionService getDescriptionService(){
514 return configuration.getDescriptionService();
515 }
516
517
518 @Override
519 public final IOccurrenceService getOccurrenceService(){
520 return configuration.getOccurrenceService();
521 }
522
523 @Override
524 public IAmplificationService getAmplificationService(){
525 return configuration.getAmplificationService();
526 }
527
528 @Override
529 public ISequenceService getSequenceService(){
530 return configuration.getSequenceService();
531 }
532
533 @Override
534 public IEventBaseService getEventBaseService() {
535 return configuration.getEventBaseService();
536 }
537
538
539
540 @Override
541 public final IPrimerService getPrimerService(){
542 return configuration.getPrimerService();
543 }
544
545
546 @Override
547 public final IMediaService getMediaService(){
548 return configuration.getMediaService();
549 }
550
551
552 @Override
553 public final IMetadataService getMetadataService(){
554 return configuration.getMetadataService();
555 }
556
557
558 @Override
559 public final ICommonService getCommonService(){
560 return configuration.getCommonService();
561 }
562
563
564 @Override
565 public final ILocationService getLocationService(){
566 return configuration.getLocationService();
567 }
568
569
570 @Override
571 public final IUserService getUserService(){
572 return configuration.getUserService();
573 }
574
575
576 @Override
577 public final IGrantedAuthorityService getGrantedAuthorityService(){
578 return configuration.getGrantedAuthorityService();
579 }
580
581
582 @Override
583 public IGroupService getGroupService(){
584 return configuration.getGroupService();
585 }
586
587
588 @Override
589 public final ICollectionService getCollectionService(){
590 return configuration.getCollectionService();
591 }
592
593
594 @Override
595 public final IFeatureTreeService getFeatureTreeService(){
596 return configuration.getFeatureTreeService();
597 }
598
599 @Override
600 public final ITermTreeService getTermTreeService(){
601 return configuration.getTermTreeService();
602 }
603
604 @Override
605 public final IPreferenceService getPreferenceService(){
606 return configuration.getPreferenceService();
607 }
608
609
610 @Override
611 public final IFeatureNodeService getFeatureNodeService(){
612 return configuration.getFeatureNodeService();
613 }
614
615 @Override
616 public final ITermNodeService getTermNodeService(){
617 return configuration.getTermNodeService();
618 }
619
620
621 @Override
622 public final IVocabularyService getVocabularyService(){
623 return configuration.getVocabularyService();
624 }
625
626
627 @Override
628 public final IIdentificationKeyService getIdentificationKeyService(){
629 return configuration.getIdentificationKeyService();
630 }
631
632
633 @Override
634 public final IPolytomousKeyService getPolytomousKeyService(){
635 return configuration.getPolytomousKeyService();
636 }
637
638
639 @Override
640 public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){
641 return configuration.getPolytomousKeyNodeService();
642 }
643
644
645 /**
646 * {@inheritDoc}
647 */
648 @Override
649 public IProgressMonitorService getProgressMonitorService() {
650 return configuration.getProgressMonitorService();
651 }
652
653
654 @Override
655 public IEntityValidationService getEntityValidationService(){
656 return configuration.getEntityValidationService();
657 }
658
659
660 @Override
661 public IEntityConstraintViolationService getEntityConstraintViolationService(){
662 return configuration.getEntityConstraintViolationService();
663 }
664
665 @Override
666 public final IDescriptiveDataSetService getDescriptiveDataSetService(){
667 return configuration.getDescriptiveDataSetService();
668 }
669
670
671 @Override
672 public final ConversationHolder NewConversation(){
673 //return (ConversationHolder)applicationContext.getBean("conversationHolder");
674 return configuration.NewConversation();
675 }
676
677
678 /* **** Security ***** */
679
680 @Override
681 public void authenticate(String username, String password){
682 UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);
683 Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);
684 SecurityContext context = SecurityContextHolder.getContext();
685 context.setAuthentication(authentication);
686 }
687
688 @Override
689 public final ProviderManager getAuthenticationManager(){
690 return configuration.getAuthenticationManager();
691 }
692
693
694 @Override
695 public ICdmPermissionEvaluator getPermissionEvaluator(){
696 return configuration.getPermissionEvaluator();
697 }
698
699 /**
700 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication,
701 * java.lang.Object, java.lang.Object)
702 *
703 * @param targetDomainObject
704 * @param permission
705 * @return
706 */
707 public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject, EnumSet<CRUD> permission){
708 SecurityContext context = SecurityContextHolder.getContext();
709 return getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject, permission);
710 }
711
712
713 @Override
714 public final PlatformTransactionManager getTransactionManager(){
715 return configuration.getTransactionManager();
716 }
717
718
719 @Override
720 public final Object getBean(String name){
721 return this.applicationContext.getBean(name);
722 }
723
724
725 /*
726 * OLD TRANSACTION STUFF
727 */
728
729 /* **** flush ********** */
730 public void flush(){
731 SessionFactory sf = (SessionFactory) applicationContext.getBean("sessionFactory");
732 sf.getCurrentSession().flush();
733 }
734
735
736 public SessionFactory getSessionFactory(){
737 return (SessionFactory) applicationContext.getBean("sessionFactory");
738 }
739
740
741 @Override
742 public TransactionStatus startTransaction(){
743 return startTransaction(false);
744 }
745
746
747 @Override
748 public TransactionStatus startTransaction(Boolean readOnly){
749 return configuration.startTransaction(readOnly);
750 }
751
752 @Override
753 public void commitTransaction(TransactionStatus txStatus){
754 PlatformTransactionManager txManager = configuration.getTransactionManager();
755 txManager.commit(txStatus);
756 return;
757 }
758
759 @Override
760 public void rollback(TransactionStatus txStatus){
761 PlatformTransactionManager txManager = configuration.getTransactionManager();
762 txManager.rollback(txStatus);
763 return;
764 }
765
766
767 /**
768 * {@inheritDoc}
769 */
770 @Override
771 public IRightsService getRightsService() {
772 return configuration.getRightsService();
773 }
774
775
776 /**
777 * {@inheritDoc}
778 */
779 @Override
780 public IRegistrationService getRegistrationService() {
781 return configuration.getRegistrationService();
782 }
783
784 }
785