CCM NG/ccm-cms: Copying items in the FolderBrowser now works

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4618 8810af33-2d31-482b-a856-94f89814c4df
ccm-docs
jensp 2017-03-03 14:02:24 +00:00
parent 05f26bdd34
commit 053cba0183
3 changed files with 134 additions and 116 deletions

View File

@ -65,7 +65,6 @@ import com.arsdigita.toolbox.ui.ActionGroup;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -81,11 +80,14 @@ import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemManager; import org.librecms.contentsection.ContentItemManager;
import org.librecms.contentsection.ContentItemRepository; import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
import org.librecms.contentsection.FolderManager;
import org.librecms.contentsection.FolderRepository; import org.librecms.contentsection.FolderRepository;
import org.librecms.contentsection.privileges.ItemPrivileges; import org.librecms.contentsection.privileges.ItemPrivileges;
import java.util.Objects; import java.util.Objects;
import static org.librecms.CmsConstants.*;
/** /**
* Browse folders and manipulate them with various actions (move/copy/delete). * Browse folders and manipulate them with various actions (move/copy/delete).
* *
@ -93,14 +95,14 @@ import java.util.Objects;
*/ */
@SuppressWarnings("PMD.BeanMembersShouldSerialize") @SuppressWarnings("PMD.BeanMembersShouldSerialize")
public class FolderManipulator extends SimpleContainer implements public class FolderManipulator extends SimpleContainer implements
//FormProcessListener, //FormProcessListener,
//FormValidationListener, //FormValidationListener,
//FormSubmissionListener, //FormSubmissionListener,
Resettable { Resettable {
//public static final String RESOURCE_BUNDLE = "com.arsdigita.cms.ui.folder.CMSFolderResources"; //public static final String RESOURCE_BUNDLE = "com.arsdigita.cms.ui.folder.CMSFolderResources";
private static final Logger LOGGER = LogManager.getLogger( private static final Logger LOGGER = LogManager.getLogger(
FolderManipulator.class); FolderManipulator.class);
private static final String ATOZ_FILTER_PARAM = "aToZfilter"; private static final String ATOZ_FILTER_PARAM = "aToZfilter";
private static final String ACTION_PARAM = "act"; private static final String ACTION_PARAM = "act";
@ -113,9 +115,9 @@ public class FolderManipulator extends SimpleContainer implements
//private static final String UNPUBLISH = "UnPublish"; //private static final String UNPUBLISH = "UnPublish";
private final ArrayParameter sourcesParam = new ArrayParameter( private final ArrayParameter sourcesParam = new ArrayParameter(
new StringParameter(SOURCES_PARAM)); new StringParameter(SOURCES_PARAM));
private final StringParameter actionParam private final StringParameter actionParam
= new StringParameter(ACTION_PARAM); = new StringParameter(ACTION_PARAM);
; ;
/** /**
* The folder in which the source items live. * The folder in which the source items live.
@ -127,9 +129,9 @@ public class FolderManipulator extends SimpleContainer implements
private FilterForm filterForm; private FilterForm filterForm;
private final StringParameter atozFilterParam = new StringParameter( private final StringParameter atozFilterParam = new StringParameter(
ATOZ_FILTER_PARAM); ATOZ_FILTER_PARAM);
private final StringParameter filterParam private final StringParameter filterParam
= new StringParameter(FILTER_PARAM); = new StringParameter(FILTER_PARAM);
public FolderManipulator(final FolderSelectionModel folderModel) { public FolderManipulator(final FolderSelectionModel folderModel) {
@ -143,9 +145,9 @@ public class FolderManipulator extends SimpleContainer implements
targetSelector.addProcessListener(new TargetSelectorProcessListener()); targetSelector.addProcessListener(new TargetSelectorProcessListener());
targetSelector.addValidationListener( targetSelector.addValidationListener(
new TargetSelectorValidationListener()); new TargetSelectorValidationListener());
targetSelector.addSubmissionListener( targetSelector.addSubmissionListener(
new TargetSelectorSubmissionListener()); new TargetSelectorSubmissionListener());
add(targetSelector); add(targetSelector);
//publishDialog.addProcessListener(new PublishDialogProcessListener()); //publishDialog.addProcessListener(new PublishDialogProcessListener());
@ -207,7 +209,7 @@ public class FolderManipulator extends SimpleContainer implements
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderBrowserController controller = cdiUtil.findBean( final FolderBrowserController controller = cdiUtil.findBean(
FolderBrowserController.class); FolderBrowserController.class);
controller.moveObjects(target, objectIds); controller.moveObjects(target, objectIds);
} }
@ -216,7 +218,7 @@ public class FolderManipulator extends SimpleContainer implements
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderBrowserController controller = cdiUtil.findBean( final FolderBrowserController controller = cdiUtil.findBean(
FolderBrowserController.class); FolderBrowserController.class);
controller.copyObjects(target, objectIds); controller.copyObjects(target, objectIds);
} }
@ -391,7 +393,7 @@ public class FolderManipulator extends SimpleContainer implements
@Override @Override
public void process(final FormSectionEvent event) public void process(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -410,7 +412,7 @@ public class FolderManipulator extends SimpleContainer implements
@Override @Override
public void process(final FormSectionEvent event) throws public void process(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -466,7 +468,7 @@ public class FolderManipulator extends SimpleContainer implements
@Override @Override
public void validate(final FormSectionEvent event) throws public void validate(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final FormData data = event.getFormData(); final FormData data = event.getFormData();
@ -480,7 +482,7 @@ public class FolderManipulator extends SimpleContainer implements
} }
private class TargetSelectorValidationListener implements private class TargetSelectorValidationListener implements
FormValidationListener { FormValidationListener {
public TargetSelectorValidationListener() { public TargetSelectorValidationListener() {
//Nothing //Nothing
@ -488,7 +490,7 @@ public class FolderManipulator extends SimpleContainer implements
@Override @Override
public void validate(final FormSectionEvent event) throws public void validate(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -500,25 +502,25 @@ public class FolderManipulator extends SimpleContainer implements
final FormData data = event.getFormData(); final FormData data = event.getFormData();
if (target == null) { if (target == null) {
data.addError(new GlobalizedMessage( data.addError(new GlobalizedMessage(
"cms.ui.folder.need_select_target_folder", "cms.ui.folder.need_select_target_folder",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
//If the target is null, we can skip the rest of the checks //If the target is null, we can skip the rest of the checks
return; return;
} }
if (target.equals(sourceFolderModel.getSelectedObject(state))) { if (target.equals(sourceFolderModel.getSelectedObject(state))) {
data.addError(new GlobalizedMessage( data.addError(new GlobalizedMessage(
"cms.ui.folder.not_within_same_folder", "cms.ui.folder.not_within_same_folder",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
} }
// check create item permission // check create item permission
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Shiro shiro = cdiUtil.findBean(Shiro.class); final Shiro shiro = cdiUtil.findBean(Shiro.class);
final PermissionChecker permissionChecker = cdiUtil.findBean( final PermissionChecker permissionChecker = cdiUtil.findBean(
PermissionChecker.class); PermissionChecker.class);
if (!permissionChecker.isPermitted( if (!permissionChecker.isPermitted(
ItemPrivileges.CREATE_NEW, target)) { ItemPrivileges.CREATE_NEW, target)) {
data.addError("cms.ui.folder.no_permission_for_item", data.addError("cms.ui.folder.no_permission_for_item",
CmsConstants.CMS_FOLDER_BUNDLE); CmsConstants.CMS_FOLDER_BUNDLE);
} }
@ -540,24 +542,24 @@ public class FolderManipulator extends SimpleContainer implements
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderRepository folderRepo = cdiUtil.findBean( final FolderRepository folderRepo = cdiUtil.findBean(
FolderRepository.class); FolderRepository.class);
final ContentItemRepository itemRepo = cdiUtil.findBean( final ContentItemRepository itemRepo = cdiUtil.findBean(
ContentItemRepository.class); ContentItemRepository.class);
final ContentItemManager itemManager = cdiUtil.findBean( final ContentItemManager itemManager = cdiUtil.findBean(
ContentItemManager.class); ContentItemManager.class);
final FolderBrowserController controller = cdiUtil.findBean( final FolderBrowserController controller = cdiUtil.findBean(
FolderBrowserController.class); FolderBrowserController.class);
final PermissionChecker permissionChecker = cdiUtil.findBean( final PermissionChecker permissionChecker = cdiUtil.findBean(
PermissionChecker.class); PermissionChecker.class);
final CcmObject object; final CcmObject object;
final String name; final String name;
if (objectId.startsWith("folder--")) { if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
final long folderId = Long.parseLong(objectId.substring( final long folderId = Long.parseLong(objectId.substring(
"folder--".length())); FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
final Folder folder = folderRepo.findById(folderId).orElseThrow( final Folder folder = folderRepo.findById(folderId).orElseThrow(
() -> new IllegalArgumentException(String.format( () -> new IllegalArgumentException(String.format(
"No folder with id %d in database.", folderId))); "No folder with id %d in database.", folderId)));
name = folder.getName(); name = folder.getName();
@ -568,13 +570,13 @@ public class FolderManipulator extends SimpleContainer implements
object = folder; object = folder;
} else if (objectId.startsWith("item--")) { } else if (objectId.startsWith(FOLDER_BROWSER_KEY_PREFIX_ITEM)) {
final long itemId = Long.parseLong(objectId.substring( final long itemId = Long.parseLong(objectId.substring(
"item--".length())); FOLDER_BROWSER_KEY_PREFIX_ITEM.length()));
final ContentItem item = itemRepo.findById(itemId).orElseThrow( final ContentItem item = itemRepo.findById(itemId).orElseThrow(
() -> new IllegalArgumentException(String.format( () -> new IllegalArgumentException(String.format(
"No content item with id %d in database.", "No content item with id %d in database.",
itemId))); itemId)));
name = item.getDisplayName(); name = item.getDisplayName();
@ -585,9 +587,11 @@ public class FolderManipulator extends SimpleContainer implements
object = item; object = item;
} else { } else {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
"Provided objectId '%s' does not start with 'folder--' " "Provided objectId '%s' does not start with '%s' "
+ "or 'item--'.", + "or '%s'.",
objectId)); objectId,
FOLDER_BROWSER_KEY_PREFIX_FOLDER,
FOLDER_BROWSER_KEY_PREFIX_ITEM));
} }
final long count = controller.countObjects(target, name); final long count = controller.countObjects(target, name);
@ -599,7 +603,7 @@ public class FolderManipulator extends SimpleContainer implements
if (!(permissionChecker.isPermitted( if (!(permissionChecker.isPermitted(
ItemPrivileges.DELETE, object)) ItemPrivileges.DELETE, object))
&& isMove(state)) { && isMove(state)) {
addErrorMessage(data, addErrorMessage(data,
"cms.ui.folder.no_permission_for_item", "cms.ui.folder.no_permission_for_item",
object.getDisplayName()); object.getDisplayName());
@ -628,7 +632,7 @@ public class FolderManipulator extends SimpleContainer implements
// } // }
// } // }
private class TargetSelectorSubmissionListener implements private class TargetSelectorSubmissionListener implements
FormSubmissionListener { FormSubmissionListener {
public TargetSelectorSubmissionListener() { public TargetSelectorSubmissionListener() {
//Nothing //Nothing
@ -636,15 +640,15 @@ public class FolderManipulator extends SimpleContainer implements
@Override @Override
public void submitted(final FormSectionEvent event) throws public void submitted(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
if (targetSelector.isCancelled(state)) { if (targetSelector.isCancelled(state)) {
reset(state); reset(state);
throw new FormProcessException(new GlobalizedMessage( throw new FormProcessException(new GlobalizedMessage(
"cms.ui.folder.cancelled", "cms.ui.folder.cancelled",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
} }
} }
@ -688,25 +692,26 @@ public class FolderManipulator extends SimpleContainer implements
final Label label = (Label) event.getTarget(); final Label label = (Label) event.getTarget();
final int numberOfItems = getSources(state).length; final int numberOfItems = getSources(state).length;
final Category folder = (Category) sourceFolderModel. final Category folder = (Category) sourceFolderModel.
getSelectedObject(state); getSelectedObject(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final CategoryManager categoryManager = cdiUtil. final CategoryManager categoryManager = cdiUtil.
findBean(CategoryManager.class); findBean(CategoryManager.class);
if (isMove(state)) { if (isMove(state)) {
label.setLabel(new GlobalizedMessage( label.setLabel(new GlobalizedMessage(
"cms.ui.folder.move", "cms.ui.folder.move",
CmsConstants.CMS_FOLDER_BUNDLE, CmsConstants.CMS_FOLDER_BUNDLE,
new Object[]{numberOfItems, new Object[]{numberOfItems,
categoryManager.getCategoryPath( categoryManager.getCategoryPath(
folder)})); folder)}));
} else if (isCopy(state)) { } else if (isCopy(state)) {
label.setLabel(new GlobalizedMessage( label.setLabel(new GlobalizedMessage(
"cms.ui.folder.copy", "cms.ui.folder.copy",
new Object[]{numberOfItems, CMS_BUNDLE,
categoryManager.getCategoryPath( new Object[]{numberOfItems,
folder)})); categoryManager.getCategoryPath(
folder)}));
} }
} }
@ -729,21 +734,22 @@ public class FolderManipulator extends SimpleContainer implements
// Set things up the first time the selector gets visible // Set things up the first time the selector gets visible
public void expose(final PageState state) { public void expose(final PageState state) {
final Category folder = (Category) sourceFolderModel. final Folder folder = sourceFolderModel.getSelectedObject(state);
getSelectedObject(
state);
targetModel.clearSelection(state); targetModel.clearSelection(state);
if (folder != null) { if (folder != null) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ContentItemManager itemManager = cdiUtil.findBean( final FolderManager folderManager = cdiUtil.findBean(
ContentItemManager.class); FolderManager.class);
if (folder.getParentFolder() == null) {
//ToDo folderTree.expand(Long.toString(folder.getObjectId()),
// final ItemCollection items = folder.getPathInfo(true); state);
// while (items.next()) { } else {
// folderTree.expand(items.getID().toString(), state); final List<Folder> parents = folderManager.getParentFolders(
// } folder);
// items.close(); parents.stream()
.map(parent -> Long.toString(parent.getObjectId()))
.forEach(folderId -> folderTree.expand(folderId, state));
}
} }
} }
@ -833,15 +839,15 @@ public class FolderManipulator extends SimpleContainer implements
// folderBrowser.setFilterForm(filterForm); // folderBrowser.setFilterForm(filterForm);
folderBrowser.setFolderManipulator(FolderManipulator.this); folderBrowser.setFolderManipulator(FolderManipulator.this);
paginator = new Paginator( paginator = new Paginator(
new FolderBrowserPaginationModelBuilder(folderBrowser), new FolderBrowserPaginationModelBuilder(folderBrowser),
CMSConfig.getConfig().getFolderBrowseListSize()); CMSConfig.getConfig().getFolderBrowseListSize());
folderBrowser.setPaginator(paginator); folderBrowser.setPaginator(paginator);
panel.add(paginator); panel.add(paginator);
panel.add(folderBrowser); panel.add(folderBrowser);
LOGGER.debug("Adding filter form..."); LOGGER.debug("Adding filter form...");
filterForm = new FilterForm(new FolderBrowserFilterFormModelBuilder( filterForm = new FilterForm(new FolderBrowserFilterFormModelBuilder(
folderBrowser)); folderBrowser));
FolderManipulator.this.add(filterForm); FolderManipulator.this.add(filterForm);
checkboxGroup = new CheckboxGroup(sourcesParam); checkboxGroup = new CheckboxGroup(sourcesParam);
@ -853,19 +859,19 @@ public class FolderManipulator extends SimpleContainer implements
group.addAction(container); group.addAction(container);
container.add(new Label(new GlobalizedMessage( container.add(new Label(new GlobalizedMessage(
"cms.ui.folder.edit_selection", "cms.ui.folder.edit_selection",
CmsConstants.CMS_FOLDER_BUNDLE))); CmsConstants.CMS_FOLDER_BUNDLE)));
actionSelect = new SingleSelect(actionParam); actionSelect = new SingleSelect(actionParam);
actionSelect.addOption( actionSelect.addOption(
new Option(COPY, new Option(COPY,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"cms.ui.folder.copy.action", "cms.ui.folder.copy.action",
CmsConstants.CMS_FOLDER_BUNDLE)))); CmsConstants.CMS_FOLDER_BUNDLE))));
actionSelect.addOption( actionSelect.addOption(
new Option(MOVE, new Option(MOVE,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"cms.ui.folder.move.action", "cms.ui.folder.move.action",
CmsConstants.CMS_FOLDER_BUNDLE)))); CmsConstants.CMS_FOLDER_BUNDLE))));
//Publishing in the folder browser only works if threaded publishing is active //Publishing in the folder browser only works if threaded publishing is active
// if (CMSConfig.getInstanceOf().getThreadedPublishing()) { // if (CMSConfig.getInstanceOf().getThreadedPublishing()) {
// actionSelect.addOption(new Option(PUBLISH, // actionSelect.addOption(new Option(PUBLISH,
@ -878,8 +884,8 @@ public class FolderManipulator extends SimpleContainer implements
container.add(actionSelect); container.add(actionSelect);
submit = new Submit("Go", submit = new Submit("Go",
new GlobalizedMessage( new GlobalizedMessage(
"cms.ui.folder.go", "cms.ui.folder.go",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
container.add(submit); container.add(submit);
// Add a new first column to the table // Add a new first column to the table
@ -957,8 +963,8 @@ public class FolderManipulator extends SimpleContainer implements
panel = new BoxPanel(BoxPanel.HORIZONTAL); panel = new BoxPanel(BoxPanel.HORIZONTAL);
final ActionLink allLink = new ActionLink( final ActionLink allLink = new ActionLink(
new GlobalizedMessage("cms.ui.folder.filter.all", new GlobalizedMessage("cms.ui.folder.filter.all",
CmsConstants.CMS_FOLDER_BUNDLE)); CmsConstants.CMS_FOLDER_BUNDLE));
allLink.addActionListener(new ActionListener() { allLink.addActionListener(new ActionListener() {
@Override @Override
@ -984,14 +990,14 @@ public class FolderManipulator extends SimpleContainer implements
// panel.add(link); // panel.add(link);
// } // }
panel.add(new Label(new GlobalizedMessage( panel.add(new Label(new GlobalizedMessage(
"cms.ui.folder.filter", "cms.ui.folder.filter",
CmsConstants.CMS_FOLDER_BUNDLE))); CmsConstants.CMS_FOLDER_BUNDLE)));
filterField = new TextField(filterParam); filterField = new TextField(filterParam);
panel.add(filterField); panel.add(filterField);
panel.add(new Submit("filterFolderSubmit", panel.add(new Submit("filterFolderSubmit",
new GlobalizedMessage( new GlobalizedMessage(
"cms.ui.folder.filter_do", "cms.ui.folder.filter_do",
CmsConstants.CMS_FOLDER_BUNDLE))); CmsConstants.CMS_FOLDER_BUNDLE)));
add(panel); add(panel);
@ -1003,28 +1009,28 @@ public class FolderManipulator extends SimpleContainer implements
@Override @Override
public void process(final FormSectionEvent event) throws public void process(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
//Nothing //Nothing
} }
@Override @Override
public void init(final FormSectionEvent event) throws public void init(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
//fse.getPageState().setValue(FolderManipulator.this.m_filter, null); //fse.getPageState().setValue(FolderManipulator.this.m_filter, null);
//filterField.setValue(fse.getPageState(), null); //filterField.setValue(fse.getPageState(), null);
} }
@Override @Override
public void submitted(final FormSectionEvent event) throws public void submitted(final FormSectionEvent event) throws
FormProcessException { FormProcessException {
} }
@Override @Override
public boolean isVisible(PageState state) { public boolean isVisible(PageState state) {
if (super.isVisible(state) if (super.isVisible(state)
&& (modelBuilder.getFolderSize(state) && (modelBuilder.getFolderSize(state)
>= CMSConfig.getConfig(). >= CMSConfig.getConfig().
getFolderAtoZShowLimit())) { getFolderAtoZShowLimit())) {
return true; return true;
} else { } else {
return false; return false;
@ -1056,7 +1062,7 @@ public class FolderManipulator extends SimpleContainer implements
private class FolderTreeCellRenderer implements TreeCellRenderer { private class FolderTreeCellRenderer implements TreeCellRenderer {
private final RequestLocal invalidFoldersRequestLocal private final RequestLocal invalidFoldersRequestLocal
= new RequestLocal(); = new RequestLocal();
/** /**
* Render the folders appropriately. The selected folder is a bold * Render the folders appropriately. The selected folder is a bold
@ -1078,13 +1084,13 @@ public class FolderManipulator extends SimpleContainer implements
if (invalidFoldersRequestLocal.get(state) == null) { if (invalidFoldersRequestLocal.get(state) == null) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final FolderBrowserController controller = cdiUtil.findBean( final FolderBrowserController controller = cdiUtil.findBean(
FolderBrowserController.class); FolderBrowserController.class);
invalidFolders = controller.createInvalidTargetsList( invalidFolders = controller.createInvalidTargetsList(
Arrays.asList(getSources(state))); Arrays.asList(getSources(state)));
invalidFoldersRequestLocal.set(state, invalidFolders); invalidFoldersRequestLocal.set(state, invalidFolders);
} else { } else {
invalidFolders = (List<String>) invalidFoldersRequestLocal invalidFolders = (List<String>) invalidFoldersRequestLocal
.get(state); .get(state);
} }
final Label label = new Label(value.toString()); final Label label = new Label(value.toString());

View File

@ -25,7 +25,6 @@ import com.arsdigita.cms.CMS;
import com.arsdigita.ui.CcmObjectSelectionModel; import com.arsdigita.ui.CcmObjectSelectionModel;
import org.libreccm.categorization.Category; import org.libreccm.categorization.Category;
import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
@ -63,20 +62,6 @@ public class FolderSelectionModel extends CcmObjectSelectionModel<Folder> {
super.setSelectedKey(state, key); super.setSelectedKey(state, key);
} }
public void setSelectedKey(final PageState state, final String key) {
if (!key.startsWith(CmsConstants.FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
throw new IllegalArgumentException(String.format(
"The string '%s' does not contain a folder id "
+ "(it does not start with '%s').",
key,
CmsConstants.FOLDER_BROWSER_KEY_PREFIX_FOLDER));
}
final long keyAsLong = Long.parseLong(key.substring(
CmsConstants.FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
setSelectedKey(state, keyAsLong);
}
/** /**
* Clear the selection by resetting it to the root folder id. * Clear the selection by resetting it to the root folder id.
* *

View File

@ -18,8 +18,13 @@
*/ */
package com.arsdigita.cms.ui.folder; package com.arsdigita.cms.ui.folder;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Tree; import com.arsdigita.bebop.Tree;
import org.librecms.CmsConstants;
import static org.librecms.CmsConstants.*;
public class FolderTree extends Tree { public class FolderTree extends Tree {
public FolderTree(final FolderSelectionModel folderSel) { public FolderTree(final FolderSelectionModel folderSel) {
@ -27,4 +32,26 @@ public class FolderTree extends Tree {
setSelectionModel(folderSel); setSelectionModel(folderSel);
} }
@Override
public void setSelectedKey(final PageState state, final Object key) {
if (key instanceof String) {
final Long keyAsLong;
if (((String) key).startsWith(
FOLDER_BROWSER_KEY_PREFIX_FOLDER)) {
keyAsLong = Long.parseLong(((String) key).substring(
FOLDER_BROWSER_KEY_PREFIX_FOLDER.length()));
} else {
keyAsLong = Long.parseLong((String) key);
}
super.setSelectedKey(state, keyAsLong);
} else if (key instanceof Long) {
super.setSelectedKey(state, key);
} else {
//We now that a FolderSelectionModel only takes keys of type Long.
//Therefore we try to cast here
final Long keyAsLong = (Long) key;
super.setSelectedKey(state, keyAsLong);
}
}
} }