From c49c33820ed6f80b19b892ef77f09d0090f3336f Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 14 Feb 2012 09:21:11 +0100
Subject: [PATCH] OO-115: fix the links generator to accept business path

---
 .../commons/calendar/model/KalendarEvent.java | 20 +++++------
 .../WeeklyCalendarComponentRenderer.java      | 34 +++++++++++++------
 2 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java b/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java
index 2336d2bdcf1..7f9fc36aefa 100644
--- a/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java
+++ b/src/main/java/org/olat/commons/calendar/model/KalendarEvent.java
@@ -30,11 +30,11 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
-import org.olat.commons.calendar.CalendarUtils;
-
 import net.fortuna.ical4j.model.Recur;
 
-public class KalendarEvent implements Cloneable, Comparable {
+import org.olat.commons.calendar.CalendarUtils;
+
+public class KalendarEvent implements Cloneable, Comparable<KalendarEvent> {
 
 	public static final int CLASS_PRIVATE = 0;
 	public static final int CLASS_X_FREEBUSY = 1;
@@ -57,7 +57,7 @@ public class KalendarEvent implements Cloneable, Comparable {
 	private Date begin, end;
 	private boolean isAllDayEvent;
 	private String location;
-	private List kalendarEventLinks;
+	private List<KalendarEventLink> kalendarEventLinks;
 	private long created, lastModified;
 	private String createdBy;
 	private int classification;
@@ -70,7 +70,7 @@ public class KalendarEvent implements Cloneable, Comparable {
 	private String recurrenceRule;
 	private String recurrenceExc;
 
-	private KalendarEvent() {
+	public KalendarEvent() {
 		// save no-args constructor for XStream
 	}
 	
@@ -88,7 +88,7 @@ public class KalendarEvent implements Cloneable, Comparable {
 		this.begin = begin;
 		this.end = end;
 		this.isAllDayEvent = false;
-		this.kalendarEventLinks = new ArrayList();
+		this.kalendarEventLinks = new ArrayList<KalendarEventLink>();
 	}
 	
 	/**
@@ -104,7 +104,7 @@ public class KalendarEvent implements Cloneable, Comparable {
 		this.begin = begin;
 		this.end = new Date(begin.getTime() + duration);
 		this.isAllDayEvent = false;
-		this.kalendarEventLinks = new ArrayList();
+		this.kalendarEventLinks = new ArrayList<KalendarEventLink>();
 	}
 	
 	/**
@@ -243,14 +243,14 @@ public class KalendarEvent implements Cloneable, Comparable {
 	/**
 	 * @return Returns the uRI.
 	 */
-	public List getKalendarEventLinks() {
+	public List<KalendarEventLink> getKalendarEventLinks() {
 		return kalendarEventLinks;
 	}
 
 	/**
 	 * @param uri The uRI to set.
 	 */
-	public void setKalendarEventLinks(List kalendarEventLinks) {
+	public void setKalendarEventLinks(List<KalendarEventLink> kalendarEventLinks) {
 		this.kalendarEventLinks = kalendarEventLinks;
 	}
 	
@@ -319,7 +319,7 @@ public class KalendarEvent implements Cloneable, Comparable {
 		setRecurrenceExc(excRule);
 	}
 	
-	public int compareTo(Object o1) {
+	public int compareTo(KalendarEvent o1) {
 		if ( !(o1 instanceof KalendarEvent)) {
 			return -1;
 		}
diff --git a/src/main/java/org/olat/commons/calendar/ui/components/WeeklyCalendarComponentRenderer.java b/src/main/java/org/olat/commons/calendar/ui/components/WeeklyCalendarComponentRenderer.java
index a9dd138873d..2e5e1f2b0ed 100644
--- a/src/main/java/org/olat/commons/calendar/ui/components/WeeklyCalendarComponentRenderer.java
+++ b/src/main/java/org/olat/commons/calendar/ui/components/WeeklyCalendarComponentRenderer.java
@@ -51,6 +51,7 @@ import org.olat.core.gui.render.StringOutput;
 import org.olat.core.gui.render.URLBuilder;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.gui.util.CSSHelper;
+import org.olat.core.helpers.Settings;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
@@ -647,12 +648,13 @@ public class WeeklyCalendarComponentRenderer implements ComponentRenderer {
 	}
 	
 	private void renderEventLinks(KalendarEvent event, StringOutput sb) {
-		List kalendarEventLinks = event.getKalendarEventLinks();
+		List<KalendarEventLink> kalendarEventLinks = event.getKalendarEventLinks();
 		
-		if (kalendarEventLinks != null) {
+		if (kalendarEventLinks != null && !kalendarEventLinks.isEmpty()) {
 			sb.append("<div class=\"o_cal_links\">");
-			for (Iterator iter = kalendarEventLinks.iterator(); iter.hasNext();) {
-				KalendarEventLink link = (KalendarEventLink) iter.next();
+			
+			String rootUri = Settings.getServerContextPathURI();
+			for (KalendarEventLink link: kalendarEventLinks) {
 				sb.append("<br /><b>");				
 				//fxdiff
 				String uri = link.getURI();
@@ -661,8 +663,12 @@ public class WeeklyCalendarComponentRenderer implements ComponentRenderer {
 					String displayName = link.getDisplayName();
 					iconCssClass = CSSHelper.createFiletypeIconCssClassFor(displayName);
 				}
-				
-				if(uri.contains("://")) {
+
+				if(uri.startsWith(rootUri)) {
+					//intern link with absolute URL
+					renderInternLink(link, iconCssClass, sb);
+				} else if(uri.contains("://")) {
+					//extern link with absolute URL
 					sb.append("<a href=\"").append(uri).append("\" title=\"").append(StringEscapeUtils.escapeHtml(link.getDisplayName())).append("\" ");
 					
 					if (StringHelper.containsNonWhitespace(iconCssClass)) {
@@ -670,17 +676,23 @@ public class WeeklyCalendarComponentRenderer implements ComponentRenderer {
 					}
 					sb.append(" target=\"_blank\">").append(link.getDisplayName()).append("</a>");
 				} else {
-					sb.append("<a href=\"javascript:top.o_openUriInMainWindow('").append(uri).append("')\" title=\"").append(StringEscapeUtils.escapeHtml(link.getDisplayName())).append("\" ");
-					if (StringHelper.containsNonWhitespace(iconCssClass)) {
-						sb.append("class=\"b_with_small_icon_left ").append(iconCssClass).append("\"");
-					}
-					sb.append(" onclick=\"return o2cl();\">").append(link.getDisplayName()).append("</a>");
+					//link with relative URL
+					renderInternLink(link, iconCssClass, sb);
 				} 
 				sb.append("</b>");
 			}
 			sb.append("</div>");
 		}
 	}
+	
+	private void renderInternLink(KalendarEventLink link, String iconCssClass, StringOutput sb) {
+		sb.append("<a href=\"javascript:top.o_openUriInMainWindow('").append(link.getURI()).append("')\" title=\"").append(StringEscapeUtils.escapeHtml(link.getDisplayName())).append("\" ");
+		if (StringHelper.containsNonWhitespace(iconCssClass)) {
+			sb.append("class=\"b_with_small_icon_left ").append(iconCssClass).append("\"");
+		}
+		sb.append(" onclick=\"return o2cl();\">").append(link.getDisplayName()).append("</a>");
+	}
+	
 	private void renderWeekHeader(int year, int weekOfYear, boolean enableAddEvent, StringOutput sb, URLBuilder ubu, Locale locale) {
 		Calendar cal = CalendarUtils.getStartOfWeekCalendar(year, weekOfYear, locale);
 		Calendar calNow = CalendarUtils.createCalendarInstance(locale);
-- 
GitLab