From 904fa04e697d4ded30173c82b65246029e12dff9 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 21 Sep 2020 13:30:44 +0200
Subject: [PATCH] OO-4878: show a message if the lock cannot be take over

---
 .../htmleditor/HTMLEditorController.java      | 32 +++++++++++++------
 .../_i18n/LocalStrings_de.properties          |  1 +
 .../_i18n/LocalStrings_en.properties          |  1 +
 .../org/olat/core/util/coordinate/Locker.java | 19 -----------
 4 files changed, 24 insertions(+), 29 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java
index 05fbfbc6010..46e4587bceb 100644
--- a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java
+++ b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java
@@ -218,18 +218,12 @@ public class HTMLEditorController extends FormBasicController implements Activat
 
 			lock = CoordinatorManager.getInstance().getCoordinator().getLocker()
 					.acquireLock(lockResourceable, getIdentity(), lockToken, getWindow());
-			VelocityContainer vc = (VelocityContainer) flc.getComponent();
-			if (!lock.isSuccess()) {
-				vc.contextPut("locked", Boolean.TRUE);
-				String fullname = userManager.getUserDisplayName(lock.getOwner());
-				vc.contextPut("lockOwner", fullname);
-				vc.contextPut("lockOwnerSameUser", Boolean.valueOf(lock.isDifferentWindows()));
+			if (lock.isSuccess()) {
+				unsetLockError();
+			} else {
+				setLockedError(lock);
 				editable = false;
 				return;
-			} else {
-				vc.contextPut("locked", Boolean.FALSE);
-				vc.contextRemove("lockOwner");	
-				vc.contextRemove("lockOwnerSameUser");	
 			}
 		}
 		// Parse the content of the page
@@ -240,6 +234,20 @@ public class HTMLEditorController extends FormBasicController implements Activat
 		}
 	}
 	
+	private void unsetLockError() {
+		flc.contextPut("locked", Boolean.FALSE);
+		flc.contextRemove("lockOwner");	
+		flc.contextRemove("lockOwnerSameUser");
+		flc.setDirty(true);
+	}
+	
+	private void setLockedError(LockResult lockResult) {
+		flc.contextPut("locked", Boolean.TRUE);
+		String fullname = userManager.getUserDisplayName(lockResult.getOwner());
+		flc.contextPut("lockOwner", fullname);
+		flc.contextPut("lockOwnerSameUser", Boolean.valueOf(lockResult.isDifferentWindows()));
+	}
+	
 	public Object getUserObject() {
 		return userObject;
 	}
@@ -269,6 +277,10 @@ public class HTMLEditorController extends FormBasicController implements Activat
 					.acquireLock(lockResourceable, getIdentity(), lockToken, getWindow());
 			if(reacquiredLock.isSuccess()) {
 				lock = reacquiredLock;
+				unsetLockError();
+			} else {
+				setLockedError(reacquiredLock);
+				editable = false;
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_de.properties
index 4afe78379d7..f2f3f3a5dc8 100644
--- a/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_de.properties
@@ -1,4 +1,5 @@
 #Fri Jun 19 17:34:51 CEST 2009
+acquireownbuttontext=Ubernehmen und editieren
 error.lock.lost=Sie haben den Lock verloren.
 error.pageeditedby=Die Seite wird zurzeit von Benutzer {0} bearbeitet. Versuchen Sie es sp\u00E4ter noch einmal.
 lastModified=Zuletzt ge\u00E4ndert
diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_en.properties
index 406a81531ef..775001fa4e6 100644
--- a/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/editor/htmleditor/_i18n/LocalStrings_en.properties
@@ -1,4 +1,5 @@
 #Fri Jan 22 19:30:49 CET 2010
+acquireownbuttontext=Take over and edit
 error.lock.lost=You have lost the lock.
 error.pageeditedby=This page is currently edited by user {0}. Please try again later.
 lastModified=Last modified
diff --git a/src/main/java/org/olat/core/util/coordinate/Locker.java b/src/main/java/org/olat/core/util/coordinate/Locker.java
index 9143c50ddc8..6974a29186e 100644
--- a/src/main/java/org/olat/core/util/coordinate/Locker.java
+++ b/src/main/java/org/olat/core/util/coordinate/Locker.java
@@ -83,25 +83,6 @@ public interface Locker {
 	 * @return
 	 */
 	public LockEntry getLockEntry(OLATResourceable ores, String locksubkey);
-	
-	/**
-	 * 
-	 * acquires a persistent lock.
-	 * 
-	 * @param ores
-	 * @param ident
-	 * @param locksubkey may not be longer than 30 chars
-	 * @return the LockResult of this lock trial.
-	 */
-	//public LockResult aquirePersistentLock(OLATResourceable ores, Identity ident, String locksubkey);
-	
-	
-	/**
-	 * releases a persistent lock.
-	 * 
-	 * @param le the LockResult which stems from the lock acquired previously
-	 */
-	//public void releasePersistentLock(LockResult le);
 
 	/**
 	 * for admin purposes only.
-- 
GitLab