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.kuali.kfs.sys.context.SpringContext;
026    import org.kuali.rice.kns.service.KualiConfigurationService;
027    
028    /**
029     * Renders a field as a text field with a date picker
030     */
031    public class DateRenderer extends TextRenderer {
032    
033        /**
034         * 
035         * @see org.kuali.kfs.sys.document.web.renderers.TextRenderer#clear()
036         */
037        @Override
038        public void clear() {
039            super.clear();
040        }
041    
042        /**
043         * 
044         * @see org.kuali.kfs.sys.document.web.renderers.TextRenderer#render(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag, org.kuali.rice.kns.bo.BusinessObject)
045         */
046        @Override
047        public void render(PageContext pageContext, Tag parentTag) throws JspException {
048            super.render(pageContext, parentTag);
049            
050            JspWriter out = pageContext.getOut();
051            try {
052                out.write(buildDateImage());
053                out.write(buildDateJavascript());
054            }
055            catch (IOException ioe) {
056                throw new JspException("Difficulty rendering date picker", ioe);
057            }
058        }
059        
060        /**
061         * Builds the image for the icon of the date component
062         * @return the HTML for the image icon for the date component
063         */
064        protected String buildDateImage() {
065            StringBuilder dateImage = new StringBuilder();
066            dateImage.append("<img src=\"");
067            dateImage.append(SpringContext.getBean(KualiConfigurationService.class).getPropertyString("kr.externalizable.images.url")); 
068            dateImage.append("cal.gif\" ");
069            dateImage.append("id=\"");
070            dateImage.append(getFieldName());
071            dateImage.append("_datepicker\" ");
072            dateImage.append("style=\"cursor: pointer;\" ");
073            dateImage.append("title=\"Date selector for ");
074            dateImage.append(getField().getFieldLabel());
075            dateImage.append("\" ");
076            dateImage.append("alt=\"Date selector for ");
077            dateImage.append(this.getAccessibleTitle());
078            dateImage.append("\" ");
079            dateImage.append("onmouseover=\"this.style.backgroundColor='red';\" ");
080            dateImage.append("onmouseout=\"this.style.backgroundColor='transparent';\"");
081            dateImage.append(" />\n");
082            return dateImage.toString();
083        }
084        
085        /**
086         * Builds the JavaScript portion of the date picker
087         * @return the HTML for the javascript to make the date component work
088         */
089        protected String buildDateJavascript() {
090            StringBuilder dateJavascript = new StringBuilder();
091            dateJavascript.append("<script type=\"text/javascript\">\n");
092            dateJavascript.append("Calendar.setup(\n"); 
093            dateJavascript.append("  {\n"); 
094            dateJavascript.append(" inputField : \"");
095            dateJavascript.append(getFieldName());
096            dateJavascript.append("\", // ID of the input field\n");
097            dateJavascript.append(" ifFormat : \"%m/%d/%Y\", // the date format\n"); 
098            dateJavascript.append(" button : \"");
099            dateJavascript.append(getFieldName());
100            dateJavascript.append("_datepicker\" // ID of the button\n"); 
101            dateJavascript.append("  }\n"); 
102            dateJavascript.append(");\n");
103            dateJavascript.append("</script>");
104            
105            return dateJavascript.toString();
106        }
107    
108        /**
109         * Overridden to do nothing - date fields never need quick finders
110         * @see org.kuali.kfs.sys.document.web.renderers.FieldRendererBase#renderQuickFinderIfNecessary(javax.servlet.jsp.PageContext, javax.servlet.jsp.tagext.Tag, org.kuali.rice.kns.bo.BusinessObject)
111         */
112        @Override
113        protected void renderQuickFinderIfNecessary(PageContext pageContext, Tag parentTag) throws JspException {
114            // do nothing
115        }
116    
117        
118    }