1 // $Id: CdmApplicationController.java 11680 2011-04-04 17:07:39Z a.mueller $
3 * Copyright (C) 2007 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.
12 package eu
.etaxonomy
.cdm
.remote
.api
.application
;
14 import java
.util
.UUID
;
16 import org
.apache
.log4j
.Logger
;
17 import org
.springframework
.beans
.factory
.xml
.XmlBeanDefinitionReader
;
18 import org
.springframework
.context
.support
.AbstractApplicationContext
;
19 import org
.springframework
.context
.support
.GenericApplicationContext
;
20 import org
.springframework
.core
.io
.ClassPathResource
;
21 import org
.springframework
.core
.io
.Resource
;
22 import org
.springframework
.security
.access
.PermissionEvaluator
;
23 import org
.springframework
.security
.authentication
.ProviderManager
;
24 import org
.springframework
.security
.authentication
.UsernamePasswordAuthenticationToken
;
25 import org
.springframework
.security
.core
.Authentication
;
26 import org
.springframework
.security
.core
.context
.SecurityContext
;
27 import org
.springframework
.security
.core
.context
.SecurityContextHolder
;
28 import org
.springframework
.transaction
.PlatformTransactionManager
;
29 //import org.springframework.transaction.PlatformTransactionManager;
30 import org
.springframework
.transaction
.TransactionStatus
;
32 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
33 import eu
.etaxonomy
.cdm
.api
.service
.IAgentService
;
34 import eu
.etaxonomy
.cdm
.api
.service
.IClassificationService
;
35 import eu
.etaxonomy
.cdm
.api
.service
.ICollectionService
;
36 import eu
.etaxonomy
.cdm
.api
.service
.ICommonService
;
37 import eu
.etaxonomy
.cdm
.api
.service
.IDatabaseService
;
38 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptionService
;
39 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureNodeService
;
40 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureTreeService
;
41 import eu
.etaxonomy
.cdm
.api
.service
.IGrantedAuthorityService
;
42 import eu
.etaxonomy
.cdm
.api
.service
.IGroupService
;
43 import eu
.etaxonomy
.cdm
.api
.service
.IIdentificationKeyService
;
44 import eu
.etaxonomy
.cdm
.api
.service
.ILocationService
;
45 import eu
.etaxonomy
.cdm
.api
.service
.IMediaService
;
46 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
47 import eu
.etaxonomy
.cdm
.api
.service
.IOccurrenceService
;
48 import eu
.etaxonomy
.cdm
.api
.service
.IPolytomousKeyNodeService
;
49 import eu
.etaxonomy
.cdm
.api
.service
.IPolytomousKeyService
;
50 import eu
.etaxonomy
.cdm
.api
.service
.IReferenceService
;
51 import eu
.etaxonomy
.cdm
.api
.service
.IService
;
52 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonNodeService
;
53 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
54 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
55 import eu
.etaxonomy
.cdm
.api
.service
.IUserService
;
56 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
57 import eu
.etaxonomy
.cdm
.api
.service
.IWorkingSetService
;
58 import eu
.etaxonomy
.cdm
.common
.monitor
.IProgressMonitor
;
59 import eu
.etaxonomy
.cdm
.common
.monitor
.NullProgressMonitor
;
60 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
61 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
62 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.permission
.ICdmPermissionEvaluator
;
70 public class CdmApplicationRemoteController
implements ICdmApplicationRemoteConfiguration
{
71 private static final Logger logger
= Logger
.getLogger(CdmApplicationRemoteController
.class);
73 public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE
= "/eu/etaxonomy/cdm/remotingApplicationContext.xml";
75 public AbstractApplicationContext applicationContext
;
76 private ICdmApplicationRemoteConfiguration configuration
;
77 private Resource applicationContextResource
;
78 private IProgressMonitor progressMonitor
;
81 * Constructor, opens a spring ApplicationContext with defaults
83 public static CdmApplicationRemoteController
NewInstance() {
84 logger
.info("Configure CdmApplicationRemoteController with defaults");
85 return new CdmApplicationRemoteController(null, null);
89 * Constructor, opens a spring ApplicationContext with given application context
90 * @param applicationContextResource
92 public static CdmApplicationRemoteController
NewInstance(Resource applicationContextResource
, IProgressMonitor progressMonitor
) {
93 logger
.info("Configure CdmApplicationRemoteController with given application context");
94 return new CdmApplicationRemoteController(applicationContextResource
, progressMonitor
);
98 * Constructor, starts the application remote controller
99 * @param applicationContextResource
101 private CdmApplicationRemoteController(Resource applicationContextResource
, IProgressMonitor progressMonitor
){
102 logger
.info("Start CdmApplicationRemoteController");
103 this.applicationContextResource
= applicationContextResource
!= null ? applicationContextResource
: new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE
);
104 this.progressMonitor
= progressMonitor
!= null ? progressMonitor
: new NullProgressMonitor();
105 setNewApplicationContext();
109 * Sets the application context to a new spring ApplicationContext and initializes the Controller
111 private boolean setNewApplicationContext(){
112 logger
.info("Set new application context");
113 progressMonitor
.beginTask("Start application context.", 6);
114 progressMonitor
.worked(1);
116 GenericApplicationContext applicationContext
= new GenericApplicationContext();
118 XmlBeanDefinitionReader xmlReader
= new XmlBeanDefinitionReader(applicationContext
);
119 progressMonitor
.subTask("Registering resources.");
120 xmlReader
.loadBeanDefinitions(applicationContextResource
);
121 progressMonitor
.worked(1);
123 progressMonitor
.subTask("This might take a while ...");
124 applicationContext
.refresh();
125 applicationContext
.start();
126 progressMonitor
.worked(1);
128 progressMonitor
.subTask("Cleaning up.");
129 setApplicationContext(applicationContext
);
130 progressMonitor
.done();
135 * Tests if some DefinedTermsAreMissing.
136 * @return true, if at least one is missing, else false
138 public boolean testDefinedTermsAreMissing(){
139 UUID englishUuid
= UUID
.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
140 DefinedTermBase
<?
> english
= this.getTermService().find(englishUuid
);
141 if ( english
== null || ! english
.getUuid().equals(englishUuid
)){
149 * Sets a new application Context.
152 public void setApplicationContext(AbstractApplicationContext ac
){
153 closeApplicationContext(); //closes old application context if necessary
154 applicationContext
= ac
;
155 applicationContext
.registerShutdownHook();
160 * @see java.lang.Object#finalize()
162 public void finalize(){
167 * closes the application
170 closeApplicationContext();
174 * closes the application context
176 private void closeApplicationContext(){
177 if (applicationContext
!= null){
178 logger
.info("Close ApplicationContext");
179 applicationContext
.close();
184 logger
.info("Init " + this.getClass().getName() + " ... ");
185 if (logger
.isInfoEnabled()){for (String beanName
: applicationContext
.getBeanDefinitionNames()){ logger
.debug(beanName
);}}
186 //TODO delete next row (was just for testing)
187 if (logger
.isInfoEnabled()){
188 logger
.info("Registered Beans: ");
189 String
[] beanNames
= applicationContext
.getBeanDefinitionNames();
190 for (String beanName
: beanNames
){
191 logger
.info(beanName
);
194 configuration
= new CdmApplicationRemoteConfiguration();
199 /* ****** Services *********/
201 public final INameService
getNameService(){
202 return configuration
.getNameService();
205 public final ITaxonService
getTaxonService(){
206 return configuration
.getTaxonService();
209 public final IClassificationService
getClassificationService(){
210 return configuration
.getClassificationService();
213 public final ITaxonNodeService
getTaxonNodeService(){
214 return configuration
.getTaxonNodeService();
217 public final IReferenceService
getReferenceService(){
218 return configuration
.getReferenceService();
221 public final IAgentService
getAgentService(){
222 return configuration
.getAgentService();
225 public final ITermService
getTermService(){
226 return configuration
.getTermService();
229 public final IDescriptionService
getDescriptionService(){
230 return configuration
.getDescriptionService();
233 public final IOccurrenceService
getOccurrenceService(){
234 return configuration
.getOccurrenceService();
237 public final IMediaService
getMediaService(){
238 return configuration
.getMediaService();
241 public final ICommonService
getCommonService(){
242 return configuration
.getCommonService();
245 public final ILocationService
getLocationService(){
246 return configuration
.getLocationService();
249 public final IUserService
getUserService(){
250 return configuration
.getUserService();
253 public IGroupService
getGroupService() {
254 return configuration
.getGroupService();
257 public final ICollectionService
getCollectionService(){
258 return configuration
.getCollectionService();
261 public final IFeatureTreeService
getFeatureTreeService(){
262 return configuration
.getFeatureTreeService();
265 public final IFeatureNodeService
getFeatureNodeService(){
266 return configuration
.getFeatureNodeService();
269 public final IVocabularyService
getVocabularyService(){
270 return configuration
.getVocabularyService();
273 public final IIdentificationKeyService
getIdentificationKeyService(){
274 return configuration
.getIdentificationKeyService();
277 public final IPolytomousKeyService
getPolytomousKeyService(){
278 return configuration
.getPolytomousKeyService();
281 public final IPolytomousKeyNodeService
getPolytomousKeyNodeService(){
282 return configuration
.getPolytomousKeyNodeService();
285 public final IService
<CdmBase
> getMainService(){
286 return configuration
.getMainService();
289 public final IWorkingSetService
getWorkingSetService(){
290 return configuration
.getWorkingSetService();
293 // public final Object getBean(String name){
294 // return this.applicationContext.getBean(name);
298 public IDatabaseService
getDatabaseService() {
299 return configuration
.getDatabaseService();
303 public ProviderManager
getAuthenticationManager() {
304 return configuration
.getAuthenticationManager();
310 public ConversationHolder
NewConversation() {
311 return configuration
.NewConversation();
315 public Object
getBean(String name
) {
316 return configuration
.getBean(name
);
320 public IGrantedAuthorityService
getGrantedAuthorityService() {
321 return configuration
.getGrantedAuthorityService();
325 public ICdmPermissionEvaluator
getPermissionEvaluator() {
326 return configuration
.getPermissionEvaluator();
330 public void authenticate(String username
, String password
) {
331 configuration
.authenticate(username
, password
);