diff --git a/config/alfresco/calendar-services-context.xml b/config/alfresco/calendar-services-context.xml
index 3552799721..0fc2cd2b2a 100644
--- a/config/alfresco/calendar-services-context.xml
+++ b/config/alfresco/calendar-services-context.xml
@@ -12,6 +12,7 @@
getCalendarEntry
listCalendarEntries
+ listOutlookCalendarEntries
diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml
index eaecb4f732..2f6a34a05c 100644
--- a/config/alfresco/public-services-security-context.xml
+++ b/config/alfresco/public-services-security-context.xml
@@ -1007,6 +1007,7 @@
org.alfresco.service.cmr.calendar.CalendarService.listCalendarEntries=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
+ org.alfresco.service.cmr.calendar.CalendarService.listOutlookCalendarEntries=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
diff --git a/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java b/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java
index 6295c87edc..3bf0098090 100644
--- a/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java
+++ b/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java
@@ -35,6 +35,10 @@ import org.alfresco.query.PagingResults;
import org.alfresco.repo.calendar.cannedqueries.GetCalendarEntriesCannedQuery;
import org.alfresco.repo.calendar.cannedqueries.GetCalendarEntriesCannedQueryFactory;
import org.alfresco.repo.domain.node.NodeDAO;
+import org.alfresco.repo.node.getchildren.FilterProp;
+import org.alfresco.repo.node.getchildren.FilterPropBoolean;
+import org.alfresco.repo.node.getchildren.FilterPropString;
+import org.alfresco.repo.node.getchildren.FilterPropString.FilterTypeString;
import org.alfresco.repo.node.getchildren.GetChildrenCannedQuery;
import org.alfresco.repo.node.getchildren.GetChildrenCannedQueryFactory;
import org.alfresco.repo.site.SiteServiceImpl;
@@ -348,6 +352,54 @@ public class CalendarServiceImpl implements CalendarService
return cq.execute();
}
+ @Override
+ public PagingResults listOutlookCalendarEntries(String siteShortName, String outlookUID,
+ PagingRequest paging)
+ {
+ NodeRef container = getSiteCalendarContainer(siteShortName, false);
+ if (container == null)
+ {
+ // No events
+ return new EmptyPagingResults();
+ }
+
+ // Build our sorting, by date
+ // There is a limit on the number of filter and sorts, so we can't
+ // do all that much sorting
+ List> sort = new ArrayList>();
+ sort.add(new Pair(CalendarModel.PROP_FROM_DATE, true));
+ sort.add(new Pair(CalendarModel.PROP_TO_DATE, true));
+
+ // We only want calendar entries
+ Set types = new HashSet();
+ types.add(CalendarModel.TYPE_EVENT);
+
+ // Filtering is OR based, so we can't filder on both IS_OUTLOOK and OUTLOOK_UID
+ // Luckily, OUTLOOK_UID implies IS_OUTLOOK
+ List filters = new ArrayList();
+ if (outlookUID != null)
+ {
+ // Filter by the UID, will get only outlook ones implicitly
+ filters.add(new FilterPropString(
+ CalendarModel.PROP_OUTLOOK_UID, outlookUID, FilterTypeString.EQUALS
+ ));
+ }
+ else
+ {
+ // Find all Outlook ones
+ filters.add(new FilterPropBoolean(CalendarModel.PROP_IS_OUTLOOK, Boolean.TRUE));
+ }
+
+ // Run the canned query
+ GetChildrenCannedQueryFactory getChildrenCannedQueryFactory = (GetChildrenCannedQueryFactory)cannedQueryRegistry.getNamedObject(CANNED_QUERY_GET_CHILDREN);
+ GetChildrenCannedQuery cq = (GetChildrenCannedQuery)getChildrenCannedQueryFactory.getCannedQuery(
+ container, null, null, types, filters, sort, paging);
+
+ // Execute the canned query
+ CannedQueryResults results = cq.execute();
+ return wrap(results, container);
+ }
+
/**
* Our class to wrap up paged results of NodeRefs as
* CalendarEntry instances
diff --git a/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java b/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java
index 7d658931a9..36161b39b6 100644
--- a/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java
+++ b/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java
@@ -503,6 +503,41 @@ public class CalendarServiceImplTest
results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging);
assertEquals(1, results.getPage().size());
assertEquals("TitleC", results.getPage().get(0).getTitle());
+
+
+ // Currently, none of the events are Outlook ones, so an outlook list should find none
+ paging = new PagingRequest(3);
+ results = CALENDAR_SERVICE.listOutlookCalendarEntries(CALENDAR_SITE.getShortName(), null, paging);
+ assertEquals(0, results.getPage().size());
+
+
+ // Make two of them be outlook ones, will both be found if no UID restriction is given
+ String uidB = "THIS_is_A_fake_UID_123";
+ String uidC = "THIS_is_A_fake_UID_4321";
+ ((CalendarEntryDTO)entryB).setOutlook(true);
+ ((CalendarEntryDTO)entryB).setOutlookUID(uidB);
+ ((CalendarEntryDTO)entryC).setOutlook(true);
+ ((CalendarEntryDTO)entryC).setOutlookUID(uidC);
+ CALENDAR_SERVICE.updateCalendarEntry(entryB);
+ CALENDAR_SERVICE.updateCalendarEntry(entryC);
+
+ paging = new PagingRequest(3);
+ results = CALENDAR_SERVICE.listOutlookCalendarEntries(CALENDAR_SITE.getShortName(), null, paging);
+ assertEquals(2, results.getPage().size());
+ assertEquals("TitleB", results.getPage().get(0).getTitle());
+ assertEquals("TitleC", results.getPage().get(1).getTitle());
+
+
+ // Restrict by UID
+ paging = new PagingRequest(3);
+ results = CALENDAR_SERVICE.listOutlookCalendarEntries(CALENDAR_SITE.getShortName(), uidB, paging);
+ assertEquals(1, results.getPage().size());
+ assertEquals("TitleB", results.getPage().get(0).getTitle());
+
+ paging = new PagingRequest(3);
+ results = CALENDAR_SERVICE.listOutlookCalendarEntries(CALENDAR_SITE.getShortName(), uidC, paging);
+ assertEquals(1, results.getPage().size());
+ assertEquals("TitleC", results.getPage().get(0).getTitle());
}
/**
diff --git a/source/java/org/alfresco/service/cmr/calendar/CalendarService.java b/source/java/org/alfresco/service/cmr/calendar/CalendarService.java
index 9ffcbdaa30..c3632a0382 100644
--- a/source/java/org/alfresco/service/cmr/calendar/CalendarService.java
+++ b/source/java/org/alfresco/service/cmr/calendar/CalendarService.java
@@ -82,4 +82,11 @@ public interface CalendarService
*/
@NotAuditable
PagingResults listCalendarEntries(String[] siteShortNames, Date from, Date to, PagingRequest paging);
+
+ /**
+ * Retrieves all Outlook based {@link CalendarEntry} instances in the repository
+ * for the given site, optionally filtered by the Outlook Event UID.
+ */
+ @NotAuditable
+ PagingResults listOutlookCalendarEntries(String siteShortName, String outlookUID, PagingRequest paging);
}