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
;
69 public class CdmApplicationRemoteController
implements ICdmApplicationRemoteConfiguration
{
70 private static final Logger logger
= Logger
.getLogger(CdmApplicationRemoteController
.class);
72 public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE
= "/eu/etaxonomy/cdm/remotingApplicationContext.xml";
74 public AbstractApplicationContext applicationContext
;
75 private ICdmApplicationRemoteConfiguration configuration
;
76 private Resource applicationContextResource
;
77 private IProgressMonitor progressMonitor
;
80 * Constructor, opens a spring ApplicationContext with defaults
82 public static CdmApplicationRemoteController
NewInstance() {
83 logger
.info("Configure CdmApplicationRemoteController with defaults");
84 return new CdmApplicationRemoteController(null, null);
88 * Constructor, opens a spring ApplicationContext with given application context
89 * @param applicationContextResource
91 public static CdmApplicationRemoteController
NewInstance(Resource applicationContextResource
, IProgressMonitor progressMonitor
) {
92 logger
.info("Configure CdmApplicationRemoteController with given application context");
93 return new CdmApplicationRemoteController(applicationContextResource
, progressMonitor
);
97 * Constructor, starts the application remote controller
98 * @param applicationContextResource
100 private CdmApplicationRemoteController(Resource applicationContextResource
, IProgressMonitor progressMonitor
){
101 logger
.info("Start CdmApplicationRemoteController");
102 this.applicationContextResource
= applicationContextResource
!= null ? applicationContextResource
: new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE
);
103 this.progressMonitor
= progressMonitor
!= null ? progressMonitor
: new NullProgressMonitor();
104 setNewApplicationContext();
108 * Sets the application context to a new spring ApplicationContext and initializes the Controller
110 private boolean setNewApplicationContext(){
111 logger
.info("Set new application context");
112 progressMonitor
.beginTask("Start application context.", 6);
113 progressMonitor
.worked(1);
115 GenericApplicationContext applicationContext
= new GenericApplicationContext();
117 XmlBeanDefinitionReader xmlReader
= new XmlBeanDefinitionReader(applicationContext
);
118 progressMonitor
.subTask("Registering resources.");
119 xmlReader
.loadBeanDefinitions(applicationContextResource
);
120 progressMonitor
.worked(1);
122 progressMonitor
.subTask("This might take a while ...");
123 applicationContext
.refresh();
124 applicationContext
.start();
125 progressMonitor
.worked(1);
127 progressMonitor
.subTask("Cleaning up.");
128 setApplicationContext(applicationContext
);
129 progressMonitor
.done();
134 * Tests if some DefinedTermsAreMissing.
135 * @return true, if at least one is missing, else false
137 public boolean testDefinedTermsAreMissing(){
138 UUID englishUuid
= UUID
.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
139 DefinedTermBase
<?
> english
= this.getTermService().find(englishUuid
);
140 if ( english
== null || ! english
.getUuid().equals(englishUuid
)){
148 * Sets a new application Context.
151 public void setApplicationContext(AbstractApplicationContext ac
){
152 closeApplicationContext(); //closes old application context if necessary
153 applicationContext
= ac
;
154 applicationContext
.registerShutdownHook();
159 * @see java.lang.Object#finalize()
161 public void finalize(){
166 * closes the application
169 closeApplicationContext();
173 * closes the application context
175 private void closeApplicationContext(){
176 if (applicationContext
!= null){
177 logger
.info("Close ApplicationContext");
178 applicationContext
.close();
183 logger
.info("Init " + this.getClass().getName() + " ... ");
184 if (logger
.isInfoEnabled()){for (String beanName
: applicationContext
.getBeanDefinitionNames()){ logger
.debug(beanName
);}}
185 //TODO delete next row (was just for testing)
186 if (logger
.isInfoEnabled()){
187 logger
.info("Registered Beans: ");
188 String
[] beanNames
= applicationContext
.getBeanDefinitionNames();
189 for (String beanName
: beanNames
){
190 logger
.info(beanName
);
193 configuration
= new CdmApplicationRemoteDefaultConfiguration();
198 /* ****** Services *********/
200 public final INameService
getNameService(){
201 return configuration
.getNameService();
204 public final ITaxonService
getTaxonService(){
205 return configuration
.getTaxonService();
208 public final IClassificationService
getClassificationService(){
209 return configuration
.getClassificationService();
212 public final ITaxonNodeService
getTaxonNodeService(){
213 return configuration
.getTaxonNodeService();
216 public final IReferenceService
getReferenceService(){
217 return configuration
.getReferenceService();
220 public final IAgentService
getAgentService(){
221 return configuration
.getAgentService();
224 public final ITermService
getTermService(){
225 return configuration
.getTermService();
228 public final IDescriptionService
getDescriptionService(){
229 return configuration
.getDescriptionService();
232 public final IOccurrenceService
getOccurrenceService(){
233 return configuration
.getOccurrenceService();
236 public final IMediaService
getMediaService(){
237 return configuration
.getMediaService();
240 public final ICommonService
getCommonService(){
241 return configuration
.getCommonService();
244 public final ILocationService
getLocationService(){
245 return configuration
.getLocationService();
248 public final IUserService
getUserService(){
249 return configuration
.getUserService();
252 public IGroupService
getGroupService() {
253 return configuration
.getGroupService();
256 public final ICollectionService
getCollectionService(){
257 return configuration
.getCollectionService();
260 public final IFeatureTreeService
getFeatureTreeService(){
261 return configuration
.getFeatureTreeService();
264 public final IFeatureNodeService
getFeatureNodeService(){
265 return configuration
.getFeatureNodeService();
268 public final IVocabularyService
getVocabularyService(){
269 return configuration
.getVocabularyService();
272 public final IIdentificationKeyService
getIdentificationKeyService(){
273 return configuration
.getIdentificationKeyService();
276 public final IPolytomousKeyService
getPolytomousKeyService(){
277 return configuration
.getPolytomousKeyService();
280 public final IPolytomousKeyNodeService
getPolytomousKeyNodeService(){
281 return configuration
.getPolytomousKeyNodeService();
284 public final IService
<CdmBase
> getMainService(){
285 return configuration
.getMainService();
288 public final IWorkingSetService
getWorkingSetService(){
289 return configuration
.getWorkingSetService();
292 // public final Object getBean(String name){
293 // return this.applicationContext.getBean(name);
297 public IDatabaseService
getDatabaseService() {
298 return configuration
.getDatabaseService();
302 public ProviderManager
getAuthenticationManager() {
303 return configuration
.getAuthenticationManager();
309 public ConversationHolder
NewConversation() {
310 return configuration
.NewConversation();
314 public Object
getBean(String name
) {
315 return configuration
.getBean(name
);
319 public IGrantedAuthorityService
getGrantedAuthorityService() {
320 return configuration
.getGrantedAuthorityService();
324 public PermissionEvaluator
getPermissionEvaluator() {
325 return configuration
.getPermissionEvaluator();
329 public void authenticate(String username
, String password
) {
330 configuration
.authenticate(username
, password
);