From 1c437cd3cd4c9840dd2c260748988ec241f92a00 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 25 Jun 2013 14:57:46 +0200
Subject: [PATCH] OO-632: implement message to warn about users which has not
 been found in import process

---
 .../member/MembersOverviewController.java     |  3 +
 .../member/_i18n/LocalStrings_de.properties   |  1 +
 .../member/_i18n/LocalStrings_en.properties   |  1 +
 ...ortMemberOverviewIdentitiesController.java | 75 ++++++++-----------
 .../member/wizard/_content/warn_notfound.html |  3 +
 .../wizard/_i18n/LocalStrings_de.properties   |  3 +-
 .../wizard/_i18n/LocalStrings_en.properties   |  1 +
 .../edit/BusinessGroupMembersController.java  |  3 +
 .../ui/edit/_i18n/LocalStrings_de.properties  |  2 +-
 .../ui/edit/_i18n/LocalStrings_en.properties  |  1 +
 .../ui/main/_i18n/LocalStrings_de.properties  |  2 +-
 .../ui/main/_i18n/LocalStrings_en.properties  |  1 +
 .../RepositoryMembersController.java          |  3 +
 .../_i18n/LocalStrings_de.properties          |  3 +-
 .../_i18n/LocalStrings_en.properties          |  1 +
 15 files changed, 54 insertions(+), 49 deletions(-)
 create mode 100644 src/main/java/org/olat/course/member/wizard/_content/warn_notfound.html

diff --git a/src/main/java/org/olat/course/member/MembersOverviewController.java b/src/main/java/org/olat/course/member/MembersOverviewController.java
index 5a73423b33c..d0023a92a01 100644
--- a/src/main/java/org/olat/course/member/MembersOverviewController.java
+++ b/src/main/java/org/olat/course/member/MembersOverviewController.java
@@ -255,6 +255,9 @@ public class MembersOverviewController extends BasicController implements Activa
 			@Override
 			public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) {
 				addMembers(ureq, runContext);
+				if(runContext.containsKey("notFounds")) {
+					showWarning("user.notfound", runContext.get("notFounds").toString());
+				}
 				return StepsMainRunController.DONE_MODIFIED;
 			}
 		};
diff --git a/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties
index e530215d8c0..89c368992d4 100644
--- a/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/member/_i18n/LocalStrings_de.properties
@@ -77,5 +77,6 @@ table.header.tutorsCount=Betreuer
 table.header.waitingList=Warteliste
 tutors=Betreuer
 tutors.infos=Betreuer haben Zugang zum Coaching- und Bewertungswerkzeug f\u00FCr Kursteilnehmer.<br/>Gruppenbetreuer haben Zugang zum Coaching- und Bewertungswerkzeug ihrer Gruppenteilnehmer.
+user.notfound=$org.olat.group.ui.main\:user.notfound
 waiting.infos=Personen auf der Gruppenwarteliste haben weder Zugang zum Kurs noch zu der Gruppe. Der Zugang wird erst freigegeben wenn gen\u00FCgend Platz vorhanden ist oder die Person von Hand umgeteilt wurde.
 waitinglist=Warteliste
diff --git a/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties
index cf24b7acb39..dc57a953736 100644
--- a/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/member/_i18n/LocalStrings_en.properties
@@ -76,5 +76,6 @@ table.header.tutorsCount=Coaches
 table.header.waitingList=Waiting list
 tutors=Coaches
 tutors.infos=Coaches have access to the coaching and assessment  tool for course participants.<br/>Group coaches have access to the coaching and assessment tool for their respective group participants.
+user.notfound=$org.olat.group.ui.main\:user.notfound
 waiting.infos=People on the waiting list don't have access to the group or the course. Access to the group is only granted once free slots are available or the group coach reallocates participants manually.
 waitinglist=Waiting list
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
index dd480600858..2f2476a0a91 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
@@ -20,7 +20,6 @@
 package org.olat.course.member.wizard;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 import org.olat.admin.user.UserTableDataModel;
@@ -33,6 +32,7 @@ import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.impl.Form;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
@@ -55,6 +55,7 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 	private static final String usageIdentifyer = UserTableDataModel.class.getCanonicalName();
 	
 	private List<Identity> oks;
+	private List<String> notfounds;
 	private boolean isAdministrativeUser;
 	
 	private final UserManager userManager;
@@ -70,11 +71,11 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 		oks = null;
 		if(containsRunContextKey("logins")) {
 			String logins = (String)runContext.get("logins");
-			oks = loadModel(logins);
+			loadModel(logins);
 		} else if(containsRunContextKey("keys")) {
 			@SuppressWarnings("unchecked")
 			List<String> keys = (List<String>)runContext.get("keys");
-			oks = loadModel(keys);
+			loadModel(keys);
 		}
 
 		isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
