View Javadoc
1   package com.google.code.beanmatchers;
2   
3   import static com.google.code.beanmatchers.BeanOperations.instantiateBean;
4   import static com.google.code.beanmatchers.BeanOperations.invokeGetter;
5   import static com.google.code.beanmatchers.BeanOperations.invokeSetter;
6   import static com.google.code.beanmatchers.BeanOperations.propertyDescriptors;
7   
8   import java.beans.PropertyDescriptor;
9   import java.util.List;
10  
11  class JavaBean {
12  
13    private final Object targetBean;
14    private final PropertyDescriptor[] descriptors;
15  
16    public JavaBean(Object targetBean) {
17      this.targetBean = targetBean;
18      descriptors = propertyDescriptors(targetBean);
19    }
20  
21    public JavaBean(Class targetBeanType) {
22      this(instantiateBean(targetBeanType));
23    }
24  
25    public Class beanType() {
26      return targetBean.getClass();
27    }
28  
29    public Class<?> propertyType(String propertyName) {
30      return descriptorForName(propertyName).getPropertyType();
31    }
32  
33    public void setProperty(String propertyName, Object value) {
34      invokeSetter(targetBean, descriptorForName(propertyName), value);
35    }
36  
37    public Object getProperty(String propertyName) {
38      return invokeGetter(targetBean, descriptorForName(propertyName));
39    }
40  
41    private PropertyDescriptor descriptorForName(String propertyName) {
42      for (PropertyDescriptor propertyDescriptor : descriptors) {
43        if (propertyDescriptor.getName().equals(propertyName)) {
44          return propertyDescriptor;
45        }
46      }
47      throw new BeanMatchersException(
48          "No property named '" + propertyName + "' on bean " + targetBean);
49    }
50  
51    public List<String> properties() {
52      return BeanOperations.properties(descriptors);
53    }
54  
55    public String toString() {
56      return targetBean.toString();
57    }
58  
59    @Override
60    public int hashCode() {
61      return targetBean.hashCode();
62    }
63  
64    @Override
65    public boolean equals(Object object) {
66      if (object instanceof JavaBean) {
67        return targetBean.equals(((JavaBean) object).targetBean);
68      } else {
69        return targetBean.equals(object);
70      }
71    }
72  }