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 org.apache.commons.logging.Log;
6
import org.apache.commons.logging.LogFactory;
7
import org.aspectj.lang.ProceedingJoinPoint;
8
import org.aspectj.lang.annotation.Around;
9
import org.aspectj.lang.annotation.Aspect;
10
import org.aspectj.lang.reflect.MethodSignature;
11
import org.springframework.stereotype.Component;
12

    
13
import java.util.List;
14

    
15
/**
16
 * Created by panagiotis on 8/3/2017.
17
 */
18
@Aspect
19
@Component
20
public class HIbernateDomainConverter {
21
    private Log log = LogFactory.getLog(HIbernateDomainConverter.class);
22

    
23
    @Around("execution (java.util.List<Object> eu.dnetlib.goldoa.service.SearchManager.*(..)) ")
24
    public Object objectListConverter(ProceedingJoinPoint pjp) throws  Throwable{
25
        List obj = (List) pjp.proceed();
26
        ObjectMapper mapper = new ObjectMapper();
27

    
28
        if(obj.isEmpty())
29
            return obj;
30
        Class returnType = obj.get(0).getClass();
31
        String json = mapper.writeValueAsString(obj);
32
        return mapper.readValue(json,TypeFactory.defaultInstance().constructCollectionType(List.class,returnType));
33
    }
34

    
35
    @Around("execution (java.util.List<eu.dnetlib.goldoa.domain.*> eu.dnetlib.goldoa.service.*Manager.*(..)) ")
36
    public List<Object> listConverter(ProceedingJoinPoint pjp) throws  Throwable{
37
        List obj = (List) pjp.proceed();
38
        ObjectMapper mapper = new ObjectMapper();
39
        if(obj.isEmpty())
40
            return obj;
41
        Class returnType = obj.get(0).getClass();
42
        String json = mapper.writeValueAsString(obj);
43
        return mapper.readValue(json,TypeFactory.defaultInstance().constructCollectionType(List.class,returnType));
44
    }
45

    
46
    @Around("execution (eu.dnetlib.goldoa.domain.* eu.dnetlib.goldoa.service.*Manager.*(..)) ")
47
    public Object objectConverter(ProceedingJoinPoint pjp) throws Throwable {
48

    
49
        Object obj = pjp.proceed();
50
        Class returnType = ((MethodSignature) pjp.getSignature()).getMethod().getReturnType();
51
        ObjectMapper mapper = new ObjectMapper();
52
        String json = mapper.writeValueAsString(returnType.cast(obj));
53
        return mapper.readValue(json, returnType);
54
    }
55

    
56

    
57
}
(19-19/52)