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 import org.apache.tapestry.event.PageDetachListener; 024 import org.apache.tapestry.event.PageEvent; 025 import org.apache.tapestry.util.ComponentAddress; 026 027 /** 028 * A component that renders the default column header. If the current column is 029 * sortable, it renders the header as a link. Clicking on the link causes the 030 * table to be sorted on that column. Clicking on the link again causes the 031 * sorting order to be reversed. 032 * 033 * @author mindbridge 034 */ 035 public abstract class SimpleTableColumnComponent extends BaseComponent 036 implements ITableRendererListener, PageDetachListener 037 { 038 039 // transient 040 private ITableColumn m_objColumn; 041 private ITableModelSource m_objModelSource; 042 043 public SimpleTableColumnComponent() 044 { 045 init(); 046 } 047 048 /** 049 * @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent) 050 */ 051 public void pageDetached(PageEvent arg0) 052 { 053 init(); 054 } 055 056 private void init() 057 { 058 m_objColumn = null; 059 m_objModelSource = null; 060 } 061 062 /** 063 * @see org.apache.tapestry.contrib.table.model.ITableRendererListener#initializeRenderer(IRequestCycle, 064 * ITableModelSource, ITableColumn, Object) 065 */ 066 public void initializeRenderer(IRequestCycle objCycle, ITableModelSource objSource, 067 ITableColumn objColumn, Object objRow) 068 { 069 m_objModelSource = objSource; 070 m_objColumn = objColumn; 071 } 072 073 public ITableModel getTableModel() 074 { 075 return m_objModelSource.getTableModel(); 076 } 077 078 public boolean getColumnSorted() 079 { 080 return m_objColumn.getSortable(); 081 } 082 083 public String getDisplayName() 084 { 085 if (m_objColumn instanceof SimpleTableColumn) 086 { 087 SimpleTableColumn objSimpleColumn = (SimpleTableColumn) m_objColumn; 088 089 return objSimpleColumn.getDisplayName(); 090 } 091 092 return m_objColumn.getColumnName(); 093 } 094 095 public boolean getIsSorted() 096 { 097 ITableSortingState objSortingState = getTableModel().getSortingState(); 098 String strSortColumn = objSortingState.getSortColumn(); 099 100 return m_objColumn.getColumnName().equals(strSortColumn); 101 } 102 103 public IAsset getSortImage() 104 { 105 IAsset objImageAsset; 106 107 IRequestCycle objCycle = getPage().getRequestCycle(); 108 ITableSortingState objSortingState = getTableModel().getSortingState(); 109 110 if (objSortingState.getSortOrder() == ITableSortingState.SORT_ASCENDING) 111 { 112 objImageAsset = (IAsset) objCycle.getAttribute(TableColumns.TABLE_COLUMN_ARROW_UP_ATTRIBUTE); 113 114 if (objImageAsset == null) 115 objImageAsset = getAsset("sortUp"); 116 } 117 else 118 { 119 objImageAsset = (IAsset) objCycle.getAttribute(TableColumns.TABLE_COLUMN_ARROW_DOWN_ATTRIBUTE); 120 121 if (objImageAsset == null) 122 objImageAsset = getAsset("sortDown"); 123 } 124 125 return objImageAsset; 126 } 127 128 public Object[] getColumnSelectedParameters() 129 { 130 return new Object[] { 131 new ComponentAddress(m_objModelSource), 132 m_objColumn.getColumnName() 133 }; 134 } 135 136 public void columnSelected(IRequestCycle objCycle) 137 { 138 Object[] arrArgs = objCycle.getListenerParameters(); 139 ComponentAddress objAddr = (ComponentAddress) arrArgs[0]; 140 String strColumnName = (String) arrArgs[1]; 141 142 ITableModelSource objSource = (ITableModelSource) objAddr 143 .findComponent(objCycle); 144 objSource.storeTableAction(new TableActionColumnSort(strColumnName)); 145 } 146 147 }