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
ccm-docs
jensp 2017-03-29 15:40:58 +00:00
parent 1cabb2513b
commit f72473954a
20 changed files with 496 additions and 253 deletions

View File

@ -73,9 +73,29 @@ public class BrowsePane extends LayoutPanel implements Resettable {
public BrowsePane() { public BrowsePane() {
/* The folder tree displayed on the left side / left column */ /* 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(); 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); folderRequestLocal = new FolderRequestLocal(folderModel);
final SegmentedPanel left = new SegmentedPanel(); final SegmentedPanel left = new SegmentedPanel();
@ -157,11 +177,14 @@ public class BrowsePane extends LayoutPanel implements Resettable {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
if (!selectionModel.isSelected(state)) { if (!selectionModel.isSelected(state)) {
final String folder = state.getRequest().getParameter( final String folder = state
ContentSectionPage.SET_FOLDER); .getRequest()
.getParameter(ContentSectionPage.SET_FOLDER);
if (folder == null) { if (folder == null) {
final Category root = CMS.getContext().getContentSection() final Category root = CMS
.getContext()
.getContentSection()
.getRootDocumentsFolder(); .getRootDocumentsFolder();
final Long folderID = root.getObjectId(); final Long folderID = root.getObjectId();
@ -178,7 +201,7 @@ public class BrowsePane extends LayoutPanel implements Resettable {
}*/ }*/
selectionModel.setSelectedKey(state, folderID); selectionModel.setSelectedKey(state, folderID);
} else { } 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) { public final void actionPerformed(final ActionEvent event) {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
if (Assert.isEnabled()) { final Category root = CMS
Assert.isTrue(selectionModel.isSelected(state)); .getContext()
} .getContentSection()
final Category root = CMS.getContext().getContentSection()
.getRootDocumentsFolder(); .getRootDocumentsFolder();
if (!root.equals(folderRequestLocal.getFolder(state))) { if (!root.equals(folderRequestLocal.getFolder(state))) {
@ -208,26 +229,6 @@ public class BrowsePane extends LayoutPanel implements Resettable {
folderRequestLocal.getFolder(state)); folderRequestLocal.getFolder(state));
ancestorIds.forEach(id -> tree.expand(id.toString(), 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;
// }
// }
} }
} }

View File

@ -35,6 +35,7 @@ import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import com.arsdigita.cms.dispatcher.CMSPage; import com.arsdigita.cms.dispatcher.CMSPage;
import com.arsdigita.cms.ui.assets.AssetPane;
//ToDo NG import com.arsdigita.cms.ui.category.CategoryAdminPane; //ToDo NG import com.arsdigita.cms.ui.category.CategoryAdminPane;
import com.arsdigita.cms.ui.cse.ContentSoonExpiredPane; import com.arsdigita.cms.ui.cse.ContentSoonExpiredPane;
import com.arsdigita.cms.ui.folder.FolderAdminPane; import com.arsdigita.cms.ui.folder.FolderAdminPane;
@ -121,6 +122,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener {
private FolderAdminPane m_folderPane; private FolderAdminPane m_folderPane;
private BrowsePane m_browsePane; private BrowsePane m_browsePane;
private ItemSearch m_searchPane; private ItemSearch m_searchPane;
private AssetPane m_assetPane;
//ToDo NG private ImagesPane m_imagesPane; //ToDo NG private ImagesPane m_imagesPane;
private RoleAdminPane m_rolePane; private RoleAdminPane m_rolePane;
private WorkflowAdminPane m_workflowPane; private WorkflowAdminPane m_workflowPane;
@ -148,6 +150,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener {
m_folderPane = getFolderAdminPane(); m_folderPane = getFolderAdminPane();
m_browsePane = getBrowsePane(); m_browsePane = getBrowsePane();
m_searchPane = getSearchPane(); m_searchPane = getSearchPane();
m_assetPane = getAssetPane();
//ToDo NG m_imagesPane = getImagesPane(); //ToDo NG m_imagesPane = getImagesPane();
m_rolePane = getRoleAdminPane(); m_rolePane = getRoleAdminPane();
m_workflowPane = getWorkflowAdminPane(); m_workflowPane = getWorkflowAdminPane();
@ -259,6 +262,15 @@ public class ContentSectionPage extends CMSPage implements ActionListener {
} }
return m_searchPane; return m_searchPane;
} }
protected AssetPane getAssetPane() {
if (m_assetPane == null) {
m_assetPane = new AssetPane();
}
return m_assetPane;
}
// ToDo NG // ToDo NG
// protected ImagesPane getImagesPane() { // protected ImagesPane getImagesPane() {
// if (m_imagesPane == null) { // if (m_imagesPane == null) {
@ -266,7 +278,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener {
// } // }
// return m_imagesPane; // return m_imagesPane;
// } // }
protected RoleAdminPane getRoleAdminPane() { protected RoleAdminPane getRoleAdminPane() {
if (m_rolePane == null) { if (m_rolePane == null) {
m_rolePane = new RoleAdminPane(); 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.folders", getFolderAdminPane());
tab(pane, "cms.ui.browse", getBrowsePane()); tab(pane, "cms.ui.browse", getBrowsePane());
tab(pane, "cms.ui.search", getSearchPane()); tab(pane, "cms.ui.search", getSearchPane());
tab(pane, "cms.ui.assets", getAssetPane());
// ToDo NG replace with media tab tab(pane, "cms.ui.images", getImagesPane()); // ToDo NG replace with media tab tab(pane, "cms.ui.images", getImagesPane());
tab(pane, "cms.ui.roles", getRoleAdminPane()); tab(pane, "cms.ui.roles", getRoleAdminPane());
tab(pane, "cms.ui.workflows", getWorkflowAdminPane()); tab(pane, "cms.ui.workflows", getWorkflowAdminPane());
@ -433,7 +445,9 @@ public class ContentSectionPage extends CMSPage implements ActionListener {
// } else if (pane == m_imagesPane) { // } else if (pane == m_imagesPane) {
// m_imagesPane.reset(state); // m_imagesPane.reset(state);
// } else // } else
if (pane == m_folderPane) { if (pane == m_assetPane) {
m_assetPane.reset(state);
} else if (pane == m_folderPane) {
m_folderPane.reset(state); m_folderPane.reset(state);
//ToDo NG } else if (pane == m_browsePane) { //ToDo NG } else if (pane == m_browsePane) {
// m_browsePane.reset(state); // m_browsePane.reset(state);

View File

@ -18,10 +18,21 @@
*/ */
package com.arsdigita.cms.ui.assets; package com.arsdigita.cms.ui.assets;
import com.arsdigita.bebop.Container;
import com.arsdigita.bebop.Form;
/** /**
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
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);
}
} }

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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<Long> ancestorIds = controller.findAncestorIds(
folderRequestLocal.getFolder(state));
ancestorIds.forEach(id -> tree.expand(id.toString(), state));
}
}
}
}

View File

@ -39,6 +39,7 @@ import com.arsdigita.toolbox.ui.SelectionPanel;
import org.libreccm.categorization.CategoryRepository; import org.libreccm.categorization.CategoryRepository;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import org.librecms.contentsection.Folder;
/** /**
@ -57,7 +58,18 @@ public class FolderAdminPane extends SelectionPanel {
public FolderAdminPane() { public FolderAdminPane() {
super(new Label(gz("cms.ui.folder.folders")), 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_folder = new FolderRequestLocal(getSelectionModel());
m_param = new BigDecimalParameter(FOLDER_PARAMETER); m_param = new BigDecimalParameter(FOLDER_PARAMETER);

View File

@ -51,11 +51,13 @@ public class FolderCreateForm extends FolderForm {
* Validates the form. Checks for name uniqueness. * Validates the form. Checks for name uniqueness.
* *
* @param event * @param event
* @throws com.arsdigita.bebop.FormProcessException
* *
*/ */
@Override @Override
public void validate(final FormSectionEvent event) public void validate(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final Folder folder = getCurrentFolder(event.getPageState()); final Folder folder = getCurrentFolder(event.getPageState());
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final String name = data.getString(NAME); final String name = data.getString(NAME);

View File

@ -402,8 +402,7 @@ public abstract class FolderForm extends Form implements FormInitListener,
* *
*/ */
final protected Folder getCurrentFolder(final PageState state) { final protected Folder getCurrentFolder(final PageState state) {
final Folder folder = (Folder) currentFolder final Folder folder = currentFolder.getSelectedObject(state);
.getSelectedObject(state);
return folder; return folder;
} }

View File

@ -59,6 +59,7 @@ import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableCellRenderer;
import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.table.TableColumn;
import com.arsdigita.bebop.tree.TreeCellRenderer; import com.arsdigita.bebop.tree.TreeCellRenderer;
import com.arsdigita.cms.CMS;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.ActionGroup;
@ -80,6 +81,7 @@ import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentItem; 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.ContentSection;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
import org.librecms.contentsection.FolderManager; import org.librecms.contentsection.FolderManager;
import org.librecms.contentsection.FolderRepository; import org.librecms.contentsection.FolderRepository;
@ -719,7 +721,17 @@ public class FolderManipulator extends SimpleContainer implements
public TargetSelector() { public TargetSelector() {
super("targetSel", new BoxPanel()); super("targetSel", new BoxPanel());
setMethod(GET); 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 = new FolderTree(targetModel);
folderTree.setCellRenderer(new FolderTreeCellRenderer()); folderTree.setCellRenderer(new FolderTreeCellRenderer());

View File

@ -36,7 +36,7 @@ import org.librecms.contentsection.Folder;
* @author <a href="mailto:lutter@arsdigita.com">David Lutterkort</a> * @author <a href="mailto:lutter@arsdigita.com">David Lutterkort</a>
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class FolderSelectionModel extends CcmObjectSelectionModel<Folder> { public abstract class FolderSelectionModel extends CcmObjectSelectionModel<Folder> {
public FolderSelectionModel(final String name) { public FolderSelectionModel(final String name) {
super(Category.class.getName(), name); super(Category.class.getName(), name);
@ -84,10 +84,11 @@ public class FolderSelectionModel extends CcmObjectSelectionModel<Folder> {
* @pre s != null * @pre s != null
* @post return != null * @post return != null
*/ */
protected Long getRootFolderID(final PageState state) { protected abstract Long getRootFolderID(final PageState state);
ContentSection sec = CMS.getContext().getContentSection(); // {
return sec.getRootDocumentsFolder().getObjectId(); // ContentSection sec = CMS.getContext().getContentSection();
} // return sec.getRootDocumentsFolder().getObjectId();
// }
/** /**
* Return true, since this selection model will always have a folder * Return true, since this selection model will always have a folder

View File

@ -20,15 +20,28 @@ package com.arsdigita.cms.ui.folder;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Tree; 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.*; 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) {
super(new FolderTreeModelBuilder()); super(new FolderTreeModelBuilder() {
@Override
protected Folder getRootFolder(final PageState state) {
final ContentSection section = CMS
.getContext()
.getContentSection();
return section.getRootDocumentsFolder();
}
});
setSelectionModel(folderSel); setSelectionModel(folderSel);
} }

View File

@ -51,7 +51,8 @@ import org.libreccm.configuration.ConfigurationManager;
* @author <a href="mailto:lutter@arsdigita.com">David Lutterkort</a> * @author <a href="mailto:lutter@arsdigita.com">David Lutterkort</a>
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class FolderTreeModelBuilder extends LockableImpl public abstract class FolderTreeModelBuilder
extends LockableImpl
implements TreeModelBuilder { 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(); // * Return the root folder for the tree model in the current request.
} // *
Party party = Kernel.getContext().getParty(); // * @param state represents the current request
OID partyOID = null; // *
if (party == null) { // * @return the root folder for the tree
partyOID = new OID(User.BASE_DATA_OBJECT_TYPE, // *
PermissionManager.VIRTUAL_PUBLIC_ID); // */
} else { //// protected Folder getRootFolder(final PageState state)
partyOID = party.getOID(); // throws IllegalStateException {
} //
UniversalPermissionDescriptor universalPermission // final ContentSection section = CMS.getContext().getContentSection();
= new UniversalPermissionDescriptor( // return section.getRootDocumentsFolder();
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);
}
}
};*/
}
/** /**
* 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 * @param state represents the current request
* *
* @return the root folder for the tree * @return the root folder for the tree
* *
*/ */
protected Folder getRootFolder(final PageState state) protected abstract Folder getRootFolder(final PageState state);
throws IllegalStateException {
final ContentSection section = CMS.getContext().getContentSection();
return section.getRootDocumentsFolder();
}
private class FolderTreeNode implements TreeNode { 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();
}
}*/
} }

View File

@ -46,16 +46,6 @@ public class SideNote extends Asset implements Serializable {
private static final long serialVersionUID = -4566222634780521726L; 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 @Embedded
@AssociationOverride( @AssociationOverride(
name = "values", name = "values",

View File

@ -0,0 +1,3 @@
DROP TABLE ccm_cms.side_note_titles_aud;
DROP TABLE ccm_cms.side_note_titles;

View File

@ -0,0 +1,3 @@
DROP TABLE ccm_cms.side_note_titles_aud;
DROP TABLE ccm_cms.side_note_titles;

View File

@ -244,3 +244,4 @@ cms.ui.type.lifecycle.select=Select the default lifecycle
cms.ui.type.workflow.select=Select default workflow cms.ui.type.workflow.select=Select default workflow
cms.ui.type.select=Select Content Type cms.ui.type.select=Select Content Type
cms.ui.type.select.none=There are no available content types to select cms.ui.type.select.none=There are no available content types to select
cms.ui.assets=Assets

View File

@ -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.workflow.select=Voreingestellten Arbeitsablauf ausw\u00e4hlen
cms.ui.type.select=Dolkumententype ausw\u00e4hlen cms.ui.type.select=Dolkumententype ausw\u00e4hlen
cms.ui.type.select.none=Keine verf\u00fcgbaren Dokumententypen cms.ui.type.select.none=Keine verf\u00fcgbaren Dokumententypen
cms.ui.assets=Medien & Daten

View File

@ -202,3 +202,4 @@ cms.ui.type.lifecycle.select=Select the default lifecycle
cms.ui.type.workflow.select=Select default workflow cms.ui.type.workflow.select=Select default workflow
cms.ui.type.select=Select Content Type cms.ui.type.select=Select Content Type
cms.ui.type.select.none=There are no available content types to select cms.ui.type.select.none=There are no available content types to select
cms.ui.assets=Assets

View File

@ -802,23 +802,6 @@ create schema CCM_CORE;
primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) 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 ( create table CCM_CMS.SIDE_NOTES (
OBJECT_ID bigint not null, OBJECT_ID bigint not null,
primary key (OBJECT_ID) primary key (OBJECT_ID)

View File

@ -803,23 +803,6 @@ create schema CCM_CORE;
primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) 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 ( create table CCM_CMS.SIDE_NOTES (
OBJECT_ID int8 not null, OBJECT_ID int8 not null,
primary key (OBJECT_ID) primary key (OBJECT_ID)

View File

@ -803,23 +803,6 @@ create schema CCM_CORE;
primary key (REV, SIDE_NOTE_ID, LOCALIZED_VALUE, LOCALE) 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 ( create table CCM_CMS.SIDE_NOTES (
OBJECT_ID bigint not null, OBJECT_ID bigint not null,
primary key (OBJECT_ID) primary key (OBJECT_ID)