| 1 33 34 package com.icesoft.faces.component.ext; 35 36 import com.icesoft.faces.component.CSS_DEFAULT; 37 import com.icesoft.faces.component.ext.taglib.Util; 38 import com.icesoft.faces.component.panelseries.UISeries; 39 40 import javax.faces.component.UIColumn; 41 import javax.faces.component.UIComponent; 42 import javax.faces.component.UIData; 43 import javax.faces.context.FacesContext; 44 import javax.faces.el.ValueBinding; 45 import javax.faces.event.PhaseId; 46 import java.util.Iterator ; 47 48 54 public class HtmlDataTable 55 extends UISeries { 56 57 public static final String COMPONENT_TYPE = 58 "com.icesoft.faces.HtmlDataTable"; 59 public static final String RENDERER_TYPE = "com.icesoft.faces.Table"; 60 private String renderedOnUserRole = null; 61 private String sortColumn = null; 62 private Boolean sortAscending = null; 63 private static final boolean DEFAULT_SORTASCENDING = true; 64 65 private Boolean scrollable = null; 66 private String columnWidths = null; 67 private String scrollHeight = null; 68 private String headerClasses = null; 69 70 public HtmlDataTable() { 71 super(); 72 setRendererType(RENDERER_TYPE); 73 } 74 75 78 public void setRenderedOnUserRole(String renderedOnUserRole) { 79 this.renderedOnUserRole = renderedOnUserRole; 80 } 81 82 85 public String getRenderedOnUserRole() { 86 if (renderedOnUserRole != null) { 87 return renderedOnUserRole; 88 } 89 ValueBinding vb = getValueBinding("renderedOnUserRole"); 90 return vb != null ? (String ) vb.getValue(getFacesContext()) : null; 91 } 92 93 96 public boolean isRendered() { 97 if (!Util.isRenderedOnUserRole(this)) { 98 return false; 99 } 100 return super.isRendered(); 101 } 102 103 106 public String getSortColumn() { 107 if (sortColumn != null) { 108 return sortColumn; 109 } 110 ValueBinding vb = getValueBinding("sortColumn"); 111 return vb != null ? (String ) vb.getValue(getFacesContext()) : null; 112 } 113 114 117 public void setSortAscending(boolean sortAscending) { 118 this.sortAscending = new Boolean (sortAscending); 119 ValueBinding vb = getValueBinding("sortAscending"); 120 if (vb != null) { 121 vb.setValue(getFacesContext(), this.sortAscending); 122 this.sortAscending = null; 123 } 124 } 125 126 129 public void setSortColumn(String sortColumn) { 130 this.sortColumn = sortColumn; 131 ValueBinding vb = getValueBinding("sortColumn"); 132 if (vb != null) { 133 vb.setValue(getFacesContext(), this.sortColumn); 134 sortColumn = null; 135 } 136 } 137 138 141 public boolean isSortAscending() { 142 if (sortAscending != null) { 143 return sortAscending.booleanValue(); 144 } 145 ValueBinding vb = getValueBinding("sortAscending"); 146 Boolean v = 147 vb != null ? (Boolean ) vb.getValue(getFacesContext()) : null; 148 return v != null ? v.booleanValue() : DEFAULT_SORTASCENDING; 149 } 150 151 155 public Object saveState(FacesContext context) { 156 Object values[] = new Object [4]; 157 values[0] = super.saveState(context); 158 values[1] = renderedOnUserRole; 159 return ((Object ) (values)); 160 } 161 162 166 public void restoreState(FacesContext context, Object state) { 167 Object values[] = (Object []) state; 168 super.restoreState(context, values[0]); 169 renderedOnUserRole = (String ) values[1]; 170 } 171 172 public String getComponentType() { 173 return COMPONENT_TYPE; 174 } 175 176 protected void iterate(FacesContext facesContext, PhaseId phase) { 177 setRowIndex(-1); 179 Iterator facets = getFacets().keySet().iterator(); 181 while (facets.hasNext()) { 182 UIComponent facet = (UIComponent) getFacets().get(facets.next()); 183 processKids(facesContext, phase, facet); 184 } 185 setRowIndex(-1); 187 Iterator columns = getChildren().iterator(); 189 while (columns.hasNext()) { 190 UIComponent column = (UIComponent) columns.next(); 191 if (!(column instanceof UIColumn) && 192 !(column instanceof UIColumns)) { 193 continue; 194 } 195 if (!column.isRendered()) { 196 continue; 197 } 198 if (column instanceof UIColumn) { 199 Iterator columnFacets = column.getFacets().keySet().iterator(); 200 while (columnFacets.hasNext()) { 201 UIComponent columnFacet = (UIComponent) column.getFacets() 202 .get(columnFacets.next()); 203 processKids(facesContext, phase, columnFacet); 204 } 205 206 } else if (column instanceof UIColumns) { 207 processKids(facesContext, phase, column); 208 } 209 } 210 211 setRowIndex(-1); 213 214 int rowsProcessed = 0; 215 int currentRowIndex = getFirst() - 1; 216 int displayedRows = getRows(); 217 while (1 == 1) { 219 if ((++currentRowIndex >= getRowCount()) || 221 ((displayedRows > 0) && (++rowsProcessed > displayedRows))) { 222 break; 223 } 224 setRowIndex(currentRowIndex); 226 if (!isRowAvailable()) { 228 break; 229 } 230 Iterator children = getChildren().iterator(); 232 while (children.hasNext()) { 233 UIComponent child = (UIComponent) children.next(); 234 if (!(child instanceof UIColumn) && 235 !(child instanceof UIColumns)) { 236 continue; 237 } 238 if (child instanceof UIColumn) { 239 Iterator granchildren = child.getChildren().iterator(); 240 while (granchildren.hasNext()) { 241 UIComponent granchild = 242 (UIComponent) granchildren.next(); 243 if (!granchild.isRendered()) { 244 continue; 245 } 246 processKids(facesContext, phase, granchild); 247 } 248 } else if (child instanceof UIColumns) { 249 processKids(facesContext, phase, child); 250 } 251 } 252 } 253 254 setRowIndex(-1); 256 } 257 258 protected void restoreChildrenState(FacesContext facesContext) { 259 Iterator kids = getChildren().iterator(); 260 while (kids.hasNext()) { 261 UIComponent kid = (UIComponent) kids.next(); 262 if (kid instanceof UIColumn) { 263 restoreChildState(facesContext, kid); 264 } 265 } 266 267 } 268 269 273 protected void saveChildrenState(FacesContext facesContext) { 274 Iterator kids = getChildren().iterator(); 275 while (kids.hasNext()) { 276 UIComponent kid = (UIComponent) kids.next(); 277 if (kid instanceof UIColumn) { 278 saveChildState(facesContext, kid); 279 } 280 } 281 } 282 283 public void processKids(FacesContext context, PhaseId phaseId, 284 UIComponent kid) { 285 if (phaseId == PhaseId.APPLY_REQUEST_VALUES) { 286 kid.processDecodes(context); 287 } else if (phaseId == PhaseId.PROCESS_VALIDATIONS) { 288 kid.processValidators(context); 289 } else if (phaseId == PhaseId.UPDATE_MODEL_VALUES) { 290 kid.processUpdates(context); 291 } else { 292 throw new IllegalArgumentException (); 293 } 294 } 295 296 private int colNumber = 0; 297 298 public int getColNumber() { 299 return colNumber; 300 } 301 302 public void setColNumber(int colNumber) { 303 this.colNumber = colNumber; 304 } 305 306 public Boolean getScrollable(){ 307 return isScrollable(); 308 } 309 310 public Boolean isScrollable() { 311 if (scrollable != null) { 312 return scrollable; 313 } 314 ValueBinding vb = getValueBinding("scrollable"); 315 Boolean v = 316 vb != null ? (Boolean ) vb.getValue(getFacesContext()) : null; 317 return v != null ? v : Boolean.FALSE; 318 } 319 320 public void setScrollable(Boolean scrollable) { 321 this.scrollable = scrollable; 322 323 } 324 325 public String getColumnWidths() { 326 if (columnWidths != null) { 327 return columnWidths; 328 } 329 ValueBinding vb = getValueBinding("columnWidths"); 330 return vb != null ? (String ) vb.getValue(getFacesContext()) : null; 331 } 332 333 public void setColumnWidths(String columnWidths) { 334 this.columnWidths = columnWidths; 335 336 } 337 338 public String getScrollHeight() { 339 if (scrollHeight != null) { 340 return scrollHeight; 341 } 342 ValueBinding vb = getValueBinding("scrollHeight"); 343 return vb != null ? (String ) vb.getValue(getFacesContext()) : null; 344 } 345 346 public void setScrollHeight(String scrollHeight) { 347 this.scrollHeight = scrollHeight; 348 349 } 350 351 354 public void setHeaderClasses(String headerClasses) { 355 this.headerClasses = headerClasses; 356 } 357 358 361 public String getHeaderClasses() { 362 if (headerClasses != null) { 363 return headerClasses; 364 } 365 ValueBinding vb = getValueBinding("headerClasses"); 366 return vb != null ? (String ) vb.getValue(getFacesContext()) :null; 367 } 368 369 String [] headerClassesArray = null; 370 371 public String getHeaderClassAtIndex(int index) { 372 if (headerClassesArray == null) { 373 headerClassesArray = getHeaderClasses().split(","); 374 } 375 if (headerClassesArray.length == 1) { 376 return headerClassesArray[0]; 377 } 378 try { 379 return headerClassesArray[index]; 380 } catch (ArrayIndexOutOfBoundsException e) { 381 return headerClassesArray[0]; 382 } 383 } 384 385 386 protected void restoreChild(FacesContext facesContext, 387 UIComponent uiComponent) { 388 super.restoreChild(facesContext, uiComponent); 389 if (uiComponent instanceof UIData) { 390 String clientId = uiComponent.getClientId(facesContext); 391 Object value = savedChildren.get(clientId); 392 ((UIData) uiComponent).setValue(value); 393 } 394 } 395 396 protected void saveChild(FacesContext facesContext, 397 UIComponent uiComponent) { 398 super.saveChild(facesContext, uiComponent); 399 if (uiComponent instanceof UIData) { 400 String clientId = uiComponent.getClientId(facesContext); 401 savedChildren.put(clientId, ((UIData) uiComponent).getValue()); 402 } 403 } 404 405 public String getStyleClass() { 406 return Util.getQualifiedStyleClass(this, 407 super.getStyleClass(), 408 CSS_DEFAULT.TABLE_STYLE_CLASS, 409 "styleClass"); 410 } 411 412 public String getHeaderClass() { 413 return Util.getQualifiedStyleClass(this, 414 super.getHeaderClass(), 415 CSS_DEFAULT.TABLE_HEADER_CLASS, 416 "headerClass"); 417 } 418 419 public String getFooterClass() { 420 return Util.getQualifiedStyleClass(this, 421 super.getFooterClass(), 422 CSS_DEFAULT.TABLE_FOOTER_CLASS, 423 "footerClass"); 424 } 425 426 } 427 428 429 430 | Popular Tags |