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 java.util.List;
23 import javax.faces.component.UIComponent;
24 import javax.faces.component.search.UntargetableComponent;
25 import javax.faces.component.search.SearchExpressionContext;
26 import javax.faces.component.search.SearchKeywordContext;
27 import javax.faces.component.search.SearchKeywordResolver;
28
29
30
31
32 public class NextSearchKeywordResolver extends SearchKeywordResolver
33 {
34 public static final String NEXT_KEYWORD = "next";
35
36 @Override
37 public void resolve(SearchKeywordContext expressionContext, UIComponent current, String keyword)
38 {
39 UIComponent parent = current.getParent();
40 if (parent.getChildCount() > 1)
41 {
42 List<UIComponent> children = parent.getChildren();
43 int index = children.indexOf(current);
44
45 if (index < parent.getChildCount() - 1)
46 {
47 int nextIndex = -1;
48 do
49 {
50 index++;
51 if(!(children.get(index) instanceof UntargetableComponent))
52 {
53 nextIndex = index;
54 }
55 } while (nextIndex == -1 && index < parent.getChildCount() - 1);
56
57 if (nextIndex != -1)
58 {
59 expressionContext.invokeContextCallback(children.get(nextIndex));
60 }
61 }
62 }
63 expressionContext.setKeywordResolved(true);
64 }
65
66 @Override
67 public boolean isResolverForKeyword(SearchExpressionContext searchExpressionContext, String keyword)
68 {
69 return NEXT_KEYWORD.equalsIgnoreCase(keyword);
70 }
71
72 @Override
73 public boolean isPassthrough(SearchExpressionContext searchExpressionContext, String keyword)
74 {
75 return false;
76 }
77
78 @Override
79 public boolean isLeaf(SearchExpressionContext searchExpressionContext, String keyword)
80 {
81 return false;
82 }
83
84 }