From ddb5fce8d4ddc7d6f150099de8c75a26ef6e9938 Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Fri, 17 Apr 2020 09:29:55 +0200
Subject: [PATCH] OO-4642: Enhanced display of events lasting several days

---
 .../ui/CalendarDetailsController.java         | 51 +++++++++++--------
 .../calendar/ui/_content/event_details.html   |  6 +++
 .../ui/LiveStreamMetadataController.java      | 48 +++++++++--------
 .../ui/LiveStreamPeekviewController.java      | 45 +++++++++-------
 4 files changed, 92 insertions(+), 58 deletions(-)

diff --git a/src/main/java/org/olat/commons/calendar/ui/CalendarDetailsController.java b/src/main/java/org/olat/commons/calendar/ui/CalendarDetailsController.java
index a043f2dd26e..a634dd7e8d5 100644
--- a/src/main/java/org/olat/commons/calendar/ui/CalendarDetailsController.java
+++ b/src/main/java/org/olat/commons/calendar/ui/CalendarDetailsController.java
@@ -20,7 +20,6 @@
 package org.olat.commons.calendar.ui;
 
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
@@ -29,7 +28,6 @@ import org.apache.commons.lang.time.DateUtils;
 import org.olat.commons.calendar.CalendarManagedFlag;
 import org.olat.commons.calendar.CalendarManager;
 import org.olat.commons.calendar.CalendarModule;
-import org.olat.commons.calendar.CalendarUtils;
 import org.olat.commons.calendar.model.KalendarEvent;
 import org.olat.commons.calendar.model.KalendarEventLink;
 import org.olat.commons.calendar.ui.components.KalendarRenderWrapper;
@@ -103,31 +101,42 @@ public class CalendarDetailsController extends BasicController {
 		putInitialPanel(mainVC);
 	}
 	
