1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.custom.selectitems;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.Iterator;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Map.Entry;
27
28 import javax.faces.context.FacesContext;
29 import javax.faces.model.SelectItem;
30 import javax.faces.model.SelectItemGroup;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public abstract class AbstractUISelectItems extends javax.faces.component.UISelectItems {
49
50 public static final String COMPONENT_TYPE = "org.apache.myfaces.UISelectItems";
51
52
53
54
55
56
57 public abstract String getVar();
58
59
60
61
62
63
64 public abstract Object getItemLabel();
65
66
67
68
69
70
71 public abstract Object getItemValue();
72
73
74
75
76
77
78
79 public abstract Object getItemLabelEscaped();
80
81
82
83
84
85
86
87 public abstract Object getItemDescription();
88
89
90
91
92
93
94
95 public abstract Object getItemDisabled();
96
97
98
99
100
101
102
103
104
105 public abstract boolean isUseEntryAsItem();
106
107 public Object getValue() {
108 Object value = super.getValue();
109 String var = getVar();
110 if (var != null && var.length() > 0)
111 {
112 return createSelectItems(value);
113 }
114 else
115 {
116 return value;
117 }
118 }
119
120 private SelectItem[] createSelectItems(Object value) {
121 List items = new ArrayList();
122
123 if (value instanceof SelectItem[]) {
124 return (SelectItem[]) value;
125 }
126 else if (value instanceof Collection) {
127 Collection collection = (Collection) value;
128 for (Iterator iter = collection.iterator(); iter.hasNext();) {
129 Object currentItem = (Object) iter.next();
130 if (currentItem instanceof SelectItemGroup) {
131 SelectItemGroup itemGroup = (SelectItemGroup) currentItem;
132 SelectItem[] itemsFromGroup = itemGroup.getSelectItems();
133 for (int i = 0; i < itemsFromGroup.length; i++) {
134 items.add(itemsFromGroup[i]);
135 }
136 }
137 else {
138 putIteratorToRequestParam(currentItem);
139 SelectItem selectItem = createSelectItem();
140 removeIteratorFromRequestParam();
141 items.add(selectItem);
142 }
143 }
144 }
145 else if (value instanceof Map) {
146 Map map = (Map) value;
147 if (isUseEntryAsItem())
148 {
149 for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
150 Entry currentItem = (Entry) iter.next();
151 putIteratorToRequestParam(currentItem);
152 SelectItem selectItem = createSelectItem();
153 removeIteratorFromRequestParam();
154 items.add(selectItem);
155 }
156 }
157 else
158 {
159 for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {
160 Entry currentItem = (Entry) iter.next();
161 putIteratorToRequestParam(currentItem.getValue());
162 SelectItem selectItem = createSelectItem();
163 removeIteratorFromRequestParam();
164 items.add(selectItem);
165 }
166 }
167 }
168
169 return (SelectItem[]) items.toArray(new SelectItem[0]);
170 }
171
172 private SelectItem createSelectItem() {
173 SelectItem item = null;
174 Object value = getItemValue();
175 String label = getItemLabel() != null ? getItemLabel().toString() : null;
176 String description = getItemDescription() != null ? getItemDescription().toString() : null;
177 Boolean disabled = (Boolean) (getItemDisabled() != null ? getItemDisabled() : Boolean.FALSE);
178 Boolean escaped = (Boolean) (getItemLabelEscaped() != null ? getItemLabelEscaped() : Boolean.TRUE);
179
180 if(label != null)
181 item = new SelectItem(value, label, description, disabled, escaped);
182 else
183 item = new SelectItem(value, value == null ? null : value.toString(), description, disabled, escaped);
184
185 return item;
186 }
187
188 private void putIteratorToRequestParam(Object object) {
189 FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put(getVar(), object);
190 }
191
192 private void removeIteratorFromRequestParam() {
193 FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove(getVar());
194 }
195
196 }
197