From 6f494d69ad3d4122b4a7aec696274ee5a0ebeefb Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Wed, 5 Jun 2019 17:16:24 +0200
Subject: [PATCH] OO-4075: filter the list of change log in the IQ run
 controller

---
 .../olat/course/nodes/iq/IQRunController.java | 26 +++++++++++++------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/iq/IQRunController.java b/src/main/java/org/olat/course/nodes/iq/IQRunController.java
index bb5e68ce661..796f239838b 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQRunController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQRunController.java
@@ -27,7 +27,8 @@ package org.olat.course.nodes.iq;
 
 import java.io.File;
 import java.text.DateFormat;
-import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -222,25 +223,34 @@ public class IQRunController extends BasicController implements GenericEventList
 		Formatter formatter = Formatter.getInstance(ureq.getLocale());
 		ImsRepositoryResolver resolver = new ImsRepositoryResolver(referenceTestEntry);
 		QTIChangeLogMessage[] qtiChangeLog = resolver.getDocumentChangeLog();
+		
 		StringBuilder qtiChangelog = new StringBuilder();
 
 		if(qtiChangeLog.length>0){
+			List<QTIChangeLogMessage> qtiChangeLogList = new ArrayList<>(qtiChangeLog.length);
+			for (int i=qtiChangeLog.length; i-->0 ; ) {
+				if(qtiChangeLog[i] != null) {
+					qtiChangeLogList.add(qtiChangeLog[i]);
+				}
+			}
 			//there are resource changes
-			Arrays.sort(qtiChangeLog);
-			for (int i = qtiChangeLog.length-1; i >= 0 ; i--) {
+			Collections.sort(qtiChangeLogList);
+			
+			for (int i = qtiChangeLogList.size()-1; i >= 0 ; i--) {
+				QTIChangeLogMessage qtiChangeLogEntry = qtiChangeLogList.get(i);
 				//show latest change first
-				if(!showAll && qtiChangeLog[i].isPublic()){
+				if(!showAll && qtiChangeLogEntry.isPublic()){
 					//logged in person is a normal user, hence public messages only
-					Date msgDate = new Date(qtiChangeLog[i].getTimestmp());
+					Date msgDate = new Date(qtiChangeLogEntry.getTimestmp());
 					qtiChangelog.append("\nChange date: ").append(formatter.formatDateAndTime(msgDate)).append("\n");
-					String msg = StringHelper.escapeHtml(qtiChangeLog[i].getLogMessage());
+					String msg = StringHelper.escapeHtml(qtiChangeLogEntry.getLogMessage());
 					qtiChangelog.append(msg);
 					qtiChangelog.append("\n********************************\n");
 				}else if (showAll){
 					//logged in person is an author, olat admin, owner, show all messages
-					Date msgDate = new Date(qtiChangeLog[i].getTimestmp());
+					Date msgDate = new Date(qtiChangeLogEntry.getTimestmp());
 					qtiChangelog.append("\nChange date: ").append(formatter.formatDateAndTime(msgDate)).append("\n");
-					String msg = StringHelper.escapeHtml(qtiChangeLog[i].getLogMessage());
+					String msg = StringHelper.escapeHtml(qtiChangeLogEntry.getLogMessage());
 					qtiChangelog.append(msg);
 					qtiChangelog.append("\n********************************\n");
 				}//else non public messages are not shown to normal user
-- 
GitLab