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 org.apache.tapestry.BaseComponent;
018import org.apache.tapestry.IForm;
019import org.apache.tapestry.TapestryUtils;
020import org.apache.tapestry.contrib.table.model.ITableColumn;
021import org.apache.tapestry.contrib.table.model.ITableModel;
022import org.apache.tapestry.contrib.table.model.ITableModelSource;
023
024/**
025 * The facade component in the Table family. Table allows you to present a sortable and pagable
026 * table simply and easily by using only this one component. Please see the Component Reference for
027 * details on how to use this component. [ <a
028 * href="../../../../../../../ComponentReference/contrib.Table.html">Component Reference </a>]
029 * 
030 * @author mindbridge
031 */
032public abstract class Table extends BaseComponent implements ITableModelSource
033{
034        public abstract boolean getVolatile();
035        
036    /**
037     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#getTableModel()
038     */
039    public ITableModel getTableModel()
040    {
041        return getTableViewComponent().getTableModel();
042    }
043
044    /**
045     * Indicates that the table model has changed and it may need to saved. This method has to be
046     * invoked if modifications are made to the model.
047     * 
048     * @see org.apache.tapestry.contrib.table.model.ITableModelSource#fireObservedStateChange()
049     */
050    public void fireObservedStateChange()
051    {
052        getTableViewComponent().fireObservedStateChange();
053    }
054
055    /**
056     * Resets the state of the component and forces it to load a new TableModel from the tableModel
057     * binding the next time it renders.
058     */
059    public void reset()
060    {
061        getTableViewComponent().reset();
062    }
063
064    /**
065     * Returns the currently rendered table column. You can call this method to obtain the current
066     * column.
067     * 
068     * @return ITableColumn the current table column
069     */
070    public ITableColumn getTableColumn()
071    {
072        Object objCurrentRow = getTableRow();
073
074        // if the current row is null, then we are most likely rendering TableColumns
075        if (objCurrentRow == null)
076            return getTableColumnsComponent().getTableColumn();
077
078        return getTableValuesComponent().getTableColumn();
079    }
080
081    /**
082     * Returns the currently rendered table row or null if the rows are not rendered at the moment.
083     * You can call this method to obtain the current row.
084     * 
085     * @return Object the current table row
086     */
087    public Object getTableRow()
088    {
089        return getTableRowsComponent().getTableRow();
090    }
091
092    protected TableView getTableViewComponent()
093    {
094        return (TableView) getComponent("tableView");
095    }
096
097    protected TableColumns getTableColumnsComponent()
098    {
099        return (TableColumns) getComponent("tableColumns");
100    }
101
102    protected TableRows getTableRowsComponent()
103    {
104        return (TableRows) getComponent("tableRows");
105    }
106
107    protected TableValues getTableValuesComponent()
108    {
109        return (TableValues) getComponent("tableValues");
110    }
111    
112    public boolean getShowNormalPages()
113    {
114        if (getVolatile())
115                return true;
116        
117        IForm form = (IForm) getPage().getRequestCycle().getAttribute(TapestryUtils.FORM_ATTRIBUTE);
118        return (form == null);
119    }
120}