Webtop 6.5 DateTime控件选择日期时,星期几显示不全
处理前上期显示样式处理后日期显示样式
package
com.documentum.web.form.control;
import java.awt.Dimension;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.jsp.JspWriter;
import com.documentum.fc.common.DfTime;
import com.documentum.web.common.AccessibilityService;
import com.documentum.web.common.BrandingService;
import com.documentum.web.common.IThemeResolver;
import com.documentum.web.common.ImageService;
import com.documentum.web.common.LocaleService;
import com.documentum.web.common.WrapperRuntimeException;
import com.documentum.web.form.Control;
import com.documentum.web.form.Form;
import com.documentum.web.util.DateUtil;
import com.documentum.web.util.SafeHTMLString;
import com.documentum.web.util.StringUtil;
/** */ /**
* @author liaojiyong
* @date Aug 2, 2009
* @version 1.0
*/
public class DateTimeTag extends DateInputTag {
public DateTimeTag() {
m_strHour = null;
m_strMinute = null;
m_strSecond = null;
m_strTimeSelector = null;
m_strTimeFormat = null;
m_strTimeStep = null;
m_strFromTime = null;
m_strToTime = null;
}
public void release() {
super.release();
m_strHour = null;
m_strMinute = null;
m_strSecond = null;
m_strTimeSelector = null;
m_strTimeFormat = null;
m_strTimeStep = null;
m_strFromTime = null;
m_strToTime = null;
}
public void setHour(String strHour) {
m_strHour = strHour;
}
public void setMinute(String strMinute) {
m_strMinute = strMinute;
}
public void setSecond(String strSecond) {
m_strSecond = strSecond;
}
public void setTimeselector(String strTimeSelector) {
m_strTimeSelector = strTimeSelector;
}
public void setTimeformat(String strTimeFormat) {
m_strTimeFormat = strTimeFormat;
}
public void setTimestep(String strTimeStep) {
m_strTimeStep = strTimeStep;
}
public void setFromtime(String strFromTime) {
m_strFromTime = strFromTime;
}
public void setTotime(String strToTime) {
m_strToTime = strToTime;
}
protected Class getControlClass() {
return com.documentum.web.form.control.DateTime.class;
}
protected boolean isDatafieldHandlerClass(Class cl) {
return cl.equals(com.documentum.web.form.control.DateTimeTag.class);
}
protected void setControlProperties(Control control) {
super.setControlProperties(control);
DateTime dateTime = (DateTime) control;
if (m_strTimeFormat != null)
if (m_strTimeFormat.equalsIgnoreCase("short"))
dateTime.setTimeFormat(3);
else
if (m_strTimeFormat.equalsIgnoreCase("medium"))
dateTime.setTimeFormat(2);
else
if (m_strTimeFormat.equalsIgnoreCase("long"))
dateTime.setTimeFormat(1);
else
throw new WrapperRuntimeException("datetime tag 'timeformat' attribute value must be 'short', 'medium' or 'long'");
if (m_strTimeSelector != null)
if (m_strTimeSelector.equalsIgnoreCase("text"))
dateTime.setTimeSelector(2);
else
if (m_strTimeSelector.equalsIgnoreCase("list"))
dateTime.setTimeSelector(0);
else
if (m_strTimeSelector.equalsIgnoreCase("fields"))
dateTime.setTimeSelector(1);
else
throw new WrapperRuntimeException("datetime tag 'timeselector' attribute value must be 'text', 'list' or 'field'");
if (m_strTimeStep != null)
dateTime.setTimeStep(Integer.parseInt(m_strTimeStep));
if (m_strFromTime != null)
dateTime.setFromTime(m_strFromTime);
if (m_strToTime != null)
dateTime.setToTime(m_strToTime);
if (m_strHour != null && m_strHour.length() > 0 || m_strMinute != null && m_strMinute.length() > 0 || m_strSecond != null && m_strSecond.length() > 0) {
int hour = 0;
int minute = 0;
int second = 0;
if (m_strHour != null)
hour = Integer.parseInt(m_strHour);
if (m_strMinute != null)
minute = Integer.parseInt(m_strMinute);
if (m_strSecond != null)
second = Integer.parseInt(m_strSecond);
dateTime.setHour(hour);
dateTime.setMinute(minute);
dateTime.setSecond(second);
}
if (getDatafield() != null && isDatafieldHandlerClass(com.documentum.web.form.control.DateTimeTag.class)) {
String strResult = resolveDatafield(getDatafield());
if (strResult != null) {
Date date = new Date((new Long(strResult)).longValue());
DfTime dfTime = new DfTime(date);
dateTime.setYear(dfTime.getYear());
dateTime.setMonth(dfTime.getMonth());
dateTime.setDay(dfTime.getDay());
dateTime.setHour(dfTime.getHour());
dateTime.setMinute(dfTime.getMinutes());
dateTime.setSecond(dfTime.getSeconds());
}
}
String strValue = dateTime.toDateTimeString(3, 2);
if (strValue != null)
dateTime.setValue(strValue);
}
protected void renderEnd(JspWriter out) throws IOException {
DateTime dateTime = (DateTime) getControl();
if (dateTime.isVisible()) {
java.util.Locale locale = LocaleService.getLocale();
Calendar calendar = Calendar.getInstance(locale);
calendar.set(1, 0, 1, 2, 2, 2);
DateFormat df = DateFormat.getDateTimeInstance(3, 2, locale);
String strDate = df.format(calendar.getTime());
out.print("<span class=\"dateTime\"");
String title = dateTime.getToolTip();
if (title != null) {
out.print(" title=\"");
out.print(SafeHTMLString.escapeAttribute(title));
out.print("\"");
}
out.print(">");
int width = dateTime.getWidth();
if (strDate.indexOf("1") < strDate.indexOf("2")) {
renderDate(out, dateTime, width / 2);
renderTime(out, dateTime, width / 2);
} else {
renderTime(out, dateTime, width / 2);
renderDate(out, dateTime, width / 2);
}
out.print("</span>");
}
}
protected void renderEventArg(StringBuffer buf, String strClientEvent, String strServerEvent) {
if (!strClientEvent.equals("onchange")) {
super.renderEventArg(buf, strClientEvent, strServerEvent);
} else {
DateTime control = (DateTime) getControl();
boolean hasEventHandler = control.getEventHandlerMethod(strServerEvent) != null;
buf.append(" ");
buf.append(strClientEvent);
buf.append("='");
if (hasEventHandler)
buf.append("setKeys(event);");
renderTimeUpdateCode(buf);
if (hasEventHandler)
renderSubmitCode(buf, strServerEvent);
buf.append("' ");
if (hasEventHandler && AccessibilityService.isAllAccessibilitiesEnabled()) {
buf.append(" onkeypress='");
renderKeyPressSubmitCode(buf, strServerEvent);
buf.append("' ");
}
}
}
protected void renderDate(JspWriter out, DateInput dateInput, int width) throws IOException {
StringBuffer scriptBuffer = new StringBuffer("<script type='text/javascript'>");
scriptBuffer.append("function __onDateSet");
scriptBuffer.append(dateInput.getElementName());
scriptBuffer.append("() {");
DateTime dateTime = (DateTime) getControl();
int timeSelector = dateTime.getTimeSelector();
if (timeSelector == 1) {
String dateId = dateTime.getElementName("date");
String hourId = dateTime.getElementName("hour");
String minuteId = dateTime.getElementName("minute");
String secondId = dateTime.getElementName("second");
scriptBuffer.append("var dateElements = document.getElementsByName('");
scriptBuffer.append(dateId);
scriptBuffer.append("');\n");
scriptBuffer.append("var hourElements = document.getElementsByName('");
scriptBuffer.append(hourId);
scriptBuffer.append("');\n");
scriptBuffer.append("var minuteElements = document.getElementsByName('");
scriptBuffer.append(minuteId);
scriptBuffer.append("');\n");
scriptBuffer.append("var secondElements = document.getElementsByName('");
scriptBuffer.append(secondId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (dateElements != null && dateElements[0] != null && dateElements[0].value != null && dateElements[0].value.length == 0){ ");
scriptBuffer.append("hourElements[0].selectedIndex = 0;");
scriptBuffer.append("minuteElements[0].selectedIndex = 0;");
scriptBuffer.append("secondElements[0].selectedIndex = 0;");
scriptBuffer.append("return; }\n");
scriptBuffer.append("if (hourElements != null && hourElements[0] != null && hourElements[0].selectedIndex == 0) {hourElements[0].selectedIndex = 1;}\n");
scriptBuffer.append("if (minuteElements != null && minuteElements[0] != null && minuteElements[0].selectedIndex == 0) {minuteElements[0].selectedIndex = 1;}\n");
scriptBuffer.append("if (secondElements != null && secondElements[0] != null && secondElements[0].selectedIndex == 0) {secondElements[0].selectedIndex = 1;}\n");
} else
if (timeSelector == 0) {
String dateId = dateTime.getElementName("date");
String timeId = dateTime.getElementName("time");
scriptBuffer.append("var dateElements = document.getElementsByName('");
scriptBuffer.append(dateId);
scriptBuffer.append("');\n");
scriptBuffer.append("var timeElements = document.getElementsByName('");
scriptBuffer.append(timeId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (dateElements != null && dateElements[0] != null && dateElements[0].value != null && dateElements[0].value.length == 0) { timeElements[0].selectedIndex = 0; return; }\n");
scriptBuffer.append("if (timeElements[0].selectedIndex == 0) { timeElements[0].selectedIndex = 1;}\n");
} else {
String initialTimeValue = dateTime.toTimeString(dateTime.getTimeFormat());
String timeId = dateTime.getElementName("time");
scriptBuffer.append("var timeElements = document.getElementsByName('");
scriptBuffer.append(timeId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (timeElements != null && timeElements[0] != null && timeElements[0].value != null && timeElements[0].value.length == 0) { timeElements[0].value ='");
scriptBuffer.append(initialTimeValue);
scriptBuffer.append("'; }\n");
}
scriptBuffer.append("}\n");
scriptBuffer.append("</script>");
if (dateInput.getDateSelectorType() == 0) {
scriptBuffer.append("<script type='text/javascript'>");
String dayFieldId = dateInput.getElementName("day");
String monthFieldId = dateInput.getElementName("month");
String yearFieldId = dateInput.getElementName("year");
scriptBuffer.append("function __updateTimeIfNeeded");
scriptBuffer.append(dateInput.getElementName());
scriptBuffer.append("(){ ");
scriptBuffer.append("var dayElements = document.getElementsByName('");
scriptBuffer.append(dayFieldId);
scriptBuffer.append("');\n");
scriptBuffer.append("var monthElements = document.getElementsByName('");
scriptBuffer.append(monthFieldId);
scriptBuffer.append("');\n");
scriptBuffer.append("var yearElements = document.getElementsByName('");
scriptBuffer.append(yearFieldId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (dayElements != null && dayElements[0] != null && dayElements[0].selectedIndex != 0 && ");
scriptBuffer.append("monthElements != null && monthElements[0] != null && monthElements[0].selectedIndex != 0 && ");
scriptBuffer.append(" yearElements != null && yearElements[0] != null && yearElements[0].selectedIndex != 0) {\n");
scriptBuffer.append("__onDateSet");
scriptBuffer.append(dateInput.getElementName());
scriptBuffer.append("();}\n}\n");
scriptBuffer.append("</script>");
}
String script = scriptBuffer.toString();
out.write(script);
super.renderDate(out, dateInput, width);
}
protected void renderTime(JspWriter out, DateTime dateTime, int width) throws IOException {
if (dateTime.getTimeSelector() == 2)
renderTimeAsText(out, dateTime, width);
else
if (dateTime.getTimeSelector() == 0)
renderTimeAsList(out, dateTime, width);
else
if (dateTime.getTimeSelector() == 1)
renderTimeAsFields(out, dateTime, width);
}
protected void renderTimeUpdateCode(StringBuffer buf) {
DateTime dateTime = (DateTime) getControl();
if (dateTime.getDateSelectorType() == 0)
buf.append("__updateTimeIfNeeded");
else
buf.append("__onDateSet");
buf.append(dateTime.getElementName());
buf.append("();");
}
protected void renderTimeAsText(JspWriter out, DateTime dateTime, int width) throws IOException {
StringBuffer buf = new StringBuffer(128);
String strClass = dateTime.getCssClass();
String strStyle = dateTime.getCssStyle();
buf.append("<input type='text' ").append(renderNameAndId(getControl(), "time"));
String title = dateTime.getToolTip();
if (title != null)
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
if (strClass != null)
buf.append(" class='").append(strClass).append("'");
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
String strTime = dateTime.toTimeString(dateTime.getTimeFormat());
if (strTime == null || strTime.length() == 0)
strTime = getString("MSG_TIME");
buf.append(" value='").append(formatAttribute(strTime)).append("'");
buf.append(" style='width:").append(Math.max(width, 95)).append("px'");
if (!dateTime.isEnabled())
buf.append(" disabled='true'");
buf.append("/>");
out.print(buf.toString());
}
protected void renderTimeAsList(JspWriter out, DateTime dateTime, int width) throws IOException {
StringBuffer buf = new StringBuffer(128);
String strClass = dateTime.getCssClass();
String strStyle = dateTime.getCssStyle();
buf.append("<select ").append(renderNameAndId(getControl(), "time"));
String title = dateTime.getToolTip();
if (title != null)
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
if (strClass != null) {
strClass = convertCssClass(strClass);
buf.append(" class='").append(strClass).append("'");
}
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
buf.append(" size=0");
if (!dateTime.isEnabled())
buf.append(" disabled='true'");
buf.append(" style='width:").append(Math.max(width, 95)).append("px'");
renderEventArg(buf, "onchange", "onselect");
buf.append(">");
java.util.Locale locale = LocaleService.getLocale();
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(new Date());
calendar.set(11, Math.max(0, dateTime.getHour()));
calendar.set(12, Math.max(0, dateTime.getMinute()));
calendar.set(13, Math.max(0, dateTime.getSecond()));
Date time = calendar.getTime();
DateFormat df = DateFormat.getTimeInstance(3, locale);
long timeStep = dateTime.getTimeStep();
if (timeStep == 0L)
timeStep = 1800L;
Calendar from = parseTime(dateTime.getFromTime());
Calendar to = parseTime(dateTime.getToTime());
Date fromTime = from.getTime();
Date toTime = to.getTime();
Date item = fromTime;
buf.append("<option value=''>").append(getString("MSG_TIME")).append("</option>");
do {
String strTime = df.format(item);
buf.append("<option value='").append(strTime).append("'");
if (item.getHours() == time.getHours() && item.getMinutes() == time.getMinutes() || item.getHours() == 12 && time.getHours() == 0 && item.getMinutes() == time.getMinutes())
buf.append(" SELECTED");
buf.append(">").append(strTime).append("</option>");
item.setTime(item.getTime() + timeStep * 1000L);
} while (item.before(toTime) || item.equals(toTime));
buf.append("</select>");
out.print(buf.toString());
}
protected void renderTimeAsFields(JspWriter out, DateTime dateTime, int width) throws IOException {
StringBuffer buf = new StringBuffer(128);
boolean allowedToAddSeparator = false;
width = Math.max(width / 3, 65);
int timeStep = dateTime.getTimeStep();
if (timeStep == 0)
timeStep = 1;
String strQueuedFieldSeparator = "";
DateInputTag.DateFormatTokenizer tokenizer = new DateInputTag.DateFormatTokenizer(getTimeFormat(1));
do {
if (!tokenizer.hasMoreTokens())
break;
String strToken = tokenizer.nextToken();
if (strToken.equalsIgnoreCase("XX")) {
buf.append(strQueuedFieldSeparator);
strQueuedFieldSeparator = "";
renderTimeField(buf, dateTime, "hour", 0, 23, 1, "MSG_HOUR", width, dateTime.getHour());
allowedToAddSeparator = true;
} else
if (strToken.equalsIgnoreCase("YY")) {
if (timeStep % 3600 != 0) {
buf.append(strQueuedFieldSeparator);
strQueuedFieldSeparator = "";
renderTimeField(buf, dateTime, "minute", 0, 59, Math.max(1, timeStep / 60), "MSG_MINUTE", width, dateTime.getMinute());
} else {
dateTime.setMinute(0);
}
allowedToAddSeparator = true;
} else
if (strToken.equalsIgnoreCase("ZZ")) {
if (timeStep % 60 != 0) {
buf.append(strQueuedFieldSeparator);
strQueuedFieldSeparator = "";
renderTimeField(buf, dateTime, "second", 0, 59, timeStep, "MSG_SECOND", width, dateTime.getSecond());
} else {
dateTime.setSecond(0);
}
allowedToAddSeparator = true;
} else
if (allowedToAddSeparator)
strQueuedFieldSeparator = (new StringBuilder()).append(strQueuedFieldSeparator).append(strToken).toString();
} while (true);
out.write(buf.toString());
}
protected void renderTimeField(StringBuffer buf, DateTime dateTime, String strField, int from, int to, int step, String strDescId, int width, int value) {
String strClass = dateTime.getCssClass();
String strStyle = dateTime.getCssStyle();
buf.append("<select ").append(renderNameAndId(getControl(), strField));
String title = dateTime.getToolTip();
if (title != null)
title = (new StringBuilder()).append(title).append(" ").append(getString(strDescId)).toString();
else
title = getString(strDescId);
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
if (strClass != null) {
strClass = convertCssClass(strClass);
buf.append(" class='").append(strClass).append("'");
}
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
buf.append(" size=0");
if (!dateTime.isEnabled())
buf.append(" disabled='true'");
buf.append(" style='width:").append(width).append("px'");
renderEventArg(buf, "onchange", "onselect");
buf.append(">");
buf.append("<option value=''>").append(getString(strDescId)).append("</option>");
for (int i = from; i <= to; i += step) {
buf.append("<option value='").append(i).append("'");
if (value == i)
buf.append(" SELECTED");
buf.append(">");
buf.append(i).append("</option>");
}
buf.append("</select>");
}
protected static String getTimeFormat(int timeFormat) {
java.util.Locale locale = LocaleService.getLocale();
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(new Date());
calendar.set(11, 14);
calendar.set(12, 13);
calendar.set(13, 11);
DateFormat df = DateFormat.getTimeInstance(timeFormat, locale);
String strTimeFormat = df.format(calendar.getTime());
strTimeFormat = StringUtil.replace(strTimeFormat, "02", "XX");
strTimeFormat = StringUtil.replace(strTimeFormat, "2", "XX");
strTimeFormat = StringUtil.replace(strTimeFormat, "14", "XX");
strTimeFormat = StringUtil.replace(strTimeFormat, "13", "YY");
strTimeFormat = StringUtil.replace(strTimeFormat, "11", "ZZ");
return strTimeFormat;
}
static Calendar parseTime(String strTime) {
Calendar calendar = null;
int hour = -1;
int minute = 0;
int second = 0;
int index = 0;
DateInputTag.DateFormatTokenizer tokenizer = new DateInputTag.DateFormatTokenizer(getTimeFormat(1));
do {
if (!tokenizer.hasMoreTokens())
break;
String strToken = tokenizer.nextToken();
if (strToken.equalsIgnoreCase("XX")) {
index = indexOfDigit(strTime, index);
if (index == -1)
break;
hour = parseInt(strTime, index);
index += String.valueOf(hour).length() + 1;
continue;
}
if (strToken.equalsIgnoreCase("YY")) {
index = indexOfDigit(strTime, index);
if (index == -1)
break;
minute = parseInt(strTime, index);
index += String.valueOf(minute).length() + 1;
continue;
}
if (!strToken.equalsIgnoreCase("ZZ"))
continue;
index = indexOfDigit(strTime, index);
if (index == -1)
break;
second = parseInt(strTime, index);
index += String.valueOf(second).length() + 1;
} while (true);
boolean bIsPm = strTime.toLowerCase().indexOf("pm") != -1;
boolean bIsAm = strTime.toLowerCase().indexOf("am") != -1;
if (bIsPm && hour < 12)
hour += 12;
if (bIsAm)
if (hour == 12)
hour = 0;
else
if (hour > 12)
hour = -1;
if (hour == 24)
hour = 0;
if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59) {
calendar = Calendar.getInstance(LocaleService.getLocale());
calendar.setTime(new Date());
calendar.set(11, hour);
calendar.set(12, minute);
calendar.set(13, second);
}
return calendar;
}
protected void renderCalendar(JspWriter out, DateInput dateInput, int width) throws IOException {
if (dateInput.isVisible()) {
StringBuffer buf = new StringBuffer(256);
String title = dateInput.getToolTip();
String strClass = dateInput.getCssClass();
String strStyle = dateInput.getCssStyle();
IThemeResolver themeResolver = BrandingService.getThemeResolver();
String strDropDownImage = themeResolver.getResourcePath(dateInput.isEnabled() ? "images/date/dropdown.gif" : "images/date/dropdown_disabled.gif", getForm().getPageContext(), false);
String strPrevMonthImage = themeResolver.getResourcePath("images/date/prevmonth.gif", getForm().getPageContext(), false);
String strNextMonthImage = themeResolver.getResourcePath("images/date/nextmonth.gif", getForm().getPageContext(), false);
Dimension imageExtents = ImageService.getDimensions(strDropDownImage, getForm().getPageContext());
Calendar calendar = Calendar.getInstance(LocaleService.getLocale());
int firstDayOfWeek = calendar.getFirstDayOfWeek();
StringBuffer dateFormatBuf = new StringBuffer();
renderJavaScriptString(dateFormatBuf, getDateFormat(3));
String strShortDateFormat = dateFormatBuf.toString();
dateFormatBuf.delete(0, dateFormatBuf.length());
renderJavaScriptString(dateFormatBuf, getDateFormat(2));
String strMediumDateFormat = dateFormatBuf.toString();
dateFormatBuf.delete(0, dateFormatBuf.length());
renderJavaScriptString(dateFormatBuf, getDateFormat(1));
String strLongDateFormat = dateFormatBuf.toString();
buf.append("<script src='").append(Form.makeUrl(getForm().getPageContext().getRequest(), "wdk/include/popupCalendar.js")).append("' type='text/javascript'></script>");
buf.append("<input type='text' ").append(renderNameAndId(getControl(), "date"));
if (strClass != null)
buf.append(" class='").append(strClass).append("'");
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
if (title != null)
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
String strDate = dateInput.toDateString(dateInput.getDateFormat());
if (strDate == null || strDate.length() == 0) {
strDate = dateInput.getValue();
if (strDate == null || strDate.length() == 0) {
strDate = getString("MSG_DATE");
setValue(strDate);
dateInput.setValue(strDate);
dateInput.updateOldValue();
}
}
buf.append(" value='").append(formatAttribute(strDate)).append("'");
buf.append(" style='width:").append(Math.max(95, width - (int) imageExtents.getWidth())).append("px'");
if (!dateInput.isEnabled())
buf.append(" disabled='true'");
renderEventArg(buf, "onchange", "onselect");
buf.append("/>");
buf.append("<img name='").append(dateInput.getElementName("date")).append("_anchor' src='").append(strDropDownImage).append("' width=").append((int) imageExtents.getWidth()).append(" height=").append((int) imageExtents.getHeight());
if (dateInput.isEnabled()) {
buf.append(" alt='").append(title == null ? "" : title).append(" ").append(getString("MSG_CALANDAR")).append("'");
buf.append(" onclick=\"popupCalendar('").append(getForm().getTopForm().getElementName()).append("','").append(dateInput.getElementName("date")).append("','").append(toStringFromStringArray(getShortWeekdays())).append("','").append(toStringFromStringArray(getShortMonths())).append("','").append(toStringFromStringArray(getMonths())).append("',").append(firstDayOfWeek - 1).append(",").append(dateInput.getDateFormat()).append(",'").append(strShortDateFormat).append("','").append(strMediumDateFormat).append("','").append(strLongDateFormat).append("','").append(getString("MSG_PREV_MONTH")).append("','").append(strPrevMonthImage).append("','").append(getString("MSG_NEXT_MONTH")).append("','").append(strNextMonthImage).append("');\"");
}
buf.append("/>");
out.write(buf.toString());
}
}
static String[] getShortWeekdays() {
java.util.Locale locale = LocaleService.createLocale("en_US");
String days[] = DateUtil.getShortWeekdays(locale);
return days;
}
protected static final int MIN_LIST_WIDTH = 95;
protected static final int MIN_TEXT_WIDTH = 95;
protected static final int MIN_FIELD_WIDTH = 65;
protected static final String HOUR_TOKEN = "XX";
protected static final String MINUTE_TOKEN = "YY";
protected static final String SECOND_TOKEN = "ZZ";
private String m_strHour;
private String m_strMinute;
private String m_strSecond;
private String m_strTimeSelector;
private String m_strTimeFormat;
private String m_strTimeStep;
private String m_strFromTime;
private String m_strToTime;
}
import java.awt.Dimension;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.jsp.JspWriter;
import com.documentum.fc.common.DfTime;
import com.documentum.web.common.AccessibilityService;
import com.documentum.web.common.BrandingService;
import com.documentum.web.common.IThemeResolver;
import com.documentum.web.common.ImageService;
import com.documentum.web.common.LocaleService;
import com.documentum.web.common.WrapperRuntimeException;
import com.documentum.web.form.Control;
import com.documentum.web.form.Form;
import com.documentum.web.util.DateUtil;
import com.documentum.web.util.SafeHTMLString;
import com.documentum.web.util.StringUtil;
/** */ /**
* @author liaojiyong
* @date Aug 2, 2009
* @version 1.0
*/
public class DateTimeTag extends DateInputTag {
public DateTimeTag() {
m_strHour = null;
m_strMinute = null;
m_strSecond = null;
m_strTimeSelector = null;
m_strTimeFormat = null;
m_strTimeStep = null;
m_strFromTime = null;
m_strToTime = null;
}
public void release() {
super.release();
m_strHour = null;
m_strMinute = null;
m_strSecond = null;
m_strTimeSelector = null;
m_strTimeFormat = null;
m_strTimeStep = null;
m_strFromTime = null;
m_strToTime = null;
}
public void setHour(String strHour) {
m_strHour = strHour;
}
public void setMinute(String strMinute) {
m_strMinute = strMinute;
}
public void setSecond(String strSecond) {
m_strSecond = strSecond;
}
public void setTimeselector(String strTimeSelector) {
m_strTimeSelector = strTimeSelector;
}
public void setTimeformat(String strTimeFormat) {
m_strTimeFormat = strTimeFormat;
}
public void setTimestep(String strTimeStep) {
m_strTimeStep = strTimeStep;
}
public void setFromtime(String strFromTime) {
m_strFromTime = strFromTime;
}
public void setTotime(String strToTime) {
m_strToTime = strToTime;
}
protected Class getControlClass() {
return com.documentum.web.form.control.DateTime.class;
}
protected boolean isDatafieldHandlerClass(Class cl) {
return cl.equals(com.documentum.web.form.control.DateTimeTag.class);
}
protected void setControlProperties(Control control) {
super.setControlProperties(control);
DateTime dateTime = (DateTime) control;
if (m_strTimeFormat != null)
if (m_strTimeFormat.equalsIgnoreCase("short"))
dateTime.setTimeFormat(3);
else
if (m_strTimeFormat.equalsIgnoreCase("medium"))
dateTime.setTimeFormat(2);
else
if (m_strTimeFormat.equalsIgnoreCase("long"))
dateTime.setTimeFormat(1);
else
throw new WrapperRuntimeException("datetime tag 'timeformat' attribute value must be 'short', 'medium' or 'long'");
if (m_strTimeSelector != null)
if (m_strTimeSelector.equalsIgnoreCase("text"))
dateTime.setTimeSelector(2);
else
if (m_strTimeSelector.equalsIgnoreCase("list"))
dateTime.setTimeSelector(0);
else
if (m_strTimeSelector.equalsIgnoreCase("fields"))
dateTime.setTimeSelector(1);
else
throw new WrapperRuntimeException("datetime tag 'timeselector' attribute value must be 'text', 'list' or 'field'");
if (m_strTimeStep != null)
dateTime.setTimeStep(Integer.parseInt(m_strTimeStep));
if (m_strFromTime != null)
dateTime.setFromTime(m_strFromTime);
if (m_strToTime != null)
dateTime.setToTime(m_strToTime);
if (m_strHour != null && m_strHour.length() > 0 || m_strMinute != null && m_strMinute.length() > 0 || m_strSecond != null && m_strSecond.length() > 0) {
int hour = 0;
int minute = 0;
int second = 0;
if (m_strHour != null)
hour = Integer.parseInt(m_strHour);
if (m_strMinute != null)
minute = Integer.parseInt(m_strMinute);
if (m_strSecond != null)
second = Integer.parseInt(m_strSecond);
dateTime.setHour(hour);
dateTime.setMinute(minute);
dateTime.setSecond(second);
}
if (getDatafield() != null && isDatafieldHandlerClass(com.documentum.web.form.control.DateTimeTag.class)) {
String strResult = resolveDatafield(getDatafield());
if (strResult != null) {
Date date = new Date((new Long(strResult)).longValue());
DfTime dfTime = new DfTime(date);
dateTime.setYear(dfTime.getYear());
dateTime.setMonth(dfTime.getMonth());
dateTime.setDay(dfTime.getDay());
dateTime.setHour(dfTime.getHour());
dateTime.setMinute(dfTime.getMinutes());
dateTime.setSecond(dfTime.getSeconds());
}
}
String strValue = dateTime.toDateTimeString(3, 2);
if (strValue != null)
dateTime.setValue(strValue);
}
protected void renderEnd(JspWriter out) throws IOException {
DateTime dateTime = (DateTime) getControl();
if (dateTime.isVisible()) {
java.util.Locale locale = LocaleService.getLocale();
Calendar calendar = Calendar.getInstance(locale);
calendar.set(1, 0, 1, 2, 2, 2);
DateFormat df = DateFormat.getDateTimeInstance(3, 2, locale);
String strDate = df.format(calendar.getTime());
out.print("<span class=\"dateTime\"");
String title = dateTime.getToolTip();
if (title != null) {
out.print(" title=\"");
out.print(SafeHTMLString.escapeAttribute(title));
out.print("\"");
}
out.print(">");
int width = dateTime.getWidth();
if (strDate.indexOf("1") < strDate.indexOf("2")) {
renderDate(out, dateTime, width / 2);
renderTime(out, dateTime, width / 2);
} else {
renderTime(out, dateTime, width / 2);
renderDate(out, dateTime, width / 2);
}
out.print("</span>");
}
}
protected void renderEventArg(StringBuffer buf, String strClientEvent, String strServerEvent) {
if (!strClientEvent.equals("onchange")) {
super.renderEventArg(buf, strClientEvent, strServerEvent);
} else {
DateTime control = (DateTime) getControl();
boolean hasEventHandler = control.getEventHandlerMethod(strServerEvent) != null;
buf.append(" ");
buf.append(strClientEvent);
buf.append("='");
if (hasEventHandler)
buf.append("setKeys(event);");
renderTimeUpdateCode(buf);
if (hasEventHandler)
renderSubmitCode(buf, strServerEvent);
buf.append("' ");
if (hasEventHandler && AccessibilityService.isAllAccessibilitiesEnabled()) {
buf.append(" onkeypress='");
renderKeyPressSubmitCode(buf, strServerEvent);
buf.append("' ");
}
}
}
protected void renderDate(JspWriter out, DateInput dateInput, int width) throws IOException {
StringBuffer scriptBuffer = new StringBuffer("<script type='text/javascript'>");
scriptBuffer.append("function __onDateSet");
scriptBuffer.append(dateInput.getElementName());
scriptBuffer.append("() {");
DateTime dateTime = (DateTime) getControl();
int timeSelector = dateTime.getTimeSelector();
if (timeSelector == 1) {
String dateId = dateTime.getElementName("date");
String hourId = dateTime.getElementName("hour");
String minuteId = dateTime.getElementName("minute");
String secondId = dateTime.getElementName("second");
scriptBuffer.append("var dateElements = document.getElementsByName('");
scriptBuffer.append(dateId);
scriptBuffer.append("');\n");
scriptBuffer.append("var hourElements = document.getElementsByName('");
scriptBuffer.append(hourId);
scriptBuffer.append("');\n");
scriptBuffer.append("var minuteElements = document.getElementsByName('");
scriptBuffer.append(minuteId);
scriptBuffer.append("');\n");
scriptBuffer.append("var secondElements = document.getElementsByName('");
scriptBuffer.append(secondId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (dateElements != null && dateElements[0] != null && dateElements[0].value != null && dateElements[0].value.length == 0){ ");
scriptBuffer.append("hourElements[0].selectedIndex = 0;");
scriptBuffer.append("minuteElements[0].selectedIndex = 0;");
scriptBuffer.append("secondElements[0].selectedIndex = 0;");
scriptBuffer.append("return; }\n");
scriptBuffer.append("if (hourElements != null && hourElements[0] != null && hourElements[0].selectedIndex == 0) {hourElements[0].selectedIndex = 1;}\n");
scriptBuffer.append("if (minuteElements != null && minuteElements[0] != null && minuteElements[0].selectedIndex == 0) {minuteElements[0].selectedIndex = 1;}\n");
scriptBuffer.append("if (secondElements != null && secondElements[0] != null && secondElements[0].selectedIndex == 0) {secondElements[0].selectedIndex = 1;}\n");
} else
if (timeSelector == 0) {
String dateId = dateTime.getElementName("date");
String timeId = dateTime.getElementName("time");
scriptBuffer.append("var dateElements = document.getElementsByName('");
scriptBuffer.append(dateId);
scriptBuffer.append("');\n");
scriptBuffer.append("var timeElements = document.getElementsByName('");
scriptBuffer.append(timeId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (dateElements != null && dateElements[0] != null && dateElements[0].value != null && dateElements[0].value.length == 0) { timeElements[0].selectedIndex = 0; return; }\n");
scriptBuffer.append("if (timeElements[0].selectedIndex == 0) { timeElements[0].selectedIndex = 1;}\n");
} else {
String initialTimeValue = dateTime.toTimeString(dateTime.getTimeFormat());
String timeId = dateTime.getElementName("time");
scriptBuffer.append("var timeElements = document.getElementsByName('");
scriptBuffer.append(timeId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (timeElements != null && timeElements[0] != null && timeElements[0].value != null && timeElements[0].value.length == 0) { timeElements[0].value ='");
scriptBuffer.append(initialTimeValue);
scriptBuffer.append("'; }\n");
}
scriptBuffer.append("}\n");
scriptBuffer.append("</script>");
if (dateInput.getDateSelectorType() == 0) {
scriptBuffer.append("<script type='text/javascript'>");
String dayFieldId = dateInput.getElementName("day");
String monthFieldId = dateInput.getElementName("month");
String yearFieldId = dateInput.getElementName("year");
scriptBuffer.append("function __updateTimeIfNeeded");
scriptBuffer.append(dateInput.getElementName());
scriptBuffer.append("(){ ");
scriptBuffer.append("var dayElements = document.getElementsByName('");
scriptBuffer.append(dayFieldId);
scriptBuffer.append("');\n");
scriptBuffer.append("var monthElements = document.getElementsByName('");
scriptBuffer.append(monthFieldId);
scriptBuffer.append("');\n");
scriptBuffer.append("var yearElements = document.getElementsByName('");
scriptBuffer.append(yearFieldId);
scriptBuffer.append("');\n");
scriptBuffer.append("if (dayElements != null && dayElements[0] != null && dayElements[0].selectedIndex != 0 && ");
scriptBuffer.append("monthElements != null && monthElements[0] != null && monthElements[0].selectedIndex != 0 && ");
scriptBuffer.append(" yearElements != null && yearElements[0] != null && yearElements[0].selectedIndex != 0) {\n");
scriptBuffer.append("__onDateSet");
scriptBuffer.append(dateInput.getElementName());
scriptBuffer.append("();}\n}\n");
scriptBuffer.append("</script>");
}
String script = scriptBuffer.toString();
out.write(script);
super.renderDate(out, dateInput, width);
}
protected void renderTime(JspWriter out, DateTime dateTime, int width) throws IOException {
if (dateTime.getTimeSelector() == 2)
renderTimeAsText(out, dateTime, width);
else
if (dateTime.getTimeSelector() == 0)
renderTimeAsList(out, dateTime, width);
else
if (dateTime.getTimeSelector() == 1)
renderTimeAsFields(out, dateTime, width);
}
protected void renderTimeUpdateCode(StringBuffer buf) {
DateTime dateTime = (DateTime) getControl();
if (dateTime.getDateSelectorType() == 0)
buf.append("__updateTimeIfNeeded");
else
buf.append("__onDateSet");
buf.append(dateTime.getElementName());
buf.append("();");
}
protected void renderTimeAsText(JspWriter out, DateTime dateTime, int width) throws IOException {
StringBuffer buf = new StringBuffer(128);
String strClass = dateTime.getCssClass();
String strStyle = dateTime.getCssStyle();
buf.append("<input type='text' ").append(renderNameAndId(getControl(), "time"));
String title = dateTime.getToolTip();
if (title != null)
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
if (strClass != null)
buf.append(" class='").append(strClass).append("'");
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
String strTime = dateTime.toTimeString(dateTime.getTimeFormat());
if (strTime == null || strTime.length() == 0)
strTime = getString("MSG_TIME");
buf.append(" value='").append(formatAttribute(strTime)).append("'");
buf.append(" style='width:").append(Math.max(width, 95)).append("px'");
if (!dateTime.isEnabled())
buf.append(" disabled='true'");
buf.append("/>");
out.print(buf.toString());
}
protected void renderTimeAsList(JspWriter out, DateTime dateTime, int width) throws IOException {
StringBuffer buf = new StringBuffer(128);
String strClass = dateTime.getCssClass();
String strStyle = dateTime.getCssStyle();
buf.append("<select ").append(renderNameAndId(getControl(), "time"));
String title = dateTime.getToolTip();
if (title != null)
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
if (strClass != null) {
strClass = convertCssClass(strClass);
buf.append(" class='").append(strClass).append("'");
}
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
buf.append(" size=0");
if (!dateTime.isEnabled())
buf.append(" disabled='true'");
buf.append(" style='width:").append(Math.max(width, 95)).append("px'");
renderEventArg(buf, "onchange", "onselect");
buf.append(">");
java.util.Locale locale = LocaleService.getLocale();
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(new Date());
calendar.set(11, Math.max(0, dateTime.getHour()));
calendar.set(12, Math.max(0, dateTime.getMinute()));
calendar.set(13, Math.max(0, dateTime.getSecond()));
Date time = calendar.getTime();
DateFormat df = DateFormat.getTimeInstance(3, locale);
long timeStep = dateTime.getTimeStep();
if (timeStep == 0L)
timeStep = 1800L;
Calendar from = parseTime(dateTime.getFromTime());
Calendar to = parseTime(dateTime.getToTime());
Date fromTime = from.getTime();
Date toTime = to.getTime();
Date item = fromTime;
buf.append("<option value=''>").append(getString("MSG_TIME")).append("</option>");
do {
String strTime = df.format(item);
buf.append("<option value='").append(strTime).append("'");
if (item.getHours() == time.getHours() && item.getMinutes() == time.getMinutes() || item.getHours() == 12 && time.getHours() == 0 && item.getMinutes() == time.getMinutes())
buf.append(" SELECTED");
buf.append(">").append(strTime).append("</option>");
item.setTime(item.getTime() + timeStep * 1000L);
} while (item.before(toTime) || item.equals(toTime));
buf.append("</select>");
out.print(buf.toString());
}
protected void renderTimeAsFields(JspWriter out, DateTime dateTime, int width) throws IOException {
StringBuffer buf = new StringBuffer(128);
boolean allowedToAddSeparator = false;
width = Math.max(width / 3, 65);
int timeStep = dateTime.getTimeStep();
if (timeStep == 0)
timeStep = 1;
String strQueuedFieldSeparator = "";
DateInputTag.DateFormatTokenizer tokenizer = new DateInputTag.DateFormatTokenizer(getTimeFormat(1));
do {
if (!tokenizer.hasMoreTokens())
break;
String strToken = tokenizer.nextToken();
if (strToken.equalsIgnoreCase("XX")) {
buf.append(strQueuedFieldSeparator);
strQueuedFieldSeparator = "";
renderTimeField(buf, dateTime, "hour", 0, 23, 1, "MSG_HOUR", width, dateTime.getHour());
allowedToAddSeparator = true;
} else
if (strToken.equalsIgnoreCase("YY")) {
if (timeStep % 3600 != 0) {
buf.append(strQueuedFieldSeparator);
strQueuedFieldSeparator = "";
renderTimeField(buf, dateTime, "minute", 0, 59, Math.max(1, timeStep / 60), "MSG_MINUTE", width, dateTime.getMinute());
} else {
dateTime.setMinute(0);
}
allowedToAddSeparator = true;
} else
if (strToken.equalsIgnoreCase("ZZ")) {
if (timeStep % 60 != 0) {
buf.append(strQueuedFieldSeparator);
strQueuedFieldSeparator = "";
renderTimeField(buf, dateTime, "second", 0, 59, timeStep, "MSG_SECOND", width, dateTime.getSecond());
} else {
dateTime.setSecond(0);
}
allowedToAddSeparator = true;
} else
if (allowedToAddSeparator)
strQueuedFieldSeparator = (new StringBuilder()).append(strQueuedFieldSeparator).append(strToken).toString();
} while (true);
out.write(buf.toString());
}
protected void renderTimeField(StringBuffer buf, DateTime dateTime, String strField, int from, int to, int step, String strDescId, int width, int value) {
String strClass = dateTime.getCssClass();
String strStyle = dateTime.getCssStyle();
buf.append("<select ").append(renderNameAndId(getControl(), strField));
String title = dateTime.getToolTip();
if (title != null)
title = (new StringBuilder()).append(title).append(" ").append(getString(strDescId)).toString();
else
title = getString(strDescId);
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
if (strClass != null) {
strClass = convertCssClass(strClass);
buf.append(" class='").append(strClass).append("'");
}
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
buf.append(" size=0");
if (!dateTime.isEnabled())
buf.append(" disabled='true'");
buf.append(" style='width:").append(width).append("px'");
renderEventArg(buf, "onchange", "onselect");
buf.append(">");
buf.append("<option value=''>").append(getString(strDescId)).append("</option>");
for (int i = from; i <= to; i += step) {
buf.append("<option value='").append(i).append("'");
if (value == i)
buf.append(" SELECTED");
buf.append(">");
buf.append(i).append("</option>");
}
buf.append("</select>");
}
protected static String getTimeFormat(int timeFormat) {
java.util.Locale locale = LocaleService.getLocale();
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(new Date());
calendar.set(11, 14);
calendar.set(12, 13);
calendar.set(13, 11);
DateFormat df = DateFormat.getTimeInstance(timeFormat, locale);
String strTimeFormat = df.format(calendar.getTime());
strTimeFormat = StringUtil.replace(strTimeFormat, "02", "XX");
strTimeFormat = StringUtil.replace(strTimeFormat, "2", "XX");
strTimeFormat = StringUtil.replace(strTimeFormat, "14", "XX");
strTimeFormat = StringUtil.replace(strTimeFormat, "13", "YY");
strTimeFormat = StringUtil.replace(strTimeFormat, "11", "ZZ");
return strTimeFormat;
}
static Calendar parseTime(String strTime) {
Calendar calendar = null;
int hour = -1;
int minute = 0;
int second = 0;
int index = 0;
DateInputTag.DateFormatTokenizer tokenizer = new DateInputTag.DateFormatTokenizer(getTimeFormat(1));
do {
if (!tokenizer.hasMoreTokens())
break;
String strToken = tokenizer.nextToken();
if (strToken.equalsIgnoreCase("XX")) {
index = indexOfDigit(strTime, index);
if (index == -1)
break;
hour = parseInt(strTime, index);
index += String.valueOf(hour).length() + 1;
continue;
}
if (strToken.equalsIgnoreCase("YY")) {
index = indexOfDigit(strTime, index);
if (index == -1)
break;
minute = parseInt(strTime, index);
index += String.valueOf(minute).length() + 1;
continue;
}
if (!strToken.equalsIgnoreCase("ZZ"))
continue;
index = indexOfDigit(strTime, index);
if (index == -1)
break;
second = parseInt(strTime, index);
index += String.valueOf(second).length() + 1;
} while (true);
boolean bIsPm = strTime.toLowerCase().indexOf("pm") != -1;
boolean bIsAm = strTime.toLowerCase().indexOf("am") != -1;
if (bIsPm && hour < 12)
hour += 12;
if (bIsAm)
if (hour == 12)
hour = 0;
else
if (hour > 12)
hour = -1;
if (hour == 24)
hour = 0;
if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59) {
calendar = Calendar.getInstance(LocaleService.getLocale());
calendar.setTime(new Date());
calendar.set(11, hour);
calendar.set(12, minute);
calendar.set(13, second);
}
return calendar;
}
protected void renderCalendar(JspWriter out, DateInput dateInput, int width) throws IOException {
if (dateInput.isVisible()) {
StringBuffer buf = new StringBuffer(256);
String title = dateInput.getToolTip();
String strClass = dateInput.getCssClass();
String strStyle = dateInput.getCssStyle();
IThemeResolver themeResolver = BrandingService.getThemeResolver();
String strDropDownImage = themeResolver.getResourcePath(dateInput.isEnabled() ? "images/date/dropdown.gif" : "images/date/dropdown_disabled.gif", getForm().getPageContext(), false);
String strPrevMonthImage = themeResolver.getResourcePath("images/date/prevmonth.gif", getForm().getPageContext(), false);
String strNextMonthImage = themeResolver.getResourcePath("images/date/nextmonth.gif", getForm().getPageContext(), false);
Dimension imageExtents = ImageService.getDimensions(strDropDownImage, getForm().getPageContext());
Calendar calendar = Calendar.getInstance(LocaleService.getLocale());
int firstDayOfWeek = calendar.getFirstDayOfWeek();
StringBuffer dateFormatBuf = new StringBuffer();
renderJavaScriptString(dateFormatBuf, getDateFormat(3));
String strShortDateFormat = dateFormatBuf.toString();
dateFormatBuf.delete(0, dateFormatBuf.length());
renderJavaScriptString(dateFormatBuf, getDateFormat(2));
String strMediumDateFormat = dateFormatBuf.toString();
dateFormatBuf.delete(0, dateFormatBuf.length());
renderJavaScriptString(dateFormatBuf, getDateFormat(1));
String strLongDateFormat = dateFormatBuf.toString();
buf.append("<script src='").append(Form.makeUrl(getForm().getPageContext().getRequest(), "wdk/include/popupCalendar.js")).append("' type='text/javascript'></script>");
buf.append("<input type='text' ").append(renderNameAndId(getControl(), "date"));
if (strClass != null)
buf.append(" class='").append(strClass).append("'");
if (strStyle != null)
buf.append(" style='").append(strStyle).append("'");
renderTabIndex(buf);
if (title != null)
buf.append(" title=\"").append(SafeHTMLString.escapeAttribute(title)).append("\"");
String strDate = dateInput.toDateString(dateInput.getDateFormat());
if (strDate == null || strDate.length() == 0) {
strDate = dateInput.getValue();
if (strDate == null || strDate.length() == 0) {
strDate = getString("MSG_DATE");
setValue(strDate);
dateInput.setValue(strDate);
dateInput.updateOldValue();
}
}
buf.append(" value='").append(formatAttribute(strDate)).append("'");
buf.append(" style='width:").append(Math.max(95, width - (int) imageExtents.getWidth())).append("px'");
if (!dateInput.isEnabled())
buf.append(" disabled='true'");
renderEventArg(buf, "onchange", "onselect");
buf.append("/>");
buf.append("<img name='").append(dateInput.getElementName("date")).append("_anchor' src='").append(strDropDownImage).append("' width=").append((int) imageExtents.getWidth()).append(" height=").append((int) imageExtents.getHeight());
if (dateInput.isEnabled()) {
buf.append(" alt='").append(title == null ? "" : title).append(" ").append(getString("MSG_CALANDAR")).append("'");
buf.append(" onclick=\"popupCalendar('").append(getForm().getTopForm().getElementName()).append("','").append(dateInput.getElementName("date")).append("','").append(toStringFromStringArray(getShortWeekdays())).append("','").append(toStringFromStringArray(getShortMonths())).append("','").append(toStringFromStringArray(getMonths())).append("',").append(firstDayOfWeek - 1).append(",").append(dateInput.getDateFormat()).append(",'").append(strShortDateFormat).append("','").append(strMediumDateFormat).append("','").append(strLongDateFormat).append("','").append(getString("MSG_PREV_MONTH")).append("','").append(strPrevMonthImage).append("','").append(getString("MSG_NEXT_MONTH")).append("','").append(strNextMonthImage).append("');\"");
}
buf.append("/>");
out.write(buf.toString());
}
}
static String[] getShortWeekdays() {
java.util.Locale locale = LocaleService.createLocale("en_US");
String days[] = DateUtil.getShortWeekdays(locale);
return days;
}
protected static final int MIN_LIST_WIDTH = 95;
protected static final int MIN_TEXT_WIDTH = 95;
protected static final int MIN_FIELD_WIDTH = 65;
protected static final String HOUR_TOKEN = "XX";
protected static final String MINUTE_TOKEN = "YY";
protected static final String SECOND_TOKEN = "ZZ";
private String m_strHour;
private String m_strMinute;
private String m_strSecond;
private String m_strTimeSelector;
private String m_strTimeFormat;
private String m_strTimeStep;
private String m_strFromTime;
private String m_strToTime;
}