Author: michiel
Date: 2010-04-20 11:40:17 +0200 (Tue, 20 Apr 2010)
New Revision: 41966

Modified:
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
   
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
Log:
MMB-1951

Modified: 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
       2010-04-20 09:40:06 UTC (rev 41965)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/FieldListTag.java
       2010-04-20 09:40:17 UTC (rev 41966)
@@ -279,7 +279,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/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
     2010-04-20 09:40:06 UTC (rev 41965)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/NodeListHelper.java
     2010-04-20 09:40:17 UTC (rev 41966)
@@ -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/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
      2010-04-20 09:40:06 UTC (rev 41965)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/StringListTag.java
      2010-04-20 09:40:17 UTC (rev 41966)
@@ -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/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
  2010-04-20 09:40:06 UTC (rev 41965)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/functions/ListFunctionTag.java
  2010-04-20 09:40:17 UTC (rev 41966)
@@ -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/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
===================================================================
--- 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
    2010-04-20 09:40:06 UTC (rev 41965)
+++ 
mmbase/trunk/applications/taglib/src/main/java/org/mmbase/bridge/jsp/taglib/util/ListSorter.java
    2010-04-20 09:40:17 UTC (rev 41966)
@@ -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

Reply via email to