int formRowCount = getSize();
for (int i = 0; i < formRowCount; i++) {
Repeater.RepeaterRow thisRow = getRow(i);
boolean found = false;
for (int j = 0; j < cache.size(); j++) {
RepeaterItem item = (RepeaterItem) cache.get(j);
if (item == null) {
break;
}
if (item.getRow() == thisRow) {
// Found the matching row
// TODO we need a way to know if the row was really modified or not, maybe a FormHandler?
tempUpdatedRows.add(item);
found = true;
break;
}
}
if (!found) {
tempInsertedRows.add(thisRow);
}
}
List toDelete = new ArrayList();
for (int j = 0; j < cache.size(); j++) {
RepeaterItem item = (RepeaterItem) cache.get(j);
if (item == null) {
break;
}
boolean found = false;
for (int i = 0; i < formRowCount; i++) {
Repeater.RepeaterRow thisRow = getRow(i);
if (thisRow == item.getRow()) {
found = true;
break;
}
}
if (!found) {
toDelete.add(item);
}
}
for (Iterator iter = tempUpdatedRows.iterator(); iter.hasNext();) {
RepeaterItem ele = (RepeaterItem) iter.next();
collection.updateRow(ele);
}
for (Iterator iter = tempInsertedRows.iterator(); iter.hasNext();) {
RepeaterRow row = (RepeaterRow) iter.next();
collection.addRow(row);
}
for (Iterator iter = toDelete.iterator(); iter.hasNext();) {
RepeaterItem ele = (RepeaterItem) iter.next();
collection.deleteRow(ele);
}
collection.flushCachedItems();
}