1 4 package org.oddjob.values.types; 5 6 import java.util.Iterator ; 7 import java.util.Map ; 8 9 import org.apache.commons.beanutils.DynaBean; 10 import org.apache.commons.beanutils.DynaClass; 11 import org.apache.commons.beanutils.LazyDynaBean; 12 import org.apache.commons.beanutils.PropertyUtils; 13 import org.oddjob.arooa.reflect.IntrospectionHelper; 14 15 19 public class PropertyType implements DynaBean { 20 21 private LazyDynaBean props = new LazyDynaBean(); 22 private Object value; 23 private final String name; 24 25 30 public PropertyType() { 31 this.name = null; 32 } 33 34 private PropertyType(String name) { 35 this.name = name; 36 } 37 38 47 public void add(String longName, Object value) { 48 int i = longName.indexOf(PropertyUtils.NESTED_DELIM); 49 String name = longName; 50 if (i > 0) { 51 name = longName.substring(0, i); 52 } 53 54 PropertyType prop = (PropertyType) props.get(name); 55 if (prop == null) { 56 prop = new PropertyType(name); 57 props.set(prop.name, prop); 58 } 59 60 if (i < 0) { 61 prop.value = value; 62 } else { 63 prop.add(longName.substring(i+1), value); 64 } 65 } 66 67 73 public int size() { 74 return props.getMap().size(); 75 } 76 77 80 public boolean contains(String name, String key) { 81 return false; 83 } 84 85 88 public Object get(String name) { 89 return (PropertyType) props.get(name); 90 } 91 92 95 public Object get(String name, int index) { 96 return null; 97 } 98 101 public Object get(String name, String key) { 102 return null; 103 } 104 107 public DynaClass getDynaClass() { 108 return props.getDynaClass(); 109 } 110 111 115 public void remove(String name, String key) { 116 props.remove(name, key); 117 } 118 119 123 public void set(String name, int index, Object value) { 124 throw new UnsupportedOperationException ("Can not set an indexed property."); 125 } 126 127 130 public void set(String name, Object value) { 131 PropertyType prop = (PropertyType) props.get(name); 132 if (prop == null) { 133 prop = new PropertyType(name); 134 props.set(prop.name, prop); 135 } 136 prop.value = value; 137 } 138 139 142 public void set(String name, String key, Object value) { 143 throw new UnsupportedOperationException ( 144 "Can not set a mapped property [" + name + "(" + key + ")]"); 145 146 } 147 148 155 public Object valueFor(Class required) { 156 return IntrospectionHelper.valueFor(value, required); 157 } 158 159 164 public String toString() { 165 if (value != null) { 166 return value.toString(); 167 } 168 if (size() == 0) { 169 return null; 170 } 171 StringBuffer results = new StringBuffer (); 172 for (Iterator it = props.getMap().entrySet().iterator(); it.hasNext(); ) { 173 Map.Entry entry = (Map.Entry ) it.next(); 174 results.append("("); 175 results.append(entry.getKey().toString()); 176 results.append("="); 177 results.append(entry.getValue().toString()); 178 results.append(")"); 179 } 180 return results.toString(); 181 } 182 } 183 | Popular Tags |