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.UIForm;
24 import javax.faces.component.search.SearchExpressionContext;
25 import javax.faces.component.search.SearchExpressionHint;
26 import javax.faces.component.search.SearchKeywordContext;
27 import javax.faces.component.search.SearchKeywordResolver;
28
29
30
31
32 public class FormSearchKeywordResolver extends SearchKeywordResolver
33 {
34 public static final String FORM_KEYWORD = "form";
35
36 @Override
37 public void resolve(SearchKeywordContext expressionContext, UIComponent current, String keyword)
38 {
39 expressionContext.invokeContextCallback(closest(UIForm.class, current));
40 }
41
42 private static <T> T closest(Class<T> type, UIComponent base)
43 {
44 UIComponent parent = base.getParent();
45
46 while (parent != null)
47 {
48 if (type.isAssignableFrom(parent.getClass()))
49 {
50 return (T) parent;
51 }
52
53 parent = parent.getParent();
54 }
55
56 return null;
57 }
58
59 @Override
60 public boolean isResolverForKeyword(SearchExpressionContext searchExpressionContext, String keyword)
61 {
62 return FORM_KEYWORD.equalsIgnoreCase(keyword);
63 }
64
65 @Override
66 public boolean isPassthrough(SearchExpressionContext searchExpressionContext, String keyword)
67 {
68 if (searchExpressionContext.getExpressionHints() != null &&
69 searchExpressionContext.getExpressionHints().contains(SearchExpressionHint.RESOLVE_CLIENT_SIDE))
70 {
71 return true;
72 }
73 else
74 {
75 return false;
76 }
77 }
78
79 @Override
80 public boolean isLeaf(SearchExpressionContext searchExpressionContext, String keyword)
81 {
82 return false;
83 }
84
85 }