From f72473954ad56b5adf9fe3b257cd8adc28b3a624 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 29 Mar 2017 15:40:58 +0000 Subject: [PATCH] CCM NG/ccm-cms: First part of new AssetPane git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4650 8810af33-2d31-482b-a856-94f89814c4df --- .../java/com/arsdigita/cms/ui/BrowsePane.java | 65 ++-- .../arsdigita/cms/ui/ContentSectionPage.java | 18 +- .../arsdigita/cms/ui/assets/AssetForm.java | 13 +- .../arsdigita/cms/ui/assets/AssetPane.java | 356 ++++++++++++++++++ .../cms/ui/folder/FolderAdminPane.java | 14 +- .../cms/ui/folder/FolderCreateForm.java | 2 + .../arsdigita/cms/ui/folder/FolderForm.java | 3 +- .../cms/ui/folder/FolderManipulator.java | 14 +- .../cms/ui/folder/FolderSelectionModel.java | 11 +- .../arsdigita/cms/ui/folder/FolderTree.java | 17 +- .../cms/ui/folder/FolderTreeModelBuilder.java | 164 +------- .../java/org/librecms/assets/SideNote.java | 12 +- .../h2/V7_0_0_12__remove_side_note_titles.sql | 3 + .../V7_0_0_12__remove_side_note_titles.sql | 3 + .../org/librecms/CmsResources.properties | 1 + .../org/librecms/CmsResources_de.properties | 1 + .../org/librecms/CmsResources_fr.properties | 1 + .../scripts/create_ccm_cms_schema.sql | 17 - .../scripts/create_ccm_cms_schema.sql | 17 - .../datasets/create_ccm_cms_schema.sql | 17 - 20 files changed, 496 insertions(+), 253 deletions(-) create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_12__remove_side_note_titles.sql create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_12__remove_side_note_titles.sql diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/BrowsePane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/BrowsePane.java index 04d0a60cd..f16a37f45 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/BrowsePane.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/BrowsePane.java @@ -73,9 +73,29 @@ public class BrowsePane extends LayoutPanel implements Resettable { public BrowsePane() { /* The folder tree displayed on the left side / left column */ - tree = new BaseTree(new FolderTreeModelBuilder()); + tree = new BaseTree(new FolderTreeModelBuilder() { + + @Override + protected Folder getRootFolder(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + return section.getRootDocumentsFolder(); + } + + }); selectionModel = tree.getSelectionModel(); - folderModel = new FolderSelectionModel(selectionModel); + folderModel = new FolderSelectionModel(selectionModel) { + + @Override + protected Long getRootFolderID(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + return section.getRootDocumentsFolder().getObjectId(); + } + + }; folderRequestLocal = new FolderRequestLocal(folderModel); final SegmentedPanel left = new SegmentedPanel(); @@ -157,11 +177,14 @@ public class BrowsePane extends LayoutPanel implements Resettable { final PageState state = event.getPageState(); if (!selectionModel.isSelected(state)) { - final String folder = state.getRequest().getParameter( - ContentSectionPage.SET_FOLDER); + final String folder = state + .getRequest() + .getParameter(ContentSectionPage.SET_FOLDER); if (folder == null) { - final Category root = CMS.getContext().getContentSection() + final Category root = CMS + .getContext() + .getContentSection() .getRootDocumentsFolder(); final Long folderID = root.getObjectId(); @@ -178,7 +201,7 @@ public class BrowsePane extends LayoutPanel implements Resettable { }*/ selectionModel.setSelectedKey(state, folderID); } else { - selectionModel.setSelectedKey(state, folder); + selectionModel.setSelectedKey(state, Long.parseLong(folder)); } } } @@ -191,11 +214,9 @@ public class BrowsePane extends LayoutPanel implements Resettable { public final void actionPerformed(final ActionEvent event) { final PageState state = event.getPageState(); - if (Assert.isEnabled()) { - Assert.isTrue(selectionModel.isSelected(state)); - } - - final Category root = CMS.getContext().getContentSection() + final Category root = CMS + .getContext() + .getContentSection() .getRootDocumentsFolder(); if (!root.equals(folderRequestLocal.getFolder(state))) { @@ -207,27 +228,7 @@ public class BrowsePane extends LayoutPanel implements Resettable { final List ancestorIds = controller.findAncestorIds( folderRequestLocal.getFolder(state)); ancestorIds.forEach(id -> tree.expand(id.toString(), state)); - -// CcmObject object = folderRequestLocal.getFolder(state); -// -// while (object != null) { -// if (object instanceof Category) { -// final Category category = (Category) object; -// -// if (category.getParentCategory() != null) { -// final Category result = category.getParentCategory(); -// object = result; -// tree.expand( -// ((Long) object.getObjectId()).toString(), -// state); -// } else { -// object = null; -// } -// -// } else { -// object = null; -// } -// } + } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java index 5db1d6c1c..578f94c94 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java @@ -35,6 +35,7 @@ import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentSection; import com.arsdigita.cms.dispatcher.CMSPage; +import com.arsdigita.cms.ui.assets.AssetPane; //ToDo NG import com.arsdigita.cms.ui.category.CategoryAdminPane; import com.arsdigita.cms.ui.cse.ContentSoonExpiredPane; import com.arsdigita.cms.ui.folder.FolderAdminPane; @@ -121,6 +122,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { private FolderAdminPane m_folderPane; private BrowsePane m_browsePane; private ItemSearch m_searchPane; + private AssetPane m_assetPane; //ToDo NG private ImagesPane m_imagesPane; private RoleAdminPane m_rolePane; private WorkflowAdminPane m_workflowPane; @@ -148,6 +150,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { m_folderPane = getFolderAdminPane(); m_browsePane = getBrowsePane(); m_searchPane = getSearchPane(); + m_assetPane = getAssetPane(); //ToDo NG m_imagesPane = getImagesPane(); m_rolePane = getRoleAdminPane(); m_workflowPane = getWorkflowAdminPane(); @@ -259,6 +262,15 @@ public class ContentSectionPage extends CMSPage implements ActionListener { } return m_searchPane; } + + protected AssetPane getAssetPane() { + if (m_assetPane == null) { + m_assetPane = new AssetPane(); + } + + return m_assetPane; + } + // ToDo NG // protected ImagesPane getImagesPane() { // if (m_imagesPane == null) { @@ -266,7 +278,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { // } // return m_imagesPane; // } - protected RoleAdminPane getRoleAdminPane() { if (m_rolePane == null) { m_rolePane = new RoleAdminPane(); @@ -389,6 +400,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { //tab(pane, "cms.ui.folders", getFolderAdminPane()); tab(pane, "cms.ui.browse", getBrowsePane()); tab(pane, "cms.ui.search", getSearchPane()); + tab(pane, "cms.ui.assets", getAssetPane()); // ToDo NG replace with media tab tab(pane, "cms.ui.images", getImagesPane()); tab(pane, "cms.ui.roles", getRoleAdminPane()); tab(pane, "cms.ui.workflows", getWorkflowAdminPane()); @@ -433,7 +445,9 @@ public class ContentSectionPage extends CMSPage implements ActionListener { // } else if (pane == m_imagesPane) { // m_imagesPane.reset(state); // } else - if (pane == m_folderPane) { + if (pane == m_assetPane) { + m_assetPane.reset(state); + } else if (pane == m_folderPane) { m_folderPane.reset(state); //ToDo NG } else if (pane == m_browsePane) { // m_browsePane.reset(state); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java index 562b16594..f4f91ca21 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetForm.java @@ -18,10 +18,21 @@ */ package com.arsdigita.cms.ui.assets; +import com.arsdigita.bebop.Container; +import com.arsdigita.bebop.Form; + /** * * @author Jens Pelzetter */ -public class AssetForm { +public class AssetForm extends Form { + + public AssetForm(final String name) { + super(name); + } + + public AssetForm(final String name, final Container container) { + super(name, container); + } } 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 new file mode 100644 index 000000000..7856c6ab9 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/AssetPane.java @@ -0,0 +1,356 @@ +/* + * Copyright (C) 2017 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets; + +import com.arsdigita.bebop.ActionLink; +import com.arsdigita.bebop.FormProcessException; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Resettable; +import com.arsdigita.bebop.SegmentedPanel; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.SingleSelectionModel; +import com.arsdigita.bebop.Text; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.event.FormProcessListener; +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.cms.CMS; +import com.arsdigita.cms.ui.BaseTree; +import com.arsdigita.cms.ui.folder.FolderCreateForm; +import com.arsdigita.cms.ui.folder.FolderEditorForm; +import com.arsdigita.cms.ui.folder.FolderRequestLocal; +import com.arsdigita.cms.ui.folder.FolderSelectionModel; +import com.arsdigita.cms.ui.folder.FolderTreeModelBuilder; +import com.arsdigita.cms.ui.folder.FolderTreeModelController; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.toolbox.ui.ActionGroup; +import com.arsdigita.toolbox.ui.LayoutPanel; + +import org.libreccm.categorization.Category; +import org.libreccm.cdi.utils.CdiUtil; +import org.librecms.CmsConstants; +import org.librecms.contentsection.ContentSection; +import org.librecms.contentsection.Folder; + +import java.util.List; + +/** + * + * @author Jens Pelzetter + */ +public class AssetPane extends LayoutPanel implements Resettable { + + public static final String SET_FOLDER = "set_folder"; + + private final BaseTree tree; + private final SingleSelectionModel selectionModel; + private final FolderSelectionModel folderSelectionModel; + private final FolderRequestLocal folderRequestLocal; + + private SegmentedPanel.Segment currentFolderSegment; + private SegmentedPanel.Segment browseSegment; + private SegmentedPanel.Segment newFolderSegment; + private SegmentedPanel.Segment editFolderSegment; + + @SuppressWarnings("unchecked") + public AssetPane() { + tree = new BaseTree(new FolderTreeModelBuilder() { + + @Override + protected Folder getRootFolder(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + return section.getRootAssetsFolder(); + } + + }); + selectionModel = tree.getSelectionModel(); + folderSelectionModel = new FolderSelectionModel(selectionModel) { + + @Override + protected Long getRootFolderID(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + return section.getRootAssetsFolder().getObjectId(); + } + + }; + folderRequestLocal = new FolderRequestLocal(folderSelectionModel); + + final SegmentedPanel left = new SegmentedPanel(); + setLeft(left); + + final Label heading = new Label( + new GlobalizedMessage("cms.ui.folder_browser", + CmsConstants.CMS_BUNDLE)); + left.addSegment(heading, tree); + +// final Text placeholder = new Text("Placeholder"); + setBody(createBrowserPane()); + + } + + private SimpleContainer createBrowserPane() { + + final SegmentedPanel panel = new SegmentedPanel(); + + currentFolderSegment = panel.addSegment(); + currentFolderSegment.addHeader(new Text("Current folder")); + final Label currentFolderLabel = new Label(); + currentFolderLabel.addPrintListener(new PrintListener() { + + @Override + public void prepare(final PrintEvent event) { + final PageState state = event.getPageState(); + final Label target = (Label) event.getTarget(); + + final long selectedId = Long.parseLong(selectionModel + .getSelectedKey(state).toString()); + final long currentFolderId = folderSelectionModel + .getSelectedObject(state).getObjectId(); + target.setLabel(String.format( + "selectedId = %d; currentFolderId = %d", + selectedId, + currentFolderId)); + } + + }); + currentFolderSegment.add(currentFolderLabel); + + browseSegment = panel.addSegment(); + browseSegment.setIdAttr("folder-browse"); + + final ActionGroup actions = new ActionGroup(); + browseSegment.add(actions); + + final FolderCreateForm folderCreateForm = new FolderCreateForm( + "fcreat", folderSelectionModel); + folderCreateForm.addSubmissionListener(new FormSubmissionListener() { + + @Override + public void submitted(final FormSectionEvent event) + throws FormProcessException { + + final PageState state = event.getPageState(); + if (event.getSource() == folderCreateForm + && folderCreateForm.isCancelled(state)) { + browseMode(state); + throw new FormProcessException(new GlobalizedMessage( + "cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); + + } + } + + }); + folderCreateForm.addProcessListener(new FormProcessListener() { + + @Override + public void process(final FormSectionEvent event) + throws FormProcessException { + + final PageState state = event.getPageState(); + final Object source = event.getSource(); + if (source == folderCreateForm) { + browseMode(state); + } + } + + }); + newFolderSegment = panel.addSegment( + new Label(new GlobalizedMessage("cms.ui.new_folder", + CmsConstants.CMS_BUNDLE)), + folderCreateForm); + + final FolderEditorForm folderEditorForm = new FolderEditorForm( + "fedit", folderSelectionModel); + folderEditorForm.addSubmissionListener(new FormSubmissionListener() { + + @Override + public void submitted(final FormSectionEvent event) + throws FormProcessException { + + final PageState state = event.getPageState(); + if (event.getSource() == folderEditorForm + && folderEditorForm.isCancelled(state)) { + browseMode(state); + throw new FormProcessException(new GlobalizedMessage( + "cms.ui.cancelled", CmsConstants.CMS_BUNDLE)); + } + } + + }); + folderEditorForm.addProcessListener(new FormProcessListener() { + + @Override + public void process(final FormSectionEvent event) + throws FormProcessException { + + final PageState state = event.getPageState(); + final Object source = event.getSource(); + if (source == folderEditorForm) { + browseMode(state); + } + } + + }); + editFolderSegment = panel.addSegment( + 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))); + createFolderAction.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(final ActionEvent event) { + final PageState state = event.getPageState(); + final Object source = event.getSource(); + if (source == createFolderAction) { + newFolderMode(state); + } + } + + }); + actions.addAction(createFolderAction); + + final ActionLink editFolderAction = new ActionLink( + new Label(new GlobalizedMessage("cms.ui.edit_folder", + CmsConstants.CMS_BUNDLE))); + editFolderAction.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(final ActionEvent event) { + final PageState state = event.getPageState(); + final Object source = event.getSource(); + if (source == editFolderAction) { + editFolderMode(state); + } + } + }); + actions.addAction(editFolderAction); + + return panel; + + } + + protected void browseMode(final PageState state) { + browseSegment.setVisible(state, true); + newFolderSegment.setVisible(state, false); + editFolderSegment.setVisible(state, false); + + } + + protected void newFolderMode(final PageState state) { + browseSegment.setVisible(state, false); + newFolderSegment.setVisible(state, true); + editFolderSegment.setVisible(state, false); + } + + protected void editFolderMode(final PageState state) { + browseSegment.setVisible(state, false); + newFolderSegment.setVisible(state, false); + editFolderSegment.setVisible(state, true); + } + + @Override + public void register(final Page page) { + + super.register(page); + + page.addActionListener(new TreeListener()); + page.addActionListener(new FolderListener()); + + page.setVisibleDefault(browseSegment, true); + page.setVisibleDefault(newFolderSegment, false); + page.setVisibleDefault(editFolderSegment, false); + } + + @Override + public void reset(final PageState state) { + + super.reset(state); + + } + + private final class FolderListener implements ActionListener { + + @Override + @SuppressWarnings("unchecked") + public void actionPerformed(final ActionEvent event) { + + final PageState state = event.getPageState(); + + if (!selectionModel.isSelected(state)) { + final String folder = state + .getRequest() + .getParameter(SET_FOLDER); + + if (folder == null) { + final Category root = CMS + .getContext() + .getContentSection() + .getRootAssetsFolder(); + final Long folderId = root.getObjectId(); + + selectionModel.setSelectedKey(state, folderId); + } else { + selectionModel.setSelectedKey(state, Long.parseLong(folder)); + } + } + } + + } + + private final class TreeListener implements ActionListener { + + @Override + public void actionPerformed(final ActionEvent event) { + + final PageState state = event.getPageState(); + + final Category root = CMS + .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); + final List ancestorIds = controller.findAncestorIds( + folderRequestLocal.getFolder(state)); + ancestorIds.forEach(id -> tree.expand(id.toString(), state)); + + } + } + + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderAdminPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderAdminPane.java index 8ac028c2d..5dfbbafb3 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderAdminPane.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderAdminPane.java @@ -39,6 +39,7 @@ import com.arsdigita.toolbox.ui.SelectionPanel; import org.libreccm.categorization.CategoryRepository; import org.libreccm.cdi.utils.CdiUtil; import org.librecms.CmsConstants; +import org.librecms.contentsection.Folder; /** @@ -57,7 +58,18 @@ public class FolderAdminPane extends SelectionPanel { public FolderAdminPane() { super(new Label(gz("cms.ui.folder.folders")), - new FolderTreeModelBuilder()); + new FolderTreeModelBuilder() { + + @Override + protected Folder getRootFolder(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + + return section.getRootDocumentsFolder(); + } + + }); m_folder = new FolderRequestLocal(getSelectionModel()); m_param = new BigDecimalParameter(FOLDER_PARAMETER); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderCreateForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderCreateForm.java index 265df4bf6..4d1537e7f 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderCreateForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderCreateForm.java @@ -51,11 +51,13 @@ public class FolderCreateForm extends FolderForm { * Validates the form. Checks for name uniqueness. * * @param event + * @throws com.arsdigita.bebop.FormProcessException * */ @Override public void validate(final FormSectionEvent event) throws FormProcessException { + final Folder folder = getCurrentFolder(event.getPageState()); final FormData data = event.getFormData(); final String name = data.getString(NAME); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderForm.java index 5ee072b10..4ab0da44b 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderForm.java @@ -402,8 +402,7 @@ public abstract class FolderForm extends Form implements FormInitListener, * */ final protected Folder getCurrentFolder(final PageState state) { - final Folder folder = (Folder) currentFolder - .getSelectedObject(state); + final Folder folder = currentFolder.getSelectedObject(state); return folder; } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderManipulator.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderManipulator.java index 2380feb2c..3b4cb8152 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderManipulator.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderManipulator.java @@ -59,6 +59,7 @@ import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.tree.TreeCellRenderer; +import com.arsdigita.cms.CMS; import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.toolbox.ui.ActionGroup; @@ -80,6 +81,7 @@ import org.librecms.CmsConstants; import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentItemManager; import org.librecms.contentsection.ContentItemRepository; +import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.Folder; import org.librecms.contentsection.FolderManager; import org.librecms.contentsection.FolderRepository; @@ -719,7 +721,17 @@ public class FolderManipulator extends SimpleContainer implements public TargetSelector() { super("targetSel", new BoxPanel()); setMethod(GET); - targetModel = new FolderSelectionModel("target"); + targetModel = new FolderSelectionModel("target") { + + @Override + protected Long getRootFolderID(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + return section.getRootDocumentsFolder().getObjectId(); + } + + }; folderTree = new FolderTree(targetModel); folderTree.setCellRenderer(new FolderTreeCellRenderer()); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java index 3d906ea45..5e9fc5dee 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderSelectionModel.java @@ -36,7 +36,7 @@ import org.librecms.contentsection.Folder; * @author David Lutterkort * @author Jens Pelzetter */ -public class FolderSelectionModel extends CcmObjectSelectionModel { +public abstract class FolderSelectionModel extends CcmObjectSelectionModel { public FolderSelectionModel(final String name) { super(Category.class.getName(), name); @@ -84,10 +84,11 @@ public class FolderSelectionModel extends CcmObjectSelectionModel { * @pre s != null * @post return != null */ - protected Long getRootFolderID(final PageState state) { - ContentSection sec = CMS.getContext().getContentSection(); - return sec.getRootDocumentsFolder().getObjectId(); - } + protected abstract Long getRootFolderID(final PageState state); +// { +// ContentSection sec = CMS.getContext().getContentSection(); +// return sec.getRootDocumentsFolder().getObjectId(); +// } /** * Return true, since this selection model will always have a folder diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTree.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTree.java index 829f0f735..6af564622 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTree.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTree.java @@ -20,15 +20,28 @@ package com.arsdigita.cms.ui.folder; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.Tree; +import com.arsdigita.cms.CMS; -import org.librecms.CmsConstants; +import org.librecms.contentsection.ContentSection; +import org.librecms.contentsection.Folder; import static org.librecms.CmsConstants.*; public class FolderTree extends Tree { public FolderTree(final FolderSelectionModel folderSel) { - super(new FolderTreeModelBuilder()); + super(new FolderTreeModelBuilder() { + + @Override + protected Folder getRootFolder(final PageState state) { + final ContentSection section = CMS + .getContext() + .getContentSection(); + + return section.getRootDocumentsFolder(); + } + + }); setSelectionModel(folderSel); } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTreeModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTreeModelBuilder.java index f193bc7b7..3cc24b7a6 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTreeModelBuilder.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderTreeModelBuilder.java @@ -51,7 +51,8 @@ import org.libreccm.configuration.ConfigurationManager; * @author David Lutterkort * @author Jens Pelzetter */ -public class FolderTreeModelBuilder extends LockableImpl +public abstract class FolderTreeModelBuilder + extends LockableImpl implements TreeModelBuilder { /** @@ -121,65 +122,32 @@ public class FolderTreeModelBuilder extends LockableImpl }; - /*return new DataQueryTreeModel(getRoot(state).getID(), - "com.arsdigita.cms.getRootFolder", - "com.arsdigita.cms.getSubFolders") { - - @Override - public Iterator getChildren(TreeNode node, PageState data) { - String nodeKey = node.getKey().toString(); - - // Always expand root node - if (nodeKey.equals(getRoot(data).getKey().toString()) && tree. - isCollapsed(nodeKey, data)) { - tree.expand(nodeKey, data); - } - - if (tree.isCollapsed(nodeKey, data)) { - return Collections.EMPTY_LIST.iterator(); - } - Party party = Kernel.getContext().getParty(); - OID partyOID = null; - if (party == null) { - partyOID = new OID(User.BASE_DATA_OBJECT_TYPE, - PermissionManager.VIRTUAL_PUBLIC_ID); - } else { - partyOID = party.getOID(); - } - UniversalPermissionDescriptor universalPermission - = new UniversalPermissionDescriptor( - SecurityManager.CMS_PREVIEW_ITEM_DESCRIPTOR, - partyOID); - if (PermissionService.checkPermission(universalPermission)) { - // the person is an admin so we just pass in the - // standard, non filtered query - return getDataQueryTreeIterator( - (DataQueryTreeNode) node, - "com.arsdigita.cms.getSubFolders"); - } else { - // now we need to set the parameters - return new NewFolderBrowserIterator( - (DataQueryTreeNode) node, - partyOID); - } - } - };*/ } +// /** +// * Return the root folder for the tree model in the current request. +// * +// * @param state represents the current request +// * +// * @return the root folder for the tree +// * +// */ +//// protected Folder getRootFolder(final PageState state) +// throws IllegalStateException { +// +// final ContentSection section = CMS.getContext().getContentSection(); +// return section.getRootDocumentsFolder(); +// } + /** - * Retrn the root folder for the tree model in the current request. + * Return the root folder for the tree model in the current request. * * @param state represents the current request * * @return the root folder for the tree * */ - protected Folder getRootFolder(final PageState state) - throws IllegalStateException { - - final ContentSection section = CMS.getContext().getContentSection(); - return section.getRootDocumentsFolder(); - } + protected abstract Folder getRootFolder(final PageState state); private class FolderTreeNode implements TreeNode { @@ -219,98 +187,4 @@ public class FolderTreeModelBuilder extends LockableImpl } - /*private class NewFolderBrowserIterator implements Iterator { - - private DataQuery m_nodes; - - public NewFolderBrowserIterator(DataQueryTreeNode node, OID partyOID) { - - BigDecimal userID = (BigDecimal) partyOID.get("id"); - - String sql = "" - + "\n select f.folder_id as id," - + "\n f.label as name," - + "\n count(sub.item_id) as nchild" - + "\n from cms_folders f," - + "\n cms_items i" - + "\n left join" - + "\n (select i2.item_id, f2.label as name, i2.parent_id" - + "\n from cms_folders f2," - + "\n cms_items i2" - + "\n where f2.folder_id = i2.item_id) sub" - + "\n on (sub.parent_id = i.item_id" - + "\n and" - + "\n exists (select 1" - + "\n from dnm_object_1_granted_context dogc," - + "\n dnm_granted_context dgc," - + "\n dnm_permissions dp," - + "\n dnm_group_membership dgm" - + "\n where dogc.pd_object_id = sub.item_id" - + "\n and dogc.pd_context_id = dgc.pd_object_id" - + "\n and dgc.pd_context_id = dp.pd_object_id" - + "\n and dp.pd_grantee_id = dgm.pd_group_id" - + "\n and dgm.pd_member_id in (-200," - + userID + ",-202)" - + "\n and dp." - + TREE_DESCRIPTOR.getColumnName() + " = '1'" - + "\n ) )" - + "\n where i.parent_id = " + node.getID() - + "\n and f.folder_id = i.item_id" - + "\n and exists (" - + "\n select 1 as permission_p" - + "\n from dnm_object_1_granted_context dogc," - + "\n dnm_granted_context dgc," - + "\n dnm_permissions dp," - + "\n dnm_group_membership dgm" - + "\n where dogc.pd_context_id = dgc.pd_object_id" - + "\n and dgc.pd_context_id = dp.pd_object_id" - + "\n and dgm.pd_member_id in (-200," - + userID + ",-202)" - + "\n and dp.pd_grantee_id = dgm.pd_group_id" - + "\n and dogc.pd_object_id = f.folder_id" - + "\n and dp." + TREE_DESCRIPTOR. - getColumnName() + " = '1' )" - + "\n group by f.label, f.folder_id" - + "\n order by lower(f.label)"; - - if (s_log.isDebugEnabled()) { - s_log.debug("Custom SQL: \n" + sql); - } - - m_nodes = new GenericDataQuery( - SessionManager.getSession(), - sql, - new String[]{"id", "name", "nchild"}); - } - - @Override - public Object next() { - BigDecimal id = new BigDecimal(0); - try { - // this appears to be the only portable way to dig numbers out - // of the result set - id = new BigDecimal(m_nodes.get("id").toString()); - } catch (NumberFormatException nfe) { - } - String name = m_nodes.get("name").toString(); - BigDecimal count = new BigDecimal(0); - try { - count = new BigDecimal(m_nodes.get("nchild").toString()); - } catch (NumberFormatException nfe) { - } - - return new DataQueryTreeNode(id, name, count.intValue() > 0); - } - - @Override - public void remove() { - throw new UnsupportedOperationException( - "cannot remove nodes via iterator"); - } - - @Override - public boolean hasNext() { - return m_nodes.next(); - } - }*/ } diff --git a/ccm-cms/src/main/java/org/librecms/assets/SideNote.java b/ccm-cms/src/main/java/org/librecms/assets/SideNote.java index 96e09cfab..148a04005 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/SideNote.java +++ b/ccm-cms/src/main/java/org/librecms/assets/SideNote.java @@ -45,17 +45,7 @@ import static org.librecms.CmsConstants.*; public class SideNote extends Asset implements Serializable { private static final long serialVersionUID = -4566222634780521726L; - - @Embedded - @AssociationOverride( - name = "values", - joinTable = @JoinTable(name = "SIDE_NOTE_TITLES", - schema = DB_SCHEMA, - joinColumns = { - @JoinColumn(name = "SIDE_NOTE_ID") - })) - private LocalizedString title; - + @Embedded @AssociationOverride( name = "values", diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_12__remove_side_note_titles.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_12__remove_side_note_titles.sql new file mode 100644 index 000000000..1eb4d3698 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_12__remove_side_note_titles.sql @@ -0,0 +1,3 @@ +DROP TABLE ccm_cms.side_note_titles_aud; + +DROP TABLE ccm_cms.side_note_titles; diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_12__remove_side_note_titles.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_12__remove_side_note_titles.sql new file mode 100644 index 000000000..1eb4d3698 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_12__remove_side_note_titles.sql @@ -0,0 +1,3 @@ +DROP TABLE ccm_cms.side_note_titles_aud; + +DROP TABLE ccm_cms.side_note_titles; diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties index efc36318a..5379cde1a 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties @@ -244,3 +244,4 @@ cms.ui.type.lifecycle.select=Select the default lifecycle cms.ui.type.workflow.select=Select default workflow cms.ui.type.select=Select Content Type cms.ui.type.select.none=There are no available content types to select +cms.ui.assets=Assets diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties index 1aa9dd2c6..97099400c 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties @@ -243,3 +243,4 @@ cms.ui.type.lifecycle.select=Voreingestellten Ver\u00f6ffentlichungszyklus ausw\ cms.ui.type.workflow.select=Voreingestellten Arbeitsablauf ausw\u00e4hlen cms.ui.type.select=Dolkumententype ausw\u00e4hlen cms.ui.type.select.none=Keine verf\u00fcgbaren Dokumententypen +cms.ui.assets=Medien & Daten diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties index 2afc0f694..5d4a644b0 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties @@ -202,3 +202,4 @@ cms.ui.type.lifecycle.select=Select the default lifecycle cms.ui.type.workflow.select=Select default workflow cms.ui.type.select=Select Content Type cms.ui.type.select.none=There are no available content types to select +cms.ui.assets=Assets diff --git a/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql b/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql index e72b19eed..cdf06f5d4 100644 --- a/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql +++ b/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql @@ -802,23 +802,6 @@ create schema CCM_CORE; primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) ); - create table CCM_CMS.SIDE_NOTE_TITLES ( - SIDE_NOTE_ID bigint not null, - LOCALIZED_VALUE longvarchar, - LOCALE varchar(255) not null, - primary key (SIDE_NOTE_ID, LOCALE) - ); - - create table CCM_CMS.SIDE_NOTE_TITLES_AUD ( - REV integer not null, - SIDE_NOTE_ID bigint not null, - LOCALIZED_VALUE longvarchar not null, - LOCALE varchar(255) not null, - REVTYPE tinyint, - REVEND integer, - primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) - ); - create table CCM_CMS.SIDE_NOTES ( OBJECT_ID bigint not null, primary key (OBJECT_ID) diff --git a/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql b/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql index caa2feb83..71bfb2fb0 100644 --- a/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql +++ b/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql @@ -803,23 +803,6 @@ create schema CCM_CORE; primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) ); - create table CCM_CMS.SIDE_NOTE_TITLES ( - SIDE_NOTE_ID int8 not null, - LOCALIZED_VALUE text, - LOCALE varchar(255) not null, - primary key (SIDE_NOTE_ID, LOCALE) - ); - - create table CCM_CMS.SIDE_NOTE_TITLES_AUD ( - REV int4 not null, - SIDE_NOTE_ID int8 not null, - LOCALIZED_VALUE text not null, - LOCALE varchar(255) not null, - REVTYPE int2, - REVEND int4, - primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) - ); - create table CCM_CMS.SIDE_NOTES ( OBJECT_ID int8 not null, primary key (OBJECT_ID) diff --git a/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql b/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql index 4668a5f7e..b5acb4fba 100644 --- a/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql +++ b/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql @@ -803,23 +803,6 @@ create schema CCM_CORE; primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) ); - create table CCM_CMS.SIDE_NOTE_TITLES ( - SIDE_NOTE_ID bigint not null, - LOCALIZED_VALUE longvarchar, - LOCALE varchar(255) not null, - primary key (SIDE_NOTE_ID, LOCALE) - ); - - create table CCM_CMS.SIDE_NOTE_TITLES_AUD ( - REV integer not null, - SIDE_NOTE_ID bigint not null, - LOCALIZED_VALUE longvarchar not null, - LOCALE varchar(255) not null, - REVTYPE tinyint, - REVEND integer, - primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) - ); - create table CCM_CMS.SIDE_NOTES ( OBJECT_ID bigint not null, primary key (OBJECT_ID)