diff --git a/config/alfresco/calendar-services-context.xml b/config/alfresco/calendar-services-context.xml
index 143b3104bd..b73e2a86b9 100644
--- a/config/alfresco/calendar-services-context.xml
+++ b/config/alfresco/calendar-services-context.xml
@@ -42,7 +42,9 @@
+
+
diff --git a/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java b/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java
index fb2770a3c4..12f37aaa16 100644
--- a/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java
+++ b/source/java/org/alfresco/repo/calendar/CalendarServiceImpl.java
@@ -28,17 +28,23 @@ import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
+import org.alfresco.query.PagingRequest;
+import org.alfresco.query.PagingResults;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.calendar.CalendarEntry;
import org.alfresco.service.cmr.calendar.CalendarService;
+import org.alfresco.service.cmr.model.FileFolderService;
+import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
+import org.alfresco.util.Pair;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -64,7 +70,9 @@ public class CalendarServiceImpl implements CalendarService
private NodeService nodeService;
private SiteService siteService;
+ private SearchService searchService; // TODO Temp only
private TaggingService taggingService;
+ private FileFolderService fileFolderService; // TODO Temp only
private PermissionService permissionService;
private TransactionService transactionService;
@@ -78,11 +86,27 @@ public class CalendarServiceImpl implements CalendarService
this.siteService = siteService;
}
+ /**
+ * TODO Temp only
+ */
+ public void setSearchService(SearchService searchService)
+ {
+ this.searchService = searchService;
+ }
+
public void setTaggingService(TaggingService taggingService)
{
this.taggingService = taggingService;
}
+ /**
+ * TODO Temp only
+ */
+ public void setFileFolderService(FileFolderService fileFolderService)
+ {
+ this.fileFolderService = fileFolderService;
+ }
+
public void setPermissionService(PermissionService permissionService)
{
this.permissionService = permissionService;
@@ -330,4 +354,83 @@ public class CalendarServiceImpl implements CalendarService
nodeService.deleteNode(entry.getNodeRef());
}
+
+ /**
+ * TODO Switch to delegating
+ */
+ @Override
+ public PagingResults listCalendarEntries(
+ String siteShortName, PagingRequest paging)
+ {
+ // TODO Switch to this
+ //return listCalendarEntries(new String[] { siteShortName }, paging);
+
+ NodeRef container = getSiteCalendarContainer(siteShortName, false);
+ if(container == null)
+ {
+ // No events
+ return null;
+ }
+
+ // Ask the file folder service
+ List> sort = new ArrayList>();
+ sort.add(new Pair(CalendarModel.PROP_FROM_DATE, true));
+ sort.add(new Pair(CalendarModel.PROP_TO_DATE, true));
+ PagingResults results = fileFolderService.list(container, true, false, null, sort, paging);
+ return wrap(results);
+ }
+
+ @Override
+ public PagingResults listCalendarEntries(
+ String[] siteShortNames, PagingRequest paging)
+ {
+ // TODO Use search for now
+ return null;
+ }
+
+ @Override
+ public PagingResults listCalendarEntries(
+ String[] siteShortNames, Date from, Date to, PagingRequest paging)
+ {
+ // TODO Use search for now
+ return null;
+ }
+
+ /**
+ * TODO Temp hack!
+ */
+ private PagingResults wrap(final PagingResults results)
+ {
+ return new PagingResults()
+ {
+ @Override
+ public String getQueryExecutionId()
+ {
+ return results.getQueryExecutionId();
+ }
+ @Override
+ public List getPage()
+ {
+ List entries = new ArrayList();
+ for(FileInfo file : results.getPage())
+ {
+ CalendarEntryImpl entry = new CalendarEntryImpl(file.getNodeRef(), file.getName());
+ entry.populate(nodeService.getProperties(file.getNodeRef()));
+ entry.setTags(taggingService.getTags(file.getNodeRef()));
+ entries.add(entry);
+ }
+ return entries;
+ }
+ @Override
+ public boolean hasMoreItems()
+ {
+ return results.hasMoreItems();
+ }
+ @Override
+ public Pair getTotalResultCount()
+ {
+ return results.getTotalResultCount();
+ }
+ };
+ }
}
diff --git a/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java b/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java
index 00349a6d8d..6ee3c0acc9 100644
--- a/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java
+++ b/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -33,7 +32,6 @@ import java.util.List;
import org.alfresco.model.ContentModel;
import org.alfresco.query.PagingRequest;
import org.alfresco.query.PagingResults;
-import org.alfresco.repo.blog.BlogService.BlogPostInfo;
import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.site.SiteModel;
@@ -41,10 +39,7 @@ import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.cmr.calendar.CalendarEntry;
import org.alfresco.service.cmr.calendar.CalendarEntryDTO;
import org.alfresco.service.cmr.calendar.CalendarService;
-import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService;
-import org.alfresco.service.cmr.dictionary.PropertyDefinition;
-import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.MutableAuthenticationService;
@@ -53,10 +48,7 @@ import org.alfresco.service.cmr.site.SiteInfo;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.service.cmr.tagging.TaggingService;
-import org.alfresco.service.namespace.NamespaceService;
-import org.alfresco.service.namespace.QName;
import org.alfresco.util.ApplicationContextHelper;
-import org.alfresco.util.Pair;
import org.alfresco.util.PropertyMap;
import org.junit.After;
import org.junit.AfterClass;
@@ -430,7 +422,55 @@ public class CalendarServiceImplTest
CALENDAR_SERVICE.deleteCalendarEntry(entry);
}
- @Test public void calendarListing() throws Exception
+ /**
+ * Simplest tests for listing on just one site, with no filtering
+ */
+ @Test public void calendarSingleSiteListing() throws Exception
+ {
+ PagingRequest paging = new PagingRequest(10);
+
+ // Nothing to start
+ PagingResults results =
+ CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging);
+ assertEquals(0, results.getPage().size());
+
+ // Add a few
+ CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO(
+ "TitleA", "Description", "Location", new Date(1302431400), new Date(1302435000)
+ ));
+ CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO(
+ "TitleB", "Description", "Location", new Date(1302431400), new Date(1302442200)
+ ));
+ CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO(
+ "TitleC", "Description", "Location", new Date(1302435000), new Date(1302442200)
+ ));
+
+ // Check now
+ results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging);
+ assertEquals(3, results.getPage().size());
+ assertEquals("TitleA", results.getPage().get(0).getTitle());
+ assertEquals("TitleB", results.getPage().get(1).getTitle());
+ assertEquals("TitleC", results.getPage().get(2).getTitle());
+
+ // Add one more, before those, and drop the page size
+ CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO(
+ "TitleD", "Description", "Location", new Date(1302417000), new Date(1302420600)
+ ));
+
+ paging = new PagingRequest(3);
+ results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging);
+ assertEquals(3, results.getPage().size());
+ assertEquals("TitleD", results.getPage().get(0).getTitle());
+ assertEquals("TitleA", results.getPage().get(1).getTitle());
+ assertEquals("TitleB", results.getPage().get(2).getTitle());
+
+ paging = new PagingRequest(3, 3);
+ results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging);
+ assertEquals(1, results.getPage().size());
+ assertEquals("TitleC", results.getPage().get(0).getTitle());
+ }
+
+ @Test public void calendarMultiSiteListing() throws Exception
{
// TODO
}
diff --git a/source/java/org/alfresco/service/cmr/calendar/CalendarService.java b/source/java/org/alfresco/service/cmr/calendar/CalendarService.java
index 81837b1a4c..4e77c5ef73 100644
--- a/source/java/org/alfresco/service/cmr/calendar/CalendarService.java
+++ b/source/java/org/alfresco/service/cmr/calendar/CalendarService.java
@@ -20,8 +20,9 @@ package org.alfresco.service.cmr.calendar;
import java.util.Date;
+import org.alfresco.query.PagingRequest;
+import org.alfresco.query.PagingResults;
import org.alfresco.service.NotAuditable;
-import org.alfresco.service.cmr.site.SiteInfo;
/**
* The Calendar service.
@@ -61,4 +62,25 @@ public interface CalendarService {
*/
@NotAuditable
CalendarEntry getCalendarEntry(String siteShortName, String entryName);
+
+ /**
+ * Retrieves all {@link CalendarEntry} instances in the repository
+ * for the given site.
+ */
+ @NotAuditable
+ PagingResults listCalendarEntries(String siteShortName, PagingRequest paging);
+
+ /**
+ * Retrieves all {@link CalendarEntry} instances in the repository
+ * for the given sites.
+ */
+ @NotAuditable
+ PagingResults listCalendarEntries(String[] siteShortNames, PagingRequest paging);
+
+ /**
+ * Retrieves all {@link CalendarEntry} instances in the repository
+ * for the given sites, between the specified date range
+ */
+ @NotAuditable
+ PagingResults listCalendarEntries(String[] siteShortNames, Date from, Date to, PagingRequest paging);
}