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.List;
019 import java.util.Map;
020 import java.util.Set;
021
022 import org.kuali.kfs.sys.businessobject.AccountingLine;
023 import org.kuali.kfs.sys.document.AccountingDocument;
024 import org.kuali.kfs.sys.document.service.AccountingLineFieldRenderingTransformation;
025
026 /**
027 * Abstract class which contains functionality of table joining layout elements that will eventually render fields
028 */
029 public abstract class FieldTableJoining implements TableJoining, RenderableElement {
030
031 /**
032 * Always returns 1 - any field can live within 1 row.
033 * @see org.kuali.kfs.sys.document.web.AccountingLineViewRenderableElement#getRequestedRowCount()
034 */
035 public int getRequestedRowCount() {
036 return 1;
037 }
038
039 /**
040 * Creates a table cell that encapsulates this field
041 * @return the created table cell
042 */
043 protected AccountingLineTableCell createTableCell() {
044 AccountingLineTableCell cell = new AccountingLineTableCell();
045 cell.addRenderableElement(this);
046 return cell;
047 }
048
049 /**
050 * @see org.kuali.kfs.sys.document.web.AccountingLineViewRenderableElement#joinTable(java.util.List)
051 */
052 public void joinTable(List<AccountingLineTableRow> rows) {
053 AccountingLineTableCell cell = createTableCell();
054 cell.setRowSpan(rows.size());
055 rows.get(0).addCell(cell);
056 }
057
058 /**
059 * @see org.kuali.kfs.sys.document.web.TableJoining#removeAllActionBlocks()
060 */
061 public void removeAllActionBlocks() {
062 // do nothing - fields don't really have child action blocks (and action blocks which
063 // extend this method can't really do much of anything)
064 }
065
066 /**
067 * Default: assumes the field is not hidden
068 * @see org.kuali.kfs.sys.document.web.RenderableElement#isHidden()
069 */
070 public boolean isHidden() {
071 return false;
072 }
073
074 /**
075 * We're going to go out on a limb and bet that this isn't an action block
076 * @see org.kuali.kfs.sys.document.web.RenderableElement#isActionBlock()
077 */
078 public boolean isActionBlock() {
079 return false;
080 }
081
082 /**
083 * Joins ths field to the header row, spans the regular row
084 * @see org.kuali.kfs.sys.document.web.TableJoining#joinRow(org.kuali.kfs.sys.document.web.AccountingLineTableRow, org.kuali.kfs.sys.document.web.AccountingLineTableRow)
085 */
086 public void joinRow(AccountingLineTableRow headerLabelRow, AccountingLineTableRow row) {
087 AccountingLineTableCell cell = createTableCell();
088 cell.setRowSpan(2);
089 headerLabelRow.addCell(cell);
090 }
091
092 /**
093 * This is a field. It's never empty.
094 * @see org.kuali.kfs.sys.document.web.RenderableElement#isEmpty()
095 */
096 public boolean isEmpty() {
097 return false;
098 }
099
100 /**
101 * This method really doesn't do much - it assumes there are no child fields to remove
102 * @see org.kuali.kfs.sys.document.web.TableJoining#removeUnviewableBlocks()
103 */
104 public void removeUnviewableBlocks(Set<String> unviewableBlocks) {
105 // take a nap
106 }
107
108 /**
109 * Sets this to read only if possible
110 * @see org.kuali.kfs.sys.document.web.TableJoining#readOnlyizeReadOnlyBlocks(java.util.Set)
111 */
112 public void readOnlyizeReadOnlyBlocks(Set<String> readOnlyBlocks) {
113 if (this instanceof ReadOnlyable && readOnlyBlocks.contains(getName())) {
114 ((ReadOnlyable)this).readOnlyize();
115 }
116 }
117
118 /**
119 * @see org.kuali.kfs.sys.document.web.TableJoining#setEditableBlocks(java.util.Set)
120 */
121 public void setEditableBlocks(Set<String> editableBlocks) {
122 if (this instanceof ReadOnlyable && editableBlocks.contains(getName())) {
123 ((ReadOnlyable)this).setEditable();
124 }
125 }
126
127 /**
128 * @see org.kuali.kfs.sys.document.web.TableJoining#performFieldTransformation(org.kuali.kfs.sys.document.service.AccountingLineFieldRenderingTransformation, org.kuali.kfs.sys.businessobject.AccountingLine, java.util.Map, java.util.Map)
129 */
130 public void performFieldTransformations(List<AccountingLineFieldRenderingTransformation> fieldTransformations, AccountingLine accountingLine, Map unconvertedValues) {
131 // don't do nothing - we don't have no child fields
132 }
133
134 }