Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
TableFormRows |
|
| 1.5;1.5 | ||||
TableFormRows$1 |
|
| 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 | } |