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 021 import javax.servlet.jsp.JspException; 022 import javax.servlet.jsp.PageContext; 023 import javax.servlet.jsp.tagext.Tag; 024 025 import org.kuali.kfs.sys.KFSConstants; 026 import org.kuali.kfs.sys.KFSKeyConstants; 027 import org.kuali.kfs.sys.context.SpringContext; 028 import org.kuali.kfs.sys.document.web.renderers.ActionsRenderer; 029 import org.kuali.rice.kns.service.KualiConfigurationService; 030 import org.kuali.rice.kns.web.ui.Field; 031 032 /** 033 * A field that can join tables and also be rendered, this represents a table cell 034 * that displays the actions available on an accounting line 035 */ 036 public class AccountingLineViewActionsField extends FieldTableJoiningWithHeader { 037 private String name = KFSConstants.AccountingLineViewStandardBlockNames.ACTION_BLOCK; 038 039 /** 040 * Returns the name of this actions field 041 * @see org.kuali.kfs.sys.document.web.TableJoining#getName() 042 */ 043 public String getName() { 044 return name; 045 } 046 047 /** 048 * Sets the name of this actions field 049 * @param name the name of this block 050 */ 051 public void setName(String name) { 052 this.name = name; 053 } 054 055 /** 056 * We are an action block. For real, even 057 * @see org.kuali.kfs.sys.document.web.FieldTableJoining#isActionBlock() 058 */ 059 @Override 060 public boolean isActionBlock() { 061 return true; 062 } 063 064 /** 065 * @see org.kuali.kfs.sys.document.web.FieldTableJoiningWithHeader#joinTable(java.util.List) 066 */ 067 @Override 068 public void joinTable(List<AccountingLineTableRow> rows) { 069 // 1. add header cell 070 AccountingLineTableCell headerCell = createHeaderLabelTableCell(); 071 rows.get(0).addCell(headerCell); 072 073 // 2. add blank cell to make sure this cell shows up on the bottom line 074 final int blankCellRowSpan = rows.size() - 2; 075 if (blankCellRowSpan > 0) { 076 AccountingLineTableCell blankCell = createBlankTableCell(blankCellRowSpan); 077 rows.get(1).addCell(blankCell); 078 } 079 // 3. add field cell 080 AccountingLineTableCell cell = createTableCell(); 081 rows.get((rows.size()-1)).addCell(cell); 082 } 083 084 /** 085 * Builds a blank cell for the action so the actions always appear below that 086 * @param rowSpan the row span of the blank cell 087 * @return the blank row-spanning table cell 088 */ 089 protected AccountingLineTableCell createBlankTableCell(int rowSpan) { 090 AccountingLineTableCell blankCell = new AccountingLineTableCell(); 091 blankCell.setNeverEmpty(true); 092 blankCell.setExtraStyle("border-bottom-style: none;"); 093 if (rowSpan > 1) { 094 blankCell.setRowSpan(rowSpan); 095 } 096 return blankCell; 097 } 098 099 /** 100 * @see org.kuali.kfs.sys.document.web.RenderableElement#renderElement(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag) 101 */ 102 public void renderElement(PageContext pageContext, Tag parentTag, AccountingLineRenderingContext renderingContext) throws JspException { 103 ActionsRenderer renderer = new ActionsRenderer(); 104 renderer.setActions(renderingContext.getActionsForLine()); 105 renderer.render(pageContext, parentTag); 106 renderer.clear(); 107 } 108 109 /** 110 * @see org.kuali.kfs.sys.document.web.TableJoiningWithHeader#createHeaderLabel() 111 */ 112 public HeaderLabel createHeaderLabel() { 113 return new LiteralHeaderLabel(SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.AccountingLineViewRendering.ACCOUNTING_LINE_ACTIONS_LABEL)); 114 } 115 116 /** 117 * This doesn't hold a field, so this imlementation does nothing 118 * @see org.kuali.kfs.sys.document.web.RenderableElement#appendFieldNames(java.util.List) 119 */ 120 public void appendFields(List<Field> fields) { } 121 122 /** 123 * Doesn't do anything 124 * @see org.kuali.kfs.sys.document.web.RenderableElement#populateWithTabIndexIfRequested(int[], int) 125 */ 126 public void populateWithTabIndexIfRequested(int reallyHighIndex) {} 127 128 }