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