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