KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > kohsuke > stapler > FunctionList


1 package org.kohsuke.stapler;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Arrays JavaDoc;
5 import java.util.Collection JavaDoc;
6 import java.util.Iterator JavaDoc;
7 import java.util.List JavaDoc;
8
9 /**
10  * Immutable list of {@link Function}s.
11  *
12  * @author Kohsuke Kawaguchi
13  */

14 final class FunctionList implements Iterable JavaDoc<Function> {
15     private final Function[] functions;
16
17     public FunctionList(Function... functions) {
18         this.functions = functions;
19     }
20
21     public FunctionList(Collection JavaDoc<Function> functions) {
22         this.functions = functions.toArray(new Function[0]);
23     }
24
25     private FunctionList filter(Filter f) {
26         List JavaDoc<Function> r = new ArrayList JavaDoc<Function>();
27         for (Function m : functions)
28             if (f.keep(m))
29                 r.add(m);
30         return new FunctionList(r.toArray(new Function[0]));
31     }
32
33     public Iterator JavaDoc<Function> iterator() {
34         return Arrays.asList(functions).iterator();
35     }
36
37     //public int length() {
38
// return functions.length;
39
//}
40
//
41
//public Method get(int i) {
42
// return functions[i];
43
//}
44

45     public interface Filter {
46         boolean keep(Function m);
47     }
48
49     /**
50      * Returns {@link Function}s that start with the given prefix.
51      */

52     public FunctionList prefix(final String JavaDoc prefix) {
53         return filter(new Filter() {
54             public boolean keep(Function m) {
55                 return m.getName().startsWith(prefix);
56             }
57         });
58     }
59
60     /**
61      * Returns {@link Function}s that have the given name.
62      */

63     public FunctionList name(final String JavaDoc name) {
64         return filter(new Filter() {
65             public boolean keep(Function m) {
66                 return m.getName().equals(name);
67             }
68         });
69     }
70
71     /**
72      * Returns {@link Function}s that has the given type parameters
73      */

74     public FunctionList signature(final Class JavaDoc... args) {
75         return filter(new Filter() {
76             public boolean keep(Function m) {
77                 return Arrays.equals(m.getParameterTypes(),args);
78             }
79         });
80     }
81 }
82
Popular Tags