diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl index d20ea79639..a2221f409b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/calendar/eventList.get.json.ftl @@ -18,7 +18,7 @@ "name": "${item.title}", "uri": "calendar/event/${siteId}/${event.systemName}", "startAt": { - "iso8601": "$(item.start}", + "iso8601": "${item.start}", "legacyDate": "${item.legacyDateFrom}", "legacyTime": "${item.legacyTimeFrom}" }, diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarListingWebScript.java b/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarListingWebScript.java index 3821c6baf7..4b4332dd5d 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarListingWebScript.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/AbstractCalendarListingWebScript.java @@ -30,6 +30,10 @@ import java.util.Map; import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.calendar.CalendarRecurrenceHelper; import org.alfresco.util.ISO8601DateFormat; +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; /** * This class provides functionality common across the webscripts @@ -57,15 +61,26 @@ public abstract class AbstractCalendarListingWebScript extends AbstractCalendarW public int compare(Map resultA, Map resultB) { - Date startA = ISO8601DateFormat.parse((String)resultA.get(RESULT_START)); - Date startB = ISO8601DateFormat.parse((String)resultB.get(RESULT_START)); + DateTimeFormatter fmtNoTz = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); + DateTimeFormatter fmtTz = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); + + String startA = (String)resultA.get(RESULT_START); + String startB = (String)resultB.get(RESULT_START); + + //check and parse iso8601 date without time zone (All day events are stripped of time zone) + DateTime sa = startA.length()>23?fmtTz.parseDateTime(startA):fmtNoTz.parseDateTime(startA); + DateTime sb = startB.length()>23?fmtTz.parseDateTime(startB):fmtNoTz.parseDateTime(startB); - int cmp = startA.compareTo(startB); + int cmp = sa.compareTo(sb); if (cmp == 0) { - Date endA = ISO8601DateFormat.parse((String)resultA.get(RESULT_END)); - Date endB = ISO8601DateFormat.parse((String)resultB.get(RESULT_END)); - cmp = endA.compareTo(endB); + String endA = (String)resultA.get(RESULT_END); + String endB = (String)resultB.get(RESULT_END); + + DateTime ea = endA.length()>23?fmtTz.parseDateTime(endA):fmtNoTz.parseDateTime(endA); + DateTime eb = endB.length()>23?fmtTz.parseDateTime(endB):fmtNoTz.parseDateTime(endB); + + cmp = ea.compareTo(eb); if (cmp == 0) { String nameA = (String)resultA.get(RESULT_NAME); diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java index e0b030730b..c327e75e1c 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarEntryGet.java @@ -21,9 +21,11 @@ package org.alfresco.repo.web.scripts.calendar; import java.text.DateFormat; import java.text.MessageFormat; import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; +import java.util.TimeZone; import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.calendar.CalendarEntryDTO; @@ -234,6 +236,13 @@ public class CalendarEntryGet extends AbstractCalendarWebScript text.append(" from " + tFormat.format(event.getStart())); text.append(" to " + tFormat.format(event.getEnd())); + // Add timezone in which recurrence rule was parsed + TimeZone timeZone = TimeZone.getDefault(); + boolean daylight = timeZone.inDaylightTime(new Date()); + String tzDisplayName = timeZone.getDisplayName(daylight, TimeZone.SHORT); + + text.append(" ("+tzDisplayName+")"); + // All done return text.toString(); } diff --git a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarRestApiTest.java index 87931c8acc..f0472701ef 100644 --- a/source/java/org/alfresco/repo/web/scripts/calendar/CalendarRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/calendar/CalendarRestApiTest.java @@ -581,7 +581,7 @@ public class CalendarRestApiTest extends BaseWebScriptTest assertEquals("false", entry.getString("allday")); assertEquals( "Occurs every 2 weeks on Wednesday, Friday, effective " + - "28-Jun-2011 until 11-Sep-2011 from 11:30 to 13:30", + "28-Jun-2011 until 11-Sep-2011 from 11:30 to 13:30 (BST)", entry.getString("recurrence")); // Delete @@ -1048,6 +1048,9 @@ public class CalendarRestApiTest extends BaseWebScriptTest assertEquals(EVENT_TITLE_ONE, entries.getJSONObject(0).getString("name")); assertEquals(EVENT_TITLE_TWO, entries.getJSONObject(1).getString("name")); + //Check the dates + assertEquals("2011-06-29T12:00:00.000+01:00", entries.getJSONObject(0).getJSONObject("startAt").getString("iso8601")); + assertEquals("2011-06-29T13:00:00.000+01:00", entries.getJSONObject(0).getJSONObject("endAt").getString("iso8601")); // Add a third, on the next day JSONObject entry = createEntry(EVENT_TITLE_THREE, "Where3", "Thing 3", Status.STATUS_OK);