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 }