01: /*
02: * Copyright 2002-2005 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
05: * in compliance with the License. You may obtain a copy of the License at
06: *
07: * http://www.apache.org/licenses/LICENSE-2.0
08: *
09: * Unless required by applicable law or agreed to in writing, software distributed under the License
10: * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11: * or implied. See the License for the specific language governing permissions and limitations under
12: * the License.
13: */
14:
15: package org.strecks.util;
16:
17: import java.beans.PropertyDescriptor;
18: import java.lang.reflect.Method;
19:
20: import org.strecks.exceptions.ApplicationRuntimeException;
21:
22: /**
23: * Class taken originally from Spring Framework. Contains static convenience methods for JavaBeans:
24: * for instantiating beans, checking bean property types, copying bean properties, etc.
25: *
26: * <p>
27: * Mainly for use within the framework, but to some degree also useful for application classes.
28: *
29: * <p>
30: * Phil Zoio: lifted from Spring source and package renamed to remove Spring as a runtime mandatory
31: * distribution file. Removed unneeded methods. Reformatted.
32: * </p>
33: *
34: * @author Rod Johnson
35: * @author Juergen Hoeller
36: * @author Rob Harrop
37: * @author Phil Zoio
38: */
39: public abstract class BeanUtils {
40:
41: /**
42: * Retrieve the JavaBeans <code>PropertyDescriptor</code>s of a given class.
43: * @param clazz
44: * the Class to retrieve the PropertyDescriptors for
45: * @return an array of <code>PropertyDescriptors</code> for the given class
46: */
47: public static PropertyDescriptor[] getPropertyDescriptors(
48: Class clazz) throws ApplicationRuntimeException {
49: CachedIntrospectionResults cr = CachedIntrospectionResults
50: .forClass(clazz);
51: return cr.getBeanInfo().getPropertyDescriptors();
52: }
53:
54: /**
55: * Find a JavaBeans <code>PropertyDescriptor</code> for the given method, with the method
56: * either being the read method or the write method for that bean property.
57: * @param method
58: * the method to find a corresponding PropertyDescriptor for
59: * @return the corresponding PropertyDescriptor, or null if none
60: */
61: public static PropertyDescriptor findPropertyForMethod(Method method)
62: throws ApplicationRuntimeException {
63: Assert.notNull(method, "method must not be null");
64: PropertyDescriptor[] pds = getPropertyDescriptors(method
65: .getDeclaringClass());
66: for (int i = 0; i < pds.length; i++) {
67: if (method.equals(pds[i].getReadMethod())
68: || method.equals(pds[i].getWriteMethod())) {
69: return pds[i];
70: }
71: }
72: return null;
73: }
74:
75: }
|