3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.api
.application
;
12 import java
.util
.concurrent
.CancellationException
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.springframework
.beans
.BeansException
;
16 import org
.springframework
.beans
.factory
.annotation
.QualifierAnnotationAutowireCandidateResolver
;
17 import org
.springframework
.beans
.factory
.config
.ConfigurableListableBeanFactory
;
18 import org
.springframework
.context
.support
.GenericApplicationContext
;
19 import org
.springframework
.core
.LocalVariableTableParameterNameDiscoverer
;
21 import eu
.etaxonomy
.cdm
.common
.monitor
.IProgressMonitor
;
22 import eu
.etaxonomy
.cdm
.common
.monitor
.SubProgressMonitor
;
25 * {@link GenericApplicationContext Generic application context} which allows progress monitoring.
30 public class MonitoredGenericApplicationContext
extends GenericApplicationContext
{
31 @SuppressWarnings("unused")
32 private static final Logger logger
= Logger
.getLogger(CdmApplicationController
.class);
34 final int countInvokeBeanFactoryPostProcessors
= 10;
35 final int countFinishBeanFactoryInitialization
= 90;
36 private final int countTasks
= countInvokeBeanFactoryPostProcessors
+ countFinishBeanFactoryInitialization
;
37 private IProgressMonitor currentMonitor
;
43 * @param progressMonitor
45 public MonitoredGenericApplicationContext() {
46 // MonitoredListableBeanFactory beanFactory =
47 super(new MonitoredListableBeanFactory());
48 //taken from empty constructor of GenericApplicationContext
49 ((MonitoredListableBeanFactory
)getBeanFactory()).setSerializationId(getId());
50 ((MonitoredListableBeanFactory
)getBeanFactory()).setParameterNameDiscoverer(new LocalVariableTableParameterNameDiscoverer());
51 ((MonitoredListableBeanFactory
)getBeanFactory()).setAutowireCandidateResolver(new QualifierAnnotationAutowireCandidateResolver());
55 public int countTasks(){
59 protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory
){
60 String task
= "Invoke bean factory post processors";
61 currentMonitor
.subTask(task
);
62 super.invokeBeanFactoryPostProcessors(beanFactory
);
64 currentMonitor
.worked(countInvokeBeanFactoryPostProcessors
);
65 checkMonitorCancelled(currentMonitor
);
68 private void checkMonitorCancelled(IProgressMonitor monitor
) {
69 if (monitor
.isCanceled()){
70 throw new CancellationException();
76 protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory
){
77 String task
= "Finish bean factory initialization";
78 currentMonitor
.subTask(task
);
79 IProgressMonitor subMonitor
= new SubProgressMonitor(currentMonitor
, countFinishBeanFactoryInitialization
);
80 getMyBeanFactory().setCurrentMonitor(subMonitor
);
81 super.finishBeanFactoryInitialization(beanFactory
);
82 // currentMonitor.worked();
86 * @param progressMonitor the progressMonitor to set
88 public void setCurrentMonitor(IProgressMonitor monitor
) {
89 this.currentMonitor
= monitor
;
94 * @see org.springframework.context.support.AbstractApplicationContext#refresh()
96 public void refresh(IProgressMonitor monitor
) throws BeansException
, IllegalStateException
{
97 String message
= "Refresh application context. This might take a while ...";
98 // progressMonitor.subTask(message);
99 currentMonitor
= monitor
;
100 // getMyBeanFactory().setMainMonitor(monitor);
101 beginTask(message
, countTasks
);
111 private void taskDone() {
112 if (currentMonitor
!= null){
113 currentMonitor
.done();
122 private void beginTask(String message
, int countTasks
) {
123 if (currentMonitor
!= null){
124 currentMonitor
.beginTask(message
, countTasks
);
129 private MonitoredListableBeanFactory
getMyBeanFactory(){
130 return (MonitoredListableBeanFactory
)getBeanFactory();