View Javadoc

    1   /* Copyright 2004, 2005 Acegi Technology Pty Limited
    2    *
    3    * Licensed under the Apache License, Version 2.0 (the "License");
    4    * you may not use this file except in compliance with the License.
    5    * You may obtain a copy of the License at
    6    *
    7    *     http://www.apache.org/licenses/LICENSE-2.0
    8    *
    9    * Unless required by applicable law or agreed to in writing, software
    10   * distributed under the License is distributed on an "AS IS" BASIS,
    11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12   * See the License for the specific language governing permissions and
    13   * limitations under the License.
    14   */
    15
    16  package org.acegisecurity.util;
    17
    18  import org.aopalliance.intercept.MethodInvocation;
    19
    20  import org.springframework.util.Assert;
    21
    22  import java.lang.reflect.Method;
    23
    24  import java.util.ArrayList;
    25  import java.util.List;
    26
    27
    28  /***
    29   * Static utility methods for creating <code>MethodInvocation</code>s usable
    30   * within Acegi Security.
    31   *
    32   * <p>
    33   * All methods of this class return a {@link
    34   * org.acegisecurity.util.SimpleMethodInvocation}.
    35   * </p>
    36   *
    37   * @author Ben Alex
    38   * @version $Id: MethodInvocationUtils.java,v 1.1 2005/11/25 04:17:24 benalex Exp $
    39   */
    40  public class MethodInvocationUtils {
    41      //~ Methods ================================================================
    42
    43      /***
    44       * Generates a <code>MethodInvocation</code> for specified
    45       * <code>methodName</code> on the passed object.
    46       *
    47       * @param object the object that will be used to find the relevant
    48       *        <code>Method</code>
    49       * @param methodName the name of the method to find
    50       *
    51       * @return a <code>MethodInvocation</code>, or <code>null</code> if there
    52       *         was a problem
    53       */
    54      public static MethodInvocation create(Object object, String methodName) {
    55          return create(object, methodName, null);
    56      }
    57
    58      /***
    59       * Generates a <code>MethodInvocation</code> for specified
    60       * <code>methodName</code> on the passed object, using the
    61       * <code>args</code> to locate the method.
    62       *
    63       * @param object the object that will be used to find the relevant
    64       *        <code>Method</code>
    65       * @param methodName the name of the method to find
    66       * @param args arguments that are required as part of the method signature
    67       *
    68       * @return a <code>MethodInvocation</code>, or <code>null</code> if there
    69       *         was a problem
    70       */
    71      public static MethodInvocation create(Object object, String methodName,
    72          Object[] args) {
    73          Assert.notNull(object, "Object required");
    74
    75          Class[] classArgs = null;
    76
    77          if (args != null) {
    78              List list = new ArrayList();
    79
    80              for (int i = 0; i < args.length; i++) {
    81                  list.add(args[i].getClass());
    82              }
    83
    84              classArgs = (Class[]) list.toArray();
    85          }
    86
    87          return createFromClass(object.getClass(), methodName, classArgs);
    88      }
    89
    90      /***
    91       * Generates a <code>MethodInvocation</code> for specified
    92       * <code>methodName</code> on the passed class.
    93       *
    94       * @param clazz the class of object that will be used to find the relevant
    95       *        <code>Method</code>
    96       * @param methodName the name of the method to find
    97       *
    98       * @return a <code>MethodInvocation</code>, or <code>null</code> if there
    99       *         was a problem
    100      */
    101     public static MethodInvocation createFromClass(Class clazz,
    102         String methodName) {
    103         return createFromClass(clazz, methodName);
    104     }
    105
    106     /***
    107      * Generates a <code>MethodInvocation</code> for specified
    108      * <code>methodName</code> on the passed class, using the
    109      * <code>args</code> to locate the method.
    110      *
    111      * @param clazz the class of object that will be used to find the relevant
    112      *        <code>Method</code>
    113      * @param methodName the name of the method to find
    114      * @param args arguments that are required as part of the method signature
    115      *
    116      * @return a <code>MethodInvocation</code>, or <code>null</code> if there
    117      *         was a problem
    118      */
    119     public static MethodInvocation createFromClass(Class clazz,
    120         String methodName, Class[] args) {
    121         Assert.notNull(clazz, "Class required");
    122         Assert.hasText(methodName, "MethodName required");
    123
    124         Method method;
    125
    126         try {
    127             method = clazz.getMethod(methodName, args);
    128         } catch (Exception e) {
    129             return null;
    130         }
    131
    132         return new SimpleMethodInvocation(method, args);
    133     }
    134 }