1 16 17 package org.oddjob.framework; 18 19 20 import java.beans.PropertyDescriptor ; 21 import java.io.IOException ; 22 import java.io.ObjectInputStream ; 23 import java.io.ObjectOutputStream ; 24 import java.io.Serializable ; 25 import java.util.ArrayList ; 26 import java.util.HashMap ; 27 import java.util.List ; 28 29 import org.apache.commons.beanutils.DynaBean; 30 import org.apache.commons.beanutils.DynaClass; 31 import org.apache.commons.beanutils.DynaProperty; 32 import org.apache.commons.beanutils.PropertyUtils; 33 34 35 43 44 public class WrapDynaClass implements DynaClass, Serializable { 45 private static final long serialVersionUID = 20051114; 46 47 49 50 57 private WrapDynaClass(Class beanClass) { 58 59 this.beanClassName = beanClass.getName(); 60 introspect(beanClass); 61 62 } 63 64 65 67 68 72 private final String beanClassName; 73 74 77 private DynaProperty properties[] = null; 78 79 80 85 private HashMap propertiesMap = new HashMap (); 86 87 88 90 91 95 private static HashMap dynaClasses = new HashMap (); 96 97 98 100 101 107 public String getName() { 108 return (this.beanClassName); 109 } 110 111 112 121 public DynaProperty getDynaProperty(String name) { 122 if (name == null) { 123 throw new IllegalArgumentException 124 ("No property name specified"); 125 } 126 return ((DynaProperty) propertiesMap.get(name)); 127 } 128 129 130 139 public DynaProperty[] getDynaProperties() { 140 return (properties); 141 } 142 143 148 public DynaBean newInstance() 149 throws UnsupportedOperationException { 150 throw new UnsupportedOperationException ("Can't create bean instances with this DynaClass."); 151 } 152 153 154 156 157 160 public static void clear() { 161 synchronized (dynaClasses) { 162 dynaClasses.clear(); 163 } 164 } 165 166 167 173 public static WrapDynaClass createDynaClass(Class beanClass) { 174 175 synchronized (dynaClasses) { 176 WrapDynaClass dynaClass = 177 (WrapDynaClass) dynaClasses.get(beanClass); 178 if (dynaClass == null) { 179 dynaClass = new WrapDynaClass(beanClass); 180 dynaClasses.put(beanClass, dynaClass); 181 } 182 return (dynaClass); 183 } 184 185 } 186 187 188 190 191 194 protected void introspect(Class beanClass) { 195 196 PropertyDescriptor regulars[] = 198 PropertyUtils.getPropertyDescriptors(beanClass); 199 if (regulars == null) { 200 regulars = new PropertyDescriptor [0]; 201 } 202 203 List propertyList = new ArrayList (); 205 for (int i = 0; i < regulars.length; i++) { 206 if (regulars[i].getReadMethod() == null) { 207 continue; 208 } 209 DynaProperty dynaProperty = new DynaProperty(regulars[i].getName(), 210 regulars[i].getPropertyType()); 211 propertyList.add(dynaProperty); 212 propertiesMap.put(dynaProperty.getName(), 213 dynaProperty); 214 } 215 properties = (DynaProperty[]) propertyList.toArray(new DynaProperty[0]); 216 } 217 218 221 private void writeObject(ObjectOutputStream s) 222 throws IOException { 223 s.defaultWriteObject(); 224 } 225 226 229 private void readObject(ObjectInputStream s) 230 throws IOException , ClassNotFoundException { 231 s.defaultReadObject(); 232 } 233 234 } 235 | Popular Tags |