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.document.web.renderers.TableRenderer;
026    import org.kuali.rice.kns.web.ui.Field;
027    
028    /**
029     * An inner table inside a table cell.
030     */
031    public class AccountingLineTable implements RenderableElement {
032        private List<AccountingLineTableRow> rows;
033        private AccountingLineRenderingContext renderingContext;
034    
035        /**
036         * Gets the rows attribute. 
037         * @return Returns the rows.
038         */
039        public List<AccountingLineTableRow> getRows() {
040            return rows;
041        }
042    
043        /**
044         * Sets the rows attribute value.
045         * @param rows The rows to set.
046         */
047        public void setRows(List<AccountingLineTableRow> rows) {
048            this.rows = rows;
049        }
050    
051        /**
052         * @see org.kuali.kfs.sys.document.web.RenderableElement#isHidden()
053         */
054        public boolean isHidden() {
055            for(AccountingLineTableRow row : rows) {
056                if (!row.isHidden()) {
057                    return false;
058                }
059            }
060            return true;
061        }
062    
063        /**
064         * This is not an action block
065         * @see org.kuali.kfs.sys.document.web.RenderableElement#isActionBlock()
066         */
067        public boolean isActionBlock() {
068            return false;
069        }
070        
071        /**
072         * Determines if this table is empty of any renderable elements
073         * @return true if this is empty, false otherwise
074         */
075        public boolean isEmpty() {
076            for (AccountingLineTableRow row : rows) {
077                if (!row.isEmpty()) {
078                    return false;
079                }
080            }
081            return true;
082        }
083    
084        /**
085         * @see org.kuali.kfs.sys.document.web.RenderableElement#renderElement(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
086         */
087        public void renderElement(PageContext pageContext, Tag parentTag, AccountingLineRenderingContext renderingContext) throws JspException {
088            TableRenderer renderer = new TableRenderer();
089            this.renderingContext = renderingContext;
090            renderer.setTable(this);
091            renderer.render(pageContext, parentTag);
092            renderer.clear();
093            this.renderingContext = null;
094        }
095        
096        /**
097         * Requests that this table render all of its children rows
098         * @param pageContext the page context to render to
099         * @param parentTag the parent tag requesting the rendering
100         * @param accountingLine accounting line getting rendered
101         * @param accountingLineProperty property to the accounting line
102         * @throws JspException thrown when some sort of thing goes wrong
103         */
104        public void renderChildrenRows(PageContext pageContext, Tag parentTag) throws JspException {
105            for (AccountingLineTableRow row : rows) {
106                row.renderElement(pageContext, parentTag, renderingContext);
107            }
108        }
109    
110        /**
111         * @see org.kuali.kfs.sys.document.web.RenderableElement#appendFieldNames(java.util.List)
112         */
113        public void appendFields(List<Field> fields) {
114            for (AccountingLineTableRow row : rows) {
115                row.appendFields(fields);
116            }
117        }
118    
119        /**
120         * @see org.kuali.kfs.sys.document.web.RenderableElement#populateWithTabIndexIfRequested(int[], int)
121         */
122        public void populateWithTabIndexIfRequested(int reallyHighIndex) {
123            for (AccountingLineTableRow row : rows) {
124                row.populateWithTabIndexIfRequested(reallyHighIndex);
125            }
126        }
127        
128        /**
129         * Adds a row to the bottom of this table's list of rows
130         * @param row the row to add
131         */
132        public void addRow(AccountingLineTableRow row) {
133            if (rows == null) {
134                rows = new ArrayList<AccountingLineTableRow>();
135            }
136            rows.add(row);
137        }
138    }