[Struts] Populate Potential new Element in an array
28/01/2009
/**
* Populate the bean prefix using request parameters.
* @param request The HTTP request
* @param form ..
* @param arrayKey ..
* @param arrayItemClazz ..
*/
public static void getPotentialNewElement(final HttpServletRequest request, final Object beanForm, final String arrayKey, final Class arrayItemClazz) throws Exception {
Object array = ReflectHelper.invokeGetter(beanForm, arrayKey);
if (array.getClass().isArray()) {
int offsetIndex = Array.getLength(array);
Object newArrayElement = null;
List getters = ReflectHelper.getGettersRecursivly(arrayItemClazz);
do {
for (Iterator iter = getters.iterator(); iter.hasNext();) {
Method getter = (Method) iter.next();
if (getter.getReturnType().getName().startsWith("java.lang.String")) {
String getterKey = ReflectHelper.getFieldName(getter);
String value = request.getParameter(arrayKey + "[" + offsetIndex + "]." + getter);
if (value != null) {
if (newArrayElement == null) {
newArrayElement = ReflectHelper.newInstance(arrayItemClazz.getName());
}
ReflectHelper.invokeSetter(newArrayElement, getterKey, value, String.class);
}
}
}
if (newArrayElement != null) {
Object newArray = Array.newInstance(arrayItemClazz, offsetIndex + 1);
for (int i = 0; i < offsetIndex; ++i) {
Array.set(newArray, i, Array.get(array, i));
}
offsetIndex++;
Array.set(newArray, offsetIndex, newArrayElement);
}
} while (newArrayElement != null);
}
}