1 31 32 package org.opencms.widgets; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.i18n.CmsMessages; 36 import org.opencms.main.CmsLog; 37 import org.opencms.util.CmsStringUtil; 38 import org.opencms.workplace.CmsWorkplace; 39 40 import java.text.DateFormat ; 41 import java.text.ParseException ; 42 import java.text.SimpleDateFormat ; 43 import java.util.GregorianCalendar ; 44 import java.util.Locale ; 45 import java.util.Map ; 46 import java.util.TimeZone ; 47 48 import org.apache.commons.logging.Log; 49 50 59 public class CmsCalendarWidget extends A_CmsWidget { 60 61 62 private static final Log LOG = CmsLog.getLog(CmsCalendarWidget.class); 63 64 67 public CmsCalendarWidget() { 68 69 this(""); 71 } 72 73 78 public CmsCalendarWidget(String configuration) { 79 80 super(configuration); 81 } 82 83 94 public static String calendarIncludes(Locale locale) { 95 96 return calendarIncludes(locale, "opencms"); 97 } 98 99 107 public static String calendarIncludes(Locale locale, String style) { 108 109 StringBuffer result = new StringBuffer (512); 110 String calendarPath = CmsWorkplace.getSkinUri() + "components/js_calendar/"; 111 if (CmsStringUtil.isEmpty(style)) { 112 style = "system"; 113 } 114 result.append("<link rel=\"stylesheet\" type=\"text/css\" HREF=\""); 115 result.append(calendarPath); 116 result.append("calendar-"); 117 result.append(style); 118 result.append(".css\">\n"); 119 result.append("<script type=\"text/javascript\" SRC=\""); 120 result.append(calendarPath); 121 result.append("calendar.js\"></script>\n"); 122 result.append("<script type=\"text/javascript\" SRC=\""); 123 result.append(calendarPath); 124 result.append("lang/calendar-"); 125 result.append(locale.getLanguage()); 126 result.append(".js\"></script>\n"); 127 result.append("<script type=\"text/javascript\" SRC=\""); 128 result.append(calendarPath); 129 result.append("calendar-setup.js\"></script>\n"); 130 return result.toString(); 131 } 132 133 149 public static String calendarInit( 150 CmsMessages messages, 151 String inputFieldId, 152 String triggerButtonId, 153 String align, 154 boolean singleClick, 155 boolean weekNumbers, 156 boolean mondayFirst, 157 String dateStatusFunc, 158 boolean showTime) { 159 160 StringBuffer result = new StringBuffer (512); 161 if (CmsStringUtil.isEmpty(align)) { 162 align = "Bc"; 163 } 164 result.append("<script type=\"text/javascript\">\n"); 165 result.append("<!--\n"); 166 result.append("\tCalendar.setup({\n"); 167 result.append("\t\tinputField : \""); 168 result.append(inputFieldId); 169 result.append("\",\n"); 170 result.append("\t\tifFormat : \""); 171 result.append(messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_DATE_FORMAT_0)); 172 if (showTime) { 173 result.append(" "); 174 result.append(messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_TIME_FORMAT_0)); 175 } 176 result.append("\",\n"); 177 result.append("\t\tbutton : \""); 178 result.append(triggerButtonId); 179 result.append("\",\n"); 180 result.append("\t\talign : \""); 181 result.append(align); 182 result.append("\",\n"); 183 result.append("\t\tsingleClick : "); 184 result.append(singleClick); 185 result.append(",\n"); 186 result.append("\t\tweekNumbers : "); 187 result.append(weekNumbers); 188 result.append(",\n"); 189 result.append("\t\tmondayFirst : "); 190 result.append(mondayFirst); 191 result.append(",\n"); 192 result.append("\t\tshowsTime : " + showTime); 193 if (showTime 194 && (messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_TIMEFORMAT_0).toLowerCase().indexOf("p") != -1)) { 195 result.append(",\n\t\ttimeFormat : \"12\""); 196 } 197 if (CmsStringUtil.isNotEmpty(dateStatusFunc)) { 198 result.append(",\n\t\tdateStatusFunc : "); 199 result.append(dateStatusFunc); 200 } 201 result.append("\n\t});\n"); 202 203 result.append("//-->\n"); 204 result.append("</script>\n"); 205 return result.toString(); 206 } 207 208 219 public static long getCalendarDate(CmsMessages messages, String dateString, boolean useTime) throws ParseException { 220 221 long dateLong = 0; 222 223 String dateFormat = messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_DATE_FORMAT_0); 225 if (useTime) { 226 dateFormat += " " + messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_TIME_FORMAT_0); 227 } 228 dateFormat = CmsCalendarWidget.getCalendarJavaDateFormat(dateFormat); 229 230 SimpleDateFormat df = new SimpleDateFormat (dateFormat); 231 dateLong = df.parse(dateString).getTime(); 232 return dateLong; 233 } 234 235 241 public static String getCalendarJavaDateFormat(String dateFormat) { 242 243 dateFormat = CmsStringUtil.substitute(dateFormat, "%", ""); dateFormat = CmsStringUtil.substitute(dateFormat, "m", "${month}"); 245 dateFormat = CmsStringUtil.substitute(dateFormat, "H", "${hour}"); 246 dateFormat = CmsStringUtil.substitute(dateFormat, "Y", "${4anno}"); 247 dateFormat = dateFormat.toLowerCase(); 248 dateFormat = CmsStringUtil.substitute(dateFormat, "${month}", "M"); 249 dateFormat = CmsStringUtil.substitute(dateFormat, "${hour}", "H"); 250 dateFormat = CmsStringUtil.substitute(dateFormat, "y", "yy"); 251 dateFormat = CmsStringUtil.substitute(dateFormat, "${4anno}", "yyyy"); 252 dateFormat = CmsStringUtil.substitute(dateFormat, "m", "mm"); dateFormat = dateFormat.replace('e', 'd'); dateFormat = dateFormat.replace('i', 'h'); dateFormat = dateFormat.replace('p', 'a'); return dateFormat; 257 } 258 259 268 public static String getCalendarLocalizedTime(Locale locale, CmsMessages messages, long timestamp) { 269 270 TimeZone zone = TimeZone.getDefault(); 272 GregorianCalendar cal = new GregorianCalendar (zone, locale); 273 cal.setTimeInMillis(timestamp); 274 DateFormat df = new SimpleDateFormat ( 276 CmsCalendarWidget.getCalendarJavaDateFormat(messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_DATE_FORMAT_0) 277 + " " 278 + messages.key(org.opencms.workplace.Messages.GUI_CALENDAR_TIME_FORMAT_0))); 279 return df.format(cal.getTime()); 280 } 281 282 285 public String getDialogIncludes(CmsObject cms, I_CmsWidgetDialog widgetDialog) { 286 287 return calendarIncludes(widgetDialog.getLocale()); 288 } 289 290 public String getWidgetStringValue(CmsObject cms, I_CmsWidgetDialog widgetDialog, I_CmsWidgetParameter param) { 291 292 String result = param.getStringValue(cms); 293 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(result) && !"0".equals(result)) { 294 try { 295 result = getCalendarLocalizedTime( 296 widgetDialog.getLocale(), 297 widgetDialog.getMessages(), 298 Long.parseLong(result)); 299 } catch (NumberFormatException e) { 300 result = ""; 301 } 302 } else { 303 result = ""; 304 } 305 return result; 306 } 307 308 311 public String getDialogWidget(CmsObject cms, I_CmsWidgetDialog widgetDialog, I_CmsWidgetParameter param) { 312 313 StringBuffer result = new StringBuffer (16); 314 result.append("<td class=\"xmlTd\">"); 315 result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td>"); 316 result.append("<input class=\"xmlInputSmall"); 317 if (param.hasError()) { 318 result.append(" xmlInputError"); 319 } 320 result.append("\" value=\""); 321 String dateTimeValue = getWidgetStringValue(cms, widgetDialog, param); 322 result.append(dateTimeValue); 323 String id = param.getId(); 324 result.append("\" name=\""); 325 result.append(id); 326 result.append("\" id=\""); 327 result.append(id); 328 result.append("\"></td>"); 329 result.append(widgetDialog.dialogHorizontalSpacer(10)); 330 result.append("<td>"); 331 result.append("<table class=\"editorbuttonbackground\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\""); 332 result.append(id); 333 result.append(".calendar\"><tr>"); 334 result.append(widgetDialog.button( 335 "#", 336 null, 337 "calendar", 338 org.opencms.workplace.Messages.GUI_CALENDAR_CHOOSE_DATE_0, 339 widgetDialog.getButtonStyle())); 340 result.append("</tr></table>"); 341 result.append("</td></tr></table>"); 342 343 result.append(calendarInit( 344 widgetDialog.getMessages(), 345 id, 346 id + ".calendar", 347 "cR", 348 false, 349 false, 350 true, 351 null, 352 true)); 353 354 result.append("</td>"); 355 356 return result.toString(); 357 } 358 359 362 public I_CmsWidget newInstance() { 363 364 return new CmsCalendarWidget(getConfiguration()); 365 } 366 367 370 public void setEditorValue( 371 CmsObject cms, 372 Map formParameters, 373 I_CmsWidgetDialog widgetDialog, 374 I_CmsWidgetParameter param) { 375 376 String [] values = (String [])formParameters.get(param.getId()); 377 if ((values != null) && (values.length > 0)) { 378 long dateTime; 379 try { 380 dateTime = Long.valueOf(param.getStringValue(cms)).longValue(); 381 } catch (NumberFormatException e) { 382 dateTime = 0; 383 } 384 String dateTimeValue = values[0].trim(); 385 if (CmsStringUtil.isNotEmpty(dateTimeValue)) { 386 try { 387 dateTime = getCalendarDate(widgetDialog.getMessages(), dateTimeValue, true); 388 } catch (ParseException e) { 389 if (LOG.isWarnEnabled()) { 391 LOG.warn(Messages.get().getBundle().key(Messages.ERR_PARSE_DATETIME_1, dateTimeValue), e); 392 } 393 } 394 } else { 395 dateTime = 0; 396 } 397 param.setStringValue(cms, String.valueOf(dateTime)); 398 } 399 } 400 } | Popular Tags |