The Documents and Media API lets you copy folders within a repository. You can’t, however, copy a folder between different repositories. Also note that copying a folder also copies its contents.
To copy a folder, use the
DLAppService
method copyFolder
:
copyFolder(long repositoryId, long sourceFolderId, long parentFolderId, String name,
String description, ServiceContext serviceContext)
For a full description of the method and its parameters, see its Javadoc.
Follow these steps to use this method to copy a folder:
-
Get a reference to
DLAppService
:@Reference private DLAppService _dlAppService;
For more information on this, see the section on getting a service reference in the getting started tutorial.
-
Get the data needed to populate the
copyFolder
method’s arguments. How you do this depends on your use case. The copy operation in this example takes place in the default Site repository and retains the folder’s existing name and description. It therefore needs the folder’s group ID (to specify the default site repository), name, and description. Also note that because the destination folder in this example is the repository’s root folder, the parent folder ID isn’t needed—Liferay DXP supplies a constant for specifying a repository’s root folder.In the following code,
ParamUtil
gets the folder’s ID from the request (javax.portlet.ActionRequest
), and the service reference’sgetFolder
method gets the corresponding folder object. The folder’sgetGroupId()
,getName()
, andgetDescription()
methods then get the folder’s group ID, name, and description, respectively:long folderId = ParamUtil.getLong(actionRequest, "folderId"); Folder folder = _dlAppService.getFolder(folderId); long groupId = folder.getGroupId(); String folderName = folder.getName(); String folderDescription = folder.getDescription(); ServiceContext serviceContext = ServiceContextFactory.getInstance( DLFolder.class.getName(), actionRequest);
For more information on getting repository and folder IDs, see the getting started tutorial’s sections on specifying repositories and folders. For more information on
ServiceContext
, see the tutorial Understanding ServiceContext. -
Call the service reference’s
copyFolder
method with the data from the previous step. Note that this example uses theDLFolderConstants
constantDEFAULT_PARENT_FOLDER_ID
to specify the repository’s root folder as the destination folder:_dlAppService.copyFolder( groupId, folderId, DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, folderName, folderDescription, serviceContext);
Keep in mind that you can change any of these values to suit your copy operation. For example, if your copy takes place in a repository other than the default Site repository, you would specify that repository’s ID in place of the group ID. You could also specify a different destination folder, and/or change the new folder’s name and/or description.