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 import java.util.List;
020
021 import javax.servlet.jsp.JspException;
022 import javax.servlet.jsp.JspWriter;
023 import javax.servlet.jsp.PageContext;
024 import javax.servlet.jsp.tagext.Tag;
025
026 import org.kuali.rice.kns.web.ui.Field;
027
028 /**
029 * Renders a set of read only fields to a table cell
030 */
031 public class MultipleReadOnlyFieldsRenderer implements Renderer {
032 private List<Field> fields;
033 private ReadOnlyRenderer readOnlyRenderer = new ReadOnlyRenderer();
034
035 /**
036 *
037 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#clear()
038 */
039 public void clear() {
040 fields = null;
041 }
042
043 /**
044 *
045 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
046 */
047 public void render(PageContext pageContext, Tag parentTag) throws JspException {
048 try {
049 JspWriter out = pageContext.getOut();
050 if (fields != null && !fields.isEmpty()) {
051 out.write(beginReadOnlyLayout());
052 for (Field field : fields) {
053 out.write(beginReadOnlyLabel());
054 out.write(renderLabel(field));
055 out.write(endReadOnlyLabel());
056 out.write(beginReadOnlyValue());
057 readOnlyRenderer.setField(field);
058 if (field.getInquiryURL() != null) {
059 readOnlyRenderer.setShouldRenderInquiry(true);
060 }
061 readOnlyRenderer.render(pageContext, parentTag);
062 readOnlyRenderer.clear();
063 out.write(endReadOnlyValue());
064 }
065 out.write(endReadOnlyLayout());
066 } else {
067 out.write(renderEmptyCell());
068 }
069 }
070 catch (IOException ioe) {
071 throw new JspException("Could not render MultipleReadOnlyFields", ioe);
072 }
073 }
074
075 /**
076 * @return the value to render for an empty cell
077 */
078 protected String renderEmptyCell() {
079 return " ";
080 }
081
082 protected String beginReadOnlyLayout() {
083 return "<table>";
084 }
085
086 protected String beginReadOnlyLabel() {
087 return "<tr><td width=\"50%\">";
088 }
089
090 protected String endReadOnlyLabel() {
091 return "</td>";
092 }
093
094 protected String beginReadOnlyValue() {
095 return "<td width=\"50%\">";
096 }
097
098 protected String endReadOnlyValue() {
099 return "</td></tr>";
100 }
101
102 protected String renderLabel(Field field) {
103 return field.getFieldLabel();
104 }
105
106 protected String endReadOnlyLayout() {
107 return "</table>";
108 }
109
110 /**
111 * @return the current list of fields to render through this render pass
112 */
113 public List<Field> getFields() {
114 return fields;
115 }
116
117 /**
118 * Associate fields with this render pass of the renderer
119 * @param fields the fields to render through this render pass
120 */
121 public void setFields(List<Field> fields) {
122 this.fields = fields;
123 }
124
125 }