1
2
3
4
5 package org.rcfaces.core.preference;
6
7 import java.util.HashMap;
8 import java.util.Iterator;
9 import java.util.Map;
10
11 import javax.faces.FacesException;
12 import javax.faces.component.UIColumn;
13 import javax.faces.component.UIComponent;
14 import javax.faces.context.FacesContext;
15
16 import org.rcfaces.core.component.capability.IFilterCapability;
17 import org.rcfaces.core.component.capability.IOrderedChildrenCapability;
18 import org.rcfaces.core.component.capability.ISortedChildrenCapability;
19 import org.rcfaces.core.component.capability.IWidthRangeCapability;
20 import org.rcfaces.core.component.iterator.IColumnIterator;
21 import org.rcfaces.core.internal.capability.IGridComponent;
22 import org.rcfaces.core.internal.tools.GridTools;
23 import org.rcfaces.core.model.IFilterProperties;
24
25
26
27
28
29
30 public class GridPreferences extends AbstractComponentPreferences {
31
32 private static final String REVISION = "$Revision: 1.1 $";
33
34 private static final long serialVersionUID = -1760014871350310345L;
35
36 private static final int SAVE_COLUMNS_ORDER = 0x0001;
37
38 private static final int SAVE_SORTED_COLUMN_IDS = 0x0002;
39
40 private static final int SAVE_COLUMN_SIZES = 0x0004;
41
42 private static final int SAVE_FILTER_PROPERTIES = 0x0008;
43
44 private static final int SAVE_POSITION = 0x0010;
45
46 private int saveMask = SAVE_COLUMNS_ORDER | SAVE_COLUMN_SIZES
47 | SAVE_SORTED_COLUMN_IDS | SAVE_COLUMN_SIZES;
48
49 private String columnsOrder;
50
51 private String sortedColumnIds;
52
53 private int position = -1;
54
55 private Map columnSizes;
56
57 private IFilterProperties filterProperties;
58
59
60 public GridPreferences() {
61 }
62
63 public void loadPreferences(FacesContext facesContext, UIComponent component) {
64 if ((component instanceof IGridComponent) == false) {
65 throw new FacesException("Can not load dataGrid preferences !");
66 }
67
68 IGridComponent gridComponent = (IGridComponent) component;
69
70 if (gridComponent instanceof IOrderedChildrenCapability) {
71 if (columnsOrder != null) {
72 GridTools.setOrderIds(gridComponent, columnsOrder);
73 }
74 }
75
76 if (gridComponent instanceof ISortedChildrenCapability) {
77 if (sortedColumnIds != null) {
78 GridTools.setSortIds(gridComponent, sortedColumnIds);
79 }
80 }
81
82 if (columnSizes != null) {
83 IColumnIterator dataColumnIterator = gridComponent.listColumns();
84
85 if (dataColumnIterator.count() > 0) {
86 Map cols = new HashMap(dataColumnIterator.count());
87 for (; dataColumnIterator.hasNext();) {
88 UIColumn columnComponent = dataColumnIterator.next();
89
90 String columnId = columnComponent.getId();
91 if (columnId == null) {
92 continue;
93 }
94
95 if ((columnComponent instanceof IWidthRangeCapability) == false) {
96 continue;
97 }
98
99 cols.put(columnId, columnComponent);
100 }
101
102 for (Iterator it = columnSizes.entrySet().iterator(); it
103 .hasNext();) {
104 Map.Entry entry = (Map.Entry) it.next();
105 String columnId = (String) entry.getKey();
106 String columnWidth = (String) entry.getValue();
107
108 IWidthRangeCapability columnComponent = (IWidthRangeCapability) cols
109 .get(columnId);
110 if (columnId == null) {
111 continue;
112 }
113
114 columnComponent.setWidth(columnWidth);
115 }
116 }
117 }
118
119 if (filterProperties != null
120 && (gridComponent instanceof IFilterCapability)) {
121 ((IFilterCapability) gridComponent)
122 .setFilterProperties(filterProperties);
123 }
124
125 if (position >= 0) {
126 gridComponent.setFirst(position);
127 }
128 }
129
130 public void savePreferences(FacesContext facesContext, UIComponent component) {
131 if ((component instanceof IGridComponent) == false) {
132 throw new FacesException("Can not save dataGrid preferences !");
133 }
134
135 IGridComponent gridComponent = (IGridComponent) component;
136
137 if (isSaveColumnsOrder()) {
138 if (gridComponent instanceof IOrderedChildrenCapability) {
139 columnsOrder = GridTools.getOrderIds(gridComponent);
140 }
141 }
142
143 if (isSaveSortedColumnIds()) {
144 if (gridComponent instanceof ISortedChildrenCapability) {
145 sortedColumnIds = GridTools.getSortIds(gridComponent);
146 }
147 }
148
149 if (isSaveColumnSizes()) {
150 columnSizes = null;
151
152 IColumnIterator dataColumnIterator = gridComponent.listColumns();
153
154 if (dataColumnIterator.count() > 0) {
155 columnSizes = new HashMap(dataColumnIterator.count());
156 for (; dataColumnIterator.hasNext();) {
157 UIColumn columnComponent = dataColumnIterator.next();
158
159 String columnId = columnComponent.getId();
160 if (columnId == null) {
161 continue;
162 }
163
164 if ((columnComponent instanceof IWidthRangeCapability) == false) {
165 continue;
166 }
167
168 String columnWidth = ((IWidthRangeCapability) columnComponent)
169 .getWidth();
170 if (columnWidth == null) {
171 continue;
172 }
173
174 columnSizes.put(columnId, columnWidth);
175
176 }
177 }
178 }
179
180 if (isSaveFilterProperties()
181 && (gridComponent instanceof IFilterCapability)) {
182 filterProperties = ((IFilterCapability) gridComponent)
183 .getFilterProperties();
184 }
185
186 if (isSavePosition()) {
187 position = gridComponent.getFirst();
188 }
189 }
190
191 public Object saveState(FacesContext context) {
192 return new Object[] { new Integer(saveMask), columnsOrder,
193 sortedColumnIds, columnSizes, filterProperties,
194 new Integer(position) };
195 }
196
197 public void restoreState(FacesContext context, Object state) {
198 Object values[] = (Object[]) state;
199
200 saveMask = ((Integer) values[0]).intValue();
201 columnsOrder = (String) values[1];
202 sortedColumnIds = (String) values[2];
203 columnSizes = (Map) values[3];
204 filterProperties = (IFilterProperties) values[4];
205 position = ((Integer) values[5]).intValue();
206 }
207
208 public final boolean isSaveColumnSizes() {
209 return (saveMask & SAVE_COLUMN_SIZES) > 0;
210 }
211
212 public final void setSaveColumnSizes(boolean saveColumnSizes) {
213 saveMask = (saveMask & ~SAVE_COLUMN_SIZES);
214 saveMask |= (saveColumnSizes) ? SAVE_COLUMN_SIZES : 0;
215
216 columnSizes = null;
217 }
218
219 public final boolean isSaveColumnsOrder() {
220 return (saveMask & SAVE_COLUMNS_ORDER) > 0;
221 }
222
223 public final void setSaveColumnsOrder(boolean saveColumnsOrder) {
224 saveMask = (saveMask & ~SAVE_COLUMNS_ORDER);
225 saveMask |= (saveColumnsOrder) ? SAVE_COLUMNS_ORDER : 0;
226
227 columnsOrder = null;
228 }
229
230 public final boolean isSaveSortedColumnIds() {
231 return (saveMask & SAVE_SORTED_COLUMN_IDS) > 0;
232 }
233
234 public final void setSaveSortedColumnIds(boolean saveSortedColumnIds) {
235 saveMask = (saveMask & ~SAVE_SORTED_COLUMN_IDS);
236 saveMask |= (saveSortedColumnIds) ? SAVE_SORTED_COLUMN_IDS : 0;
237
238 sortedColumnIds = null;
239 }
240
241 public final boolean isSaveFilterProperties() {
242 return (saveMask & SAVE_FILTER_PROPERTIES) > 0;
243 }
244
245 public final void setSaveFilterProperties(boolean saveFilterProperties) {
246 saveMask = (saveMask & ~SAVE_FILTER_PROPERTIES);
247 saveMask |= (saveFilterProperties) ? SAVE_FILTER_PROPERTIES : 0;
248
249 filterProperties = null;
250 }
251
252 public final boolean isSavePosition() {
253 return (saveMask & SAVE_POSITION) > 0;
254 }
255
256 public final void setSavePosition(boolean savePosition) {
257 saveMask = (saveMask & ~SAVE_POSITION);
258 saveMask |= (savePosition) ? SAVE_POSITION : 0;
259
260 position = -1;
261 }
262
263 }