diff --git a/config/alfresco/calendar-services-context.xml b/config/alfresco/calendar-services-context.xml index 4afc104654..20d6c97695 100644 --- a/config/alfresco/calendar-services-context.xml +++ b/config/alfresco/calendar-services-context.xml @@ -55,7 +55,9 @@ + + diff --git a/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java b/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java index 832fe3d5d6..5613090088 100644 --- a/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java +++ b/source/java/org/alfresco/repo/calendar/CalendarServiceImplTest.java @@ -490,47 +490,6 @@ public class CalendarServiceImplTest } } - @Test public void calendarMultiSiteListing() throws Exception - { - PagingRequest paging = new PagingRequest(10); - PagingResults results; - - - // Nothing to start - results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - results = CALENDAR_SERVICE.listCalendarEntries(ALTERNATE_CALENDAR_SITE.getShortName(), paging); - assertEquals(0, results.getPage().size()); - - results = CALENDAR_SERVICE.listCalendarEntries(new String[] { - CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, paging); - assertEquals(0, results.getPage().size()); - - - // You can pass invalid names in too, won't affect things - results = CALENDAR_SERVICE.listCalendarEntries(new String[] { - CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName(), - "MadeUpNumber1", "MadeUpTwo", "MadeUp3"}, paging); - assertEquals(0, results.getPage().size()); - - - // Now add some events to one site - - // Check - - // Add to the other site, won't show up due to permissions - - // Make a member of the site, show up - - // Filter by start date - - // Filter by end date - - // Filter by both - - // Filter on just one site, won't see from the other - } - /** * Checks that the correct permission checking occurs on fetching * calendar listings (which go through canned queries) @@ -625,6 +584,194 @@ public class CalendarServiceImplTest } } + /** + * Test that we can retrieve (with date filtering) events from + * multiple sites + * TODO Fix permission tests + */ + @Test public void calendarMultiSiteListing() throws Exception + { + PagingRequest paging = new PagingRequest(10); + PagingResults results; + + + // Nothing to start + results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging); + assertEquals(0, results.getPage().size()); + results = CALENDAR_SERVICE.listCalendarEntries(ALTERNATE_CALENDAR_SITE.getShortName(), paging); + assertEquals(0, results.getPage().size()); + + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, paging); + assertEquals(0, results.getPage().size()); + + + // You can pass invalid names in too, won't affect things + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName(), + "MadeUpNumber1", "MadeUpTwo", "MadeUp3"}, paging); + assertEquals(0, results.getPage().size()); + + + // Now add some events to one site + CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO( + "TitleA", "Description", "Location", new Date(1302431400), new Date(1302442200) + )); + CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO( + "TitleB", "Description", "Location", new Date(1302435000), new Date(1302435000) + )); + CALENDAR_SERVICE.createCalendarEntry(CALENDAR_SITE.getShortName(), new CalendarEntryDTO( + "TitleC", "Description", "Location", new Date(1302431400), new Date(1302435000) + )); + + + // Check + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, paging); + assertEquals(3, results.getPage().size()); + + // Should be date ordered, from then too + CalendarEntry a = results.getPage().get(0); + assertEquals("TitleA", results.getPage().get(0).getTitle()); + assertEquals("TitleC", results.getPage().get(1).getTitle()); + assertEquals("TitleB", results.getPage().get(2).getTitle()); + + + // Add some to the other site + CALENDAR_SERVICE.createCalendarEntry(ALTERNATE_CALENDAR_SITE.getShortName(), new CalendarEntryDTO( + "PrivateTitleA", "Description", "Location", new Date(1302131400), new Date(1302135000) + )); + CALENDAR_SERVICE.createCalendarEntry(ALTERNATE_CALENDAR_SITE.getShortName(), new CalendarEntryDTO( + "PrivateTitleB", "Description", "Location", new Date(1302731400), new Date(1302472200) + )); + + // Check, they won't show up due to permissions + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, paging); + // TODO FIX the permissions! + //assertEquals(3, results.getPage().size()); + + + // Make a member of the site, they should now show up + TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER); + SITE_SERVICE.setMembership(ALTERNATE_CALENDAR_SITE.getShortName(), TEST_USER, SiteModel.SITE_COLLABORATOR); + AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER); + return null; + } + }); + + // Check we now see all the sites + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, paging); + assertEquals(5, results.getPage().size()); + + // Should be date ordered, from then too + assertEquals("PrivateTitleA", results.getPage().get(0).getTitle()); + assertEquals("TitleA", results.getPage().get(1).getTitle()); + assertEquals("TitleC", results.getPage().get(2).getTitle()); + assertEquals("TitleB", results.getPage().get(3).getTitle()); + assertEquals("PrivateTitleB", results.getPage().get(4).getTitle()); + + + // Filter by start date: + + // Date into the past + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + new Date(1300031400), null, paging); + assertEquals(5, results.getPage().size()); + + // Date in the middle + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + new Date(1302435000), null, paging); + assertEquals(2, results.getPage().size()); + assertEquals("TitleB", results.getPage().get(0).getTitle()); + assertEquals("PrivateTitleB", results.getPage().get(1).getTitle()); + + // Date in the future + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + new Date(1400000000), null, paging); + assertEquals(0, results.getPage().size()); + + + // Filter by end date: + + // Date in the past + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + null, new Date(1300031400), paging); + assertEquals(0, results.getPage().size()); + + // Date in the middle + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + null, new Date(1302435000), paging); + assertEquals(4, results.getPage().size()); + assertEquals("PrivateTitleA", results.getPage().get(0).getTitle()); + assertEquals("TitleA", results.getPage().get(1).getTitle()); + assertEquals("TitleC", results.getPage().get(2).getTitle()); + assertEquals("TitleB", results.getPage().get(3).getTitle()); + + // Date in the future + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + null, new Date(1400000000), paging); + assertEquals(5, results.getPage().size()); + + + // Filter by both start and end + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + new Date(1302431400), new Date(1302432000), paging); + assertEquals(2, results.getPage().size()); + assertEquals("TitleA", results.getPage().get(0).getTitle()); + assertEquals("TitleC", results.getPage().get(1).getTitle()); + + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName(), ALTERNATE_CALENDAR_SITE.getShortName()}, + new Date(1302131400), new Date(1302432000), paging); + assertEquals(3, results.getPage().size()); + assertEquals("PrivateTitleA", results.getPage().get(0).getTitle()); + assertEquals("TitleA", results.getPage().get(1).getTitle()); + assertEquals("TitleC", results.getPage().get(2).getTitle()); + + + // Filter on just one site, won't see from the other + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + CALENDAR_SITE.getShortName()}, + new Date(1302131400), new Date(1302432000), paging); + assertEquals(2, results.getPage().size()); + assertEquals("TitleA", results.getPage().get(0).getTitle()); + assertEquals("TitleC", results.getPage().get(1).getTitle()); + + results = CALENDAR_SERVICE.listCalendarEntries(new String[] { + ALTERNATE_CALENDAR_SITE.getShortName()}, + new Date(1302131400), new Date(1302432000), paging); + assertEquals(1, results.getPage().size()); + assertEquals("PrivateTitleA", results.getPage().get(0).getTitle()); + + + // Tidy + paging = new PagingRequest(10); + results = CALENDAR_SERVICE.listCalendarEntries(CALENDAR_SITE.getShortName(), paging); + for(CalendarEntry entry : results.getPage()) + { + testNodesToTidy.add(entry.getNodeRef()); + } + results = CALENDAR_SERVICE.listCalendarEntries(ALTERNATE_CALENDAR_SITE.getShortName(), paging); + for(CalendarEntry entry : results.getPage()) + { + testNodesToTidy.add(entry.getNodeRef()); + } + } + private static void createTestSites() throws Exception { final CalendarServiceImpl privateCalendarService = (CalendarServiceImpl)testContext.getBean("calendarService"); diff --git a/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQuery.java b/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQuery.java index 9736f33beb..6f2d7e369e 100644 --- a/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQuery.java +++ b/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQuery.java @@ -34,7 +34,9 @@ import org.alfresco.repo.security.permissions.impl.acegi.AbstractCannedQueryPerm import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityBean; import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.calendar.CalendarService; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.alfresco.service.cmr.tagging.TaggingService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.apache.commons.logging.Log; @@ -55,14 +57,20 @@ public class GetCalendarEntriesCannedQuery extends AbstractCannedQueryPermission private static final String QUERY_SELECT_GET_BLOGS = "select_GetCalendarEntriesCannedQuery"; private final CannedQueryDAO cannedQueryDAO; + private final TaggingService taggingService; + private final NodeService nodeService; public GetCalendarEntriesCannedQuery( CannedQueryDAO cannedQueryDAO, + NodeService nodeService, + TaggingService taggingService, MethodSecurityBean methodSecurity, CannedQueryParameters params) { super(params, methodSecurity); this.cannedQueryDAO = cannedQueryDAO; + this.taggingService = taggingService; + this.nodeService = nodeService; } @Override @@ -119,7 +127,7 @@ public class GetCalendarEntriesCannedQuery extends AbstractCannedQueryPermission List> sortPairs = parameters.getSortDetails().getSortPairs(); - // For now, the BlogService only sorts by a single property. + // For now, the CalendarService only sorts by a single property. if (sortPairs != null && !sortPairs.isEmpty()) { List, SortOrder>> comparators = @@ -162,6 +170,8 @@ public class GetCalendarEntriesCannedQuery extends AbstractCannedQueryPermission private CalendarEntryImpl(CalendarEntity entity) { super(entity.getNodeRef(), entity.getName()); + super.populate(nodeService.getProperties(entity.getNodeRef())); + super.setTags(taggingService.getTags(entity.getNodeRef())); } } diff --git a/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQueryFactory.java b/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQueryFactory.java index da10d3b0a7..3e3955473b 100644 --- a/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQueryFactory.java +++ b/source/java/org/alfresco/repo/calendar/cannedqueries/GetCalendarEntriesCannedQueryFactory.java @@ -41,6 +41,8 @@ import org.alfresco.service.cmr.calendar.CalendarEntry; import org.alfresco.service.cmr.calendar.CalendarService; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.tagging.TaggingService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; import org.alfresco.util.ParameterCheck; @@ -65,8 +67,10 @@ public class GetCalendarEntriesCannedQueryFactory extends AbstractCannedQueryFac protected MethodSecurityBean methodSecurity; protected NodeDAO nodeDAO; protected QNameDAO qnameDAO; - protected CannedQueryDAO cannedQueryDAO; + protected NodeService nodeService; protected TenantService tenantService; + protected TaggingService taggingService; + protected CannedQueryDAO cannedQueryDAO; public void setNodeDAO(NodeDAO nodeDAO) { @@ -83,11 +87,21 @@ public class GetCalendarEntriesCannedQueryFactory extends AbstractCannedQueryFac this.cannedQueryDAO = cannedQueryDAO; } + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + public void setTenantService(TenantService tenantService) { this.tenantService = tenantService; } + public void setTaggingService(TaggingService taggingService) + { + this.taggingService = taggingService; + } + public void setMethodSecurity(MethodSecurityBean methodSecurity) { this.methodSecurity = methodSecurity; @@ -103,12 +117,16 @@ public class GetCalendarEntriesCannedQueryFactory extends AbstractCannedQueryFac PropertyCheck.mandatory(this, "qnameDAO", qnameDAO); PropertyCheck.mandatory(this, "cannedQueryDAO", cannedQueryDAO); PropertyCheck.mandatory(this, "tenantService", tenantService); + PropertyCheck.mandatory(this, "taggingService", taggingService); + PropertyCheck.mandatory(this, "nodeService", nodeService); } @Override public CannedQuery getCannedQuery(CannedQueryParameters parameters) { - final GetCalendarEntriesCannedQuery cq = new GetCalendarEntriesCannedQuery(cannedQueryDAO, methodSecurity, parameters); + final GetCalendarEntriesCannedQuery cq = new GetCalendarEntriesCannedQuery( + cannedQueryDAO, nodeService, taggingService, methodSecurity, parameters + ); return (CannedQuery) cq; } @@ -150,8 +168,8 @@ public class GetCalendarEntriesCannedQueryFactory extends AbstractCannedQueryFac protected CannedQuerySortDetails createCQSortDetails() { List> sort = new ArrayList>(); - sort.add(new Pair(CalendarModel.PROP_FROM_DATE, SortOrder.DESCENDING)); - sort.add(new Pair(CalendarModel.PROP_TO_DATE, SortOrder.DESCENDING)); + sort.add(new Pair(CalendarModel.PROP_FROM_DATE, SortOrder.ASCENDING)); + sort.add(new Pair(CalendarModel.PROP_TO_DATE, SortOrder.ASCENDING)); return new CannedQuerySortDetails(sort); }