Author: michiel
Date: 2010-04-20 11:36:05 +0200 (Tue, 20 Apr 2010)
New Revision: 41964
Modified:
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
Log:
MMB-1951
Modified:
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
===================================================================
---
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
2010-04-20 09:35:08 UTC (rev 41963)
+++
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
2010-04-20 09:36:05 UTC (rev 41964)
@@ -277,7 +277,7 @@
}
}
- ListSorter.sort(returnList, (String) comparator.getValue(this), this);
+ returnList = ListSorter.sort(returnList, (String)
comparator.getValue(this), this);
fieldIterator = returnList.iterator();
//this is where we do the search
Modified:
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
===================================================================
---
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
2010-04-20 09:35:08 UTC (rev 41963)
+++
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
2010-04-20 09:36:05 UTC (rev 41964)
@@ -251,10 +251,10 @@
}
}
}
- ListSorter.sort(nodes, (String) comparator.getValue(thisTag), thisTag);
+ returnList = (BridgeList<Node>) ListSorter.sort(nodes, (String)
comparator.getValue(thisTag), thisTag);
if (trim && (max != Attribute.NULL || offset != Attribute.NULL)) {
- int currentSize = nodes.size();
+ int currentSize = returnList.size();
int maxi = max.getInt(thisTag, currentSize);
int maxx = (maxi > currentSize ? currentSize : maxi);
@@ -271,10 +271,9 @@
if (offseti < 0) {
offseti = 0;
}
- nodes = nodes.subList(offseti, to);
+ returnList = returnList.subList(offseti, to);
}
- returnList = nodes;
// returnList is know, now we can serve parent formatter tag
FormatterTag f = thisTag.findParentTag(FormatterTag.class, null,
false);
Modified:
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
===================================================================
---
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
2010-04-20 09:35:08 UTC (rev 41963)
+++
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
2010-04-20 09:36:05 UTC (rev 41964)
@@ -190,7 +190,7 @@
currentItemIndex = - 1; // reset index
- ListSorter.sort(returnList, (String) comparator.getValue(this), this);
+ returnList = ListSorter.sort(returnList, (String)
comparator.getValue(this), this);
iterator = returnList.iterator();
// if we get a result from the query
// evaluate the body , else skip the body
Modified:
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
===================================================================
---
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
2010-04-20 09:35:08 UTC (rev 41963)
+++
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
2010-04-20 09:36:05 UTC (rev 41964)
@@ -102,7 +102,7 @@
helper.overrideWrite(false); // default behavior is not to write to
page
currentItemIndex = -1; // reset index
if (!comparator.equals(Attribute.NULL)) {
- ListSorter.sort((List)returnCollection, (String)
comparator.getValue(this), this);
+ returnCollection = ListSorter.sort((List)returnCollection,
(String) comparator.getValue(this), this);
}
int o = offset.getInt(this, 0);
iterator = returnCollection.iterator();
Modified:
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
===================================================================
---
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
2010-04-20 09:35:08 UTC (rev 41963)
+++
mmbase/branches/MMBase-1_9/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
2010-04-20 09:36:05 UTC (rev 41964)
@@ -13,6 +13,8 @@
import javax.servlet.jsp.JspTagException;
import org.mmbase.bridge.jsp.taglib.TaglibException;
import org.mmbase.bridge.jsp.taglib.ContextReferrerTag;
+import org.mmbase.bridge.BridgeList;
+import org.mmbase.bridge.implementation.BasicList;
import javax.servlet.jsp.PageContext;
import java.util.*;
import java.text.Collator;
@@ -27,20 +29,22 @@
public class ListSorter {
- public static <E> List<E> sort(List<E> list, String comparator,
ContextReferrerTag tag) throws JspTagException {
+ public static <E extends Comparable<? super E>> List<E> sort(List<E> list,
String comparator, ContextReferrerTag tag) throws JspTagException {
if (comparator != null) {
- if (comparator.equals("SHUFFLE")) {
- Collections.shuffle(list);
- } else if (comparator.equals("REVERSE")) {
- Collections.reverse(list);
- } else if (comparator.equals("NATURAL")) {
- Collections.sort((List<? extends Comparable>) list);
- } else if (comparator.equals("CASE_INSENSITIVE")) {
- Collator col = Collator.getInstance(tag.getLocale());
- col.setStrength(Collator.PRIMARY);
- Collections.sort(list, col);
- } else {
- try {
+ try {
+ if (comparator.equals("SHUFFLE")) {
+ // for this entries need not be comparable
+ Collections.shuffle(list);
+ } else if (comparator.equals("REVERSE")) {
+ // for this entries need not be comparable
+ Collections.reverse(list);
+ } else if (comparator.equals("NATURAL")) {
+ Collections.sort(list);
+ } else if (comparator.equals("CASE_INSENSITIVE")) {
+ Collator col = Collator.getInstance(tag.getLocale());
+ col.setStrength(Collator.PRIMARY);
+ Collections.sort(list, col);
+ } else {
PageContext pageContext = tag.getPageContext();
Class<? super E> claz = null;
boolean pageClass = false;
@@ -63,16 +67,19 @@
}
Comparator<? super E> comp = (Comparator<? super E>)
claz.newInstance();
init(comp, pageContext);
- try {
- Collections.sort(list, comp);
- } catch (UnsupportedOperationException uoe) { // some
unmodifiable list?
- // clone it.
- list = new ArrayList<E>(list);
- Collections.sort(list, comp);
- }
- } catch (Exception e) {
- throw new TaglibException(e);
+ Collections.sort(list, comp);
}
+ } catch (UnsupportedOperationException uoe) { // some unmodifiable
list?
+ // clone it.
+ if (list instanceof BridgeList) {
+ list = new BasicList<E>((BridgeList<E>) list);
+ } else {
+ list = new ArrayList<E>(list);
+ }
+
+ return ListSorter.sort(list, comparator, tag);
+ } catch (Exception e) {
+ throw new TaglibException(e);
}
}
return list;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs