1 /*
2 * Copyright 2008 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.ole.sys.document.web;
17
18 import java.util.List;
19
20 /**
21 * Extension of FieldTableJoining that adds header cells correctly
22 */
23 public abstract class FieldTableJoiningWithHeader extends FieldTableJoining implements TableJoiningWithHeader {
24
25 /**
26 * @see org.kuali.ole.sys.document.web.FieldTableJoining#joinTable(java.util.List)
27 */
28 @Override
29 public void joinTable(List<AccountingLineTableRow> rows) {
30 int rowsTaken = 0;
31 // 1. add header cell
32 if (!isHidden()) {
33 AccountingLineTableCell headerCell = createHeaderLabelTableCell();
34 rows.get(0).addCell(headerCell);
35 rowsTaken += 1;
36 }
37 // 2. add field cell
38 AccountingLineTableCell cell = createTableCell();
39 cell.setRowSpan(rows.size() - rowsTaken);
40 rows.get(rowsTaken).addCell(cell);
41 }
42
43 /**
44 * Creates a header label cell for this element
45 * @return a table cell holding the header label to render
46 */
47 protected AccountingLineTableCell createHeaderLabelTableCell() {
48 AccountingLineTableCell cell = new AccountingLineTableCell();
49 cell.addRenderableElement(createHeaderLabel());
50 cell.setRendersAsHeader(true);
51 return cell;
52 }
53
54 /**
55 * This joins a row but adds a header to the header label row
56 * @see org.kuali.ole.sys.document.web.TableJoining#joinRow(org.kuali.ole.sys.document.web.AccountingLineTableRow, org.kuali.ole.sys.document.web.AccountingLineTableRow)
57 */
58 public void joinRow(AccountingLineTableRow headerLabelRow, AccountingLineTableRow row) {
59 if (!isHidden()) {
60 headerLabelRow.addCell(createHeaderLabelTableCell());
61 }
62 row.addCell(createTableCell());
63 }
64
65 /**
66 * Always returns 2 - one row for the header, one for the row
67 * @see org.kuali.ole.sys.document.web.FieldTableJoining#getRequestedRowCount()
68 */
69 @Override
70 public int getRequestedRowCount() {
71 return 2;
72 }
73
74 }