1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package javax.faces.component;
20
21 import java.util.Arrays;
22 import java.util.Iterator;
23
24 import javax.faces.context.FacesContext;
25 import javax.faces.convert.Converter;
26 import javax.faces.model.SelectItem;
27 import javax.faces.model.SelectItemGroup;
28
29 class _SelectItemsUtil
30 {
31
32
33
34
35
36
37
38
39
40 public static boolean matchValue(FacesContext context,
41 UIComponent uiComponent, Object value,
42 Iterator<SelectItem> selectItemsIter, Converter converter)
43 {
44 while (selectItemsIter.hasNext())
45 {
46 SelectItem item = selectItemsIter.next();
47 if (item instanceof SelectItemGroup)
48 {
49 SelectItemGroup itemgroup = (SelectItemGroup) item;
50 SelectItem[] selectItems = itemgroup.getSelectItems();
51 if (selectItems != null
52 && selectItems.length > 0
53 && matchValue(context, uiComponent, value, Arrays
54 .asList(selectItems).iterator(), converter))
55 {
56 return true;
57 }
58 }
59 else
60 {
61 Object itemValue = _convertOrCoerceValue(context,
62 uiComponent, value, item, converter);
63 if (value == itemValue || value.equals(itemValue))
64 {
65 return true;
66 }
67 }
68 }
69 return false;
70 }
71
72
73
74
75
76
77
78
79
80 public static boolean isNoSelectionOption(FacesContext context,
81 UIComponent uiComponent, Object value,
82 Iterator<SelectItem> selectItemsIter, Converter converter)
83 {
84 while (selectItemsIter.hasNext())
85 {
86 SelectItem item = selectItemsIter.next();
87 if (item instanceof SelectItemGroup)
88 {
89 SelectItemGroup itemgroup = (SelectItemGroup) item;
90 SelectItem[] selectItems = itemgroup.getSelectItems();
91 if (selectItems != null
92 && selectItems.length > 0
93 && isNoSelectionOption(context, uiComponent, value,
94 Arrays.asList(selectItems).iterator(),
95 converter))
96 {
97 return true;
98 }
99 }
100 else if (item.isNoSelectionOption())
101 {
102 Object itemValue = _convertOrCoerceValue(context, uiComponent,
103 value, item, converter);
104 if (value == itemValue || value.equals(itemValue))
105 {
106 return true;
107 }
108 }
109 }
110 return false;
111 }
112
113
114
115
116
117 private static Object _convertOrCoerceValue(FacesContext facesContext,
118 UIComponent uiComponent, Object value, SelectItem selectItem,
119 Converter converter)
120 {
121 Object itemValue = selectItem.getValue();
122 if (converter != null && itemValue instanceof String)
123 {
124 itemValue = converter.getAsObject(facesContext, uiComponent,
125 (String) itemValue);
126 }
127 else
128 {
129
130
131
132
133
134
135
136
137 try
138 {
139 if (value instanceof java.lang.Enum)
140 {
141
142
143
144
145
146 Class targetClass = value.getClass();
147 if (targetClass != null && !targetClass.isEnum())
148 {
149 targetClass = targetClass.getSuperclass();
150 }
151 itemValue = _ClassUtils.convertToTypeNoLogging(facesContext, itemValue, targetClass);
152 }
153 else
154 {
155 itemValue = _ClassUtils.convertToTypeNoLogging(facesContext, itemValue, value.getClass());
156 }
157 }
158 catch (IllegalArgumentException e)
159 {
160
161 }
162 catch (Exception e)
163 {
164
165 }
166 }
167 return itemValue;
168 }
169
170 }