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