diff --git a/mindplot/src/main/javascript/RestPersistenceManager.js b/mindplot/src/main/javascript/RestPersistenceManager.js index e3535408..1a6f7564 100644 --- a/mindplot/src/main/javascript/RestPersistenceManager.js +++ b/mindplot/src/main/javascript/RestPersistenceManager.js @@ -43,8 +43,8 @@ mindplot.RESTPersistenceManager = new Class({ var persistence = this; var query = "minor=" + !saveHistory; - query = query + (this.timestamp ? "×tamp=" + this.timestamp : ""); - query = query + (this.session ? "&session=" + this.session : ""); + query = query + "×tamp=" + this.timestamp; + query = query + "&session=" + this.session; if (!persistence.onSave) { diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java index e815f0f9..d9edf802 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java @@ -169,7 +169,7 @@ public class MindmapController extends BaseController { // Update edition timeout ... final LockManager lockManager = mindmapService.getLockManager(); - final LockInfo lockInfo = lockManager.updateExpirationTimeout(mindmap, user, session); + final LockInfo lockInfo = lockManager.updateExpirationTimeout(mindmap, user); return lockInfo.getTimestamp(); } @@ -192,11 +192,10 @@ public class MindmapController extends BaseController { throw new SessionExpiredException(lastEditor); } } else if (outdated) { - throw new MultipleSessionsOpenException("Sessions:" + session + ":" + lockInfo.getSession() + "Timestamp: " + timestamp + ": " + lockInfo.getTimestamp()); + throw new MultipleSessionsOpenException("Sessions:" + session + ":" + lockInfo.getSession() + ",Timestamp: " + timestamp + ": " + lockInfo.getTimestamp()); } } else { throw new SessionExpiredException(lockInfo.getUser()); - } } diff --git a/wise-webapp/src/main/java/com/wisemapping/service/LockInfo.java b/wise-webapp/src/main/java/com/wisemapping/service/LockInfo.java index 02131b0d..5a998b8a 100644 --- a/wise-webapp/src/main/java/com/wisemapping/service/LockInfo.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/LockInfo.java @@ -36,6 +36,7 @@ public class LockInfo { this.user = user; this.updateTimeout(); this.updateTimestamp(mindmap); + this.session = session; } public User getUser() { diff --git a/wise-webapp/src/main/java/com/wisemapping/service/LockManager.java b/wise-webapp/src/main/java/com/wisemapping/service/LockManager.java index c0ee588e..ecfae08c 100644 --- a/wise-webapp/src/main/java/com/wisemapping/service/LockManager.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/LockManager.java @@ -30,13 +30,15 @@ public interface LockManager { LockInfo getLockInfo(@NotNull Mindmap mindmap); - LockInfo updateExpirationTimeout(@NotNull Mindmap mindmap, @NotNull User user,long session); + LockInfo updateExpirationTimeout(@NotNull Mindmap mindmap, @NotNull User user); void unlock(@NotNull Mindmap mindmap, @NotNull User user) throws LockException, AccessDeniedSecurityException; boolean isLockedBy(@NotNull Mindmap mindmap, @NotNull User collaborator); + @NotNull LockInfo lock(@NotNull Mindmap mindmap, @NotNull User user, long session) throws WiseMappingException; - long generateSession(); + @NotNull + LockInfo lock(@NotNull Mindmap mindmap, @NotNull User user) throws WiseMappingException; } diff --git a/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java b/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java index e60329e1..c705abbc 100644 --- a/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java @@ -63,7 +63,7 @@ class LockManagerImpl implements LockManager { } @Override - public LockInfo updateExpirationTimeout(@NotNull Mindmap mindmap, @NotNull User user, long session) { + public LockInfo updateExpirationTimeout(@NotNull Mindmap mindmap, @NotNull User user) { if (!this.isLocked(mindmap)) { throw new IllegalStateException("Lock lost for map. No update possible."); } @@ -74,9 +74,8 @@ class LockManagerImpl implements LockManager { } result.updateTimeout(); - result.setSession(session); result.updateTimestamp(mindmap); -// logger.debug("Timeout updated for:" + mindmap.getId()); + logger.debug("Timeout updated for:" + mindmap.getId()); return result; } @@ -108,6 +107,13 @@ class LockManagerImpl implements LockManager { return result; } + + @Override + @NotNull + public LockInfo lock(@NotNull Mindmap mindmap, @NotNull User user) throws WiseMappingException { + return this.lock(mindmap, user, System.nanoTime()); + } + @Override @NotNull public LockInfo lock(@NotNull Mindmap mindmap, @NotNull User user, long session) throws WiseMappingException { @@ -123,7 +129,8 @@ class LockManagerImpl implements LockManager { if (result != null) { // Update timeout only... logger.debug("Update timestamp:" + mindmap.getId()); - updateExpirationTimeout(mindmap, user, session); + updateExpirationTimeout(mindmap, user); + result.setSession(session); } else { logger.debug("Lock map id:" + mindmap.getId()); result = new LockInfo(user, mindmap, session); @@ -132,11 +139,6 @@ class LockManagerImpl implements LockManager { return result; } - @Override - public long generateSession() { - return System.nanoTime(); - } - public LockManagerImpl() { lockInfoByMapId = new ConcurrentHashMap(); expirationTimer.schedule(new TimerTask() { diff --git a/wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java index 8e8c8f13..e38343de 100644 --- a/wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/webmvc/MindmapController.java @@ -46,6 +46,7 @@ import java.util.Locale; public class MindmapController { + public static final String LOCK_SESSION_ATTRIBUTE = "lockSession"; @Qualifier("mindmapService") @Autowired private MindmapService mindmapService; @@ -160,10 +161,9 @@ public class MindmapController { readOnlyMode = true; model.addAttribute("mindmapLocked",true); } else { - final long session = lockManager.generateSession(); - final LockInfo lock = lockManager.lock(mindmap, collaborator, session); + final LockInfo lock = lockManager.lock(mindmap, collaborator); model.addAttribute("lockTimestamp", lock.getTimestamp()); - model.addAttribute("lockSession", session); + model.addAttribute(LOCK_SESSION_ATTRIBUTE, lock.getSession()); } model.addAttribute("lockInfo", lockManager.getLockInfo(mindmap)); }