From a952a116ffee3f514935c49d57fff652b8dd6883 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 18 Oct 2013 10:35:02 +0200
Subject: [PATCH] OO-809: better case handling by import of users in group
 (patch 2 of S. Clemenz)

---
 ...ortMemberOverviewIdentitiesController.java | 55 +++++++++----------
 1 file changed, 26 insertions(+), 29 deletions(-)

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 aca90f630ad..92554f10aca 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMemberOverviewIdentitiesController.java
@@ -44,7 +44,6 @@ import org.olat.core.gui.control.generic.wizard.StepsRunContext;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.UserConstants;
-import org.olat.core.util.mail.MailHelper;
 import org.olat.user.UserManager;
 import org.olat.user.propertyhandlers.UserPropertyHandler;
 
@@ -93,7 +92,7 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 			warnLayout.setRootForm(mainForm);
 			formLayout.add(warnLayout);
 			
-			StringBuffer sb = new StringBuffer();
+			StringBuilder sb = new StringBuilder();
 			for(String notfound:notfounds) {
 				if(sb.length() > 0) sb.append(", ");
 				sb.append(notfound);
@@ -160,45 +159,43 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 			}
 		}
 		
-		//search by names
-		List<Identity> identities = securityManager.findIdentitiesByName(identList);
-		for(Identity identity:identities) {
-			identList.remove(identity.getName());
+		//search by institutionalUserIdentifier, case sensitive
+		List<Identity> institutIdentities = securityManager.findIdentitiesByNumber(identList);
+		for(Identity identity:institutIdentities) {
+			String userIdent = identity.getUser().getProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, null);
+			if(userIdent != null) {
+				identList.remove(userIdent);
+			}
 			if (!PersistenceHelper.containsPersistable(oks, identity)
 					&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
 				oks.add(identity);
 			}
 		}
-		
-		//search by email
-		List<String> emails = new ArrayList<String>();
-		for(String ident:identList) {
-			if(MailHelper.isValidEmailAddress(ident)) {
-				emails.add(ident);
+		// make a lowercase copy of identList for processing username and email
+		List<String> identListLowercase = new ArrayList<String>(identList.size());
+		for (String ident:identList) {
+			identListLowercase.add(ident.toLowerCase());
+		}
+		//search by names, must be lower case
+		List<Identity> identities = securityManager.findIdentitiesByName(identListLowercase);
+		for(Identity identity:identities) {
+			identListLowercase.remove(identity.getName());
+			if (!PersistenceHelper.containsPersistable(oks, identity)
+					&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
+				oks.add(identity);
 			}
 		}
-		List<Identity> mailIdentities = userManager.findIdentitiesByEmail(emails);
+		
+		//search by email, case insensitive
+		List<Identity> mailIdentities = userManager.findIdentitiesByEmail(identListLowercase);
 		for(Identity identity:mailIdentities) {
 			String email = identity.getUser().getProperty(UserConstants.EMAIL, null);
 			if(email != null) {
-				identList.remove(email);
+				identListLowercase.remove(email.toLowerCase());
 			}
 			String institutEmail = identity.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null);
 			if(institutEmail != null) {
-				identList.remove(institutEmail);
-			}
-			if (!PersistenceHelper.containsPersistable(oks, identity)
-					&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
-				oks.add(identity);
-			}
-		}
-		
-		//search by institutionalUserIdentifier
-		List<Identity> institutIdentities = securityManager.findIdentitiesByNumber(identList);
-		for(Identity identity:institutIdentities) {
-			String userIdent = identity.getUser().getProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, null);
-			if(userIdent != null) {
-				identList.remove(userIdent);
+				identListLowercase.remove(institutEmail.toLowerCase());
 			}
 			if (!PersistenceHelper.containsPersistable(oks, identity)
 					&& !securityManager.isIdentityInSecurityGroup(identity, anonymousSecGroup)) {
@@ -206,7 +203,7 @@ public class ImportMemberOverviewIdentitiesController extends StepFormBasicContr
 			}
 		}
 		
-		notfounds.addAll(identList);
+		notfounds.addAll(identListLowercase);
 	}
 
 	public boolean validate() {
-- 
GitLab