using run-as authentication in firstDataInserter
[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.hibernate3.HibernateTransactionManager;
22 import org.springframework.security.access.PermissionEvaluator;
23 import org.springframework.security.authentication.ProviderManager;
24 import org.springframework.stereotype.Component;
25 import org.springframework.transaction.PlatformTransactionManager;
26 import org.springframework.transaction.TransactionDefinition;
27 import org.springframework.transaction.TransactionStatus;
28 import org.springframework.transaction.support.DefaultTransactionDefinition;
29
30 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
31 import eu.etaxonomy.cdm.api.service.IAgentService;
32 import eu.etaxonomy.cdm.api.service.IClassificationService;
33 import eu.etaxonomy.cdm.api.service.ICollectionService;
34 import eu.etaxonomy.cdm.api.service.ICommonService;
35 import eu.etaxonomy.cdm.api.service.IDatabaseService;
36 import eu.etaxonomy.cdm.api.service.IDescriptionService;
37 import eu.etaxonomy.cdm.api.service.IFeatureNodeService;
38 import eu.etaxonomy.cdm.api.service.IFeatureTreeService;
39 import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
40 import eu.etaxonomy.cdm.api.service.IGroupService;
41 import eu.etaxonomy.cdm.api.service.IIdentificationKeyService;
42 import eu.etaxonomy.cdm.api.service.ILocationService;
43 import eu.etaxonomy.cdm.api.service.IMediaService;
44 import eu.etaxonomy.cdm.api.service.INameService;
45 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
46 import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
47 import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
48 import eu.etaxonomy.cdm.api.service.IReferenceService;
49 import eu.etaxonomy.cdm.api.service.IService;
50 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
51 import eu.etaxonomy.cdm.api.service.ITaxonService;
52 import eu.etaxonomy.cdm.api.service.ITermService;
53 import eu.etaxonomy.cdm.api.service.IUserService;
54 import eu.etaxonomy.cdm.api.service.IVocabularyService;
55 import eu.etaxonomy.cdm.api.service.IWorkingSetService;
56 import eu.etaxonomy.cdm.model.common.CdmBase;
57
58 /**
59 * @author a.mueller
60 * @created 21.05.2008
61 * @version 1.0
62 */
63 /**
64 * @author a.mueller
65 *
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 PermissionEvaluator 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 public void setApplicationContext(ApplicationContext applicationContext)
165 throws BeansException {
166 this.applicationContext = applicationContext;
167 }
168
169 // ****************************** GETTER *************************************************/
170
171
172 public final Object getBean(String name){
173 return this.applicationContext.getBean(name);
174 }
175
176 /* (non-Javadoc)
177 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAgentService()
178 */
179 public IAgentService getAgentService() {
180 return this.agentService;
181 }
182
183 /* (non-Javadoc)
184 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDatabaseService()
185 */
186 public IDatabaseService getDatabaseService() {
187 return this.databaseService;
188 }
189
190 /* (non-Javadoc)
191 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getNameService()
192 */
193 public INameService getNameService() {
194 return this.nameService;
195 }
196
197 /* (non-Javadoc)
198 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getReferenceService()
199 */
200 public IReferenceService getReferenceService() {
201 return this.referenceService;
202 }
203
204 /* (non-Javadoc)
205 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTaxonService()
206 */
207 public ITaxonService getTaxonService() {
208 return this.taxonService;
209 }
210
211
212 /* (non-Javadoc)
213 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getClassificationService()
214 */
215 public IClassificationService getClassificationService() {
216 return this.classificationService;
217 }
218
219 public ITaxonNodeService getTaxonNodeService(){
220 return this.taxonNodeService;
221 }
222
223 /* (non-Javadoc)
224 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDescriptionService()
225 */
226 public IDescriptionService getDescriptionService(){
227 return this.descriptionService;
228 }
229
230 /*
231 * (non-Javadoc)
232 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getOccurrenceService()
233 */
234 public IOccurrenceService getOccurrenceService(){
235 return this.occurrenceService;
236 }
237
238 /*
239 * (non-Javadoc)
240 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getMediaService()
241 */
242 public IMediaService getMediaService(){
243 return this.mediaService;
244 }
245
246 /* (non-Javadoc)
247 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTermService()
248 */
249 public ITermService getTermService() {
250 return this.termService;
251 }
252
253 /* (non-Javadoc)
254 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()
255 */
256 public ICommonService getCommonService(){
257 return this.commonService;
258 }
259
260 /* (non-Javadoc)
261 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getLocationService()
262 */
263 public ILocationService getLocationService() {
264 return this.locationService;
265 }
266
267 /* (non-Javadoc)
268 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()
269 */
270 public IUserService getUserService() {
271 return this.userService;
272 }
273
274 /* (non-Javadoc)
275 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()
276 */
277 public IGrantedAuthorityService getGrantedAuthorityService() {
278 return this.grantedAuthorityService;
279 }
280
281 /* (non-Javadoc)
282 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()
283 */
284 public IService<CdmBase> getMainService(){
285 return this.mainService;
286 }
287
288 /* (non-Javadoc)
289 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTransactionManager()
290 */
291 public PlatformTransactionManager getTransactionManager() {
292 return this.transactionManager;
293 }
294
295 /*
296 * (non-Javadoc)
297 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAuthenticationManager()
298 */
299 public ProviderManager getAuthenticationManager() {
300 return this.authenticationManager;
301 }
302
303
304 /* (non-Javadoc)
305 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#NewConversation()
306 */
307 public ConversationHolder NewConversation() {
308 // TODO make this a prototype
309 return new ConversationHolder(dataSource, sessionFactory, transactionManager);
310 }
311
312 /*
313 * (non-Javadoc)
314 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCollectionService()
315 */
316 public ICollectionService getCollectionService() {
317 return collectionService;
318 }
319
320 /*
321 * (non-Javadoc)
322 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureTreeService()
323 */
324 public IFeatureTreeService getFeatureTreeService() {
325 return featureTreeService;
326 }
327
328 /*
329 * (non-Javadoc)
330 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureNodeService()
331 */
332 public IFeatureNodeService getFeatureNodeService(){
333 return featureNodeService;
334 }
335
336 /*
337 * (non-Javadoc)
338 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getVocabularyService()
339 */
340 public IVocabularyService getVocabularyService() {
341 return vocabularyService;
342 }
343
344 /* (non-Javadoc)
345 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getIdentificationKeyService()
346 */
347 public IIdentificationKeyService getIdentificationKeyService(){
348 return identificationKeyService;
349 }
350
351 /* (non-Javadoc)
352 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPolytomousKeyService()
353 */
354 public IPolytomousKeyService getPolytomousKeyService(){
355 return polytomousKeyService;
356 }
357
358 public IPolytomousKeyNodeService getPolytomousKeyNodeService(){
359 return polytomousKeyNodeService;
360 }
361
362 /* (non-Javadoc)
363 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getWorkingSetService()
364 */
365 @Override
366 public IWorkingSetService getWorkingSetService() {
367 return workingSetService;
368 }
369
370 /* (non-Javadoc)
371 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getGroupService()
372 */
373 @Override
374 public IGroupService getGroupService() {
375 return groupService;
376 }
377
378
379 /* (non-Javadoc)
380 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPermissionEvaluator()
381 */
382 public PermissionEvaluator getPermissionEvaluator() {
383 return permissionEvaluator;
384 }
385
386 /* (non-Javadoc)
387 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()
388 */
389 @Override
390 public TransactionStatus startTransaction() {
391 return startTransaction(false);
392 }
393
394
395 /* (non-Javadoc)
396 * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()
397 */
398 @Override
399 public TransactionStatus startTransaction(Boolean readOnly) {
400
401 PlatformTransactionManager txManager = getTransactionManager();
402
403 DefaultTransactionDefinition defaultTxDef = new DefaultTransactionDefinition();
404 defaultTxDef.setReadOnly(readOnly);
405 TransactionDefinition txDef = defaultTxDef;
406
407 // Log some transaction-related debug information.
408 if (logger.isDebugEnabled()) {
409 logger.debug("Transaction name = " + txDef.getName());
410 logger.debug("Transaction facets:");
411 logger.debug("Propagation behavior = " + txDef.getPropagationBehavior());
412 logger.debug("Isolation level = " + txDef.getIsolationLevel());
413 logger.debug("Timeout = " + txDef.getTimeout());
414 logger.debug("Read Only = " + txDef.isReadOnly());
415 // org.springframework.orm.hibernate3.HibernateTransactionManager
416 // provides more transaction/session-related debug information.
417 }
418
419 TransactionStatus txStatus = txManager.getTransaction(txDef);
420 return txStatus;
421 }
422
423
424 public void commitTransaction(TransactionStatus txStatus){
425 PlatformTransactionManager txManager = getTransactionManager();
426 txManager.commit(txStatus);
427 return;
428 }
429
430
431
432 }