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" />