bruno 2003/09/09 02:14:52
Modified: src/blocks/woody/java/org/apache/cocoon/woody/binding
RepeaterJXPathBinding.java
Log:
Fixed problem with deleting rows, reported by Hugo Burm.
Revision Changes Path
1.6 +14 -6
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBinding.java
Index: RepeaterJXPathBinding.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/RepeaterJXPathBinding.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- RepeaterJXPathBinding.java 26 Aug 2003 13:55:46 -0000 1.5
+++ RepeaterJXPathBinding.java 9 Sep 2003 09:14:52 -0000 1.6
@@ -185,6 +185,7 @@
//again iterate nodes for deletion
Iterator rowPointers = repeaterContext.iteratePointers(this.rowPath);
+ List rowsToDelete = new ArrayList();
while (rowPointers.hasNext()) {
Pointer jxp = (Pointer) rowPointers.next();
JXPathContext rowContext =
repeaterContext.getRelativeContext(jxp);
@@ -193,12 +194,19 @@
// check if matchPath was in list of updates, if not --> bind
for delete
if (!updatedRowIds.contains(matchId)) {
- if (this.deleteRowBinding != null) {
- this.deleteRowBinding.saveFormToModel(frmModel,
rowContext);
- } else {
- getLogger().warn("RepeaterBinding has detected rows to
delete, " +
- "but misses the <on-delete-row> binding to do it.");
- }
+ rowsToDelete.add(rowContext);
+ }
+ }
+
+ if (rowsToDelete.size() > 0) {
+ if (this.deleteRowBinding == null) {
+ getLogger().warn("RepeaterBinding has detected rows to
delete, " +
+ "but misses the <on-delete-row> binding to do it.");
+ }
+ else {
+ // run backwards through the list, so that we don't get into
trouble by shifting indexes
+ for (int i = rowsToDelete.size() - 1; i >= 0; i--)
+ this.deleteRowBinding.saveFormToModel(frmModel,
rowsToDelete.get(i));
}
}