View Javadoc

1   /*
2    * $Id: GridPreferences.java,v 1.1 2008/01/29 10:59:56 oeuillot Exp $
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   * @author Olivier Oeuillot (latest modification by $Author: oeuillot $)
28   * @version $Revision: 1.1 $ $Date: 2008/01/29 10:59:56 $
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      // Constructeur public pour le StateHolder !
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 }