From e15d6638659aa3f35c9ff6563061733aafca84d9 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 9 Feb 2018 08:38:57 +0100
Subject: [PATCH] OO-3274: fix more issues with deleting taxonomy level, alone
 or concurrently

---
 .../ui/TaxonomyLevelOverviewController.java   |  4 +--
 .../ui/TaxonomyLevelTypesEditController.java  |  2 +-
 .../ui/TaxonomyTreeTableController.java       | 25 +++++++++++++------
 .../ui/_i18n/LocalStrings_de.properties       |  3 +++
 .../ui/_i18n/LocalStrings_en.properties       |  3 +++
 .../ui/_i18n/LocalStrings_fr.properties       |  4 ++-
 6 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java
index 65b98b210d8..3b57a959d98 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java
@@ -129,8 +129,6 @@ public class TaxonomyLevelOverviewController extends BasicController implements
 	protected void doDispose() {
 		//
 	}
-	
-	
 
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
@@ -159,7 +157,7 @@ public class TaxonomyLevelOverviewController extends BasicController implements
 				fireEvent(ureq, Event.CANCELLED_EVENT);
 			}
 		} else if(confirmDeleteCtrl == source) {
-			if(event == Event.DONE_EVENT) {
+			if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT || event instanceof DeleteTaxonomyLevelEvent) {
 				fireEvent(ureq, new DeleteTaxonomyLevelEvent());
 			}
 			cmc.deactivate();
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelTypesEditController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelTypesEditController.java
index f4f50e20e4d..7579dbaeb50 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelTypesEditController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelTypesEditController.java
@@ -212,7 +212,7 @@ public class TaxonomyLevelTypesEditController extends FormBasicController implem
 		TaxonomyLevelType type = taxonomyService.getTaxonomyLevelType(row);
 		if(type == null) {
 			tableEl.reloadData();
-			showWarning("repositoryentry.not.existing");
+			showWarning("warning.taxonomy.level.type.deleted");
 		} else {
 			toolsCtrl = new ToolsController(ureq, getWindowControl(), row, type);
 			listenTo(toolsCtrl);
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
index 90a431570c4..773385b2476 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
@@ -221,7 +221,10 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 			for(TaxonomyLevelRow row:rows) {
 				if(levelKey.equals(row.getKey())) {
 					List<ContextEntry> subEntries = entries.subList(1, entries.size());
-					doSelectTaxonomyLevel(ureq, row).activate(ureq, subEntries, entries.get(0).getTransientState());
+					TaxonomyLevelOverviewController ctrl = doSelectTaxonomyLevel(ureq, row);
+					if(ctrl != null) {
+						ctrl.activate(ureq, subEntries, entries.get(0).getTransientState());
+					}
 					break;
 				}
 			}
@@ -380,12 +383,18 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 	}
 
 	private TaxonomyLevelOverviewController doSelectTaxonomyLevel(UserRequest ureq, TaxonomyLevel taxonomyLevel) {
-		OLATResourceable ores = OresHelper.createOLATResourceableInstance("TaxonomyLevel", taxonomyLevel.getKey());
-		WindowControl bwControl = addToHistory(ureq, ores, null);
-		TaxonomyLevelOverviewController detailsLevelCtrl = new TaxonomyLevelOverviewController(ureq, bwControl, taxonomyLevel);
-		listenTo(detailsLevelCtrl);
-		stackPanel.pushController(taxonomyLevel.getDisplayName(), detailsLevelCtrl);
-		return detailsLevelCtrl;
+		if(taxonomyLevel == null) {
+			showWarning("warning.taxonomy.level.deleted");
+			loadModel(false, false);
+			return null;
+		} else {
+			OLATResourceable ores = OresHelper.createOLATResourceableInstance("TaxonomyLevel", taxonomyLevel.getKey());
+			WindowControl bwControl = addToHistory(ureq, ores, null);
+			TaxonomyLevelOverviewController detailsLevelCtrl = new TaxonomyLevelOverviewController(ureq, bwControl, taxonomyLevel);
+			listenTo(detailsLevelCtrl);
+			stackPanel.pushController(taxonomyLevel.getDisplayName(), detailsLevelCtrl);
+			return detailsLevelCtrl;
+		}
 	}
 	
 	private void doNewLevel(UserRequest ureq) {
@@ -410,7 +419,7 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 		TaxonomyLevel level = taxonomyService.getTaxonomyLevel(row);
 		if(level == null) {
 			tableEl.reloadData();
-			showWarning("repositoryentry.not.existing");
+			showWarning("warning.taxonomy.level.deleted");
 		} else {
 			toolsCtrl = new ToolsController(ureq, getWindowControl(), row, level);
 			listenTo(toolsCtrl);
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_de.properties
index 99f760944e6..4ec9b8b6561 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_de.properties
@@ -133,3 +133,6 @@ warning.atleastone.level=Sie m\u00FCssen mindestens eine Ebene w\u00E4hlen dass
 warning.atleastone.level.competence=Sie m\u00FCssen mindestens eine Ebene w\u00E4hlen.
 warning.delete.level=Die Ebene darf nicht gel\u00F6scht werden. Sie wird noch benutzt.
 warning.delete.level.type=Der Ebenentype wurde nicht gel\u00F6scht. Er ist noch benutzt.
+warning.taxonomy.level.deleted=Diese Taxonomieebene ist nicht mehr verf\u00FCgbar.
+warning.taxonomy.level.type.deleted=Dieser Ebenentype ist nicht mehr verf\u00FCgbar.
+
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_en.properties
index deb3aa8c706..689de6e984c 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_en.properties
@@ -133,3 +133,6 @@ warning.atleastone.level=You must at least one taxonomy level you can edit.
 warning.atleastone.level.competence=You must at least one taxonomy level.
 warning.delete.level=The level cannot be deleted because it is still in use.
 warning.delete.level.type=The level type "{0}" was not deleted because it is still in use.
+warning.taxonomy.level.deleted=This taxonomy level is no longer available.
+warning.taxonomy.level.type.deleted=This level type is no longer available.
+
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_fr.properties
index c6034489631..6674ac7042b 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/taxonomy/ui/_i18n/LocalStrings_fr.properties
@@ -132,4 +132,6 @@ type.taxonomy.level=Attribuer un type de niveau
 warning.atleastone.level=Vous devez s\u00E9lectionner au moins un niveau que vous pouvez \u00E9diter.
 warning.atleastone.level.competence=Vous devez s\u00E9lectionner au moins un niveau.
 warning.delete.level=Ce niveau de la taxonomie ne peut pas \u00EAtre effac\u00E9 car il est encore utilis\u00E9.
-warning.delete.level.type=Le niveau de la taxonomie n'a pas \u00E9t\u00E9 effac\u00E9 car il est encore utilis\u00E9.
+warning.delete.level.type=Le type de niveau de la taxonomie n'a pas \u00E9t\u00E9 effac\u00E9 car il est encore utilis\u00E9.
+warning.taxonomy.level.deleted=La niveau de la taxonomie n'est plus disponible.
+warning.taxonomy.level.type.deleted=Le type de niveau n'est plus disponible.
-- 
GitLab