1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.component.search;
21
22 import javax.faces.component.UIComponent;
23 import javax.faces.component.search.SearchExpressionContext;
24 import javax.faces.component.search.SearchKeywordContext;
25 import javax.faces.component.search.SearchKeywordResolver;
26
27
28
29
30 public class CompositeSearchKeywordResolver extends SearchKeywordResolver
31 {
32 private int size;
33
34 private SearchKeywordResolver[] resolvers;
35
36 public CompositeSearchKeywordResolver()
37 {
38 this.size = 0;
39 this.resolvers = new SearchKeywordResolver[2];
40 }
41
42 public void add(SearchKeywordResolver elResolver)
43 {
44 if (elResolver == null)
45 {
46 throw new NullPointerException();
47 }
48
49 if (this.size >= this.resolvers.length)
50 {
51 SearchKeywordResolver[] nr = new SearchKeywordResolver[this.size * 2];
52 System.arraycopy(this.resolvers, 0, nr, 0, this.size);
53 this.resolvers = nr;
54 }
55 this.resolvers[this.size++] = elResolver;
56 }
57
58 @Override
59 public void resolve(SearchKeywordContext context, UIComponent current, String keyword)
60 {
61 context.setKeywordResolved(false);
62 int sz = this.size;
63 for (int i = 0; i < sz; i++)
64 {
65 if (this.resolvers[i].isResolverForKeyword(context.getSearchExpressionContext(), keyword))
66 {
67 this.resolvers[i].resolve(context, current, keyword);
68 if (context.isKeywordResolved())
69 {
70 return;
71 }
72 }
73 }
74 }
75
76 @Override
77 public boolean isResolverForKeyword(SearchExpressionContext searchExpressionContext, String keyword)
78 {
79 int sz = this.size;
80 for (int i = 0; i < sz; i++)
81 {
82 if (this.resolvers[i].isResolverForKeyword(searchExpressionContext, keyword))
83 {
84 return true;
85 }
86 }
87 return false;
88 }
89
90 @Override
91 public boolean isPassthrough(SearchExpressionContext searchExpressionContext, String keyword)
92 {
93 int sz = this.size;
94 for (int i = 0; i < sz; i++)
95 {
96 if (this.resolvers[i].isResolverForKeyword(searchExpressionContext, keyword))
97 {
98 return this.resolvers[i].isPassthrough(searchExpressionContext, keyword);
99 }
100 }
101 return false;
102 }
103
104 @Override
105 public boolean isLeaf(SearchExpressionContext searchExpressionContext, String keyword)
106 {
107 int sz = this.size;
108 for (int i = 0; i < sz; i++)
109 {
110 if (this.resolvers[i].isResolverForKeyword(searchExpressionContext, keyword))
111 {
112 return this.resolvers[i].isLeaf(searchExpressionContext, keyword);
113 }
114 }
115 return false;
116 }
117 }