001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.sys.document.web;
017
018 import java.util.ArrayList;
019 import java.util.List;
020 import java.util.Map;
021 import java.util.Set;
022
023 import org.kuali.kfs.sys.businessobject.AccountingLine;
024 import org.kuali.kfs.sys.document.AccountingDocument;
025 import org.kuali.kfs.sys.document.service.AccountingLineFieldRenderingTransformation;
026
027 /**
028 * There are sometimes line elements which have fewer cells than other line elements within
029 * a lines element; this element exists to fill those out.
030 */
031 public class PlaceHoldingLayoutElement implements TableJoiningWithHeader {
032 private int colSpan;
033
034 /**
035 * Constructs a PlaceHoldingLayoutElement, setting the colspan for the element
036 * @param colSpan the colspan to set
037 */
038 public PlaceHoldingLayoutElement(int colSpan) {
039 this.colSpan = colSpan;
040 }
041
042 /**
043 * Returns a header with a non-breaking space
044 * @see org.kuali.kfs.sys.document.web.TableJoiningWithHeader#createHeaderLabel()
045 */
046 public HeaderLabel createHeaderLabel() {
047 return new LiteralHeaderLabel(" ");
048 }
049
050 /**
051 * The point of this thing is to show up
052 * @see org.kuali.kfs.sys.document.web.TableJoiningWithHeader#isHidden()
053 */
054 public boolean isHidden() {
055 return false;
056 }
057
058 /**
059 * Returns an empty String
060 * @see org.kuali.kfs.sys.document.web.TableJoining#getName()
061 */
062 public String getName() {
063 return "";
064 }
065
066 /**
067 * This only requests one row, not that it really matters.
068 * @see org.kuali.kfs.sys.document.web.TableJoining#getRequestedRowCount()
069 */
070 public int getRequestedRowCount() {
071 return 1;
072 }
073
074 /**
075 * Joins the given row and header
076 * @see org.kuali.kfs.sys.document.web.TableJoining#joinRow(org.kuali.kfs.sys.document.web.AccountingLineTableRow, org.kuali.kfs.sys.document.web.AccountingLineTableRow)
077 */
078 public void joinRow(AccountingLineTableRow headerLabelRow, AccountingLineTableRow row) {
079 if (row != null) {
080 headerLabelRow.addCell(getLabelCell());
081 row.addCell(getPlaceHoldingCell());
082 } else {
083 headerLabelRow.addCell(getPlaceHoldingCell());
084 }
085 }
086
087 /**
088 * This will likely never be called
089 * @see org.kuali.kfs.sys.document.web.TableJoining#joinTable(java.util.List)
090 */
091 public void joinTable(List<AccountingLineTableRow> rows) {
092 AccountingLineTableCell cell = getPlaceHoldingCell();
093 cell.setRowSpan(rows.size());
094 rows.get(0).addCell(getPlaceHoldingCell());
095 }
096
097 /**
098 * Creates a place holding label cell
099 * @param rowSpan the row span the cell should be
100 * @return a table cell holding a place holding label cell
101 */
102 protected AccountingLineTableCell getLabelCell() {
103 AccountingLineTableCell cell = new AccountingLineTableCell();
104 cell.setColSpan(colSpan);
105 cell.setRendersAsHeader(true);
106 cell.addRenderableElement(createHeaderLabel());
107 return cell;
108 }
109
110 /**
111 * Returns an empty table cell, colspan cells wide
112 * @param rowSpan the number of rows this cell should span
113 * @return an empty accounting line table cell that will fill up the space
114 */
115 protected AccountingLineTableCell getPlaceHoldingCell() {
116 AccountingLineTableCell cell = new AccountingLineTableCell();
117 cell.setColSpan(colSpan);
118 cell.addRenderableElement(createHeaderLabel());
119 return cell;
120 }
121
122 /**
123 * No fields to transform
124 * @see org.kuali.kfs.sys.document.web.TableJoining#performFieldTransformations(java.util.List, org.kuali.kfs.sys.businessobject.AccountingLine, java.util.Map, java.util.Map)
125 */
126 public void performFieldTransformations(List<AccountingLineFieldRenderingTransformation> fieldTransformations, AccountingLine accountingLine, Map unconvertedValues) {}
127
128 /**
129 * This doesn't have any child blocks
130 * @see org.kuali.kfs.sys.document.web.TableJoining#removeAllActionBlocks()
131 */
132 public void removeAllActionBlocks() {}
133
134 /**
135 * This will never remove child blocks
136 * @see org.kuali.kfs.sys.document.web.TableJoining#removeUnviewableBlocks(java.util.Set)
137 */
138 public void removeUnviewableBlocks(Set<String> unviewableBlocks) {}
139
140 /**
141 * This will never read onlyize anything
142 * @see org.kuali.kfs.sys.document.web.TableJoining#readOnlyizeReadOnlyBlocks(java.util.Set)
143 */
144 public void readOnlyizeReadOnlyBlocks(Set<String> readOnlyBlocks) {}
145
146 /**
147 * Gets the colSpan attribute.
148 * @return Returns the colSpan.
149 */
150 public int getColSpan() {
151 return colSpan;
152 }
153
154 /**
155 * Sets the colSpan attribute value.
156 * @param colSpan The colSpan to set.
157 */
158 public void setColSpan(int colSpan) {
159 this.colSpan = colSpan;
160 }
161
162 /**
163 * @see org.kuali.kfs.sys.document.web.TableJoining#setEditableBlocks(java.util.Set)
164 */
165 public void setEditableBlocks(Set<String> editableBlocks) {}
166 }