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     * Renders a control as a group of radio buttons
031     */
032    public class RadioButtonGroupRenderer 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(buildRadioButtons());
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 radio buttons", ioe);
051            }
052        }
053    
054        /**
055         * Builds radio buttons for all the valid values on the field
056         * @param propertyPrefix the property path from the form to the business object being rendered
057         * @return a String containing the HTML for all the radio buttons
058         */
059        protected String buildRadioButtons() {
060            StringBuilder radioButtons = new StringBuilder();
061            for (Object keyLabelPairAsObject : getField().getFieldValidValues()) {
062                radioButtons.append(buildRadioButton((KeyLabelPair)keyLabelPairAsObject));
063            }
064            return radioButtons.toString();
065        }
066        
067        /**
068         * Given a KeyLabelPair, generates a radio buttion representing it
069         * @param keyLabelPair the key label pair to turn into a radio button
070         * @param propertyPrefix the property path from the form to the business object being rendered
071         * @return the HTML for the represented radio button
072         */
073        protected String buildRadioButton(KeyLabelPair keyLabelPair) {
074            StringBuilder radioButton = new StringBuilder();
075            
076            radioButton.append("<input type=\"radio\"");
077            
078            if (getField().getPropertyValue().equalsIgnoreCase(keyLabelPair.getKey().toString())) {
079                radioButton.append(" checked=\"checked\"");
080            }
081            
082            radioButton.append(" title=\"");
083            radioButton.append(this.getAccessibleTitle());
084            radioButton.append("\"");
085            
086            radioButton.append(" name=\"");
087            radioButton.append(getFieldName());
088            radioButton.append("\"");
089            
090            radioButton.append(" id=\"");
091            radioButton.append(getFieldName()+"_"+keyLabelPair.getKey().toString().replaceAll("\\W", "_"));
092            radioButton.append("\"");
093            
094            radioButton.append(" value=\"");
095            radioButton.append(keyLabelPair.getKey());
096            radioButton.append("\"");
097            
098            String onBlur = buildOnBlur();
099            if (!StringUtils.isBlank(onBlur)) {
100                radioButton.append(" ");
101                radioButton.append(onBlur);
102            }
103            
104            radioButton.append(" /> ");
105            radioButton.append(keyLabelPair.getLabel());
106            radioButton.append(" ");
107            
108            return radioButton.toString();
109        }
110    
111        /**
112         * No quickfinder
113         * @see org.kuali.kfs.sys.document.web.renderers.FieldRenderer#renderQuickfinder()
114         */
115        public boolean renderQuickfinder() {
116            return false;
117        }
118        
119    }