001: /* *************************************************************************
002:
003: Millstone(TM)
004: Open Sourced User Interface Library for
005: Internet Development with Java
006:
007: Millstone is a registered trademark of IT Mill Ltd
008: Copyright (C) 2000-2005 IT Mill Ltd
009:
010: *************************************************************************
011:
012: This library is free software; you can redistribute it and/or
013: modify it under the terms of the GNU Lesser General Public
014: license version 2.1 as published by the Free Software Foundation.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: *************************************************************************
026:
027: For more information, contact:
028:
029: IT Mill Ltd phone: +358 2 4802 7180
030: Ruukinkatu 2-4 fax: +358 2 4802 7181
031: 20540, Turku email: info@itmill.com
032: Finland company www: www.itmill.com
033:
034: Primary source for MillStone information and releases: www.millstone.org
035:
036: ********************************************************************** */
037:
038: package org.millstone.base.data.util;
039:
040: import java.beans.Introspector;
041: import java.beans.BeanInfo;
042: import java.beans.PropertyDescriptor;
043: import java.lang.reflect.Method;
044: import java.util.Collection;
045: import java.util.Iterator;
046:
047: import org.millstone.base.data.Property;
048:
049: /** A wrapper class for adding the Item interface to any Java Bean.
050: *
051: * @author IT Mill Ltd.
052: * @version 3.1.1
053: * @since 3.0
054: */
055: public class BeanItem extends PropertysetItem {
056:
057: /** The bean wich this Item is based on. */
058: private Object bean;
059:
060: /** <p>Creates a new instance of BeanItem and adds all properties of a
061: * Java Bean to it. The properties are identified by their respective
062: * bean names.</p>
063: *
064: * <p>Note that this version only supports introspectable bean
065: * properties and their getter and setter methods. Stand-alone "is" and
066: * "are" methods are not supported.</p>
067: *
068: * @param bean the Java Bean to copy properties from
069: */
070: public BeanItem(Object bean) {
071:
072: this .bean = bean;
073:
074: // Try to introspect, if it fails, we just have an empty Item
075: try {
076: // Create bean information
077: BeanInfo info = Introspector.getBeanInfo(bean.getClass());
078: PropertyDescriptor[] pd = info.getPropertyDescriptors();
079:
080: // Add all the bean properties as MethodProperties to this Item
081: for (int i = 0; i < pd.length; i++) {
082: Method getMethod = pd[i].getReadMethod();
083: Method setMethod = pd[i].getWriteMethod();
084: Class type = pd[i].getPropertyType();
085: String name = pd[i].getName();
086:
087: Property p = new MethodProperty(type, bean, getMethod,
088: setMethod);
089: addItemProperty(name, p);
090: }
091: } catch (java.beans.IntrospectionException ignored) {
092: }
093: }
094:
095: /** <p>Creates a new instance of BeanItem and adds all listed properties of a
096: * Java Bean to it - in specified order. The properties are identified by their
097: * respective bean names.</p>
098: *
099: * <p>Note that this version only supports introspectable bean
100: * properties and their getter and setter methods. Stand-alone "is" and
101: * "are" methods are not supported.</p>
102: *
103: * @param bean the Java Bean to copy properties from
104: */
105: public BeanItem(Object bean, Collection propertyIds) {
106:
107: this .bean = bean;
108:
109: // Try to introspect, if it fails, we just have an empty Item
110: try {
111: // Create bean information
112: BeanInfo info = Introspector.getBeanInfo(bean.getClass());
113: PropertyDescriptor[] pd = info.getPropertyDescriptors();
114:
115: // Add all the bean properties as MethodProperties to this Item
116: for (Iterator iter = propertyIds.iterator(); iter.hasNext();) {
117: Object id = iter.next();
118: for (int i = 0; i < pd.length; i++) {
119: String name = pd[i].getName();
120: if (name.equals(id)) {
121: Method getMethod = pd[i].getReadMethod();
122: Method setMethod = pd[i].getWriteMethod();
123: Class type = pd[i].getPropertyType();
124:
125: Property p = new MethodProperty(type, bean,
126: getMethod, setMethod);
127: addItemProperty(name, p);
128: }
129: }
130: }
131:
132: } catch (java.beans.IntrospectionException ignored) {
133: }
134:
135: }
136:
137: /** Get the underlying JavaBean object.
138: * @return the bean object.
139: */
140: public Object getBean() {
141: return bean;
142: }
143:
144: }
|