{
super.doneParsing();
final String result = getResult();
if (beanUtility == null)
{
throw new ParseException("No current beanUtility", getLocator());
}
try
{
if (array)
{
final Class type = beanUtility.getPropertyType(propertyName);
final HashMap values = new HashMap();
final int elementCount = arrayProperties.size();
for (int i = 0; i < elementCount; i++)
{
final PropertyReadHandler handler = (PropertyReadHandler) arrayProperties.get(i);
values.put(handler.getName(), handler.getResult());
}
final Class componentType = type.getComponentType();
final ArrayList realValues = new ArrayList();
for (int i = 0; i < elementCount; i++)
{
final String text = (String) values.get(String.valueOf(i));
if (text == null)
{
throw new ParseException("Disrupted array - dont play games with me!", getLocator());
}
realValues.add(ObjectConverterFactory.convert(componentType, text, getLocator()));
}
final Object[] o = (Object[]) Array.newInstance(type.getComponentType(), realValues.size());
final Object[] objects = realValues.toArray(o);
beanUtility.setProperty(propertyName, objects);
return;
}
if (propertyType != null)
{
final ClassLoader cl = ObjectUtilities.getClassLoader(DesignerExpressionPropertyReadHandler.class);
final Class c = Class.forName(propertyType, false, cl);
beanUtility.setPropertyAsString(propertyName, c, result);
}
else
{
beanUtility.setProperty(propertyName, ObjectConverterFactory.convert
(beanUtility.getPropertyType(propertyName), result, getLocator()));
}
}
catch (BeanException e)
{
if (isIgnorable())
{
return;
}
throw new ParseException("Unable to assign property '" + propertyName
+ "' to expression '" + expressionName + '\'', e, getLocator());
}
catch (ClassNotFoundException e)
{
if (isIgnorable())
{
return;
}
throw new ParseException("Unable to assign property '" + propertyName
+ "' to expression '" + expressionName + '\'', e, getLocator());
}
}