cb170445cd6634316119fe705c488c2600b09f7c
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / application / CdmApplicationDefaultConfiguration.java
1 // $Id$
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 package eu.etaxonomy.cdm.api.application;
12
13 import javax.sql.DataSource;
14
15 import org.apache.log4j.Logger;
16 import org.hibernate.SessionFactory;
17 import org.springframework.beans.BeansException;
18 import org.springframework.beans.factory.annotation.Autowired;
19 import org.springframework.context.ApplicationContext;
20 import org.springframework.context.ApplicationContextAware;
21 import org.springframework.orm.hibernate4.HibernateTransactionManager;
22 import org.springframework.security.authentication.ProviderManager;
23 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
24 import org.springframework.security.core.Authentication;
25 import org.springframework.security.core.context.SecurityContext;
26 import org.springframework.security.core.context.SecurityContextHolder;
27 import org.springframework.stereotype.Component;
28 import org.springframework.transaction.PlatformTransactionManager;
29 import org.springframework.transaction.TransactionDefinition;
30 import org.springframework.transaction.TransactionStatus;
31 import org.springframework.transaction.support.DefaultTransactionDefinition;
32
33 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
34 import eu.etaxonomy.cdm.api.service.IAgentService;
35 import eu.etaxonomy.cdm.api.service.IClassificationService;
36 import eu.etaxonomy.cdm.api.service.ICollectionService;
37 import eu.etaxonomy.cdm.api.service.ICommonService;
38 import eu.etaxonomy.cdm.api.service.IDatabaseService;
39 import eu.etaxonomy.cdm.api.service.IDescriptionService;
40 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
41 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
42 import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
43 import eu.etaxonomy.cdm.api.service.IGroupService;
44 import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;
45 import eu.etaxonomy.cdm.api.service.ILocationService;
46 import eu.etaxonomy.cdm.api.service.IMediaService;
47 import eu.etaxonomy.cdm.api.service.INameService;
48 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
49 import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
50 import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
51 import eu.etaxonomy.cdm.api.service.IReferenceService;
52 import eu.etaxonomy.cdm.api.service.IService;
53 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
54 import eu.etaxonomy.cdm.api.service.ITaxonService;
55 import eu.etaxonomy.cdm.api.service.ITermService;
56 import eu.etaxonomy.cdm.api.service.IUserService;
57 import eu.etaxonomy.cdm.api.service.IVocabularyService;
58 import eu.etaxonomy.cdm.api.service.IWorkingSetService;
59 import eu.etaxonomy.cdm.model.common.CdmBase;
60 import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
61
62 /**
63 * @author a.mueller
64 * @created 21.05.2008
65 * @version 1.0
66 */
67 @Component
68 public class CdmApplicationDefaultConfiguration implements ICdmApplicationConfiguration, ApplicationContextAware {
69 private static final Logger logger = Logger.getLogger(CdmApplicationDefaultConfiguration.class);
70
71 protected ApplicationContext applicationContext;
72
73
74 @Autowired
75 //@Qualifier("nameService")
76 private INameService nameService;
77 @Autowired
78 //@Qualifier("taxonService")
79 private ITaxonService taxonService;
80 @Autowired
81 //@Qualifier("classificationService")
82 private IClassificationService classificationService;
83 @Autowired
84 //@Qualifier("referenceService")
85 private IReferenceService referenceService;
86 @Autowired
87 //@Qualifier("agentService")
88 private IAgentService agentService;
89 @Autowired
90 //@Qualifier("databaseService")
91 private IDatabaseService databaseService;
92 @Autowired
93 //@Qualifier("termService")
94 private ITermService termService;
95 @Autowired
96 private HibernateTransactionManager transactionManager;
97 @Autowired
98 //@Qualifier("descriptionService")
99 private IDescriptionService descriptionService;
100 @Autowired
101 //@Qualifier("occurrenceService")
102 private IOccurrenceService occurrenceService;
103 @Autowired
104 //@Qualifier("mediaService")
105 private IMediaService mediaService;
106 @Autowired
107 //@Qualifier("commonService")
108 private ICommonService commonService;
109 @Autowired
110 private ILocationService locationService;
111 @Autowired
112 private SessionFactory sessionFactory;
113 @Autowired
114 private DataSource dataSource;
115 @Autowired
116 private ProviderManager authenticationManager;
117 @Autowired
118 private IUserService userService;
119 @Autowired
120 private IGrantedAuthorityService grantedAuthorityService;
121 @Autowired
122 private IGroupService groupService;
123 @Autowired
124 private ICollectionService collectionService;
125 @Autowired
126 private IFeatureTreeService featureTreeService;
127 @Autowired
128 private IFeatureNodeService featureNodeService;
129 @Autowired
130 private IVocabularyService vocabularyService;
131 @Autowired
132 private ITaxonNodeService taxonNodeService;
133 @Autowired
134 private IIdentificationKeyService identificationKeyService;
135 @Autowired
136 private IPolytomousKeyService polytomousKeyService;
137 @Autowired
138 private IPolytomousKeyNodeService polytomousKeyNodeService;
139 @Autowired
140 private ICdmPermissionEvaluator permissionEvaluator;
141
142
143 // @Autowired
144 //@Qualifier("mainService")
145 private IService<CdmBase> mainService;
146
147 @Autowired
148 private IWorkingSetService workingSetService;
149
150 //********************** CONSTRUCTOR *********************************************************/
151
152 /**
153 * Constructor
154 */
155 protected CdmApplicationDefaultConfiguration() {
156 }
157
158 // ****************************** APPLICATION CONTEXT *************************************************/
159
160
161 /* (non-Javadoc)
162 * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
163 */
164 @Override
165 public void setApplicationContext(ApplicationContext applicationContext)
166 throws BeansException {
167 this.applicationContext = applicationContext;
168 }
169
170 // ****************************** GETTER *************************************************/
171
172
173 @Override
174 public final Object getBean(String name){
175 return this.applicationContext.getBean(name);
176 }
177
178 /* (non-Javadoc)
179 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAgentService()
180 */
181 @Override
182 public IAgentService getAgentService() {
183 return this.agentService;
184 }
185
186 /* (non-Javadoc)
187 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDatabaseService()
188 */
189 @Override
190 public IDatabaseService getDatabaseService() {
191 return this.databaseService;
192 }
193
194 /* (non-Javadoc)
195 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getNameService()
196 */
197 @Override
198 public INameService getNameService() {
199 return this.nameService;
200 }
201
202 /* (non-Javadoc)
203 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getReferenceService()
204 */
205 @Override
206 public IReferenceService getReferenceService() {
207 return this.referenceService;
208 }
209
210 /* (non-Javadoc)
211 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTaxonService()
212 */
213 @Override
214 public ITaxonService getTaxonService() {
215 return this.taxonService;
216 }
217
218
219 /* (non-Javadoc)
220 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getClassificationService()
221 */
222 @Override
223 public IClassificationService getClassificationService() {
224 return this.classificationService;
225 }
226
227 @Override
228 public ITaxonNodeService getTaxonNodeService(){
229 return this.taxonNodeService;
230 }
231
232 /* (non-Javadoc)
233 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDescriptionService()
234 */
235 @Override
236 public IDescriptionService getDescriptionService(){
237 return this.descriptionService;
238 }
239
240 /*
241 * (non-Javadoc)
242 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getOccurrenceService()
243 */
244 @Override
245 public IOccurrenceService getOccurrenceService(){
246 return this.occurrenceService;
247 }
248
249 /*
250 * (non-Javadoc)
251 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getMediaService()
252 */
253 @Override
254 public IMediaService getMediaService(){
255 return this.mediaService;
256 }
257
258 /* (non-Javadoc)
259 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTermService()
260 */
261 @Override
262 public ITermService getTermService() {
263 return this.termService;
264 }
265
266 /* (non-Javadoc)
267 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()
268 */
269 @Override
270 public ICommonService getCommonService(){
271 return this.commonService;
272 }
273
274 /* (non-Javadoc)
275 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getLocationService()
276 */
277 @Override
278 public ILocationService getLocationService() {
279 return this.locationService;
280 }
281
282 /* (non-Javadoc)
283 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()
284 */
285 @Override
286 public IUserService getUserService() {
287 return this.userService;
288 }
289
290 /* (non-Javadoc)
291 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()
292 */
293 @Override
294 public IGrantedAuthorityService getGrantedAuthorityService() {
295 return this.grantedAuthorityService;
296 }
297
298 /* (non-Javadoc)
299 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()
300 */
301 @Override
302 public IService<CdmBase> getMainService(){
303 return this.mainService;
304 }
305
306 /* (non-Javadoc)
307 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTransactionManager()
308 */
309 @Override
310 public PlatformTransactionManager getTransactionManager() {
311 return this.transactionManager;
312 }
313
314 /*
315 * (non-Javadoc)
316 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAuthenticationManager()
317 */
318 @Override
319 public ProviderManager getAuthenticationManager() {
320 return this.authenticationManager;
321 }
322
323
324 /* (non-Javadoc)
325 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#NewConversation()
326 */
327 @Override
328 public ConversationHolder NewConversation() {
329 // TODO make this a prototype
330 return new ConversationHolder(dataSource, sessionFactory, transactionManager);
331 }
332
333 /*
334 * (non-Javadoc)
335 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCollectionService()
336 */
337 @Override
338 public ICollectionService getCollectionService() {
339 return collectionService;
340 }
341
342 /*
343 * (non-Javadoc)
344 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureTreeService()
345 */
346 @Override
347 public IFeatureTreeService getFeatureTreeService() {
348 return featureTreeService;
349 }
350
351 /*
352 * (non-Javadoc)
353 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureNodeService()
354 */
355 @Override
356 public IFeatureNodeService getFeatureNodeService(){
357 return featureNodeService;
358 }
359
360 /*
361 * (non-Javadoc)
362 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getVocabularyService()
363 */
364 @Override
365 public IVocabularyService getVocabularyService() {
366 return vocabularyService;
367 }
368
369 /* (non-Javadoc)
370 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getIdentificationKeyService()
371 */
372 @Override
373 public IIdentificationKeyService getIdentificationKeyService(){
374 return identificationKeyService;
375 }
376
377 /* (non-Javadoc)
378 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPolytomousKeyService()
379 */
380 @Override
381 public IPolytomousKeyService getPolytomousKeyService(){
382 return polytomousKeyService;
383 }
384
385 @Override
386 public IPolytomousKeyNodeService getPolytomousKeyNodeService(){
387 return polytomousKeyNodeService;
388 }
389
390 /* (non-Javadoc)
391 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getWorkingSetService()
392 */
393 @Override
394 public IWorkingSetService getWorkingSetService() {
395 return workingSetService;
396 }
397
398 /* (non-Javadoc)
399 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getGroupService()
400 */
401 @Override
402 public IGroupService getGroupService() {
403 return groupService;
404 }
405
406
407 /* (non-Javadoc)
408 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPermissionEvaluator()
409 */
410 @Override
411 public ICdmPermissionEvaluator getPermissionEvaluator() {
412 return permissionEvaluator;
413 }
414
415 /* (non-Javadoc)
416 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()
417 */
418 @Override
419 public TransactionStatus startTransaction() {
420 return startTransaction(false);
421 }
422
423
424 /* (non-Javadoc)
425 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()
426 */
427 @Override
428 public TransactionStatus startTransaction(Boolean readOnly) {
429
430 PlatformTransactionManager txManager = getTransactionManager();
431
432 DefaultTransactionDefinition defaultTxDef = new DefaultTransactionDefinition();
433 defaultTxDef.setReadOnly(readOnly);
434 TransactionDefinition txDef = defaultTxDef;
435
436 // Log some transaction-related debug information.
437 if (logger.isDebugEnabled()) {
438 logger.debug("Transaction name = " + txDef.getName());
439 logger.debug("Transaction facets:");
440 logger.debug("Propagation behavior = " + txDef.getPropagationBehavior());
441 logger.debug("Isolation level = " + txDef.getIsolationLevel());
442 logger.debug("Timeout = " + txDef.getTimeout());
443 logger.debug("Read Only = " + txDef.isReadOnly());
444 // org.springframework.orm.hibernate4.HibernateTransactionManager
445 // provides more transaction/session-related debug information.
446 }
447
448 TransactionStatus txStatus = txManager.getTransaction(txDef);
449 return txStatus;
450 }
451
452
453 @Override
454 public void commitTransaction(TransactionStatus txStatus){
455 PlatformTransactionManager txManager = getTransactionManager();
456 txManager.commit(txStatus);
457 return;
458 }
459
460
461 /* (non-Javadoc)
462 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#authenticate(java.lang.String, java.lang.String)
463 */
464 @Override
465 public void authenticate(String username, String password){
466 UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);
467 Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);
468 SecurityContext context = SecurityContextHolder.getContext();
469 context.setAuthentication(authentication);
470 }
471
472
473
474 }