Author: jacopoc Date: Wed Oct 18 09:01:20 2006 New Revision: 465282 URL: http://svn.apache.org/viewvc?view=rev&rev=465282 Log: Added ability to pass (in the context) to a form (widget) a new parameter "overrideFormListSize" that can be used to specify the total size of a list (that could be different from the list passed to the form): this is very useful when pagination is handled manually in scripts. Thanks to Leon Torres for this patch (that I've slightly modified during review): OFBIZ-364.
Modified: incubator/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Modified: incubator/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java?view=diff&rev=465282&r1=465281&r2=465282 ============================================================================== --- incubator/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java (original) +++ incubator/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Wed Oct 18 09:01:20 2006 @@ -98,6 +98,7 @@ protected boolean skipStart = false; protected boolean skipEnd = false; protected boolean hideHeader = false; + protected boolean overridenFormListSize = false; protected List altTargets = new LinkedList(); protected List autoFieldsServices = new LinkedList(); @@ -1107,12 +1108,18 @@ // set low and high index getListLimits(context, obj); - //int listSize = ((Integer) context.get("listSize")).intValue(); + int listSize = ((Integer) context.get("listSize")).intValue(); //int viewIndex = ((Integer) context.get("viewIndex")).intValue(); //int viewSize = ((Integer) context.get("viewSize")).intValue(); int lowIndex = ((Integer) context.get("lowIndex")).intValue(); int highIndex = ((Integer) context.get("highIndex")).intValue(); - + + // we're passed a subset of the list, so use (0, viewSize) range + if (isOverridenFormListSize()) { + lowIndex = 0; + highIndex = ((Integer) context.get("viewSize")).intValue(); + } + if (iter != null) { // render item rows int itemIndex = -1; @@ -1266,10 +1273,12 @@ // render row formatting close formStringRenderer.renderFormatItemRowClose(buffer, localContext, this); } - + + // reduce the highIndex if number of items falls short if ((itemIndex + 1) < highIndex) { highIndex = itemIndex + 1; - context.put("highIndex", new Integer(highIndex)); + // if list size is overridden, use full listSize + context.put("highIndex", new Integer(isOverridenFormListSize() ? listSize : highIndex)); } context.put("actualPageSize", new Integer(highIndex - lowIndex)); @@ -1869,7 +1878,11 @@ public boolean getSkipEnd() { return this.skipEnd; } - + + public boolean isOverridenFormListSize() { + return this.overridenFormListSize; + } + public void setSkipStart(boolean val) { this.skipStart = val; } @@ -1885,7 +1898,11 @@ public void setPaginate(boolean val) { paginate = val; } - + + public void setOverridenFormListSize(boolean overridenFormListSize) { + this.overridenFormListSize = overridenFormListSize; + } + /** * @param string */ @@ -1956,14 +1973,36 @@ return fieldList; } + private int getOverrideFormListSize(Map context) { + int listSize = 0; + Object overrideFormListSize = context.get("overrideFormListSize"); + if (overrideFormListSize != null) { + if (overrideFormListSize instanceof Number) { + listSize = ((Number) overrideFormListSize).intValue(); + } else if (overrideFormListSize instanceof String) { + try { + listSize = Integer.parseInt((String) overrideFormListSize); + } catch (NumberFormatException e) { + Debug.logError(e, "Error getting override list size", module); + } + } else { + Debug.logError("Error getting override list size: Unable to determine size from input [" + overrideFormListSize + "]", module); + } + } + return listSize; + } + public void getListLimits(Map context, Object entryList) { int listSize = 0; int viewIndex = 0; int viewSize = 0; int lowIndex = 0; int highIndex = 0; - - if (entryList instanceof EntityListIterator) { + + listSize = getOverrideFormListSize(context); + if (listSize > 0) { + setOverridenFormListSize(true); + } else if (entryList instanceof EntityListIterator) { EntityListIterator iter = (EntityListIterator) entryList; try { iter.last();