Project

General

Profile

1
package eu.dnetlib.goldoa.domain;
2

    
3
import com.fasterxml.jackson.databind.ObjectMapper;
4
import com.fasterxml.jackson.databind.type.TypeFactory;
5
import eu.dnetlib.goldoa.service.dao.UserDAO;
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.aspectj.lang.ProceedingJoinPoint;
9
import org.aspectj.lang.annotation.Around;
10
import org.aspectj.lang.annotation.Aspect;
11
import org.aspectj.lang.reflect.MethodSignature;
12
import org.hibernate.stat.Statistics;
13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.stereotype.Component;
15

    
16
import java.text.DecimalFormat;
17
import java.text.NumberFormat;
18
import java.util.List;
19

    
20
/**
21
 * Created by panagiotis on 8/3/2017.
22
 */
23
@Aspect
24
@Component
25
public class HIbernateDomainConverter {
26
    private Log log = LogFactory.getLog(HIbernateDomainConverter.class);
27
    private final static NumberFormat NF = new DecimalFormat("0.0###");
28
    @Autowired
29
    UserDAO ud;
30

    
31
    @Around("execution (java.util.List<Object> eu.dnetlib.goldoa.service.SearchManager.*(..)) ")
32
    public Object objectListConverter(ProceedingJoinPoint pjp) throws  Throwable{
33
        List obj = (List) pjp.proceed();
34
        ObjectMapper mapper = new ObjectMapper();
35

    
36
        if(obj.isEmpty())
37
            return obj;
38
        Class returnType = obj.get(0).getClass();
39
        String json = mapper.writeValueAsString(obj);
40
        return mapper.readValue(json,TypeFactory.defaultInstance().constructCollectionType(List.class,returnType));
41
    }
42

    
43
    @Around("execution (java.util.List<eu.dnetlib.goldoa.domain.*> eu.dnetlib.goldoa.service.*Manager.*(..)) ")
44
    public Object listConverter(ProceedingJoinPoint pjp) throws  Throwable{
45
        List obj = (List) pjp.proceed();
46
        ObjectMapper mapper = new ObjectMapper();
47

    
48
        if(obj.isEmpty())
49
            return obj;
50

    
51
        Class returnType = obj.get(0).getClass();
52
        String json = mapper.writeValueAsString(obj);
53

    
54
        log.debug(json);
55
        log.debug(returnType);
56

    
57
        Statistics statistics = (Statistics) ud.getSession().getSessionFactory().getStatistics();
58
        statistics.setStatisticsEnabled(true);
59

    
60
        long hit0 = statistics.getQueryCacheHitCount();
61
        long miss0 = statistics.getSecondLevelCacheMissCount();
62

    
63
        Object result = pjp.proceed();
64

    
65
        return mapper.readValue(json,TypeFactory.defaultInstance().constructCollectionType(List.class,returnType));
66
    }
67

    
68
    @Around("execution (eu.dnetlib.goldoa.domain.* eu.dnetlib.goldoa.service.*Manager.*(..)) ")
69
    public Object objectConverter(ProceedingJoinPoint pjp) throws Throwable {
70

    
71
        Object obj = pjp.proceed();
72
        Class returnType = ((MethodSignature) pjp.getSignature()).getMethod().getReturnType();
73
        ObjectMapper mapper = new ObjectMapper();
74
        String json = mapper.writeValueAsString(returnType.cast(obj));
75
        return mapper.readValue(json, returnType);
76
    }
77

    
78

    
79
}
(19-19/52)