/* * Copyright 2005-2006 Stefan Reuter * * 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. * */ package org.asteriskjava.util; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** * Utility class that provides helper methods for reflection that is used by the * fastagi and manager packages to access getter and setter methods.<p> * Client code is not supposed to use this class. * * @author srt */ public class ReflectionUtil { private ReflectionUtil() { // hide constructor } /** * Returns a Map of getter methods of the given class.<p> * The key of the map contains the name of the attribute that can be * accessed by the getter, the value the getter itself (an instance of * java.lang.reflect.Method). A method is considered a getter if its name * starts with "get", it is declared public and takes no arguments. * * @param clazz the class to return the getters for * @return a Map of attributes and their accessor methods (getters) */ public static Map<String, Method> getGetters(final Class clazz) { final Map<String, Method> accessors = new HashMap<String, Method>(); final Method[] methods = clazz.getMethods(); for (Method method : methods) { String name; String methodName; methodName = method.getName(); if (!methodName.startsWith("get")) { continue; } // skip methods with != 0 parameters if (method.getParameterTypes().length != 0) { continue; } // ok seems to be an accessor name = methodName.substring("get".length()).toLowerCase(Locale.ENGLISH); if (name.length() == 0) { continue; } accessors.put(name, method); } return accessors; } /** * Returns a Map of setter methods of the given class.<p> * The key of the map contains the name of the attribute that can be * accessed by the setter, the value the setter itself (an instance of * java.lang.reflect.Method). A method is considered a setter if its name * starts with "set", it is declared public and takes exactly one argument. * * @param clazz the class to return the setters for * @return a Map of attributes and their accessor methods (setters) */ public static Map<String, Method> getSetters(Class clazz) { final Map<String, Method> accessors = new HashMap<String, Method>(); final Method[] methods = clazz.getMethods(); for (Method method : methods) { String name; String methodName; methodName = method.getName(); if (!methodName.startsWith("set")) { continue; } // skip methods with != 1 parameters if (method.getParameterTypes().length != 1) { continue; } // ok seems to be an accessor name = methodName.substring("set".length()).toLowerCase(); accessors.put(name, method); } return accessors; } }