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