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 org.apache.tapestry.IRequestCycle; 018 import org.apache.tapestry.contrib.table.model.ITableModelSource; 019 import org.apache.tapestry.event.PageBeginRenderListener; 020 import org.apache.tapestry.event.PageDetachListener; 021 import org.apache.tapestry.event.PageEvent; 022 023 /** 024 * A low level Table component that renders the pages in the table. 025 * 026 * This component is a variant of {@link org.apache.tapestry.contrib.table.components.TablePages}, 027 * but is designed for operation in a form. The necessary page data is stored 028 * in hidden fields, so that no StaleLink exceptions occur during a rewind. 029 * The links also submit the form, which ensures that the data in the other 030 * form fields is preserved even when the page chages. 031 * 032 * The component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}. 033 * <p> 034 * The component generates a list of pages in the Table centered around the 035 * current one and allows you to navigate to other pages. 036 * <p> 037 * Please see the Component Reference for details on how to use this component. 038 * 039 * [<a href="../../../../../../../ComponentReference/contrib.TableFormPages.html">Component Reference</a>] 040 * 041 * @author mindbridge 042 * 043 */ 044 public abstract class TableFormPages extends TablePages 045 implements PageDetachListener, PageBeginRenderListener 046 { 047 private int m_nCurrentPage; 048 private int m_nPageCount; 049 private int m_nStartPage; 050 private int m_nStopPage; 051 052 public TableFormPages() 053 { 054 initialize(); 055 } 056 057 /** 058 * @see org.apache.tapestry.event.PageDetachListener#pageDetached(org.apache.tapestry.event.PageEvent) 059 */ 060 public void pageDetached(PageEvent event) 061 { 062 initialize(); 063 } 064 065 /** 066 * @see org.apache.tapestry.event.PageBeginRenderListener#pageBeginRender(org.apache.tapestry.event.PageEvent) 067 */ 068 public void pageBeginRender(PageEvent event) 069 { 070 // values set during rewind are removed 071 initialize(); 072 } 073 074 /** 075 * Initialize the values and return the object to operation identical 076 * to that of the super class. 077 */ 078 private void initialize() 079 { 080 m_nCurrentPage = -1; 081 m_nPageCount = -1; 082 m_nStartPage = -1; 083 m_nStopPage = -1; 084 } 085 086 // This would ideally be a delayed invocation -- called after the form rewind 087 public void changePage(IRequestCycle objCycle) 088 { 089 ITableModelSource objSource = getTableModelSource(); 090 objSource.storeTableAction(new TableActionPageChange(getSelectedPage())); 091 } 092 093 // defined in the JWC file 094 public abstract int getSelectedPage(); 095 096 097 /** 098 * @return the current page 099 */ 100 public int getCurrentPage() 101 { 102 if (m_nCurrentPage < 0) 103 m_nCurrentPage = super.getCurrentPage(); 104 return m_nCurrentPage; 105 } 106 107 /** 108 * @return number of all pages to display 109 */ 110 public int getPageCount() 111 { 112 if (m_nPageCount < 0) 113 m_nPageCount = super.getPageCount(); 114 return m_nPageCount; 115 } 116 117 /** 118 * @return the first page to display 119 */ 120 public int getStartPage() 121 { 122 if (m_nStartPage < 0) 123 m_nStartPage = super.getStartPage(); 124 return m_nStartPage; 125 } 126 127 /** 128 * @return the last page to display 129 */ 130 public int getStopPage() 131 { 132 if (m_nStopPage < 0) 133 m_nStopPage = super.getStopPage(); 134 return m_nStopPage; 135 } 136 137 /** 138 * @param i the current page 139 */ 140 public void setCurrentPage(int i) 141 { 142 m_nCurrentPage = i; 143 } 144 145 /** 146 * @param i number of all pages to display 147 */ 148 public void setPageCount(int i) 149 { 150 m_nPageCount = i; 151 } 152 153 /** 154 * @param i the first page to display 155 */ 156 public void setStartPage(int i) 157 { 158 m_nStartPage = i; 159 } 160 161 /** 162 * @param i the last page to display 163 */ 164 public void setStopPage(int i) 165 { 166 m_nStopPage = i; 167 } 168 169 }