From 6bde3312441e9eeab10d2a29dd34e87f5f315c02 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 29 Apr 2016 19:29:40 +0200
Subject: [PATCH] OO-2011: (re)implements activate method in user management

---
 .../olat/admin/UserAdminMainController.java   | 16 ++++++----
 .../ExtendedIdentitiesTableDataModel.java     |  4 +++
 .../user/UsermanagerUserSearchController.java | 32 +++++++++++++------
 .../bulkChange/UserBulkChangeManager.java     |  6 ++--
 4 files changed, 40 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/olat/admin/UserAdminMainController.java b/src/main/java/org/olat/admin/UserAdminMainController.java
index d6b1ad922d3..9fb4d046de1 100644
--- a/src/main/java/org/olat/admin/UserAdminMainController.java
+++ b/src/main/java/org/olat/admin/UserAdminMainController.java
@@ -105,6 +105,7 @@ public class UserAdminMainController extends MainLayoutBasicController implement
 	private LayoutMain3ColsController columnLayoutCtr;
 	private Controller contentCtr;
 	private UserAdminController userAdminCtr;
+	private UsermanagerUserSearchController userSearchCtrl;
 	private VelocityContainer rolesVC, queriesVC;
 	
 	private String activatePaneInDetailView = null;
@@ -284,16 +285,19 @@ public class UserAdminMainController extends MainLayoutBasicController implement
 			return createAndLockDirectUserDeleteController(ureq, bwControl);
 		} 		
 		
-		//these nodes re-create (not stateful) content Controller (contentCtrl)
-		removeAsListenerAndDispose(contentCtr);
+		
 		if (uobject.equals("usearch") || uobject.equals("useradmin")) {
-			activatePaneInDetailView = null;
-			contentCtr = new UsermanagerUserSearchController(ureq, bwControl);
+			if(contentCtr != userSearchCtrl) {
+				activatePaneInDetailView = null;
+				contentCtr = userSearchCtrl = new UsermanagerUserSearchController(ureq, bwControl);
+				listenTo(contentCtr);
+			}
 			addToHistory(ureq, bwControl);
-			listenTo(contentCtr);
 			return contentCtr.getInitialComponent();
 		}
-		else if (uobject.equals("ucreate")) {
+		//these nodes re-create (not stateful) content Controller (contentCtrl)
+		removeAsListenerAndDispose(contentCtr);
+		if (uobject.equals("ucreate")) {
 			activatePaneInDetailView = null;
 			boolean canCreateOLATPassword = false;
 			if (ureq.getUserSession().getRoles().isOLATAdmin()) {
diff --git a/src/main/java/org/olat/admin/user/ExtendedIdentitiesTableDataModel.java b/src/main/java/org/olat/admin/user/ExtendedIdentitiesTableDataModel.java
index 0730ece9c25..dec74058be6 100644
--- a/src/main/java/org/olat/admin/user/ExtendedIdentitiesTableDataModel.java
+++ b/src/main/java/org/olat/admin/user/ExtendedIdentitiesTableDataModel.java
@@ -150,6 +150,10 @@ public class ExtendedIdentitiesTableDataModel extends DefaultTableDataModel<Iden
 	public int getColumnCount() {
 		return colCount + 1;
 	}
+	
+	public boolean contains(Identity identity) {
+		return objects.contains(identity);
+	}
 
 	/**
 	 * @param selection
diff --git a/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java b/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java
index 5efe6cc6dab..b93c15e2c50 100644
--- a/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java
+++ b/src/main/java/org/olat/admin/user/UsermanagerUserSearchController.java
@@ -126,7 +126,7 @@ public class UsermanagerUserSearchController extends BasicController implements
 	private UsermanagerUserSearchForm searchform;
 	private TableController tableCtr;
 	private List<Identity> identitiesList, selectedIdentities;
-	private ArrayList<String> notUpdatedIdentities = new ArrayList<String>();
+	private List<String> notUpdatedIdentities = new ArrayList<String>();
 	private ExtendedIdentitiesTableDataModel tdm;
 	private Identity foundIdentity = null;
 	private ContactFormController contactCtr;
@@ -303,15 +303,29 @@ public class UsermanagerUserSearchController extends BasicController implements
 		
 		if(entries == null || entries.isEmpty()) return;
 		
-		Long identityKey = entries.get(0).getOLATResourceable().getResourceableId();
-		if(identityKey != null && identitiesList != null) {
-			for(Identity identity:identitiesList) {
-				if(identityKey.equals(identity.getKey())) {
-					foundIdentity = identity;
-					fireEvent(ureq, new SingleIdentityChosenEvent(foundIdentity));
-					entries.remove(0);
-					break;
+		for(int i=0; i<entries.size(); i++) {
+			String resourceType = entries.get(i).getOLATResourceable().getResourceableTypeName();
+			if("Identity".equalsIgnoreCase(resourceType)) {
+				Long identityKey = entries.get(i).getOLATResourceable().getResourceableId();
+				Identity found = null;
+				if(tdm != null) {
+					for(Identity identity:tdm.getObjects()) {
+						if(identityKey.equals(identity.getKey())) {
+							found = identity;
+						}
+					}
+				}
+				
+				if(found == null) {
+					found = securityManager.loadIdentityByKey(identityKey);
+					if(found == null) return;
+					
+					List<Identity> foundIdentites = new ArrayList<>();
+					foundIdentites.add(found);
+					initUserListCtr(ureq, foundIdentites, 0);
 				}
+				foundIdentity = found;
+				fireEvent(ureq, new SingleIdentityChosenEvent(found));
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
index 9a4cef2739d..1997655f7f7 100644
--- a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
+++ b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeManager.java
@@ -21,9 +21,9 @@ package org.olat.admin.user.bulkChange;
 
 import java.io.StringWriter;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.Properties;
 
 import org.apache.velocity.VelocityContext;
@@ -101,8 +101,8 @@ public class UserBulkChangeManager extends BasicManager {
 		return INSTANCE;
 	}
 
-	public void changeSelectedIdentities(List<Identity> selIdentities, HashMap<String, String> attributeChangeMap,
-			HashMap<String, String> roleChangeMap, ArrayList<String> notUpdatedIdentities, boolean isAdministrativeUser, List<Long> ownGroups, List<Long> partGroups,
+	public void changeSelectedIdentities(List<Identity> selIdentities, Map<String, String> attributeChangeMap,
+			Map<String, String> roleChangeMap, List<String> notUpdatedIdentities, boolean isAdministrativeUser, List<Long> ownGroups, List<Long> partGroups,
 			Translator trans, Identity addingIdentity) {
 
 		Translator transWithFallback = UserManager.getInstance().getPropertyHandlerTranslator(trans);
-- 
GitLab