KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > opensymphony > webwork > util > SortIteratorFilter


1 /*
2  * Copyright (c) 2002-2003 by OpenSymphony
3  * All rights reserved.
4  */

5 package com.opensymphony.webwork.util;
6
7 import com.opensymphony.xwork.Action;
8 import org.apache.commons.logging.LogFactory;
9
10 import java.util.*;
11
12
13 /**
14  * A bean that takes an iterator and outputs a subset of it.
15  *
16  * @author Rickard Öberg (rickard@middleware-company.com)
17  * @version $Revision: 1.7 $
18  * @see <related>
19  */

20 public class SortIteratorFilter extends IteratorFilterSupport implements Iterator, Action {
21     //~ Instance fields ////////////////////////////////////////////////////////
22

23     Comparator comparator;
24     Iterator iterator;
25     List list;
26
27     // Attributes ----------------------------------------------------
28
Object JavaDoc source;
29
30     //~ Methods ////////////////////////////////////////////////////////////////
31

32     public void setComparator(Comparator aComparator) {
33         this.comparator = aComparator;
34     }
35
36     public List getList() {
37         return list;
38     }
39
40     // Public --------------------------------------------------------
41
public void setSource(Object JavaDoc anIterator) {
42         source = anIterator;
43     }
44
45     // Action implementation -----------------------------------------
46
public String JavaDoc execute() {
47         if (source == null) {
48             return ERROR;
49         } else {
50             try {
51                 if (!MakeIterator.isIterable(source)) {
52                     LogFactory.getLog(SortIteratorFilter.class.getName()).warn("Cannot create SortIterator for source " + source);
53
54                     return ERROR;
55                 }
56
57                 list = new ArrayList();
58
59                 Iterator i = MakeIterator.convert(source);
60
61                 while (i.hasNext()) {
62                     list.add(i.next());
63                 }
64
65                 // Sort it
66
Collections.sort(list, comparator);
67                 iterator = list.iterator();
68
69                 return SUCCESS;
70             } catch (Exception JavaDoc e) {
71                 LogFactory.getLog(SortIteratorFilter.class.getName()).warn("Error creating sort iterator.", e);
72
73                 return ERROR;
74             }
75         }
76     }
77
78     // Iterator implementation ---------------------------------------
79
public boolean hasNext() {
80         return (source == null) ? false : iterator.hasNext();
81     }
82
83     public Object JavaDoc next() {
84         return iterator.next();
85     }
86
87     public void remove() {
88         throw new UnsupportedOperationException JavaDoc("Remove is not supported in SortIteratorFilter.");
89     }
90 }
91
Popular Tags