From a8a9a4cf28baefc0c00d15212b4af523039a0a6f Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 27 Oct 2016 14:03:04 +0000 Subject: [PATCH] CCM NG/ccm-cms: Implementation of AssetManager#move git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4411 8810af33-2d31-482b-a856-94f89814c4df --- .../org/librecms/assets/AssetManager.java | 26 +++++++- .../org/librecms/assets/AssetManagerTest.java | 13 +++- .../after-move-to-other-folder.xml | 60 ++++++++++++++++--- .../librecms/assets/AssetManagerTest/data.xml | 2 +- 4 files changed, 89 insertions(+), 12 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/assets/AssetManager.java b/ccm-cms/src/main/java/org/librecms/assets/AssetManager.java index bee092f32..67c8a3a5b 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AssetManager.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AssetManager.java @@ -18,6 +18,7 @@ */ package org.librecms.assets; +import com.arsdigita.util.UncheckedWrapperException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -46,6 +47,7 @@ import org.librecms.contentsection.FolderRepository; import org.librecms.contentsection.privileges.AssetPrivileges; import java.util.Objects; +import org.libreccm.categorization.ObjectNotAssignedToCategoryException; import static org.librecms.CmsConstants.*; @@ -160,7 +162,29 @@ public class AssetManager { final Asset asset, @RequiresPrivilege(AssetPrivileges.CREATE_NEW) final Folder targetFolder) { - throw new UnsupportedOperationException("Not implemented yet."); + + if (asset == null) { + throw new IllegalArgumentException("No asset to move provided."); + } + + if (targetFolder == null) { + throw new IllegalArgumentException("No target folder specified."); + } + + final Optional currentFolder = getAssetFolder(asset); + + if (currentFolder.isPresent()) { + try { + categoryManager.removeObjectFromCategory(asset, + currentFolder.get()); + } catch(ObjectNotAssignedToCategoryException ex) { + throw new UncheckedWrapperException(ex); + } + } + + categoryManager.addObjectToCategory(asset, + targetFolder, + CATEGORIZATION_TYPE_FOLDER); } /** diff --git a/ccm-cms/src/test/java/org/librecms/assets/AssetManagerTest.java b/ccm-cms/src/test/java/org/librecms/assets/AssetManagerTest.java index 837ac0b07..db9e72543 100644 --- a/ccm-cms/src/test/java/org/librecms/assets/AssetManagerTest.java +++ b/ccm-cms/src/test/java/org/librecms/assets/AssetManagerTest.java @@ -306,15 +306,24 @@ public class AssetManagerTest { * section using * {@link AssetManager#copy(org.librecms.assets.Asset, org.librecms.contentsection.Folder)}. */ + @Test @InSequence(400) @UsingDataSet("datasets/org/librecms/assets/AssetManagerTest/data.xml") @ShouldMatchDataSet( value = "datasets/org/librecms/assets/AssetManagerTest/" + "after-move-to-other-folder.xml", - excludeColumns = {"object_id", + excludeColumns = {"categorization_id", + "object_id", + "object_order", "uuid"}) public void moveAssetToOtherFolder() { - fail(); + final Asset asset = assetRepo.findById(-900L); + assertThat(asset, is(not(nullValue()))); + + final Folder folder = folderRepo.findById(-410L); + assertThat(folder, is(not(nullValue()))); + + assetManager.move(asset, folder); } /** diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/assets/AssetManagerTest/after-move-to-other-folder.xml b/ccm-cms/src/test/resources/datasets/org/librecms/assets/AssetManagerTest/after-move-to-other-folder.xml index ffc0a3b5a..5cec60487 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/assets/AssetManagerTest/after-move-to-other-folder.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/assets/AssetManagerTest/after-move-to-other-folder.xml @@ -23,6 +23,12 @@ + + @@ -111,13 +117,31 @@ category_order="1"/> + + + + @@ -196,6 +228,10 @@ type="ASSETS_FOLDER" /> + + + + + data_size="0" /> + - + data_size="0" />