From c6e9f3eef7426f839c54a98d61dee4e985841eec Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Tue, 7 Jan 2020 18:32:06 +0100
Subject: [PATCH] OO-4448: add classification to the Event VO

---
 .../calendar/restapi/CalendarWSHelper.java    |  8 +++++
 .../commons/calendar/restapi/EventVO.java     | 11 ++++++
 .../org/olat/restapi/CourseCalendarTest.java  | 36 +++++++++++++++++++
 3 files changed, 55 insertions(+)

diff --git a/src/main/java/org/olat/commons/calendar/restapi/CalendarWSHelper.java b/src/main/java/org/olat/commons/calendar/restapi/CalendarWSHelper.java
index d38923e85e9..fd4c8130476 100644
--- a/src/main/java/org/olat/commons/calendar/restapi/CalendarWSHelper.java
+++ b/src/main/java/org/olat/commons/calendar/restapi/CalendarWSHelper.java
@@ -54,6 +54,14 @@ public class CalendarWSHelper {
 		kalEvent.setLiveStreamUrl(event.getLiveStreamUrl());
         kalEvent.setExternalId(event.getExternalId());
         kalEvent.setExternalSource(event.getExternalSource());
+        if(event.getClassification() != null) {
+        	int classification = event.getClassification().intValue();
+        	if(classification == KalendarEvent.CLASS_PRIVATE
+        			|| classification == KalendarEvent.CLASS_PUBLIC
+        			|| classification == KalendarEvent.CLASS_X_FREEBUSY) {
+        		kalEvent.setClassification(classification);
+        	}
+        }
 	}
 	
 	static boolean hasReadAccess(KalendarRenderWrapper wrapper) {
diff --git a/src/main/java/org/olat/commons/calendar/restapi/EventVO.java b/src/main/java/org/olat/commons/calendar/restapi/EventVO.java
index dcff953f347..134fa20b313 100644
--- a/src/main/java/org/olat/commons/calendar/restapi/EventVO.java
+++ b/src/main/java/org/olat/commons/calendar/restapi/EventVO.java
@@ -45,6 +45,8 @@ public class EventVO {
 	private Date end;
 	private boolean allDayEvent;
 	
+	private Integer classification;
+	
 	private String liveStreamUrl;
 	
 	@Schema(required = true, description = "Action to be performed on managedFlags", allowableValues = { 
@@ -79,6 +81,7 @@ public class EventVO {
 		managedFlags = CalendarManagedFlag.toString(event.getManagedFlags());
 		externalId = event.getExternalId();
 		externalSource = event.getExternalSource();
+		classification = event.getClassification();
 	}
 
 	public String getId() {
@@ -157,6 +160,14 @@ public class EventVO {
 		this.calendarId = calendarId;
 	}
 
+	public Integer getClassification() {
+		return classification;
+	}
+
+	public void setClassification(Integer classification) {
+		this.classification = classification;
+	}
+
 	public String getManagedFlags() {
 		return managedFlags;
 	}
diff --git a/src/test/java/org/olat/restapi/CourseCalendarTest.java b/src/test/java/org/olat/restapi/CourseCalendarTest.java
index b354c88b5df..aee46c4637b 100644
--- a/src/test/java/org/olat/restapi/CourseCalendarTest.java
+++ b/src/test/java/org/olat/restapi/CourseCalendarTest.java
@@ -186,6 +186,42 @@ public class CourseCalendarTest extends OlatRestTestCase {
 		conn.shutdown();
 	}
 	
+	@Test
+	public void putVisibleCalendarEvent() throws IOException, URISyntaxException {
+		RestConnection conn = new RestConnection();
+		assertTrue(conn.login(auth1.getName(), "A6B7C8"));
+
+		//create an event
+		EventVO event = new EventVO();
+		Calendar cal = Calendar.getInstance();
+		event.setBegin(cal.getTime());
+		cal.add(Calendar.HOUR_OF_DAY, 1);
+		event.setEnd(cal.getTime());
+		String subject = UUID.randomUUID().toString();
+		event.setSubject(subject);
+		event.setClassification(KalendarEvent.CLASS_PUBLIC);
+
+		URI eventUri = UriBuilder.fromUri(getContextURI()).path("repo").path("courses")
+				.path(course1.getResourceableId().toString()).path("calendar").path("event").build();
+		HttpPut putEventMethod = conn.createPut(eventUri, MediaType.APPLICATION_JSON, true);
+		conn.addJsonEntity(putEventMethod, event);
+		HttpResponse putEventResponse = conn.execute(putEventMethod);
+		assertEquals(200, putEventResponse.getStatusLine().getStatusCode());
+		EntityUtils.consume(putEventResponse.getEntity());
+		
+		//check if the event is saved
+		KalendarRenderWrapper calendarWrapper = calendarManager.getCourseCalendar(course1);
+		Collection<KalendarEvent> savedEvents = calendarWrapper.getKalendar().getEvents();
+		
+		KalendarEvent savedEvent = savedEvents.stream()
+				.filter(e -> subject.equals(e.getSubject()))
+				.findFirst().get();
+		
+		Assert.assertEquals(KalendarEvent.CLASS_PUBLIC, savedEvent.getClassification());
+
+		conn.shutdown();
+	}
+	
 	@Test
 	public void putCalendarEvents() throws IOException, URISyntaxException {
 		RestConnection conn = new RestConnection();
-- 
GitLab