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.commons.lang.StringUtils;
026 import org.kuali.kfs.sys.document.web.util.RendererUtil;
027 import org.kuali.rice.core.util.KeyLabelPair;
028
029 /**
030 * This renders a drop down field to JSP
031 */
032 public class DropDownRenderer extends FieldRendererBase {
033
034 /**
035 *
036 * @see org.kuali.kfs.sys.document.web.renderers.Renderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag)
037 */
038 public void render(PageContext pageContext, Tag parentTag) throws JspException {
039 JspWriter out = pageContext.getOut();
040
041 try {
042 out.write(buildSelectControl());
043 renderQuickFinderIfNecessary(pageContext, parentTag);
044 if (isShowError()) {
045 renderErrorIcon(pageContext);
046 }
047 RendererUtil.registerEditableProperty(pageContext, getFieldName());
048 }
049 catch (IOException ioe) {
050 throw new JspException("Difficulty rendering drop down control", ioe);
051 }
052 }
053
054 /**
055 * Builds a drop down control, based on the field
056 * @param propertyPrefix the prefix of the property from the form to the business object
057 * @return a String containing the HTML for the drop down control/select box
058 */
059 protected String buildSelectControl() {
060 StringBuilder selectControl = new StringBuilder();
061 selectControl.append("<select");
062
063 selectControl.append(" id=\"");
064 selectControl.append(getFieldName());
065 selectControl.append("\" ");
066
067 selectControl.append(" name=\"");
068 selectControl.append(getFieldName());
069 selectControl.append("\" ");
070
071 selectControl.append(" title=\"");
072 selectControl.append(this.getAccessibleTitle());
073 selectControl.append("\"");
074
075 final String onBlur = buildOnBlur();
076 if (!StringUtils.isBlank(onBlur)) {
077 selectControl.append(" onblur=\"");
078 selectControl.append(onBlur);
079 selectControl.append("\"");
080 }
081
082 selectControl.append(">");
083
084 selectControl.append(buildOptions());
085
086 selectControl.append("</select>");
087
088 return selectControl.toString();
089 }
090
091 /**
092 * Builds the options for the select box, given the valid values in the field
093 * @return a String containing all the option tags for this drop down control
094 */
095 protected String buildOptions() {
096 StringBuilder options = new StringBuilder();
097
098 for (Object keyLabelPairAsObj : getField().getFieldValidValues()) {
099 options.append(buildOption((KeyLabelPair)keyLabelPairAsObj));
100 }
101
102 return options.toString();
103 }
104
105 /**
106 * Builds an option tag for the given key label pair
107 * @param keyLabelPair the key label pair to create an option tag from
108 * @return the String with the option tag in it
109 */
110 protected String buildOption(KeyLabelPair keyLabelPair) {
111 StringBuilder option = new StringBuilder();
112
113 option.append("<option value=\"");
114 option.append(keyLabelPair.getKey());
115 option.append("\"");
116 if (getField().getPropertyValue().equalsIgnoreCase(keyLabelPair.getKey().toString())) {
117 option.append(" selected=\"selected\"");
118 }
119 option.append(">");
120
121 option.append(keyLabelPair.getLabel());
122
123 option.append("</options>");
124
125 return option.toString();
126 }
127
128 /**
129 * No quickfinder for us, thanks
130 * @see org.kuali.kfs.sys.document.web.renderers.FieldRenderer#renderQuickfinder()
131 */
132 public boolean renderQuickfinder() {
133 return false;
134 }
135
136 }