1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.struts2.util;
19
20 import java.util.ArrayList;
21 import java.util.Iterator;
22 import java.util.List;
23
24 import com.opensymphony.xwork2.Action;
25
26
27 /***
28 * A bean that takes several iterators and outputs them in sequence
29 *
30 * @see org.apache.struts2.components.AppendIterator
31 * @see org.apache.struts2.views.jsp.iterator.AppendIteratorTag
32 */
33 public class AppendIteratorFilter extends IteratorFilterSupport implements Iterator, Action {
34
35 List iterators = new ArrayList();
36
37
38 List sources = new ArrayList();
39
40
41
42 public void setSource(Object anIterator) {
43 sources.add(anIterator);
44 }
45
46
47 public String execute() {
48
49 for (int i = 0; i < sources.size(); i++) {
50 Object source = sources.get(i);
51 iterators.add(getIterator(source));
52 }
53
54 return SUCCESS;
55 }
56
57
58 public boolean hasNext() {
59 if (iterators.size() > 0) {
60 return (((Iterator) iterators.get(0)).hasNext());
61 } else {
62 return false;
63 }
64 }
65
66 public Object next() {
67 try {
68 return ((Iterator) iterators.get(0)).next();
69 } finally {
70 if (iterators.size() > 0) {
71 if (!((Iterator) iterators.get(0)).hasNext()) {
72 iterators.remove(0);
73 }
74 }
75 }
76 }
77
78 public void remove() {
79 throw new UnsupportedOperationException();
80 }
81 }