KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > bridge > jsp > taglib > util > ListSorter


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10
11 package org.mmbase.bridge.jsp.taglib.util;
12
13 import javax.servlet.jsp.JspTagException JavaDoc;
14 import org.mmbase.bridge.jsp.taglib.TaglibException;
15 import org.mmbase.bridge.jsp.taglib.ContextReferrerTag;
16 import javax.servlet.jsp.PageContext JavaDoc;
17 import java.util.*;
18 import java.text.Collator JavaDoc;
19
20 /**
21  * A helper class for Lists, to implement an attribute 'comparator'
22  *
23  * @author Michiel Meeuwissen
24  * @version $Id: ListSorter.java,v 1.8 2006/05/10 12:57:20 michiel Exp $
25  * @since MMBase-1.7
26  */

27 public class ListSorter {
28
29
30     public static List sort(List list, String JavaDoc comparator, ContextReferrerTag tag) throws JspTagException JavaDoc {
31         if (comparator != null) {
32             if (comparator.equals("SHUFFLE")) {
33                 Collections.shuffle(list);
34             } else if (comparator.equals("REVERSE")) {
35                 Collections.reverse(list);
36             } else if (comparator.equals("NATURAL")) {
37                 Collections.sort(list);
38             } else if (comparator.equals("CASE_INSENSITIVE")) {
39                 Collator JavaDoc col = Collator.getInstance(tag.getLocale());
40                 col.setStrength(Collator.PRIMARY);
41                 Collections.sort(list, col);
42             } else {
43                 try {
44                     PageContext JavaDoc pageContext = tag.getPageContext();
45                     Class JavaDoc claz = null;
46                     boolean pageClass = false;
47                     if (comparator.indexOf(".") == -1) {
48                         Class JavaDoc[] classes = pageContext.getPage().getClass().getDeclaredClasses();
49                         for (int i = 0; i < classes.length; i++) {
50                             if (classes[i].toString().endsWith(comparator)) {
51                                 claz = classes[i];
52                                 pageClass = true;
53                                 break;
54                             }
55                         }
56                     }
57                     if (claz == null) {
58                         claz = Class.forName(comparator);
59                     }
60
61                     if (pageClass && ! java.lang.reflect.Modifier.isStatic(claz.getModifiers())) {
62                         throw new TaglibException("Don't know how to instantiate non-static inner class: " + comparator + " (make it static please)");
63                     }
64                     Comparator comp = (Comparator) claz.newInstance();
65                     init(comp, pageContext);
66                     Collections.sort(list, comp);
67                 } catch (Exception JavaDoc e) {
68                     throw new TaglibException(e);
69                 }
70             }
71         }
72         return list;
73
74     }
75
76     private static final Class JavaDoc[] PAGE_CONTEXT_ARRAY = { PageContext JavaDoc.class };
77
78     private static void init(Comparator comp, PageContext JavaDoc pageContext) {
79         try {
80             java.lang.reflect.Method JavaDoc initMethod = comp.getClass().getMethod("init" , PAGE_CONTEXT_ARRAY);
81             initMethod.invoke(comp, new Object JavaDoc[] { pageContext });
82         } catch(Exception JavaDoc e){
83             // never mind
84
}
85     }
86
87
88 }
89
Popular Tags