View Javadoc

1   /*
2    ORG Usurper is a random value object generator library 
3    Copyright (C) 2007  Pierre-Antoine Grégoire
4    
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9    
10   This library is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   Lesser General Public License for more details.
14   
15   You should have received a copy of the GNU Lesser General Public
16   License along with this library; if not, write to the Free Software
17   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
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   * The Class UsurperMethodInterceptor is an AOPAlliance MethodInterceptor that provides a virtual implementation for a given interface.<br>
35   * These virtual methods return Usurped objects which are instances of the defined returned types.
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  }