remotingApplicationContext : removing configuration bean declaration
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / cdm / remote / api / application / CdmApplicationRemoteController.java
1 // $Id: CdmApplicationController.java 11680 2011-04-04 17:07:39Z a.mueller $
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11
12 package eu.etaxonomy.cdm.remote.api.application;
13
14 import java.util.UUID;
15
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;
31
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
63
64 /**
65 * @author a.mueller
66 * @author j.koch
67 *
68 */
69 public class CdmApplicationRemoteController implements ICdmApplicationRemoteConfiguration {
70 private static final Logger logger = Logger.getLogger(CdmApplicationRemoteController.class);
71
72 public static final String DEFAULT_APPLICATION_CONTEXT_RESOURCE = "/eu/etaxonomy/cdm/remotingApplicationContext.xml";
73
74 public AbstractApplicationContext applicationContext;
75 private ICdmApplicationRemoteConfiguration configuration;
76 private Resource applicationContextResource;
77 private IProgressMonitor progressMonitor;
78
79 /**
80 * Constructor, opens a spring ApplicationContext with defaults
81 */
82 public static CdmApplicationRemoteController NewInstance() {
83 logger.info("Configure CdmApplicationRemoteController with defaults");
84 return new CdmApplicationRemoteController(null, null);
85 }
86
87 /**
88 * Constructor, opens a spring ApplicationContext with given application context
89 * @param applicationContextResource
90 */
91 public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource, IProgressMonitor progressMonitor) {
92 logger.info("Configure CdmApplicationRemoteController with given application context");
93 return new CdmApplicationRemoteController(applicationContextResource, progressMonitor);
94 }
95
96 /**
97 * Constructor, starts the application remote controller
98 * @param applicationContextResource
99 */
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();
105 }
106
107 /**
108 * Sets the application context to a new spring ApplicationContext and initializes the Controller
109 */
110 private boolean setNewApplicationContext(){
111 logger.info("Set new application context");
112 progressMonitor.beginTask("Start application context.", 6);
113 progressMonitor.worked(1);
114
115 GenericApplicationContext applicationContext = new GenericApplicationContext();
116
117 XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
118 progressMonitor.subTask("Registering resources.");
119 xmlReader.loadBeanDefinitions(applicationContextResource);
120 progressMonitor.worked(1);
121
122 progressMonitor.subTask("This might take a while ...");
123 applicationContext.refresh();
124 applicationContext.start();
125 progressMonitor.worked(1);
126
127 progressMonitor.subTask("Cleaning up.");
128 setApplicationContext(applicationContext);
129 progressMonitor.done();
130 return true;
131 }
132
133 /**
134 * Tests if some DefinedTermsAreMissing.
135 * @return true, if at least one is missing, else false
136 */
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)){
141 return true;
142 }else{
143 return false;
144 }
145 }
146
147 /**
148 * Sets a new application Context.
149 * @param ac
150 */
151 public void setApplicationContext(AbstractApplicationContext ac){
152 closeApplicationContext(); //closes old application context if necessary
153 applicationContext = ac;
154 applicationContext.registerShutdownHook();
155 init();
156 }
157
158 /* (non-Javadoc)
159 * @see java.lang.Object#finalize()
160 */
161 public void finalize(){
162 close();
163 }
164
165 /**
166 * closes the application
167 */
168 public void close(){
169 closeApplicationContext();
170 }
171
172 /**
173 * closes the application context
174 */
175 private void closeApplicationContext(){
176 if (applicationContext != null){
177 logger.info("Close ApplicationContext");
178 applicationContext.close();
179 }
180 }
181
182 private void init(){
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);
191 }
192 }
193 configuration = new CdmApplicationRemoteDefaultConfiguration();
194 }
195
196
197
198 /* ****** Services *********/
199
200 public final INameService getNameService(){
201 return configuration.getNameService();
202 }
203
204 public final ITaxonService getTaxonService(){
205 return configuration.getTaxonService();
206 }
207
208 public final IClassificationService getClassificationService(){
209 return configuration.getClassificationService();
210 }
211
212 public final ITaxonNodeService getTaxonNodeService(){
213 return configuration.getTaxonNodeService();
214 }
215
216 public final IReferenceService getReferenceService(){
217 return configuration.getReferenceService();
218 }
219
220 public final IAgentService getAgentService(){
221 return configuration.getAgentService();
222 }
223
224 public final ITermService getTermService(){
225 return configuration.getTermService();
226 }
227
228 public final IDescriptionService getDescriptionService(){
229 return configuration.getDescriptionService();
230 }
231
232 public final IOccurrenceService getOccurrenceService(){
233 return configuration.getOccurrenceService();
234 }
235
236 public final IMediaService getMediaService(){
237 return configuration.getMediaService();
238 }
239
240 public final ICommonService getCommonService(){
241 return configuration.getCommonService();
242 }
243
244 public final ILocationService getLocationService(){
245 return configuration.getLocationService();
246 }
247
248 public final IUserService getUserService(){
249 return configuration.getUserService();
250 }
251
252 public IGroupService getGroupService() {
253 return configuration.getGroupService();
254 }
255
256 public final ICollectionService getCollectionService(){
257 return configuration.getCollectionService();
258 }
259
260 public final IFeatureTreeService getFeatureTreeService(){
261 return configuration.getFeatureTreeService();
262 }
263
264 public final IFeatureNodeService getFeatureNodeService(){
265 return configuration.getFeatureNodeService();
266 }
267
268 public final IVocabularyService getVocabularyService(){
269 return configuration.getVocabularyService();
270 }
271
272 public final IIdentificationKeyService getIdentificationKeyService(){
273 return configuration.getIdentificationKeyService();
274 }
275
276 public final IPolytomousKeyService getPolytomousKeyService(){
277 return configuration.getPolytomousKeyService();
278 }
279
280 public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){
281 return configuration.getPolytomousKeyNodeService();
282 }
283
284 public final IService<CdmBase> getMainService(){
285 return configuration.getMainService();
286 }
287
288 public final IWorkingSetService getWorkingSetService(){
289 return configuration.getWorkingSetService();
290 }
291
292 // public final Object getBean(String name){
293 // return this.applicationContext.getBean(name);
294 // }
295
296 @Override
297 public IDatabaseService getDatabaseService() {
298 return configuration.getDatabaseService();
299 }
300
301 @Override
302 public ProviderManager getAuthenticationManager() {
303 return configuration.getAuthenticationManager();
304 }
305
306
307
308 @Override
309 public ConversationHolder NewConversation() {
310 return configuration.NewConversation();
311 }
312
313 @Override
314 public Object getBean(String name) {
315 return configuration.getBean(name);
316 }
317
318 @Override
319 public IGrantedAuthorityService getGrantedAuthorityService() {
320 return configuration.getGrantedAuthorityService();
321 }
322
323 @Override
324 public PermissionEvaluator getPermissionEvaluator() {
325 return configuration.getPermissionEvaluator();
326 }
327
328 @Override
329 public void authenticate(String username, String password) {
330 configuration.authenticate(username, password);
331
332 }
333
334
335 }