-	private String addDateToMainVC() {
+	private void addDateToMainVC() {
 		Locale locale = getLocale();
-		Calendar cal = CalendarUtils.createCalendarInstance(locale);
 		Date begin = calEvent.getBegin();
-		Date end = calEvent.getEnd();	
-		cal.setTime(begin);
+		Date end = calEvent.getEnd();
 		
-		StringBuilder sb = new StringBuilder();
-		sb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
-		mainVC.contextPut("date", sb.toString());
-
-		if (!calEvent.isAllDayEvent()) {
-			sb = new StringBuilder();
-			sb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
-			sb.append(" - ");
-			if (!DateUtils.isSameDay(begin, end)) {
-				sb.append(StringHelper.formatLocaleDateFull(end.getTime(), locale)).append(", ");
-			} 
-			sb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
-			mainVC.contextPut("time", sb.toString());
+		boolean sameDay = DateUtils.isSameDay(begin, end);
+		if (sameDay) {
+			StringBuilder dateSb = new StringBuilder();
+			dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
+			mainVC.contextPut("date", dateSb.toString());
+			if (!calEvent.isAllDayEvent()) {
+				StringBuilder timeSb = new StringBuilder();
+				timeSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
+				timeSb.append(" - ");
+				timeSb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
+				mainVC.contextPut("time", timeSb.toString());
+			}
+		} else {
+			StringBuilder dateSb = new StringBuilder();
+			dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
+			if (!calEvent.isAllDayEvent()) {
+				dateSb.append(" ");
+				dateSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
+			}
+			dateSb.append(" -");
+			mainVC.contextPut("date", dateSb.toString());
+			StringBuilder date2Sb = new StringBuilder();
+			date2Sb.append(StringHelper.formatLocaleDateFull(end.getTime(), locale));
+			if (!calEvent.isAllDayEvent()) {
+				date2Sb.append(" ");
+				date2Sb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
+			}
+			mainVC.contextPut("date2", date2Sb.toString());
 		}
-		return sb.toString();
 	}
 	
-	
 	private List<LinkWrapper> renderEventLinks() {
 		List<LinkWrapper> linkWrappers = new ArrayList<>();
 		List<KalendarEventLink> kalendarEventLinks = calEvent.getKalendarEventLinks();
diff --git a/src/main/java/org/olat/commons/calendar/ui/_content/event_details.html b/src/main/java/org/olat/commons/calendar/ui/_content/event_details.html
index 1240684f850..1beab2e4ba0 100644
--- a/src/main/java/org/olat/commons/calendar/ui/_content/event_details.html
+++ b/src/main/java/org/olat/commons/calendar/ui/_content/event_details.html
@@ -5,6 +5,12 @@
 		<i class="o_icon o_icon-fw o_icon_calendar">&nbsp;</i>
 		$date
 	</div>
+	#if($date2 && $date2 != "")
+	<div class="o_cal_time text-muted">
+		<i class="o_icon o_icon-fw ">&nbsp;</i>
+		$date2
+	</div>
+	#end
 	#if($time && $time != "")
 	<div class="o_cal_time text-muted">
 		<i class="o_icon o_icon-fw o_icon_time">&nbsp;</i>
diff --git a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamMetadataController.java b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamMetadataController.java
index e35dba8a8b4..d36d9c171d7 100644
--- a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamMetadataController.java
+++ b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamMetadataController.java
@@ -19,13 +19,11 @@
  */
 package org.olat.course.nodes.livestream.ui;
 
-import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 
 import org.apache.commons.lang.time.DateUtils;
 import org.olat.commons.calendar.CalendarManager;
-import org.olat.commons.calendar.CalendarUtils;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.velocity.VelocityContainer;
@@ -78,28 +76,38 @@ public class LiveStreamMetadataController extends BasicController {
 		}
 	}
 	
-	private String addDateToMainVC(LiveStreamEvent calEvent) {
+	private void addDateToMainVC(LiveStreamEvent calEvent) {
 		Locale locale = getLocale();
-		Calendar cal = CalendarUtils.createCalendarInstance(locale);
 		Date begin = calEvent.getBegin();
-		Date end = calEvent.getEnd();	
-		cal.setTime(begin);
+		Date end = calEvent.getEnd();
 		
-		StringBuilder sb = new StringBuilder();
-		sb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
-		mainVC.contextPut("date", sb.toString());
-
-		if (!calEvent.isAllDayEvent()) {
-			sb = new StringBuilder();
-			sb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
-			sb.append(" - ");
-			if (!DateUtils.isSameDay(begin, end)) {
-				sb.append(StringHelper.formatLocaleDateFull(end.getTime(), locale)).append(", ");
-			} 
-			sb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
-			mainVC.contextPut("time", sb.toString());
+		boolean sameDay = DateUtils.isSameDay(begin, end);
+		if (sameDay) {
+			StringBuilder dateSb = new StringBuilder();
+			dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
+			mainVC.contextPut("date", dateSb.toString());
+			if (!calEvent.isAllDayEvent()) {
+				StringBuilder timeSb = new StringBuilder();
+				timeSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
+				timeSb.append(" - ");
+				timeSb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
+				mainVC.contextPut("time", timeSb.toString());
+			}
+		} else {
+			StringBuilder dateSb = new StringBuilder();
+			dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
+			if (!calEvent.isAllDayEvent()) {
+				dateSb.append(" ");
+				dateSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
+			}
+			dateSb.append(" - ");
+			dateSb.append(StringHelper.formatLocaleDateFull(end.getTime(), locale));
+			if (!calEvent.isAllDayEvent()) {
+				dateSb.append(" ");
+				dateSb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
+			}
+			mainVC.contextPut("date", dateSb.toString());
 		}
-		return sb.toString();
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamPeekviewController.java b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamPeekviewController.java
index e91f153c3ef..a26f22c12db 100644
--- a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamPeekviewController.java
+++ b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamPeekviewController.java
@@ -20,14 +20,12 @@
 package org.olat.course.nodes.livestream.ui;
 
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
 import org.apache.commons.lang.time.DateUtils;
-import org.olat.commons.calendar.CalendarUtils;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.htmlsite.OlatCmdEvent;
@@ -110,24 +108,37 @@ public class LiveStreamPeekviewController extends BasicController implements Con
 		String title = translate(titleI18n, new String[] {event.getSubject()});
 		
 		Locale locale = getLocale();
-		Calendar cal = CalendarUtils.createCalendarInstance(locale);
 		Date begin = event.getBegin();
 		Date end = event.getEnd();
-		cal.setTime(begin);
-		StringBuilder dateSb = new StringBuilder();
-		dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
-		String date  = dateSb.toString();
-		
+		String date = null;
 		String time = null;
-		if (!event.isAllDayEvent()) {
-			StringBuilder timeSb = new StringBuilder();
-			timeSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
-			timeSb.append(" - ");
-			if (!DateUtils.isSameDay(begin, end)) {
-				timeSb.append(StringHelper.formatLocaleDateFull(end.getTime(), locale)).append(", ");
-			} 
-			timeSb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
-			time = timeSb.toString();
+		
+		boolean sameDay = DateUtils.isSameDay(begin, end);
+		if (sameDay) {
+			StringBuilder dateSb = new StringBuilder();
+			dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
+			date = dateSb.toString();
+			if (!event.isAllDayEvent()) {
+				StringBuilder timeSb = new StringBuilder();
+				timeSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
+				timeSb.append(" - ");
+				timeSb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
+				time = timeSb.toString();
+			}
+		} else {
+			StringBuilder dateSb = new StringBuilder();
+			dateSb.append(StringHelper.formatLocaleDateFull(begin.getTime(), locale));
+			if (!event.isAllDayEvent()) {
+				dateSb.append(" ");
+				dateSb.append(StringHelper.formatLocaleTime(begin.getTime(), locale));
+			}
+			dateSb.append(" - ");
+			dateSb.append(StringHelper.formatLocaleDateFull(end.getTime(), locale));
+			if (!event.isAllDayEvent()) {
+				dateSb.append(" ");
+				dateSb.append(StringHelper.formatLocaleTime(end.getTime(), locale));
+			}
+			date = dateSb.toString();
 		}
 
 		String location = event.getLocation();
-- 
GitLab