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.renderers;
017    
018    import java.io.IOException;
019    
020    import javax.servlet.jsp.JspException;
021    import javax.servlet.jsp.JspWriter;
022    import javax.servlet.jsp.PageContext;
023    import javax.servlet.jsp.tagext.Tag;
024    
025    import org.apache.struts.taglib.bean.WriteTag;
026    import org.kuali.kfs.sys.context.SpringContext;
027    import org.kuali.rice.kns.service.KualiConfigurationService;
028    
029    public class DebitCreditTotalRenderer extends TotalRendererBase {
030        private String debitTotalProperty;
031        private String creditTotalProperty;
032        private String representedProperty;
033        
034        private String debitTotalLabelProperty = "accounting.line.group.debitTotal.label";
035        private String creditTotalLabelProperty = "accounting.line.group.creditTotal.label";
036        
037        private String formName = "KualiForm";   
038        
039        private WriteTag debitWriteTag = new WriteTag();
040        private WriteTag creditWriteTag = new WriteTag();
041        
042        /**
043         * Constructs a GroupTotalRenderer, setting permanent values on the writeTag tag
044         */
045        public DebitCreditTotalRenderer() {
046            debitWriteTag.setName(formName);
047            creditWriteTag.setName(formName);
048        }
049    
050        /**
051         * Clears out the totalProperty
052         * @see org.kuali.kfs.sys.document.web.renderers.Renderer#clear()
053         */
054        public void clear() {
055            super.clear();
056            debitTotalProperty = null;
057            creditTotalProperty = null;
058            representedProperty = null;
059            
060            debitWriteTag.setPageContext(null);
061            debitWriteTag.setParent(null);
062            debitWriteTag.setProperty(null);
063            
064            creditWriteTag.setPageContext(null);
065            creditWriteTag.setParent(null);
066            creditWriteTag.setProperty(null);
067        }
068    
069        /**
070         * Uses a Struts write tag to dump out the total
071         * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
072         */
073        public void render(PageContext pageContext, Tag parentTag) throws JspException {
074            JspWriter out = pageContext.getOut();
075            
076            try {
077                out.write("<tr>");
078                
079                final int emptyCellSpanBefore = this.getColumnNumberOfRepresentedCell() - 1;
080                out.write("<td  class=\"total-line\" colspan=\"");
081                out.write(Integer.toString(emptyCellSpanBefore));
082                out.write("\">&nbsp;</td>");
083                
084                out.write("<td class=\"total-line\" style=\"border-left: 0px; white-space:nowrap;\">");            
085                out.write("<strong>");
086                
087                out.write(SpringContext.getBean(KualiConfigurationService.class).getPropertyString(debitTotalLabelProperty));
088                out.write("&nbsp;");
089                
090                debitWriteTag.setPageContext(pageContext);
091                debitWriteTag.setParent(parentTag);
092                debitWriteTag.setProperty(debitTotalProperty);
093                debitWriteTag.doStartTag();
094                debitWriteTag.doEndTag();
095                
096                out.write("</strong>");            
097                out.write("</td>");
098                
099                out.write("<td class=\"total-line\" style=\"border-left: 0px; white-space:nowrap;\">");            
100                out.write("<strong>");
101                
102                out.write(SpringContext.getBean(KualiConfigurationService.class).getPropertyString(creditTotalLabelProperty));
103                out.write("&nbsp;");
104                
105                creditWriteTag.setPageContext(pageContext);
106                creditWriteTag.setParent(parentTag);
107                creditWriteTag.setProperty(creditTotalProperty);
108                creditWriteTag.doStartTag();
109                creditWriteTag.doEndTag();
110                
111                out.write("</strong>");            
112                out.write("</td>");
113                
114                final int emptyCellSpanAfter = this.getCellCount() - this.getColumnNumberOfRepresentedCell() - 1;
115                if(emptyCellSpanAfter > 0) {
116                    out.write("<td class=\"total-line\" style=\"border-left: 0px;\" colspan=\"");
117                    out.write(Integer.toString(emptyCellSpanAfter));
118                    out.write("\">&nbsp;</td>");
119                }
120                
121                out.write("</tr>");
122            }
123            catch (IOException ioe) {
124                throw new JspException("Difficulty rendering debit credit totals", ioe);
125            }
126        }
127    
128        /**
129         * Gets the debitTotalProperty attribute. 
130         * @return Returns the debitTotalProperty.
131         */
132        public String getDebitTotalProperty() {
133            return debitTotalProperty;
134        }
135    
136        /**
137         * Sets the debitTotalProperty attribute value.
138         * @param debitTotalProperty The debitTotalProperty to set.
139         */
140        public void setDebitTotalProperty(String debitTotalProperty) {
141            this.debitTotalProperty = debitTotalProperty;
142        }
143    
144        /**
145         * Gets the creditTotalProperty attribute. 
146         * @return Returns the creditTotalProperty.
147         */
148        public String getCreditTotalProperty() {
149            return creditTotalProperty;
150        }
151    
152        /**
153         * Sets the creditTotalProperty attribute value.
154         * @param creditTotalProperty The creditTotalProperty to set.
155         */
156        public void setCreditTotalProperty(String creditTotalProperty) {
157            this.creditTotalProperty = creditTotalProperty;
158        }
159    
160        /**
161         * Gets the debitTotalLabelProperty attribute. 
162         * @return Returns the debitTotalLabelProperty.
163         */
164        public String getDebitTotalLabelProperty() {
165            return debitTotalLabelProperty;
166        }
167    
168        /**
169         * Sets the debitTotalLabelProperty attribute value.
170         * @param debitTotalLabelProperty The debitTotalLabelProperty to set.
171         */
172        public void setDebitTotalLabelProperty(String debitTotalLabelProperty) {
173            this.debitTotalLabelProperty = debitTotalLabelProperty;
174        }
175    
176        /**
177         * Gets the creditTotalLabelProperty attribute. 
178         * @return Returns the creditTotalLabelProperty.
179         */
180        public String getCreditTotalLabelProperty() {
181            return creditTotalLabelProperty;
182        }
183    
184        /**
185         * Sets the creditTotalLabelProperty attribute value.
186         * @param creditTotalLabelProperty The creditTotalLabelProperty to set.
187         */
188        public void setCreditTotalLabelProperty(String creditTotalLabelProperty) {
189            this.creditTotalLabelProperty = creditTotalLabelProperty;
190        }
191    }