@@ -84,6 +85,21 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 	
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		if(notfounds != null && !notfounds.isEmpty()) {
+			String page = velocity_root + "/warn_notfound.html";
+			FormLayoutContainer warnLayout = FormLayoutContainer.createCustomFormLayout("warnNotFounds", getTranslator(), page);
+			warnLayout.setRootForm(mainForm);
+			formLayout.add(warnLayout);
+			
+			StringBuffer sb = new StringBuffer();
+			for(String notfound:notfounds) {
+				if(sb.length() > 0) sb.append(", ");
+				sb.append(notfound);
+			}
+			String msg = translate("user.notfound", new String[]{sb.toString()});
+			addToRunContext("notFounds", sb.toString());
+			warnLayout.contextPut("notFounds", msg);
+		}
 		
 		//add the table
 		FlexiTableColumnModel tableColumnModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
@@ -108,14 +124,11 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 		uifactory.addTableElement("users", userTableModel, myTrans, formLayout);
 	}
 	
-	private List<Identity> loadModel(List<String> keys) {
-		List<Identity> existIdents = Collections.emptyList();//securityManager.getIdentitiesOfSecurityGroup(securityGroup);
-
-		List<Identity> oks = new ArrayList<Identity>();
+	private void loadModel(List<String> keys) {
+		oks = new ArrayList<Identity>();
 		List<String> isanonymous = new ArrayList<String>();
-		List<String> notfounds = new ArrayList<String>();
-		List<String> alreadyin = new ArrayList<String>();
-
+		notfounds = new ArrayList<String>();
+		
 		SecurityGroup anonymousSecGroup = securityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS);
 		for (String identityKey : keys) {
 			Identity ident = securityManager.loadIdentityByKey(Long.parseLong(identityKey));
@@ -123,31 +136,16 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 				notfounds.add(identityKey);
 			} else if (securityManager.isIdentityInSecurityGroup(ident, anonymousSecGroup)) {
 				isanonymous.add(identityKey);
-			} else {
-				// check if already in group
-				boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident);
-				if (inGroup) {
-					// added to warning: already in group
-					alreadyin.add(ident.getName());
-				} else {
-					// ok to add -> preview (but filter duplicate entries)
-					if (!PersistenceHelper.containsPersistable(oks, ident)) {
-						oks.add(ident);
-					}
-				}
+			} else if (!PersistenceHelper.containsPersistable(oks, ident)) {
+				oks.add(ident);
 			}
 		}
-		
-		return oks;
 	}
 	
-	private List<Identity> loadModel(String inp) {
-		List<Identity> existIdents = Collections.emptyList();//securityManager.getIdentitiesOfSecurityGroup(securityGroup);
-
-		List<Identity> oks = new ArrayList<Identity>();
+	private void loadModel(String inp) {
+		oks = new ArrayList<Identity>();
 		List<String> isanonymous = new ArrayList<String>();
-		List<String> notfounds = new ArrayList<String>();
-		List<String> alreadyin = new ArrayList<String>();
+		notfounds = new ArrayList<String>();
 
 		SecurityGroup anonymousSecGroup = securityManager.findSecurityGroupByName(Constants.GROUP_ANONYMOUS);
 
@@ -160,25 +158,12 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 					notfounds.add(username);
 				} else if (securityManager.isIdentityInSecurityGroup(ident, anonymousSecGroup)) {
 					isanonymous.add(username);
-				} else {
-					// check if already in group
-					boolean inGroup = PersistenceHelper.containsPersistable(existIdents, ident);
-					if (inGroup) {
-						// added to warning: already in group
-						alreadyin.add(ident.getName());
-					} else {
-						// ok to add -> preview (but filter duplicate entries)
-						if (!PersistenceHelper.containsPersistable(oks, ident)) {
-							oks.add(ident);
-						}
-					}
+				} else if (!PersistenceHelper.containsPersistable(oks, ident)) {
+					oks.add(ident);
 				}
 			}
 		}
-		
-		return oks;
 	}
-	
 
 	public boolean validate() {
 		return true;
diff --git a/src/main/java/org/olat/course/member/wizard/_content/warn_notfound.html b/src/main/java/org/olat/course/member/wizard/_content/warn_notfound.html
new file mode 100644
index 00000000000..584bb838008
--- /dev/null
+++ b/src/main/java/org/olat/course/member/wizard/_content/warn_notfound.html
@@ -0,0 +1,3 @@
+<div class="b_warning">
+	$notFounds
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_de.properties
index e1834de0071..a21d4f57d5c 100644
--- a/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_de.properties
@@ -6,4 +6,5 @@ import.permission.title=Berechtigungen
 import.mail.title=E-Mail-Benachrichtigung
 form.names.example=test01<br/>author02<br/>
 form.addusers=Benutzername
-table.user.login=$org.olat.group.ui.main\:table.header.login
\ No newline at end of file
+table.user.login=$org.olat.group.ui.main\:table.header.login
+user.notfound=$org.olat.group.ui.main\:user.notfound
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_en.properties
index 4d5a8bd565c..cbca7b57a7d 100644
--- a/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/member/wizard/_i18n/LocalStrings_en.properties
@@ -7,3 +7,4 @@ import.choose.title=Indicate user name
 import.mail.title=E-Mail notification
 import.permission.title=Rights
 table.user.login=$org.olat.group.ui.main\:table.header.login
+user.notfound=$org.olat.group.ui.main\:user.notfound
diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java
index 60b8642c355..63b600599d9 100644
--- a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java
+++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java
@@ -180,6 +180,9 @@ public class BusinessGroupMembersController extends BasicController {
 			@Override
 			public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) {
 				addMembers(ureq, runContext);
+				if(runContext.containsKey("notFounds")) {
+					showWarning("user.notfound", runContext.get("notFounds").toString());
+				}
 				return StepsMainRunController.DONE_MODIFIED;
 			}
 		};
diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties
index 01af785c5a0..cdfcaf89f08 100644
--- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_de.properties
@@ -101,7 +101,7 @@ resources.add=Kurs einbinden
 resources.add.title=Kurs ausw\u00E4hlen
 resources.noresources=Diese Gruppe wird in keinem Kurs verwendet. Bitte w\u00E4hlen Sie "Kurs hinzuf\u00FCgen" um diese Gruppe in einem Kurs zu verwenden.
 resources.remove=entfernen
-
+user.notfound=$org.olat.group.ui.main\:user.notfound
 
 dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail
 add.member=$org.olat.group.ui.main\:add.member
diff --git a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties
index b76171338b6..a2ac81c9449 100644
--- a/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/group/ui/edit/_i18n/LocalStrings_en.properties
@@ -128,3 +128,4 @@ table.header.role=$org.olat.group.ui.main\:table.header.role
 table.header.tutors=org.olat.group.ui.main\:table.header.tutors
 table.header.tutorsCount=$org.olat.group.ui.main\:table.header.tutorsCount
 table.header.waitingList=$org.olat.group.ui.main\:table.header.waitingList
+user.notfound=$org.olat.group.ui.main\:user.notfound
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties
index c6ce0385810..5927f5dbf02 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties
@@ -39,7 +39,7 @@ menu.opengroups=Ver\u00F6ffentlichte Gruppen
 menu.opengroups.alt=Arbeitsgruppen in die \u00F6ffentlich sind und an denen ich teilnehmen kann.
 msg.atleastone=Es muss mindestens ein Betreuer in der Gruppe eingetragen sein.
 msg.alleastone.editable.group=Sie m\u00FCssen mindestens eine Gruppe wählen, die Sie besitzen.
-
+user.notfound=Folgende Benutzer wurden nicht gefunden: {0}
 
 open.header=Öffentliche Gruppen
 open.intro=In dieser Liste finden Sie alle ver\u00F6ffentlichten Gruppen denen Sie beitreten k\u00F6nnen.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties
index e45b5c333d9..6bf7978efed 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties
@@ -163,3 +163,4 @@ tools.add.header=Create
 tools.delete.header=Delete
 tools.delete.unusedgroup=Groups
 users.group=Manage members
+user.notfound=The following users has not been found: {0}
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryMembersController.java b/src/main/java/org/olat/repository/controllers/RepositoryMembersController.java
index 61c9847b7c1..0185d756e86 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryMembersController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryMembersController.java
@@ -138,6 +138,9 @@ public class RepositoryMembersController extends AbstractMemberListController {
 			@Override
 			public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) {
 				addMembers(ureq, runContext);
+				if(runContext.containsKey("notFounds")) {
+					showWarning("user.notfound", runContext.get("notFounds").toString());
+				}
 				return StepsMainRunController.DONE_MODIFIED;
 			}
 		};
diff --git a/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_de.properties
index 8710eb14772..e94c3c84cdb 100644
--- a/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_de.properties
@@ -28,4 +28,5 @@ table.header.waitingList=$org.olat.group.ui.main\:table.header.waitingList
 dialog.modal.bg.send.mail=$org.olat.group.ui.main\:dialog.modal.bg.send.mail
 dialog.modal.bg.leave.text=$org.olat.group.ui.main\:dialog.modal.bg.leave.text
 nomembers=XXX No members
-mail.member=$org.olat.group.ui.main\:mail.member
\ No newline at end of file
+mail.member=$org.olat.group.ui.main\:mail.member
+user.notfound=Folgende Benutzer wurden nicht gefunden: {0}
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_en.properties
index 70f714b66ab..db72d9d9034 100644
--- a/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/repository/controllers/_i18n/LocalStrings_en.properties
@@ -29,3 +29,4 @@ table.header.role=$org.olat.group.ui.main\:table.header.role
 table.header.tutors=$org.olat.group.ui.main\:table.header.tutors
 table.header.tutorsCount=$org.olat.group.ui.main\:table.header.tutorsCount
 table.header.waitingList=$org.olat.group.ui.main\:table.header.waitingList
+user.notfound=The following users has not been found: {0}
\ No newline at end of file
-- 
GitLab