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