org.springmodules.cache.interceptor.MethodMatcher.java Source code

Java tutorial

Introduction

Here is the source code for org.springmodules.cache.interceptor.MethodMatcher.java

Source

/* 
 * Created on Apr 20, 2006
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 *
 * Copyright @2006 the original author or authors.
 */
package org.springmodules.cache.interceptor;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.springmodules.cache.util.TextMatcher;

import org.springframework.util.ClassUtils;

/**
 * TODO Describe this class
 * 
 * @author Alex Ruiz
 */
final class MethodMatcher {

    private class MethodFQN {

        final String className;

        final String methodName;

        MethodFQN(String fqn) throws IllegalArgumentException {
            int separatorIndex = methodSeparator(fqn);
            className = fqn.substring(0, separatorIndex);
            methodName = fqn.substring(separatorIndex + 1);
        }

        private int methodSeparator(String fqn) {
            int separatorIndex = fqn.lastIndexOf(".");
            if (separatorIndex == -1)
                throw new IllegalArgumentException("'" + fqn + "' is not a fully qualified name");
            return separatorIndex;
        }
    }

    Collection matchingMethods(String fullyQualifiedMethodName) throws IllegalArgumentException {
        MethodFQN parser = new MethodFQN(fullyQualifiedMethodName);
        List matchingMethods = new ArrayList();
        Method[] methods = methods(parser.className);
        for (int i = 0; i < methods.length; i++) {
            if (matchingMethod(methods[i], parser.methodName))
                matchingMethods.add(methods[i]);
        }
        return matchingMethods;
    }

    private Class load(String className) throws IllegalArgumentException {
        Class declaringClass = null;
        try {
            declaringClass = ClassUtils.forName(className);
        } catch (ClassNotFoundException exception) {
            throw new IllegalArgumentException("Class '" + className + "' not found");
        }
        return declaringClass;
    }

    private boolean matchingMethod(Method method, String target) {
        String n = method.getName();
        return n.equals(target) || TextMatcher.isMatch(n, target);
    }

    private Method[] methods(String className) throws IllegalArgumentException {
        Class declaringClass = load(className);
        return declaringClass.getDeclaredMethods();
    }
}