Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||||||
TableFormRows |
|
| 1.5;1.5 |
1 | // Copyright 2004, 2005 The Apache Software Foundation |
|
2 | // |
|
3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
|
4 | // you may not use this file except in compliance with the License. |
|
5 | // You may obtain a copy of the License at |
|
6 | // |
|
7 | // http://www.apache.org/licenses/LICENSE-2.0 |
|
8 | // |
|
9 | // Unless required by applicable law or agreed to in writing, software |
|
10 | // distributed under the License is distributed on an "AS IS" BASIS, |
|
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
12 | // See the License for the specific language governing permissions and |
|
13 | // limitations under the License. |
|
14 | ||
15 | package org.apache.tapestry.contrib.table.components; |
|
16 | ||
17 | import java.util.Iterator; |
|
18 | import java.util.Map; |
|
19 | ||
20 | import org.apache.tapestry.IRequestCycle; |
|
21 | import org.apache.tapestry.contrib.table.model.IPrimaryKeyConvertor; |
|
22 | ||
23 | ||
24 | /** |
|
25 | * A low level Table component that generates the rows of the current page in the table. |
|
26 | * |
|
27 | * This component is a variant of {@link org.apache.tapestry.contrib.table.components.TablePages}, |
|
28 | * but is designed for operation in a form. The displayed rows are stored in |
|
29 | * hidden form fields, which are then read during a rewind. This ensures that |
|
30 | * the form will rewind in exactly the same was as it was rendered even if the |
|
31 | * TableModel has changed and no StaleLink exceptions will occur. |
|
32 | * |
|
33 | * The component must be wrapped by {@link org.apache.tapestry.contrib.table.components.TableView}. |
|
34 | * |
|
35 | * <p> |
|
36 | * The component iterates over the rows of the current page in the table. |
|
37 | * The rows are wrapped in 'tr' tags by default. |
|
38 | * You can define columns manually within, or |
|
39 | * you can use {@link org.apache.tapestry.contrib.table.components.TableValues} |
|
40 | * to generate the columns automatically. |
|
41 | * <p> |
|
42 | * Please see the Component Reference for details on how to use this component. |
|
43 | * |
|
44 | * [<a href="../../../../../../../ComponentReference/contrib.TableFormRows.html">Component Reference</a>] |
|
45 | * |
|
46 | * @author mindbridge |
|
47 | * |
|
48 | */ |
|
49 | 0 | public abstract class TableFormRows extends TableRows |
50 | { |
|
51 | public abstract IPrimaryKeyConvertor getConvertor(); |
|
52 | public abstract IPrimaryKeyConvertor getConvertorCache(); |
|
53 | public abstract void setConvertorCache(IPrimaryKeyConvertor convertor); |
|
54 | public abstract Map getConvertedValues(); |
|
55 | ||
56 | /** |
|
57 | * Returns the PK convertor cached within the realm of the current request cycle. |
|
58 | * |
|
59 | * @return the cached PK convertor |
|
60 | */ |
|
61 | public IPrimaryKeyConvertor getCachedConvertor() |
|
62 | { |
|
63 | 0 | IPrimaryKeyConvertor objConvertor = getConvertorCache(); |
64 | ||
65 | 0 | if (objConvertor == null) { |
66 | 0 | objConvertor = getConvertor(); |
67 | 0 | setConvertorCache(objConvertor); |
68 | } |
|
69 | ||
70 | 0 | return objConvertor; |
71 | } |
|
72 | ||
73 | /** |
|
74 | * Get the list of all table rows to be displayed on this page, converted |
|
75 | * using the PK.convertor. |
|
76 | * |
|
77 | * @return an iterator of all converted table rows |
|
78 | */ |
|
79 | public Iterator getConvertedTableRowsIterator() |
|
80 | { |
|
81 | 0 | final Iterator objTableRowsIterator = getTableRowsIterator(); |
82 | 0 | final IPrimaryKeyConvertor objConvertor = getCachedConvertor(); |
83 | 0 | if (objConvertor == null) |
84 | 0 | return objTableRowsIterator; |
85 | ||
86 | 0 | return new Iterator() |
87 | 0 | { |
88 | public boolean hasNext() |
|
89 | { |
|
90 | 0 | return objTableRowsIterator.hasNext(); |
91 | } |
|
92 | ||
93 | public Object next() |
|
94 | { |
|
95 | 0 | Object objValue = objTableRowsIterator.next(); |
96 | 0 | Object objPrimaryKey = objConvertor.getPrimaryKey(objValue); |
97 | 0 | Map mapConvertedValues = getConvertedValues(); |
98 | 0 | mapConvertedValues.put(objPrimaryKey, objValue); |
99 | 0 | return objPrimaryKey; |
100 | } |
|
101 | ||
102 | public void remove() |
|
103 | { |
|
104 | 0 | objTableRowsIterator.remove(); |
105 | 0 | } |
106 | }; |
|
107 | } |
|
108 | ||
109 | /** |
|
110 | * Sets the current table row PK and invokes {@link #setTableRow(Object)} as a result. |
|
111 | * This method is for internal use only. |
|
112 | * |
|
113 | * @param objConvertedTableRow The current converted table row (PK) |
|
114 | */ |
|
115 | public void setConvertedTableRow(Object objConvertedTableRow) |
|
116 | { |
|
117 | 0 | Object objValue = objConvertedTableRow; |
118 | ||
119 | 0 | IPrimaryKeyConvertor objConvertor = getCachedConvertor(); |
120 | 0 | if (objConvertor != null) { |
121 | 0 | IRequestCycle objCycle = getPage().getRequestCycle(); |
122 | 0 | if (objCycle.isRewinding()) { |
123 | 0 | objValue = objConvertor.getValue(objConvertedTableRow); |
124 | } |
|
125 | else { |
|
126 | 0 | Map mapConvertedValues = getConvertedValues(); |
127 | 0 | objValue = mapConvertedValues.get(objConvertedTableRow); |
128 | } |
|
129 | } |
|
130 | ||
131 | 0 | setTableRow(objValue); |
132 | 0 | } |
133 | } |