1
2
3
4 package org.rcfaces.core.model;
5
6 import java.util.ArrayList;
7 import java.util.Collection;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.RandomAccess;
11
12 import javax.faces.model.DataModel;
13
14 import org.rcfaces.core.internal.tools.ArrayIndexesModel;
15
16
17
18
19
20
21
22
23 public class IndexesModels {
24 private static final String REVISION = "$Revision: 1.18 $";
25
26 private static final Object[] OBJECT_EMPTY_ARRAY = new Object[0];
27
28
29
30
31
32
33
34 public static IIndexesModel selectAll(int length) {
35 int s[] = new int[length];
36 for (int i = 0; i < length; i++) {
37 s[i] = i;
38 }
39
40 return new ArrayIndexesModel(s);
41 }
42
43 public static IIndexesModel selectAll(Collection collection, int length) {
44 IIndexesModel indexesModel = new CollectionIndexesModel(collection);
45
46 select(indexesModel, 0, length);
47
48 return indexesModel;
49 }
50
51 public static IIndexesModel selectAll(Map map, int length) {
52 IIndexesModel indexesModel = new MapIndexesModel(map);
53
54 select(indexesModel, 0, length);
55
56 return indexesModel;
57 }
58
59 public static void select(IIndexesModel model, int start, int length) {
60
61 for (int i = 0; i < length; i++) {
62 model.addIndex(start + i);
63 }
64 }
65
66 public static Object[] listSelectedObject(Object destination[],
67 Object value, IIndexesModel indexesModel) {
68 if (indexesModel == null) {
69 throw new NullPointerException("IndexesModel is null !");
70 }
71
72 int indexes[] = indexesModel.listSortedIndexes();
73 if (value == null || indexes == null || indexes.length < 1) {
74 return OBJECT_EMPTY_ARRAY;
75 }
76
77 if (value instanceof Object[]) {
78 Object values[] = (Object[]) value;
79
80 List l = new ArrayList(indexes.length);
81 for (int i = 0; i < indexes.length; i++) {
82 int idx = indexes[i];
83 if (idx < 0 || idx >= values.length) {
84 continue;
85 }
86
87 l.add(values[idx]);
88 }
89
90 return l.toArray(destination);
91 }
92
93 if (value instanceof Collection) {
94 if (value instanceof RandomAccess) {
95 List values = (List) value;
96 int valuesLength = values.size();
97
98 List l = new ArrayList(indexes.length);
99 for (int i = 0; i < indexes.length; i++) {
100 int idx = indexes[i];
101 if (idx < 0 || idx >= valuesLength) {
102 continue;
103 }
104
105 l.add(values.get(idx));
106 }
107
108 return l.toArray(destination);
109
110 }
111
112 Object values[] = ((Collection) value).toArray();
113
114 List l = new ArrayList(indexes.length);
115 for (int i = 0; i < indexes.length; i++) {
116 int idx = indexes[i];
117 if (idx < 0 || idx >= values.length) {
118 continue;
119 }
120
121 l.add(values[idx]);
122 }
123
124 return l.toArray(destination);
125 }
126
127 if (value instanceof DataModel) {
128 DataModel dataModel = (DataModel) value;
129
130 boolean closeDataModel = false;
131 try {
132 List l = new ArrayList(indexes.length);
133 for (int i = 0; i < indexes.length; i++) {
134 int idx = indexes[i];
135 if (idx < 0) {
136 continue;
137 }
138
139 dataModel.setRowIndex(idx);
140 closeDataModel = true;
141
142 if (dataModel.isRowAvailable() == false) {
143 continue;
144 }
145
146 l.add(dataModel.getRowData());
147 }
148
149 return l.toArray(destination);
150
151 } finally {
152 if (closeDataModel) {
153 dataModel.setRowIndex(-1);
154 }
155 }
156 }
157
158 throw new IllegalArgumentException("Value type '" + value.getClass()
159 + "' is not supported !");
160 }
161
162 public static Object getFirstSelectedObject(Object value,
163 IIndexesModel indexesModel) {
164 if (indexesModel == null) {
165 throw new NullPointerException("IndexesModel is null !");
166 }
167
168 int index = indexesModel.getFirstIndex();
169 if (value == null || index < 0) {
170 return null;
171 }
172
173 if (value instanceof Object[]) {
174 Object values[] = (Object[]) value;
175
176 return values[index];
177 }
178
179 if (value instanceof List) {
180 List values = (List) value;
181
182 return values.get(index);
183 }
184
185 if (value instanceof Collection) {
186 if (index == 0) {
187 return ((Collection) value).iterator().next();
188 }
189
190 Object values[] = ((Collection) value).toArray();
191
192 return values[index];
193 }
194
195 if (value instanceof DataModel) {
196 DataModel dataModel = (DataModel) value;
197
198 if (dataModel instanceof IRangeDataModel) {
199 ((IRangeDataModel) dataModel).setRowRange(index, 1);
200 }
201 dataModel.setRowIndex(index);
202 try {
203 if (dataModel.isRowAvailable() == false) {
204 return null;
205 }
206
207 return dataModel.getRowData();
208 } finally {
209 dataModel.setRowIndex(-1);
210 }
211 }
212
213 throw new IllegalArgumentException("Value type '" + value.getClass()
214 + "' is not supported !");
215 }
216 }