private void addValueTasks(TreeSet<WriteTask> tasks, Cursor cursor, List<FieldDescriptor> fields, Object value, int rowHeight) {
int colNum = cursor.getColNum();
int rowNum = cursor.getRowNum();
if (value != null && value.getClass().isArray()) {
int count = Array.getLength(value);
int heightLeft = rowHeight;
for (int i = 0; i < count; i++) {
Object elem = Array.get(value, i);
int height = getRowHeight(elem, fields);
if (i < count - 1) {
addValueTasks(tasks, new Cursor(rowNum, colNum), fields, elem, height);
heightLeft -= height;
} else {
addValueTasks(tasks, new Cursor(rowNum, colNum), fields, elem, heightLeft);
}
rowNum += height;
}
} else {
for (FieldDescriptor fieldDescriptor : fields) {
Object fieldValue = ExportUtils.fieldValue(value, fieldDescriptor.getField());
List<FieldDescriptor> children = fieldDescriptor.getChildren();
if (children == null) {
tasks.add(new WriteTask(new Cursor(rowNum, colNum), fieldValue, styles.parameterValue, rowHeight));
} else {
addValueTasks(tasks, new Cursor(rowNum, colNum), children, fieldValue, rowHeight);
}
colNum += fieldDescriptor.getLeafNodeCount();
}
}
}