Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 37013 invoked from network); 6 Dec 2007 20:05:47 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 6 Dec 2007 20:05:47 -0000 Received: (qmail 22010 invoked by uid 500); 6 Dec 2007 20:05:36 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 21892 invoked by uid 500); 6 Dec 2007 20:05:35 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 21881 invoked by uid 99); 6 Dec 2007 20:05:35 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2007 12:05:35 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Dec 2007 20:05:23 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3F8311A9832; Thu, 6 Dec 2007 12:05:26 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r601839 - in /cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding: EnhancedRepeaterJXPathBinding.java RepeaterJXPathBinding.java Date: Thu, 06 Dec 2007 20:05:25 -0000 To: cvs@cocoon.apache.org From: antonio@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071206200526.3F8311A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: antonio Date: Thu Dec 6 12:05:24 2007 New Revision: 601839 URL: http://svn.apache.org/viewvc?rev=601839&view=rev Log: Paginated repeater should work with binding identities if they are available. Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/EnhancedRepeaterJXPathBinding.java cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/EnhancedRepeaterJXPathBinding.java URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/EnhancedRepeaterJXPathBinding.java?rev=601839&r1=601838&r2=601839&view=diff ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/EnhancedRepeaterJXPathBinding.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/EnhancedRepeaterJXPathBinding.java Thu Dec 6 12:05:24 2007 @@ -17,6 +17,7 @@ package org.apache.cocoon.forms.binding; import java.util.Iterator; +import java.util.List; import org.apache.avalon.framework.CascadingRuntimeException; @@ -25,6 +26,7 @@ import org.apache.cocoon.forms.formmodel.Repeater; import org.apache.cocoon.forms.formmodel.Widget; +import org.apache.commons.collections.ListUtils; import org.apache.commons.jxpath.JXPathContext; import org.apache.commons.jxpath.Pointer; @@ -91,7 +93,24 @@ // iterate updated rows. note: we don't iterate over the whole context for (Iterator iter = collection.getUpdatedRows().iterator(); iter.hasNext();) { RepeaterItem item = (RepeaterItem) iter.next(); - getRowBinding().saveFormToModel(item.getRow(), item.getContext()); + Repeater.RepeaterRow thisRow = item.getRow(); + // Get the identity + List identity = getIdentity(thisRow); + if (hasNonNullElements(identity)) { + // iterate nodes to find match + Iterator rowPointers = repeaterContext.iteratePointers(getRowPath()); + while (rowPointers.hasNext()) { + Pointer jxp = (Pointer) rowPointers.next(); + JXPathContext rowContext = repeaterContext.getRelativeContext(jxp); + List contextIdentity = getIdentity(rowContext); + if (ListUtils.isEqualList(identity, contextIdentity)) { + getRowBinding().saveFormToModel(thisRow, rowContext); + break; + } + } + } else { + getRowBinding().saveFormToModel(thisRow, item.getContext().getContextPointer()); + } } for (Iterator iter = collection.getDeletedRows().iterator(); iter.hasNext();) { Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java?rev=601839&r1=601838&r2=601839&view=diff ============================================================================== --- cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java (original) +++ cocoon/branches/BRANCH_2_1_X/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java Thu Dec 6 12:05:24 2007 @@ -315,7 +315,7 @@ * Tests if any of the elements in a List is not null. * @param list */ - private boolean hasNonNullElements(List list) { + protected boolean hasNonNullElements(List list) { Iterator iter = list.iterator(); while (iter.hasNext()) { if (iter.next() != null) { @@ -331,7 +331,7 @@ * @param rowContext * @return List the identity of the row context */ - private List getIdentity(JXPathContext rowContext) { + protected List getIdentity(JXPathContext rowContext) { List identity = Collections.EMPTY_LIST; if (this.identityBinding != null) { JXPathBindingBase[] childBindings = this.identityBinding.getChildBindings(); @@ -370,7 +370,7 @@ * @param row * @return List the identity of the row */ - private List getIdentity(Repeater.RepeaterRow row) { + protected List getIdentity(Repeater.RepeaterRow row) { // quit if we don't have an identity binding List identity = Collections.EMPTY_LIST; if (this.identityBinding != null) {