From 1088af9978b5c2502b0d64089a1f90476c99466e Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Fri, 19 Feb 2021 11:02:33 +0100
Subject: [PATCH] OO-5301: Standard user display name in large files list

---
 .../admin/sysinfo/LargeFilesController.java   | 13 ++--
 .../sysinfo/model/LargeFilesTableModel.java   |  6 +-
 .../user/ui/UserDisplayNameCellRenderer.java  | 65 +++++++++++++++++++
 3 files changed, 76 insertions(+), 8 deletions(-)
 create mode 100644 src/main/java/org/olat/user/ui/UserDisplayNameCellRenderer.java

diff --git a/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java b/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java
index 44a32801495..c13b68c584b 100644
--- a/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java
+++ b/src/main/java/org/olat/admin/sysinfo/LargeFilesController.java
@@ -79,6 +79,7 @@ import org.olat.core.util.StringHelper;
 import org.olat.core.util.mail.ContactList;
 import org.olat.core.util.mail.ContactMessage;
 import org.olat.modules.co.ContactFormController;
+import org.olat.user.ui.UserDisplayNameCellRenderer;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
@@ -215,9 +216,7 @@ public class LargeFilesController extends FormBasicController implements Extende
 			}
 		}
 
-		Collections.sort(rows, (row1,row2) -> {
-			return row2.getSize().intValue() - row1.getSize().intValue();
-		});
+		Collections.sort(rows, (row1, row2) -> (row2.getSize().intValue() - row1.getSize().intValue()));
 
 		if(maxResults != 0 && maxResults < rows.size()) {
 			rows = rows.subList(0, maxResults);
@@ -332,7 +331,9 @@ public class LargeFilesController extends FormBasicController implements Extende
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.fileType));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.downloadCount));
 
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.author, "selectAuthor"));
+		DefaultFlexiColumnModel authorModel = new DefaultFlexiColumnModel(false, LargeFilesTableColumns.author, "selectAuthor");
+		authorModel.setCellRenderer(UserDisplayNameCellRenderer.get());
+		columnsModel.addFlexiColumnModel(authorModel);
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.license));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.language));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.source));
@@ -342,7 +343,9 @@ public class LargeFilesController extends FormBasicController implements Extende
 		columnsModel.addFlexiColumnModel(column);
 
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.lockedAt));
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.lockedBy, "selectLockedBy"));
+		DefaultFlexiColumnModel lockedByModel = new DefaultFlexiColumnModel(false, LargeFilesTableColumns.lockedBy, "selectLockedBy");
+		lockedByModel.setCellRenderer(UserDisplayNameCellRenderer.get());
+		columnsModel.addFlexiColumnModel(lockedByModel);
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.creator));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.publisher));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, LargeFilesTableColumns.pubDate));
diff --git a/src/main/java/org/olat/admin/sysinfo/model/LargeFilesTableModel.java b/src/main/java/org/olat/admin/sysinfo/model/LargeFilesTableModel.java
index ad95804a6db..4fa78189570 100644
--- a/src/main/java/org/olat/admin/sysinfo/model/LargeFilesTableModel.java
+++ b/src/main/java/org/olat/admin/sysinfo/model/LargeFilesTableModel.java
@@ -42,7 +42,7 @@ public class LargeFilesTableModel extends DefaultFlexiTableDataModel<LargeFilesT
 implements SortableFlexiTableDataModel<LargeFilesTableContentRow> {
 
 	private final Locale locale;
-
+	
 	public LargeFilesTableModel(FlexiTableColumnModel columnModel, Locale locale) {
 		super(columnModel);
 		this.locale = locale;
@@ -72,7 +72,7 @@ implements SortableFlexiTableDataModel<LargeFilesTableContentRow> {
 		case contextInfo: return row.getContextInfo();
 		case path: return row.getPath();
 		case showPath: return row.getShowPath();
-		case author: return row.getAuthor() != null ? row.getAuthor().getUser().getFirstName() + " " + row.getAuthor().getUser().getLastName() : null;
+		case author: return row.getAuthor();
 		case revision: return row.isRevision();
 		case fileCategory: return row.getFileCategory();
 		case fileType: return row.getFileType();
@@ -91,7 +91,7 @@ implements SortableFlexiTableDataModel<LargeFilesTableContentRow> {
 		case pubDate: return returnNullSafeDate(row.getPubDate());
 		case language: return row.getLanguage();
 		case locked: return row.isLocked();
-		case lockedBy: return row.getLockedBy() != null ? row.getLockedBy().getUser().getFirstName() + " " + row.getLockedBy().getUser().getLastName() : null;
+		case lockedBy: return row.getLockedBy();
 		case lockedAt: return returnNullSafeDate(row.getLockedAt());
 		case revisionComment: return row.getRevisionComment();
 		case revisionNr: return row.getRevisionNr();
diff --git a/src/main/java/org/olat/user/ui/UserDisplayNameCellRenderer.java b/src/main/java/org/olat/user/ui/UserDisplayNameCellRenderer.java
new file mode 100644
index 00000000000..add40df5730
--- /dev/null
+++ b/src/main/java/org/olat/user/ui/UserDisplayNameCellRenderer.java
@@ -0,0 +1,65 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.user.ui;
+
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
+import org.olat.core.gui.render.Renderer;
+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.id.Identity;
+import org.olat.core.id.User;
+import org.olat.user.UserManager;
+
+/**
+ * 
+ * Initial date: 19 Feb 2021<br>
+ * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
+ *
+ */
+public class UserDisplayNameCellRenderer implements FlexiCellRenderer {
+	
+	private static final UserDisplayNameCellRenderer INSTANCE = new UserDisplayNameCellRenderer();
+	
+	private final UserManager userManager;
+	
+	public static UserDisplayNameCellRenderer get() {
+		return INSTANCE;
+	}
+	
+	private UserDisplayNameCellRenderer() {
+		this.userManager = CoreSpringFactory.getImpl(UserManager.class);
+	}
+
+	@Override
+	public void render(Renderer renderer, StringOutput target, Object cellValue, int row, FlexiTableComponent source,
+			URLBuilder ubu, Translator translator) {
+		if (cellValue instanceof Identity) {
+			String userDisplayName = userManager.getUserDisplayName(((Identity)cellValue).getKey());
+			target.append(userDisplayName);
+		} else if (cellValue instanceof User) {
+			String userDisplayName = userManager.getUserDisplayName(((User)cellValue));
+			target.append(userDisplayName);
+		}
+	}
+
+}
-- 
GitLab