From 4ed597fb6c2fac24bc4a11752a4608514bb949a8 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 11 Jan 2012 17:37:57 +0100
Subject: [PATCH] OO-44: make group management robust to concurrent
 view/edit/delete

---
 .../org/olat/group/ui/BusinessGroupTableModel.java     |  5 ++++-
 .../java/org/olat/group/ui/main/BGMainController.java  | 10 +++++++++-
 .../group/ui/main/BusinessGroupTableModelWithType.java | 10 ++++++++++
 .../group/ui/management/BGManagementController.java    |  8 ++++++--
 4 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/group/ui/BusinessGroupTableModel.java b/src/main/java/org/olat/group/ui/BusinessGroupTableModel.java
index f5646ba4362..eaf48cfc649 100644
--- a/src/main/java/org/olat/group/ui/BusinessGroupTableModel.java
+++ b/src/main/java/org/olat/group/ui/BusinessGroupTableModel.java
@@ -91,5 +91,8 @@ public class BusinessGroupTableModel extends DefaultTableDataModel {
 	public BusinessGroup getBusinessGroupAt(int row) {
 		return (BusinessGroup) objects.get(row);
 	}
-
+	
+	public void removeBusinessGroup(BusinessGroup businessGroup) {
+		objects.remove(businessGroup);
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/group/ui/main/BGMainController.java b/src/main/java/org/olat/group/ui/main/BGMainController.java
index a8671243049..826863c41ba 100644
--- a/src/main/java/org/olat/group/ui/main/BGMainController.java
+++ b/src/main/java/org/olat/group/ui/main/BGMainController.java
@@ -318,7 +318,15 @@ public class BGMainController extends MainLayoutBasicController implements Activ
 			TableEvent te = (TableEvent) event;
 			String actionid = te.getActionId();
 			int rowid = te.getRowId();
-			currBusinessGroup = groupListModel.getBusinessGroupAt(rowid);
+			BusinessGroup selectedBusinessGroup = groupListModel.getBusinessGroupAt(rowid);
+			//reload the group
+			currBusinessGroup = BusinessGroupManagerImpl.getInstance().loadBusinessGroup(selectedBusinessGroup.getKey(), false);
+			if(currBusinessGroup == null) {
+				groupListModel.removeBusinessGroup(selectedBusinessGroup);
+				groupListCtr.modelChanged();
+				return;
+			}
+			
 			String trnslP = currBusinessGroup.getName();
 
 			if (actionid.equals(TABLE_ACTION_LAUNCH)) {
diff --git a/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java b/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java
index 128e859a860..c2aa075ae9a 100644
--- a/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java
+++ b/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java
@@ -119,4 +119,14 @@ public class BusinessGroupTableModelWithType extends DefaultTableDataModel imple
 		BGTableItem wrapped = (BGTableItem)objects.get(row);
 		return wrapped.getBusinessGroup();
 	}
+	
+	public void removeBusinessGroup(BusinessGroup bg) {
+		for(int i=objects.size(); i-->0; ) {
+			BGTableItem wrapped = (BGTableItem)objects.get(i);
+			if(bg.equals(wrapped.getBusinessGroup())) {
+				objects.remove(i);
+				return;
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/group/ui/management/BGManagementController.java b/src/main/java/org/olat/group/ui/management/BGManagementController.java
index 1278b32c295..83a354bd1fb 100644
--- a/src/main/java/org/olat/group/ui/management/BGManagementController.java
+++ b/src/main/java/org/olat/group/ui/management/BGManagementController.java
@@ -572,8 +572,12 @@ public class BGManagementController extends MainLayoutBasicController implements
 				TableEvent te = (TableEvent) event;
 				String actionid = te.getActionId();
 				int rowid = te.getRowId();
-				this.currentGroup = groupListModel.getBusinessGroupAt(rowid);
-				if (actionid.equals(CMD_GROUP_EDIT)) {
+				BusinessGroup selectedGroup = groupListModel.getBusinessGroupAt(rowid);
+				currentGroup = BusinessGroupManagerImpl.getInstance().loadBusinessGroup(selectedGroup.getKey(), false);
+				if(currentGroup == null) {
+					groupListModel.removeBusinessGroup(selectedGroup);
+					groupListCtr.modelChanged();
+				} else if (actionid.equals(CMD_GROUP_EDIT)) {
 					doGroupEdit(ureq);
 				} else if (actionid.equals(CMD_GROUP_RUN)) {
 					doGroupRun(ureq);
-- 
GitLab