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.inserted;
016
017 import org.apache.tapestry.BaseComponent;
018 import org.apache.tapestry.IAsset;
019 import org.apache.tapestry.IRequestCycle;
020 import org.apache.tapestry.contrib.table.components.TableColumns;
021 import org.apache.tapestry.contrib.table.model.*;
022 import org.apache.tapestry.contrib.table.model.simple.SimpleTableColumn;
023
024 /**
025 * A component that renders the default column header in a form. If the current
026 * column is sortable, it renders the header as a link. Clicking on the link
027 * causes the table to be sorted on that column. Clicking on the link again
028 * causes the sorting order to be reversed. This component renders links that
029 * cause the form to be submitted. This ensures that the updated data in the
030 * other form fields is preserved.
031 *
032 * @author mindbridge
033 */
034 public abstract class SimpleTableColumnFormComponent extends BaseComponent
035 implements ITableRendererListener
036 {
037
038 public abstract ITableColumn getTableColumn();
039
040 public abstract void setTableColumn(ITableColumn objColumn);
041
042 public abstract ITableModelSource getTableModelSource();
043
044 public abstract void setTableModelSource(ITableModelSource objSource);
045
046 public abstract String getSelectedColumnName();
047
048 /**
049 * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle,
050 * ITableModelSource, ITableColumn, Object)
051 */
052 public void initializeRenderer(IRequestCycle objCycle, ITableModelSource objSource,
053 ITableColumn objColumn, Object objRow)
054 {
055 setTableModelSource(objSource);
056 setTableColumn(objColumn);
057 }
058
059 public ITableModel getTableModel()
060 {
061 return getTableModelSource().getTableModel();
062 }
063
064 public boolean getColumnSorted()
065 {
066 return getTableColumn().getSortable();
067 }
068
069 public String getDisplayName()
070 {
071 ITableColumn objColumn = getTableColumn();
072
073 if (objColumn instanceof SimpleTableColumn)
074 {
075 SimpleTableColumn objSimpleColumn = (SimpleTableColumn) objColumn;
076
077 return objSimpleColumn.getDisplayName();
078 }
079
080 return objColumn.getColumnName();
081 }
082
083 public boolean getIsSorted()
084 {
085 ITableSortingState objSortingState = getTableModel().getSortingState();
086 String strSortColumn = objSortingState.getSortColumn();
087 return getTableColumn().getColumnName().equals(strSortColumn);
088 }
089
090 public IAsset getSortImage()
091 {
092 IAsset objImageAsset;
093
094 IRequestCycle objCycle = getPage().getRequestCycle();
095 ITableSortingState objSortingState = getTableModel().getSortingState();
096
097 if (objSortingState.getSortOrder() == ITableSortingState.SORT_ASCENDING)
098 {
099 objImageAsset = (IAsset) objCycle.getAttribute(TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE);
100
101 if (objImageAsset == null)
102 objImageAsset = getAsset("sortUp");
103 }
104 else
105 {
106 objImageAsset = (IAsset) objCycle.getAttribute(TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE);
107
108 if (objImageAsset == null)
109 objImageAsset = getAsset("sortDown");
110 }
111
112 return objImageAsset;
113 }
114
115 public void columnSelected(IRequestCycle objCycle)
116 {
117 String strColumnName = getSelectedColumnName();
118 ITableModelSource objSource = getTableModelSource();
119
120 objSource.storeTableAction(new TableActionColumnSort(strColumnName));
121 }
122
123 }