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.text.MessageFormat;
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.kfs.sys.KFSKeyConstants;
027 import org.kuali.kfs.sys.context.SpringContext;
028 import org.kuali.kfs.sys.document.web.util.RendererUtil;
029 import org.kuali.rice.kns.service.KualiConfigurationService;
030 import org.kuali.rice.kns.util.KNSConstants;
031
032 /**
033 * Renders a quick field for an element
034 */
035 public class QuickFinderRenderer extends FieldRendererBase {
036 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(QuickFinderRenderer.class);
037
038 private int tabIndex = -1;
039
040 /**
041 * Gets the tabIndex attribute.
042 * @return Returns the tabIndex.
043 */
044 public int getTabIndex() {
045 return tabIndex;
046 }
047
048 /**
049 * Sets the tabIndex attribute value.
050 * @param tabIndex The tabIndex to set.
051 */
052 public void setTabIndex(int tabIndex) {
053 this.tabIndex = tabIndex;
054 }
055
056 /**
057 * Renders the quick finder to the page context
058 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag, org.kuali.rice.kns.bo.BusinessObject)
059 */
060 public void render(PageContext pageContext, Tag parentTag) throws JspException {
061 JspWriter out = pageContext.getOut();
062 try {
063 out.write(buildQuickFinderHtml(pageContext));
064 } catch (IOException ioe) {
065 throw new JspException("Cannot render quick finder for field "+getField(), ioe);
066 }
067 }
068
069 /**
070 * Creates the HTML for a quick finder icon
071 * @param businessObjectToRender the business object we're rendering
072 * @return the html for the quick finder
073 */
074 protected String buildQuickFinderHtml(PageContext pageContext) {
075 StringBuilder quickFinderHtml = new StringBuilder();
076 quickFinderHtml.append(" <input type=\"image\" ");
077 //quickFinderHtml.append("tabindex=\"${tabindex}\" ");
078 quickFinderHtml.append("name=\"").append(buildQuickFinderName(pageContext)).append("\" ");
079
080 quickFinderHtml.append("src=\"");
081 quickFinderHtml.append(SpringContext.getBean(KualiConfigurationService.class).getPropertyString("kr.externalizable.images.url"));
082 quickFinderHtml.append("searchicon.gif");
083 quickFinderHtml.append("\" ");
084
085 quickFinderHtml.append("border=\"0\" ");
086
087 quickFinderHtml.append("class=\"tinybutton\" ");
088
089 quickFinderHtml.append("valign=\"middle\" ");
090
091 quickFinderHtml.append("alt=\"");
092 quickFinderHtml.append(getAccessibleTitle());
093 quickFinderHtml.append("\" ");
094
095 quickFinderHtml.append("title=\"");
096 quickFinderHtml.append(getAccessibleTitle());
097 quickFinderHtml.append("\" ");
098
099 if (tabIndex > -1) {
100 quickFinderHtml.append(" tabIndex=\"");
101 quickFinderHtml.append(getTabIndex());
102 quickFinderHtml.append("\"");
103 }
104
105 quickFinderHtml.append("/> ");
106
107 return quickFinderHtml.toString();
108 }
109
110 /**
111 * Builds the (quite complex) name for the quick finder field
112 * @return the name of the quick finder field
113 */
114 protected String buildQuickFinderName(PageContext pageContext) {
115 StringBuilder nameBuf = new StringBuilder();
116 nameBuf.append("methodToCall.performLookup.");
117
118 nameBuf.append(KNSConstants.METHOD_TO_CALL_BOPARM_LEFT_DEL);
119 nameBuf.append(getField().getQuickFinderClassNameImpl());
120 nameBuf.append(KNSConstants.METHOD_TO_CALL_BOPARM_RIGHT_DEL);
121 nameBuf.append(".");
122
123 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM1_LEFT_DEL);
124 nameBuf.append(getField().getFieldConversions());
125 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL);
126 nameBuf.append(".");
127
128 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM2_LEFT_DEL);
129 nameBuf.append(getField().getLookupParameters());
130 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM2_RIGHT_DEL);
131 nameBuf.append(".");
132
133 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM3_LEFT_DEL+KNSConstants.METHOD_TO_CALL_PARM3_RIGHT_DEL+"."); // hide return link
134
135 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM4_LEFT_DEL+KNSConstants.METHOD_TO_CALL_PARM4_RIGHT_DEL+"."); // extra button source
136
137 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM5_LEFT_DEL+KNSConstants.METHOD_TO_CALL_PARM5_RIGHT_DEL+"."); // extra button params
138
139 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM7_LEFT_DEL+KNSConstants.METHOD_TO_CALL_PARM7_RIGHT_DEL+"."); // supress actions
140
141 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM8_LEFT_DEL+KNSConstants.METHOD_TO_CALL_PARM8_RIGHT_DEL+"."); // read only fields
142
143 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM10_LEFT_DEL);
144 nameBuf.append(getField().getReferencesToRefresh());
145 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM10_RIGHT_DEL+".");
146
147 nameBuf.append(KNSConstants.METHOD_TO_CALL_PARM9_LEFT_DEL+KNSConstants.METHOD_TO_CALL_PARM9_RIGHT_DEL+"."); // auto-search
148
149 nameBuf.append("anchor"); // anchor
150
151 String name = nameBuf.toString();
152 RendererUtil.registerEditableProperty(pageContext, name);
153 return name;
154 }
155
156 /**
157 * A quick finder for a quick finder? I fear not
158 * @see org.kuali.kfs.sys.document.web.renderers.FieldRenderer#renderQuickfinder()
159 */
160 public boolean renderQuickfinder() {
161 return false;
162 }
163
164 /**
165 * Clears the tab index
166 * @see org.kuali.kfs.sys.document.web.renderers.FieldRendererBase#clear()
167 */
168 @Override
169 public void clear() {
170 super.clear();
171 tabIndex = -1;
172 }
173
174 /**
175 * Overridden to format into message automatically, so there's a "Search" in front of the field label name
176 * @see org.kuali.kfs.sys.document.web.renderers.FieldRendererBase#setAccessibleTitle(java.lang.String)
177 */
178 @Override
179 public void setAccessibleTitle(String accessibleTitle) {
180 final String messagePattern = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.LABEL_ACCOUNTING_LINE_QUICKFINDER_ACCESSIBLE_TITLE);
181 final String formattedAccessibleTitle = MessageFormat.format(messagePattern, accessibleTitle);
182 super.setAccessibleTitle(formattedAccessibleTitle);
183 }
184
185 }