View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.student.common.validator.old;
17  
18  import java.beans.BeanInfo;
19  import java.beans.IntrospectionException;
20  import java.beans.Introspector;
21  import java.beans.PropertyDescriptor;
22  import java.util.HashMap;
23  import java.util.Map;
24  
25  public class BeanConstraintDataProvider implements ConstraintDataProvider {
26  
27  	Map<String, Object> dataMap = null;
28  
29  	/*
30  	 * The only place where the dataprovider should get initialized is
31  	 * BeanConstraintSetupFactory
32  	 */
33  	protected BeanConstraintDataProvider() {
34  
35  	}
36  	//TODO fix it later. 
37      public String getPath(){
38          return "";
39      }
40  	@Override
41  	public void initialize(Object o) {
42  
43  		dataMap = new HashMap<String, Object>();
44  		
45  		Map<String, PropertyDescriptor> beanInfo = getBeanInfo(o.getClass());
46  
47  		for (String propName : beanInfo.keySet()) {
48  			PropertyDescriptor pd = beanInfo.get(propName);
49  			Object value = null;
50  			try {
51  				value = pd.getReadMethod().invoke(o);
52  			} catch (Exception e) {
53  				// TODO: Should not be ignoring exception
54  			}
55  
56  			dataMap.put(propName, value);
57  		}
58  	}
59  
60  	@Override
61  	public String getObjectId() {
62  		return (dataMap.containsKey("id") && null != dataMap.get("id")) ? dataMap.get("id").toString() : null;
63  	}
64  
65  	@Override
66  	public Object getValue(String fieldKey) {
67  		return dataMap.get(fieldKey);
68  	}
69  
70  	@Override
71  	public Boolean hasField(String fieldKey) {
72  		return dataMap.containsKey(fieldKey);
73  	}
74  
75  	private Map<String, PropertyDescriptor> getBeanInfo(Class<?> clazz) {
76  		Map<String, PropertyDescriptor> properties = new HashMap<String, PropertyDescriptor>();
77  		BeanInfo beanInfo = null;
78  		try {
79  			beanInfo = Introspector.getBeanInfo(clazz);
80  		} catch (IntrospectionException e) {
81  			throw new RuntimeException(e);
82  		}
83  		PropertyDescriptor[] propertyDescriptors = beanInfo
84  				.getPropertyDescriptors();
85  		for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
86  			properties.put(propertyDescriptor.getName(), propertyDescriptor);
87  		}
88  		return properties;
89  	}
90  }