]> git.argeo.org Git - gpl/argeo-slc.git/blob - eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java
First draft of TestResult Detail Implementation
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.core / src / main / java / org / argeo / slc / client / aspects / ContentProviderAspect.java
1 package org.argeo.slc.client.aspects;
2
3 import org.aspectj.lang.ProceedingJoinPoint;
4 import org.aspectj.lang.annotation.Around;
5 import org.aspectj.lang.annotation.Aspect;
6 import org.aspectj.lang.annotation.Pointcut;
7 import org.hibernate.LockMode;
8 import org.hibernate.SessionFactory;
9
10 /**
11 * Intercepts all calls to get methods of the
12 * org.argeo.slc.client.contentprovider package to insure that objects that are
13 * to be rendered in views are correctly linked to the hibernate session.
14 *
15 * @author bsinou
16 *
17 */
18
19 @Aspect
20 public class ContentProviderAspect {
21
22 // private final static Log log = LogFactory
23 // .getLog(ContentProviderAspect.class);
24
25 private SessionFactory sessionFactory;
26
27 // We select here only getters from classes of the contentprovider package
28 // that need to get data from hibernate
29
30 // PointCuts
31 @Pointcut("(execution (* org.argeo.slc.client.contentprovider.ProcessListTableLabelProvider.get*(..)) && args(o,..))"
32 + " || (execution (* org.argeo.slc.client.contentprovider.ProcessDetailContentProvider.get*(..)) && args(o,..))"
33 + " || (execution (* org.argeo.slc.client.contentprovider.ResultDetailContentProvider.get*(..)) && args(o,..))")
34 void contentProviderGetterWrapper(Object o) {
35 }
36
37 // Advices
38 @Around("contentProviderGetterWrapper(o)")
39 public Object aroundGetWrapper(ProceedingJoinPoint thisJoinPoint, Object o)
40 throws Throwable {
41
42 // TODO : find a mean to handle session & manager with txManager
43 // in order to not have to re-begin a transaction here.
44 sessionFactory.getCurrentSession().beginTransaction();
45
46 // reassociate a transient instance with a session (LockMode.NONE).
47 sessionFactory.getCurrentSession().lock(o, LockMode.NONE);
48
49 Object result = thisJoinPoint.proceed();
50 sessionFactory.getCurrentSession().getTransaction().commit();
51 return result;
52 }
53
54 // IoC
55 public void setSessionFactory(SessionFactory sessionFactory) {
56 this.sessionFactory = sessionFactory;
57 }
58 }