diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java index 98b8f9fa9..01f83f1af 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetFolderBrowser.java @@ -22,7 +22,6 @@ import com.arsdigita.bebop.Component; import com.arsdigita.bebop.ControlLink; import com.arsdigita.bebop.Image; import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Link; import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.Paginator; @@ -37,19 +36,18 @@ import com.arsdigita.bebop.table.DefaultTableCellRenderer; import com.arsdigita.bebop.table.DefaultTableColumnModel; import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableColumn; +import com.arsdigita.bebop.table.TableHeader; import com.arsdigita.cms.CMS; -import com.arsdigita.cms.ui.folder.FolderBrowser; import com.arsdigita.cms.ui.folder.FolderSelectionModel; import com.arsdigita.globalization.GlobalizedMessage; + import java.util.Date; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; + import org.libreccm.cdi.utils.CdiUtil; import org.librecms.CmsConstants; import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSectionManager; -import org.librecms.dispatcher.ItemResolver; /** * Browse folder and assets. @@ -72,9 +70,9 @@ public class AssetFolderBrowser extends Table { private TableColumn nameColumn; private TableColumn deleteColumn; private final StringParameter sortTypeParameter = new StringParameter( - "sortType"); + "sortType"); private final StringParameter sortDirectionParameter = new StringParameter( - "sortDir"); + "sortDir"); private Paginator paginator; private long folderSize; @@ -90,6 +88,7 @@ public class AssetFolderBrowser extends Table { } private void initComponents() { + setModelBuilder(new AssetFolderBrowserTableModelBuilder()); final GlobalizedMessage[] headers = { @@ -102,25 +101,28 @@ public class AssetFolderBrowser extends Table { setModelBuilder(new AssetFolderBrowserTableModelBuilder()); setColumnModel(new DefaultTableColumnModel(headers)); + setHeader(new TableHeader(getColumnModel())); setClassAttr("dataTable"); - getHeader().setDefaultRenderer(new DefaultTableCellRenderer()); + getHeader().setDefaultRenderer( + new com.arsdigita.cms.ui.util.DefaultTableCellRenderer()); nameColumn = getColumn(AssetFolderBrowserTableModel.COL_NAME); nameColumn.setCellRenderer(new NameCellRenderer()); nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME)); + getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE) - .setHeaderRenderer( - new HeaderCellRenderer(SORT_KEY_CREATION_DATE)); + .setHeaderRenderer( + new HeaderCellRenderer(SORT_KEY_CREATION_DATE)); getColumn(AssetFolderBrowserTableModel.COL_CREATION_DATE) - .setCellRenderer(new DateCellRenderer()); + .setCellRenderer(new DateCellRenderer()); getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED) - .setHeaderRenderer(new HeaderCellRenderer( - SORT_KEY_LAST_MODIFIED_DATE)); + .setHeaderRenderer(new HeaderCellRenderer( + SORT_KEY_LAST_MODIFIED_DATE)); getColumn(AssetFolderBrowserTableModel.COL_LAST_MODIFIED) - .setCellRenderer(new DateCellRenderer()); + .setCellRenderer(new DateCellRenderer()); deleteColumn = getColumn(AssetFolderBrowserTableModel.COL_DELETEABLE); deleteColumn.setCellRenderer(new ActionCellRenderer()); @@ -139,7 +141,7 @@ public class AssetFolderBrowser extends Table { public void register(final Page page) { super.register(page); - + page.addComponentStateParam(this, folderSelectionModel. getStateParameter()); page.addComponentStateParam(this, sortTypeParameter); @@ -157,7 +159,7 @@ public class AssetFolderBrowser extends Table { protected void setPaginator(final Paginator paginator) { this.paginator = paginator; } - + protected String getSortType(final PageState state) { return (String) state.getValue(sortTypeParameter); } @@ -198,7 +200,7 @@ public class AssetFolderBrowser extends Table { final String sortKey = (String) state.getValue(sortTypeParameter); final boolean isCurrentKey = sortKey.equals(key); final String currentSortDirection = (String) state - .getValue(sortDirectionParameter); + .getValue(sortDirectionParameter); final String imageUrlStub; if (SORT_ACTION_UP.equals(currentSortDirection)) { @@ -215,7 +217,7 @@ public class AssetFolderBrowser extends Table { // by default, everything sorts "up" unless it // is the current key and it is already pointing up if (SORT_ACTION_UP.equals(currentSortDirection) - && isCurrentKey) { + && isCurrentKey) { sortDirectionAction = SORT_ACTION_DOWN; } else { sortDirectionAction = SORT_ACTION_UP; @@ -266,14 +268,14 @@ public class AssetFolderBrowser extends Table { final String name = (String) value; final ContentSection section = CMS.getContext(). - getContentSection(); + getContentSection(); final ContentSectionManager sectionManager = CdiUtil. - createCdiUtil() - .findBean(ContentSectionManager.class); + createCdiUtil() + .findBean(ContentSectionManager.class); final boolean isFolder = ((AssetFolderBrowserTableModel) table .getTableModel(state)) - .isFolder(); + .isFolder(); final long objectId = getObjectId(key); if (isFolder) { @@ -337,12 +339,13 @@ public class AssetFolderBrowser extends Table { return new Label(" ", false); } else { final ControlLink link = new ControlLink( - new Label(new GlobalizedMessage("cms.ui.folder.delete", - CmsConstants.CMS_BUNDLE))); + new Label( + new GlobalizedMessage("cms.ui.folder.delete", + CmsConstants.CMS_FOLDER_BUNDLE))); link.setConfirmation( - new GlobalizedMessage( - "cms.ui.folder.delete_confirmation", - CmsConstants.CMS_BUNDLE)); + new GlobalizedMessage( + "cms.ui.folder.delete_confirmation", + CmsConstants.CMS_FOLDER_BUNDLE)); return link; } } @@ -364,7 +367,7 @@ public class AssetFolderBrowser extends Table { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final AssetFolderBrowserController controller = cdiUtil.findBean( - AssetFolderBrowserController.class); + AssetFolderBrowserController.class); controller.deleteObject((String) event.getRowKey()); ((Table) event.getSource()).clearSelection(state); @@ -385,8 +388,8 @@ public class AssetFolderBrowser extends Table { clearSelection(state); getFolderSelectionModel().setSelectedKey( - state, - getObjectId(event.getRowKey())); + state, + getObjectId(event.getRowKey())); } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java index aea69bca9..446b5572d 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java @@ -19,6 +19,8 @@ package com.arsdigita.cms.ui.assets; import com.arsdigita.bebop.ActionLink; +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Form; import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Page; @@ -28,6 +30,7 @@ import com.arsdigita.bebop.Resettable; import com.arsdigita.bebop.SegmentedPanel; import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SingleSelectionModel; +import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Text; import com.arsdigita.bebop.event.ActionEvent; import com.arsdigita.bebop.event.ActionListener; @@ -36,6 +39,14 @@ import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.event.PrintEvent; import com.arsdigita.bebop.event.PrintListener; +import com.arsdigita.bebop.form.CheckboxGroup; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.SingleSelect; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.bebop.parameters.ArrayParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.cms.CMS; import com.arsdigita.cms.ui.BaseTree; import com.arsdigita.cms.ui.folder.FolderCreateForm; @@ -55,8 +66,11 @@ import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.Folder; import java.util.List; + import org.arsdigita.cms.CMSConfig; +import javax.swing.CellRendererPane; + /** * * @author Jens Pelzetter @@ -64,13 +78,21 @@ import org.arsdigita.cms.CMSConfig; public class AssetPane extends LayoutPanel implements Resettable { public static final String SET_FOLDER = "set_folder"; + private static final String SOURCES_PARAM = "sources"; + private static final String ACTION_PARAM = "action"; + private static final String MOVE = "Move"; + private static final String COPY = "Copy"; private final BaseTree tree; private final SingleSelectionModel selectionModel; private final FolderSelectionModel folderSelectionModel; private final FolderRequestLocal folderRequestLocal; + private final ArrayParameter sourcesParameter = new ArrayParameter( + new StringParameter(SOURCES_PARAM)); private AssetFolderBrowser folderBrowser; + private SingleSelect actionSelect; + private Submit actionSubmit; private SegmentedPanel.Segment browseSegment; private SegmentedPanel.Segment currentFolderSegment; @@ -85,8 +107,8 @@ public class AssetPane extends LayoutPanel implements Resettable { @Override protected Folder getRootFolder(final PageState state) { final ContentSection section = CMS - .getContext() - .getContentSection(); + .getContext() + .getContentSection(); return section.getRootAssetsFolder(); } @@ -97,8 +119,8 @@ public class AssetPane extends LayoutPanel implements Resettable { @Override protected Long getRootFolderID(final PageState state) { final ContentSection section = CMS - .getContext() - .getContentSection(); + .getContext() + .getContentSection(); return section.getRootAssetsFolder().getObjectId(); } @@ -109,8 +131,8 @@ public class AssetPane extends LayoutPanel implements Resettable { setLeft(left); final Label heading = new Label( - new GlobalizedMessage("cms.ui.folder_browser", - CmsConstants.CMS_BUNDLE)); + new GlobalizedMessage("cms.ui.folder_browser", + CmsConstants.CMS_BUNDLE)); left.addSegment(heading, tree); // final Text placeholder = new Text("Placeholder"); @@ -123,13 +145,69 @@ public class AssetPane extends LayoutPanel implements Resettable { final SegmentedPanel panel = new SegmentedPanel(); browseSegment = panel.addSegment(); + final Form browserForm = new Form("assetFolderBrowser", + new SimpleContainer()); + browserForm.setMethod(Form.GET); folderBrowser = new AssetFolderBrowser(folderSelectionModel); final Paginator paginator = new Paginator( - new AssetFolderBrowserPaginationModelBuilder(folderBrowser), - CMSConfig.getConfig().getFolderBrowseListSize()); + new AssetFolderBrowserPaginationModelBuilder(folderBrowser), + CMSConfig.getConfig().getFolderBrowseListSize()); folderBrowser.setPaginator(paginator); - browseSegment.add(paginator); - browseSegment.add(folderBrowser); + + final CheckboxGroup checkboxGroup = new CheckboxGroup(sourcesParameter); + browserForm.add(checkboxGroup); + final TableColumn checkboxCol = new TableColumn(); + checkboxCol.setHeaderValue( + new GlobalizedMessage("empty_text", CmsConstants.CMS_BUNDLE)); + checkboxCol.setCellRenderer(new TableCellRenderer() { + + @Override + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { + + final Option result = new Option(key.toString(), + new Text("")); + result.setGroup(checkboxGroup); + return result; + } + + }); + folderBrowser.getColumnModel().add(0, checkboxCol); + + browserForm.add(paginator); + browserForm.add(folderBrowser); + final SimpleContainer actionFormContainer = new SimpleContainer(); + actionFormContainer.add(new Label( + new GlobalizedMessage( + "cms.ui.folder.edit_selection", + CmsConstants.CMS_FOLDER_BUNDLE))); + actionSelect = new SingleSelect(ACTION_PARAM); + actionSelect.addOption( + new Option(COPY, + new Label(new GlobalizedMessage( + "cms.ui.folder.copy.action", + CmsConstants.CMS_FOLDER_BUNDLE)))); + actionSelect.addOption( + new Option(MOVE, + new Label(new GlobalizedMessage( + "cms.ui.folder.move.action", + CmsConstants.CMS_FOLDER_BUNDLE)))); + actionFormContainer.add(actionSelect); + actionSubmit = new Submit( + "Go", + new GlobalizedMessage("cms.ui.folder.go", + CmsConstants.CMS_FOLDER_BUNDLE)); + actionFormContainer.add(actionSubmit); + browserForm.add(actionFormContainer); + +// browseSegment.add(paginator); +// browseSegment.add(folderBrowser); + browseSegment.add(browserForm); currentFolderSegment = panel.addSegment(); currentFolderSegment.addHeader(new Text("Current folder")); @@ -142,13 +220,13 @@ public class AssetPane extends LayoutPanel implements Resettable { final Label target = (Label) event.getTarget(); final long selectedId = Long.parseLong(selectionModel - .getSelectedKey(state).toString()); + .getSelectedKey(state).toString()); final long currentFolderId = folderSelectionModel - .getSelectedObject(state).getObjectId(); + .getSelectedObject(state).getObjectId(); target.setLabel(String.format( - "selectedId = %d; currentFolderId = %d", - selectedId, - currentFolderId)); + "selectedId = %d; currentFolderId = %d", + selectedId, + currentFolderId)); } }); @@ -161,19 +239,19 @@ public class AssetPane extends LayoutPanel implements Resettable { actionsSegment.add(actions); final FolderCreateForm folderCreateForm = new FolderCreateForm( - "fcreat", folderSelectionModel); + "fcreat", folderSelectionModel); folderCreateForm.addSubmissionListener(new FormSubmissionListener() { @Override public void submitted(final FormSectionEvent event) - throws FormProcessException { + throws FormProcessException { final PageState state = event.getPageState(); if (event.getSource() == folderCreateForm - && folderCreateForm.isCancelled(state)) { + && folderCreateForm.isCancelled(state)) { browseMode(state); throw new FormProcessException(new GlobalizedMessage( - "cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); + "cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); } } @@ -183,7 +261,7 @@ public class AssetPane extends LayoutPanel implements Resettable { @Override public void process(final FormSectionEvent event) - throws FormProcessException { + throws FormProcessException { final PageState state = event.getPageState(); final Object source = event.getSource(); @@ -194,24 +272,24 @@ public class AssetPane extends LayoutPanel implements Resettable { }); newFolderSegment = panel.addSegment( - new Label(new GlobalizedMessage("cms.ui.new_folder", - CmsConstants.CMS_BUNDLE)), - folderCreateForm); + new Label(new GlobalizedMessage("cms.ui.new_folder", + CmsConstants.CMS_BUNDLE)), + folderCreateForm); final FolderEditorForm folderEditorForm = new FolderEditorForm( - "fedit", folderSelectionModel); + "fedit", folderSelectionModel); folderEditorForm.addSubmissionListener(new FormSubmissionListener() { @Override public void submitted(final FormSectionEvent event) - throws FormProcessException { + throws FormProcessException { final PageState state = event.getPageState(); if (event.getSource() == folderEditorForm - && folderEditorForm.isCancelled(state)) { + && folderEditorForm.isCancelled(state)) { browseMode(state); throw new FormProcessException(new GlobalizedMessage( - "cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); + "cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); } } @@ -220,7 +298,7 @@ public class AssetPane extends LayoutPanel implements Resettable { @Override public void process(final FormSectionEvent event) - throws FormProcessException { + throws FormProcessException { final PageState state = event.getPageState(); final Object source = event.getSource(); @@ -231,13 +309,13 @@ public class AssetPane extends LayoutPanel implements Resettable { }); editFolderSegment = panel.addSegment( - new Label(new GlobalizedMessage("cms.ui.edit_folder", - CmsConstants.CMS_BUNDLE)), - folderEditorForm); + new Label(new GlobalizedMessage("cms.ui.edit_folder", + CmsConstants.CMS_BUNDLE)), + folderEditorForm); final ActionLink createFolderAction = new ActionLink( - new Label(new GlobalizedMessage("cms.ui.new_folder", - CmsConstants.CMS_BUNDLE))); + new Label(new GlobalizedMessage("cms.ui.new_folder", + CmsConstants.CMS_BUNDLE))); createFolderAction.addActionListener(new ActionListener() { @Override @@ -253,8 +331,8 @@ public class AssetPane extends LayoutPanel implements Resettable { actions.addAction(createFolderAction); final ActionLink editFolderAction = new ActionLink( - new Label(new GlobalizedMessage("cms.ui.edit_folder", - CmsConstants.CMS_BUNDLE))); + new Label(new GlobalizedMessage("cms.ui.edit_folder", + CmsConstants.CMS_BUNDLE))); editFolderAction.addActionListener(new ActionListener() { @Override @@ -265,6 +343,7 @@ public class AssetPane extends LayoutPanel implements Resettable { editFolderMode(state); } } + }); actions.addAction(editFolderAction); @@ -312,7 +391,7 @@ public class AssetPane extends LayoutPanel implements Resettable { public void reset(final PageState state) { super.reset(state); - + folderBrowser.getPaginator().reset(state); } @@ -327,14 +406,14 @@ public class AssetPane extends LayoutPanel implements Resettable { if (!selectionModel.isSelected(state)) { final String folder = state - .getRequest() - .getParameter(SET_FOLDER); + .getRequest() + .getParameter(SET_FOLDER); if (folder == null) { final Category root = CMS - .getContext() - .getContentSection() - .getRootAssetsFolder(); + .getContext() + .getContentSection() + .getRootAssetsFolder(); final Long folderId = root.getObjectId(); selectionModel.setSelectedKey(state, folderId); @@ -354,18 +433,18 @@ public class AssetPane extends LayoutPanel implements Resettable { final PageState state = event.getPageState(); final Category root = CMS - .getContext() - .getContentSection() - .getRootAssetsFolder(); + .getContext() + .getContentSection() + .getRootAssetsFolder(); if (!root.equals(folderRequestLocal.getFolder(state))) { // Expand the ancestor nodes of the currently // selected node. final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final FolderTreeModelController controller = cdiUtil.findBean( - FolderTreeModelController.class); + FolderTreeModelController.class); final List ancestorIds = controller.findAncestorIds( - folderRequestLocal.getFolder(state)); + folderRequestLocal.getFolder(state)); ancestorIds.forEach(id -> tree.expand(id.toString(), state)); }