001// Copyright 2004, 2005 The Apache Software Foundation 002// 003// Licensed under the Apache License, Version 2.0 (the "License"); 004// you may not use this file except in compliance with the License. 005// You may obtain a copy of the License at 006// 007// http://www.apache.org/licenses/LICENSE-2.0 008// 009// Unless required by applicable law or agreed to in writing, software 010// distributed under the License is distributed on an "AS IS" BASIS, 011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012// See the License for the specific language governing permissions and 013// limitations under the License. 014 015package org.apache.tapestry.contrib.table.components; 016 017import java.util.Iterator; 018 019import org.apache.tapestry.IRender; 020import org.apache.tapestry.IRequestCycle; 021import org.apache.tapestry.contrib.table.model.ITableColumn; 022import org.apache.tapestry.contrib.table.model.ITableColumnModel; 023 024/** 025 * A low level Table component that generates the columns in the current row in the table. This 026 * component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableRows}. 027 * <p> 028 * The component iterates over the columns in the table and automatically renders the column values 029 * for the current table row. The columns are wrapped in 'td' tags by default. <br> 030 * The column values are rendered using the renderer returned by the getValueRenderer() method in 031 * {@link org.apache.tapestry.contrib.table.model.ITableColumn}. 032 * <p> 033 * Please see the Component Reference for details on how to use this component. [ <a 034 * href="../../../../../../../ComponentReference/contrib.TableValues.html">Component Reference </a>] 035 * 036 * @author mindbridge 037 */ 038public abstract class TableValues extends AbstractTableRowComponent 039{ 040 public static final String TABLE_VALUE_CSS_CLASS_SUFFIX = "ColumnValue"; 041 042 // Transient 043 private ITableColumn m_objTableColumn; 044 045 /** 046 * Get the list of all table columns to be displayed. 047 * 048 * @return an iterator of all table columns 049 */ 050 public Iterator getTableColumnIterator() 051 { 052 ITableColumnModel objColumnModel = getTableModelSource().getTableModel().getColumnModel(); 053 return objColumnModel.getColumns(); 054 } 055 056 /** 057 * Returns the currently rendered table column. You can call this method to obtain the current 058 * column. 059 * 060 * @return ITableColumn the current table column 061 */ 062 public ITableColumn getTableColumn() 063 { 064 return m_objTableColumn; 065 } 066 067 /** 068 * Sets the currently rendered table column. This method is for internal use only. 069 * 070 * @param tableColumn 071 * The current table column 072 */ 073 public void setTableColumn(ITableColumn tableColumn) 074 { 075 m_objTableColumn = tableColumn; 076 077 if (isParameterBound("column")) 078 setColumnParameter(tableColumn); 079 } 080 081 /** 082 * Returns the renderer to be used to generate the appearance of the current column 083 * 084 * @return the value renderer of the current column 085 */ 086 public IRender getTableValueRenderer() 087 { 088 Object objRow = getTableRowSource().getTableRow(); 089 return getTableColumn().getValueRenderer( 090 getPage().getRequestCycle(), 091 getTableModelSource(), 092 objRow); 093 } 094 095 /** 096 * Returns the CSS class of the generated table cell. It uses the class parameter if it has been 097 * bound, or the default value of "[column name]ColumnValue" otherwise. 098 * 099 * @return the CSS class of the cell 100 */ 101 public String getValueClass() 102 { 103 if (isParameterBound("class")) 104 return getCellClass(); 105 106 return getTableColumn().getColumnName() + TABLE_VALUE_CSS_CLASS_SUFFIX; 107 } 108 109 /** @since 4.0 */ 110 protected void cleanupAfterRender(IRequestCycle cycle) 111 { 112 super.cleanupAfterRender(cycle); 113 114 m_objTableColumn = null; 115 116 } 117 118 /** @since 4.0 */ 119 120 public abstract void setColumnParameter(ITableColumn column); 121 122 /** @since 4.0 */ 123 124 public abstract String getCellClass(); 125}