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
020 import javax.servlet.jsp.JspException;
021 import javax.servlet.jsp.PageContext;
022 import javax.servlet.jsp.tagext.Tag;
023
024 import org.kuali.kfs.sys.KFSConstants;
025 import org.kuali.kfs.sys.context.SpringContext;
026 import org.kuali.kfs.sys.document.web.renderers.PersistingTagRenderer;
027 import org.kuali.kfs.sys.document.web.renderers.StringRenderer;
028 import org.kuali.rice.kns.service.KualiConfigurationService;
029 import org.kuali.rice.kns.web.ui.Field;
030
031 /**
032 * A class to represent the rendering of a sequence number field
033 */
034 public class AccountingLineViewSequenceNumberField extends FieldTableJoiningWithHeader {
035 private String name = KFSConstants.AccountingLineViewStandardBlockNames.SEQUENCE_NUMBER_BLOCK;
036 private String newLineLabelProperty = "accounting.line.new.line.sequence.number";
037
038 /**
039 * Sequence numbers are always read only
040 * @see org.kuali.kfs.sys.document.web.AccountingLineViewRenderableElementField#isReadOnly()
041 */
042 public boolean isReadOnly() {
043 return true;
044 }
045
046 /**
047 * Returns the name of this sequence number field
048 * @see org.kuali.kfs.sys.document.web.TableJoining#getName()
049 */
050 public String getName() {
051 return name;
052 }
053
054 /**
055 * Sets the name of this sequence number field
056 * @param name the name to set
057 */
058 public void setName(String name) {
059 this.name = name;
060 }
061
062 /**
063 * @see org.kuali.kfs.sys.document.web.TableJoiningWithHeader#getHeaderLabelProperty()
064 */
065 public String getHeaderLabelProperty() {
066 return this.name;
067 }
068
069 /**
070 * @see org.kuali.kfs.sys.document.web.FieldTableJoining#createTableCell()
071 */
072 @Override
073 protected AccountingLineTableCell createTableCell() {
074 AccountingLineTableCell cell = super.createTableCell();
075 cell.setRendersAsHeader(true);
076 return cell;
077 }
078
079 /**
080 * @see org.kuali.kfs.sys.document.web.RenderableElement#renderElement(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag, org.kuali.kfs.sys.document.web.AccountingLineRenderingContext)
081 */
082 public void renderElement(PageContext pageContext, Tag parentTag, AccountingLineRenderingContext renderingContext) throws JspException {
083 if (renderingContext.isNewLine()) {
084 StringRenderer renderer = new StringRenderer();
085 renderer.setStringToRender(SpringContext.getBean(KualiConfigurationService.class).getPropertyString(newLineLabelProperty));
086 renderer.render(pageContext, parentTag);
087 renderer.clear();
088 } else {
089 PersistingTagRenderer renderer = new PersistingTagRenderer();
090 renderer.setStringToRender(getDisplaySequenceNumber(renderingContext));
091 renderer.setValueToPersist(renderingContext.getAccountingLine().getSequenceNumber().toString());
092 renderer.setPersistingProperty(renderingContext.getAccountingLinePropertyPath()+".sequenceNumber");
093 renderer.render(pageContext, parentTag);
094 renderer.clear();
095 }
096 }
097
098 /**
099 * Given the rendering context, returns what the sequence number of the line to be rendered is
100 * @param renderingContext the rendering context which holds the accounting line
101 * @return the sequence number to render (not the one to store as a value)
102 */
103 protected String getDisplaySequenceNumber(AccountingLineRenderingContext renderingContext) {
104 return renderingContext.getAccountingLine().getSequenceNumber().toString();
105 }
106
107 /**
108 * @see org.kuali.kfs.sys.document.web.TableJoiningWithHeader#createHeaderLabel()
109 */
110 public HeaderLabel createHeaderLabel() {
111 return new LiteralHeaderLabel(" ");
112 }
113
114 /**
115 * sequence number is never really related to lookups, so this implementation does nothing
116 * @see org.kuali.kfs.sys.document.web.RenderableElement#appendFieldNames(java.util.List)
117 */
118 public void appendFields(List<Field> fields) {
119 // take a nap
120 }
121
122 /**
123 * Does nothing
124 * @see org.kuali.kfs.sys.document.web.RenderableElement#populateWithTabIndexIfRequested(int[], int)
125 */
126 public void populateWithTabIndexIfRequested(int reallyHighIndex) { }
127 }