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
015 package org.apache.tapestry.contrib.table.components;
016
017 import java.util.Iterator;
018
019 import org.apache.tapestry.IBinding;
020 import org.apache.tapestry.IMarkupWriter;
021 import org.apache.tapestry.IRequestCycle;
022 import org.apache.tapestry.contrib.table.model.IFullTableModel;
023 import org.apache.tapestry.contrib.table.model.ITableModel;
024 import org.apache.tapestry.contrib.table.model.ITableRowSource;
025
026 /**
027 * A low level Table component that generates the rows of the current page in the table.
028 * This component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}.
029 *
030 * <p>
031 * The component iterates over the rows of the current page in the table.
032 * The rows are wrapped in 'tr' tags by default.
033 * You can define columns manually within, or
034 * you can use {@link org.apache.tapestry.contrib.table.components.TableValues}
035 * to generate the columns automatically.
036 *
037 * <p>
038 * Please see the Component Reference for details on how to use this component.
039 *
040 * [<a href="../../../../../../../ComponentReference/contrib.TableRows.html">Component Reference</a>]
041 *
042 * @author mindbridge
043 *
044 */
045 public abstract class TableRows extends AbstractTableViewComponent implements ITableRowSource
046 {
047
048 // Parameters
049 public abstract Object getFullSourceParameter();
050
051 // Transient
052 private Object m_objTableRow = null;
053 private int m_nTableIndex;
054
055 /**
056 * Returns the currently rendered table row.
057 * You can call this method to obtain the current row.
058 *
059 * @return Object the current table row
060 */
061 public Object getTableRow()
062 {
063 return m_objTableRow;
064 }
065
066 /**
067 * Sets the currently rendered table row.
068 * This method is for internal use only.
069 *
070 * @param tableRow The current table row
071 */
072 public void setTableRow(Object tableRow)
073 {
074 m_objTableRow = tableRow;
075
076 IBinding objRowBinding = getBinding("row");
077 if (objRowBinding != null)
078 objRowBinding.setObject(tableRow);
079 }
080
081 /**
082 * Returns the index of the currently rendered table row.
083 * You can call this method to obtain the index of the current row.
084 *
085 * @return int the current table index
086 */
087 public int getTableIndex()
088 {
089 return m_nTableIndex;
090 }
091
092 /**
093 * Sets the index of the currently rendered table row.
094 * This method is for internal use only.
095 *
096 * @param tableIndex The index of the current table row
097 */
098 public void setTableIndex(int tableIndex)
099 {
100 m_nTableIndex = tableIndex;
101
102 IBinding objIndexBinding = getBinding("index");
103 if (objIndexBinding != null)
104 objIndexBinding.setObject(new Integer(tableIndex));
105 }
106
107 /**
108 * Get the list of all table rows to be displayed on this page.
109 *
110 * @return an iterator of all table rows
111 */
112 public Iterator getTableRowsIterator()
113 {
114 ITableModel objTableModel = getTableModelSource().getTableModel();
115 return objTableModel.getCurrentPageRows();
116 }
117
118 public Object getFullSource()
119 {
120 ITableModel objTableModel = getTableModelSource().getTableModel();
121 if (objTableModel instanceof IFullTableModel)
122 return ((IFullTableModel) objTableModel).getRows();
123 return getFullSourceParameter();
124 }
125
126 /**
127 * @see org.apache.tapestry.BaseComponent#renderComponent(IMarkupWriter, IRequestCycle)
128 */
129 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
130 {
131 Object objOldValue = cycle.getAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE);
132 cycle.setAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE, this);
133
134 super.renderComponent(writer, cycle);
135
136 cycle.setAttribute(ITableRowSource.TABLE_ROW_SOURCE_ATTRIBUTE, objOldValue);
137
138 // set the current row to null when the component is not active
139 m_objTableRow = null;
140 }
141
142
143 }