From 458b8a72eaa1d5861887e47e0296b8ccf58991da Mon Sep 17 00:00:00 2001 From: lucio Date: Tue, 14 Apr 2020 18:46:44 +0200 Subject: [PATCH] allows moving shared item outside the shared folder --- .../access/storagehub/services/ItemsManager.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java b/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java index 766d1d8..334cc52 100644 --- a/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java +++ b/src/main/java/org/gcube/data/access/storagehub/services/ItemsManager.java @@ -871,8 +871,10 @@ public class ItemsManager { if (!(destinationItem instanceof FolderItem)) throw new InvalidItemException("destination item is not a folder"); - if (item.isShared() && (!destinationItem.isShared() || !getSharedParentNode(nodeToMove).getIdentifier().equals(getSharedParentNode(destination).getIdentifier()))) - throw new InvalidCallParameters("shared Item cannot be moved in a different shared folder or in a private folder"); + + boolean movingSharedItemOutside = item.isShared() && (!destinationItem.isShared() || !getSharedParentNode(nodeToMove).getIdentifier().equals(getSharedParentNode(destination).getIdentifier())); + + try { ses.getWorkspace().getLockManager().lock(destination.getPath(), false, true, 0,login); @@ -886,9 +888,12 @@ public class ItemsManager { ses.getWorkspace().move(nodeToMove.getPath(), newPath); Utils.setPropertyOnChangeNode(ses.getNode(newPath), login, ItemAction.MOVED); - + String mimeTypeForAccounting = (item instanceof AbstractFileItem)? ((AbstractFileItem) item).getContent().getMimeType(): null; - + + if (movingSharedItemOutside) + item2Node.updateOwnerOnSubTree(nodeToMove, login); + accountingHandler.createFolderAddObj(uniqueName, item.getClass().getSimpleName(), mimeTypeForAccounting , ses, destination, false); accountingHandler.createFolderRemoveObj(item.getTitle(), item.getClass().getSimpleName(), mimeTypeForAccounting, ses, originalParent, false); ses.save();