From 368a8e0eb36bdb26d4392fcdfcc2ad8844009fc4 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 19 Jul 2012 15:20:18 +0200
Subject: [PATCH] OMA-78: add method to delete calendar events

---
 .../calendar/restapi/CalendarWebService.java  | 38 +++++++++++++++++++
 .../java/org/olat/restapi/CalendarTest.java   | 29 ++++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/src/main/java/org/olat/commons/calendar/restapi/CalendarWebService.java b/src/main/java/org/olat/commons/calendar/restapi/CalendarWebService.java
index fc831c44fa6..6d0d8fb3f92 100644
--- a/src/main/java/org/olat/commons/calendar/restapi/CalendarWebService.java
+++ b/src/main/java/org/olat/commons/calendar/restapi/CalendarWebService.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
@@ -137,6 +138,43 @@ public class CalendarWebService {
 		return Response.ok(voes).build();
 	}
 	
+	@DELETE
+	@Path("{calendarId}/events/{eventId}")
+	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+	@Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+	public Response deleteEventByCalendar(@PathParam("calendarId") String calendarId,
+			@PathParam("eventId") String eventId, @PathParam("identityKey") Long identityKey,
+			@Context HttpServletRequest httpRequest) {
+		
+		UserRequest ureq = getUserRequest(httpRequest);
+		if(!ureq.getUserSession().isAuthenticated()) {
+			return Response.serverError().status(Status.UNAUTHORIZED).build();
+		} else if (ureq.getIdentity() == null || !ureq.getIdentity().getKey().equals(identityKey)) {
+			return Response.serverError().status(Status.UNAUTHORIZED).build();
+		}
+		
+		KalendarRenderWrapper calendar = getCalendar(ureq, calendarId);
+		if(calendar == null) {
+			return Response.serverError().status(Status.NOT_FOUND).build();
+		} else if(!hasWriteAccess(calendar)) {
+			return Response.serverError().status(Status.UNAUTHORIZED).build();
+		}
+
+		CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager();
+		if(eventId == null) {
+			return Response.ok().status(Status.NOT_FOUND).build();
+		} else {
+			KalendarEvent kalEvent = calendar.getKalendar().getEvent(eventId);
+			if(kalEvent == null) {
+				return Response.ok().status(Status.NOT_FOUND).build();
+			} else {
+				calendarManager.removeEventFrom(calendar.getKalendar(), kalEvent);
+			}
+		}
+
+		return Response.ok().build();
+	}
+	
 	@PUT
 	@Path("{calendarId}/events")
 	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
diff --git a/src/test/java/org/olat/restapi/CalendarTest.java b/src/test/java/org/olat/restapi/CalendarTest.java
index 6e35401aaee..3f565378a34 100644
--- a/src/test/java/org/olat/restapi/CalendarTest.java
+++ b/src/test/java/org/olat/restapi/CalendarTest.java
@@ -37,6 +37,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
 
 import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpPut;
@@ -395,6 +396,34 @@ public class CalendarTest extends OlatJerseyTestCase {
 		conn.shutdown();
 	}
 	
+	@Test
+	public void testDeletePersonalCalendarEvents() throws IOException, URISyntaxException {
+		RestConnection conn = new RestConnection();
+		assertTrue(conn.login(id2.getName(), "A6B7C8"));
+		
+		//check if the event is saved
+		CalendarManager calendarManager = CalendarManagerFactory.getInstance().getCalendarManager();
+		KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(id2);
+		KalendarEvent kalEvent = new KalendarEvent(UUID.randomUUID().toString(), "Rendez-vous", new Date(), new Date());
+		calendarManager.addEventTo(calendarWrapper.getKalendar(), kalEvent);
+
+		URI eventUri = UriBuilder.fromUri(getContextURI()).path("users").path(id2.getKey().toString())
+				.path("calendars").path("user_" + calendarWrapper.getKalendar().getCalendarID())
+				.path("events").path(kalEvent.getID()).build();
+		HttpDelete delEventMethod = conn.createDelete(eventUri, MediaType.APPLICATION_JSON, true);
+		HttpResponse delEventResponse = conn.execute(delEventMethod);
+		assertEquals(200, delEventResponse.getStatusLine().getStatusCode());
+		EntityUtils.consume(delEventResponse.getEntity());
+
+		conn.shutdown();
+		
+		//check if the event is saved
+		Collection<KalendarEvent> savedEvents = calendarWrapper.getKalendar().getEvents();
+		for(KalendarEvent savedEvent:savedEvents) {
+			Assert.assertFalse(savedEvent.getID().equals(kalEvent.getID()));
+		}
+	}
+	
 	protected CalendarVO getCourseCalendar(List<CalendarVO> vos) {
 		for(CalendarVO vo:vos) {
 			if(vo.getId().startsWith("course")) {
-- 
GitLab