1 42 package org.jfree.xml.factory.objects; 43 44 import java.lang.reflect.Array ; 45 import java.util.ArrayList ; 46 import java.util.Iterator ; 47 48 import org.jfree.util.Log; 49 50 56 public class ArrayObjectDescription extends AbstractObjectDescription { 57 58 65 public ArrayObjectDescription(final Class c) { 66 super(c); 67 if (!c.isArray()) { 68 throw new IllegalArgumentException ("Need an array class"); 69 } 70 } 71 72 77 public Object createObject() { 78 try { 79 final Integer size = (Integer ) getParameter("size"); 80 if (size == null) { 81 final ArrayList l = new ArrayList (); 82 int counter = 0; 83 while (getParameterDefinition(String.valueOf(counter)) != null) { 84 final Object value = getParameter(String.valueOf(counter)); 85 if (value == null) { 86 break; 87 } 88 89 l.add(value); 90 counter += 1; 91 } 92 93 final Object o = Array.newInstance 94 (getObjectClass().getComponentType(), l.size()); 95 for (int i = 0; i < l.size(); i++) { 96 Array.set(o, i, l.get(i)); 97 } 98 return o; 99 } 100 else { 101 final Object o = Array.newInstance 103 (getObjectClass().getComponentType(), size.intValue()); 104 for (int i = 0; i < size.intValue(); i++) { 105 Array.set(o, i, getParameter(String.valueOf(i))); 106 } 107 return o; 108 } 109 } 110 catch (Exception ie) { 111 Log.warn("Unable to instantiate Object", ie); 112 return null; 113 } 114 } 115 116 124 public void setParameterFromObject(final Object o) throws ObjectFactoryException { 125 if (o == null) { 126 throw new ObjectFactoryException("Given object is null."); 127 } 128 129 if (!o.getClass().isArray()) { 130 throw new ObjectFactoryException("Given object is no array"); 131 } 132 133 if (!getObjectClass().isAssignableFrom(o.getClass())) { 134 throw new ObjectFactoryException("Given object is incompatible with base class"); 135 } 136 137 final int size = Array.getLength(o); 138 setParameter("size", new Integer (size)); 139 for (int i = 0; i < size; i++) { 140 setParameter(String.valueOf(i), Array.get(o, i)); 141 } 142 } 143 144 151 private int parseParameterName(final String name) { 152 try { 153 return Integer.parseInt(name); 154 } 155 catch (Exception e) { 156 return -1; 157 } 158 } 159 160 168 public Class getParameterDefinition(final String name) { 169 if (name.equals("size")) { 170 return Integer.TYPE; 171 } 172 final int par = parseParameterName(name); 173 if (par < 0) { 174 return null; 175 } 176 return getObjectClass().getComponentType(); 177 } 178 179 184 public Iterator getParameterNames() { 185 final Integer size = (Integer ) getParameter("size"); 186 if (size == null) { 187 return getDefinedParameterNames(); 188 } 189 else { 190 final ArrayList l = new ArrayList (); 191 l.add("size"); 192 for (int i = 0; i < size.intValue(); i++) { 193 l.add(String.valueOf(i)); 194 } 195 return l.iterator(); 196 } 197 } 198 199 204 public ObjectDescription getInstance() { 205 return new ArrayObjectDescription(getObjectClass()); 206 } 207 } 208 | Popular Tags |