Clover Coverage Report - Atlassian Core
Coverage timestamp: Sun Nov 30 2008 18:33:35 CST
28   112   16   3.5
14   71   0.57   4
8     2  
2    
 
 
  ListFilter       Line # 12 9 5 87.5% 0.875
  ListFilter.FilteredIterator       Line # 17 19 11 79.4% 0.7941176
 
  (2)
 
1    package com.atlassian.core.util.filter;
2   
3    import com.atlassian.core.util.filter.Filter;
4   
5    import java.util.List;
6    import java.util.Iterator;
7    import java.util.ArrayList;
8   
9    /**
10    * Filter the contents of a list based on some criteria.
11    */
 
12    public class ListFilter
13    {
14    private Filter filter;
15    private static final Object MYNULL = new Object();
16   
 
17    private class FilteredIterator implements Iterator
18    {
19    private Iterator innerIterator;
20   
21    // We need to define our own "null", since there may be real
22    // nulls in a list. Funky, eh.
23    private Object savedObject = MYNULL;
24   
 
25  9 toggle public FilteredIterator(Iterator innerIterator)
26    {
27  9 this.innerIterator = innerIterator;
28    }
29   
 
30  3 toggle public void remove()
31    {
32  3 innerIterator.remove();
33    }
34   
 
35  52 toggle public boolean hasNext()
36    {
37  52 if (savedObject != MYNULL)
38  12 return true;
39   
40  49 while (innerIterator.hasNext())
41    {
42  36 savedObject = innerIterator.next();
43  36 if (filter.isIncluded(savedObject))
44  27 return true;
45    }
46  13 savedObject = MYNULL;
47   
48  13 return false;
49    }
50   
 
51  27 toggle public Object next()
52    {
53  27 if (savedObject != MYNULL)
54  27 return clearSavedObject();
55   
56  0 while (true)
57    {
58  0 Object o = innerIterator.next();
59  0 if (filter.isIncluded(o))
60  0 return o;
61    }
62    }
63   
 
64  27 toggle private Object clearSavedObject()
65    {
66  27 Object ret = savedObject;
67  27 savedObject = MYNULL;
68  27 return ret;
69    }
70    }
71   
72    /**
73    * Constructor, taking the filter implementation that will be used to
74    * filter the list.
75    *
76    * @param filter the filter implementation that will be used to filter the
77    * list.
78    */
 
79  9 toggle public ListFilter(Filter filter)
80    {
81  9 this.filter = filter;
82    }
83   
84    /**
85    * Filter the contents of a list. Returns a new list with the filtered
86    * objects removed. Does not change the list passed in.
87    *
88    * @param list the list to filter
89    * @return a new list with the filtered objects removed.
90    */
 
91  4 toggle public List filterList(List list)
92    {
93  4 if (list == null)
94  0 return list;
95   
96  4 List filteredList = new ArrayList();
97  4 Iterator i = filterIterator(list.iterator());
98  16 while (i.hasNext())
99  12 filteredList.add(i.next());
100   
101  4 return filteredList;
102    }
103   
104    /**
105    * Filter the contents of an iterator. Returns an iterator that will only
106    * return un-filtered members of the supplied iterator.
107    */
 
108  9 toggle public Iterator filterIterator(Iterator iterator)
109    {
110  9 return new FilteredIterator(iterator);
111    }
112    }