1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.org.usurper.springframework.aop;
20
21 import java.lang.reflect.ParameterizedType;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Set;
25
26 import org.aopalliance.intercept.MethodInterceptor;
27 import org.aopalliance.intercept.MethodInvocation;
28 import org.org.usurper.UsurperGenerator;
29 import org.org.usurper.setup.UsurperGeneratorSetup;
30 import org.org.usurper.springframework.UsurperMapFactoryBean;
31 import org.org.usurper.springframework.UsurperSpringConstants;
32
33
34
35
36
37 public class UsurperMethodInterceptor implements MethodInterceptor {
38
39 private UsurperGeneratorSetup usurperGeneratorSetup;
40
41 public void setUsurperGeneratorSetup(UsurperGeneratorSetup usurperGeneratorSetup) {
42 this.usurperGeneratorSetup = usurperGeneratorSetup;
43 }
44
45 @SuppressWarnings("unchecked")
46 public Object invoke(MethodInvocation methodInvocation) throws Throwable {
47 Object usurpedResult = null;
48 Class<?> returnType = methodInvocation.getMethod().getReturnType();
49 if (returnType.isAssignableFrom(Map.class)) {
50 ParameterizedType genericType = (ParameterizedType) methodInvocation.getMethod().getGenericReturnType();
51 UsurperMapFactoryBean mapFactoryBean = new UsurperMapFactoryBean();
52 mapFactoryBean.setUsurpedKeyClassName(((Class) genericType.getActualTypeArguments()[0]).getName());
53 mapFactoryBean.setUsurpedValueClassName(((Class) genericType.getActualTypeArguments()[1]).getName());
54 mapFactoryBean.setUsurperGeneratorSetup(this.usurperGeneratorSetup);
55 mapFactoryBean.afterPropertiesSet();
56 usurpedResult = mapFactoryBean.getObject();
57 } else if (returnType.isAssignableFrom(List.class)) {
58 ParameterizedType genericType = (ParameterizedType) methodInvocation.getMethod().getGenericReturnType();
59 UsurperGenerator usurperGenerator = createUsurperGenerator((Class) genericType.getActualTypeArguments()[0]);
60 usurpedResult = usurperGenerator.generateUsurperList(UsurperSpringConstants.DEFAULT_ENTRIES_COUNT);
61 } else if (returnType.isAssignableFrom(Set.class)) {
62 ParameterizedType genericType = (ParameterizedType) methodInvocation.getMethod().getGenericReturnType();
63 UsurperGenerator usurperGenerator = createUsurperGenerator((Class) genericType.getActualTypeArguments()[0]);
64 usurpedResult = usurperGenerator.generateUsurperSet(UsurperSpringConstants.DEFAULT_ENTRIES_COUNT);
65 } else {
66 UsurperGenerator usurperGenerator = createUsurperGenerator(returnType);
67 usurpedResult = usurperGenerator.generateUsurper();
68 }
69 return usurpedResult;
70 }
71
72 @SuppressWarnings("unchecked")
73 private UsurperGenerator createUsurperGenerator(Class<?> usurpedClass) {
74 UsurperGenerator usurperGenerator = null;
75 if (usurperGeneratorSetup == null) {
76 usurperGenerator = new UsurperGenerator(usurpedClass);
77 } else {
78 usurperGenerator = new UsurperGenerator(usurpedClass, usurperGeneratorSetup);
79 }
80 return usurperGenerator;
81 }
82
83 }