From 98059e41db2dff2933893536699f072603707c7b Mon Sep 17 00:00:00 2001 From: jensp Date: Tue, 14 Feb 2017 18:26:07 +0000 Subject: [PATCH] CCM NG/ccm-cms: FolderBrowser now shows up, buts needs more testing git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4561 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/ui/authoring/NewItemForm.java | 6 +- .../cms/ui/folder/FolderBrowser.java | 839 ++++++++---------- .../ui/folder/FolderBrowserController.java | 68 +- .../FolderBrowserPaginationModelBuilder.java | 6 +- .../FolderBrowserTableModelBuilder.java | 2 - .../cms/ui/folder/FolderManipulator.java | 407 ++++----- .../contentsection/ContentSection.java | 16 +- .../ContentSectionRepository.java | 12 +- .../contentsection/ContentSectionSetup.java | 62 +- .../org/librecms/contentsection/Folder.java | 134 +-- .../org/librecms/CmsResources.properties | 6 +- .../org/librecms/CmsResources_de.properties | 6 +- .../org/librecms/CmsResources_fr.properties | 4 + 13 files changed, 813 insertions(+), 755 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewItemForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewItemForm.java index 8a8d0817b..db489ca97 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewItemForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewItemForm.java @@ -186,8 +186,10 @@ public abstract class NewItemForm extends Form { if (isVisible(state)) { final ContentSection section = getContentSection(state); - final List types = section.getContentTypes(); - boolean isEmpty = types.isEmpty(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final NewItemFormController controller = cdiUtil.findBean( + NewItemFormController.class); + boolean isEmpty = !controller.hasContentTypes(section); createLabel.setVisible(state, !isEmpty); typeSelect.setVisible(state, !isEmpty); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowser.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowser.java index 9c6bc7803..6edf05d64 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowser.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowser.java @@ -25,7 +25,6 @@ import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Link; import com.arsdigita.bebop.Page; import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.PaginationModelBuilder; import com.arsdigita.bebop.Paginator; import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.Table; @@ -35,54 +34,31 @@ import com.arsdigita.bebop.event.TableActionAdapter; import com.arsdigita.bebop.event.TableActionEvent; import com.arsdigita.bebop.event.TableActionListener; import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.bebop.table.AbstractTableModelBuilder; 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.bebop.table.TableModel; import com.arsdigita.cms.CMS; import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.kernel.KernelConfig; -import com.arsdigita.toolbox.ui.FormatStandards; import com.arsdigita.util.Assert; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; -import org.libreccm.auditing.CcmRevision; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Optional; - -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; import javax.servlet.ServletException; -import org.libreccm.categorization.Categorization; import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryManager; import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.core.CcmObject; import org.libreccm.security.PermissionChecker; 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.ContentSectionManager; -import org.librecms.contentsection.Folder; import org.librecms.contentsection.privileges.ItemPrivileges; import org.librecms.dispatcher.ItemResolver; -import java.util.Date; -import java.util.stream.Collectors; - /** * Browse folders and items. If the user clicks on a folder, the folder * selection model is updated. If the user clicks on any other item, an separate @@ -94,62 +70,51 @@ import java.util.stream.Collectors; */ public class FolderBrowser extends Table { - private static final Logger LOGGER = LogManager.getLogger( - FolderBrowser.class); - - private static GlobalizedMessage[] s_headers = { + private static final GlobalizedMessage[] HEADERS = { globalize("cms.ui.folder.name"), globalize("cms.ui.folder.languages"), globalize("cms.ui.folder.title"), - globalize("cms.ui.folder.additionalInfo"), - globalize("cms.ui.folder.type"), - globalize("cms.ui.folder.creation_date"), - globalize("cms.ui.folder.last_modified"), - globalize("cms.ui.folder.action"), - globalize("cms.ui.folder.index")}; - private static GlobalizedMessage[] s_noIndexHeaders = { - globalize("cms.ui.folder.name"), - globalize("cms.ui.folder.languages"), - globalize("cms.ui.folder.title"), - globalize("cms.ui.folder.additionalInfo"), +// globalize("cms.ui.folder.additionalInfo"), globalize("cms.ui.folder.type"), globalize("cms.ui.folder.creation_date"), globalize("cms.ui.folder.last_modified"), globalize("cms.ui.folder.action")}; private static final String SORT_ACTION_UP = "sortActionUp"; private static final String SORT_ACTION_DOWN = "sortActionDown"; - private FolderSelectionModel m_currentFolder; - private TableActionListener m_folderChanger; - private TableActionListener m_deleter; - private TableActionListener m_indexChanger; - private TableColumn m_nameColumn; - private TableColumn m_deleteColumn; - private TableColumn m_indexColumn; private final static String SORT_KEY_NAME = "name"; private final static String SORT_KEY_TITLE = "title"; private final static String SORT_KEY_LAST_MODIFIED_DATE = "lastModified"; private final static String SORT_KEY_CREATION_DATE = "creationDate"; - private StringParameter m_sortType = new StringParameter("sortType"); - private StringParameter m_sortDirection = new StringParameter("sortDirn"); - private StringParameter m_aToZfilter = null; - private StringParameter m_filter = null; - private FolderManipulator.FilterForm m_filterForm; - private long m_folderSize; - public FolderBrowser(FolderSelectionModel currentFolder) { - //super(new FolderTableModelBuilder(), s_headers); + private final FolderSelectionModel folderSelectionModel; + private final TableActionListener folderChanger; + private final TableActionListener folderDeleter; +// private TableActionListener m_indexChanger; + private final TableColumn nameColumn; + private final TableColumn deleteColumn; +// private TableColumn m_indexColumn; + private final StringParameter sortTypeParameter = new StringParameter("sortType"); + private final StringParameter sortDirectionParameter = new StringParameter( + "sortDirn"); + + private StringParameter atozFilterParameter = null; + private StringParameter filterParameter = null; + private FolderManipulator folderManipulator; + private Paginator paginator; +// private FolderManipulator.FilterForm filterForm; + private long folderSize; + + public FolderBrowser(final FolderSelectionModel folderSelectionModel) { super(); - m_sortType.setDefaultValue(SORT_KEY_NAME); - m_sortDirection.setDefaultValue(SORT_ACTION_UP); + sortTypeParameter.setDefaultValue(SORT_KEY_NAME); + sortDirectionParameter.setDefaultValue(SORT_ACTION_UP); - setModelBuilder(new FolderTableModelBuilder(currentFolder)); - setColumnModel(new DefaultTableColumnModel(hideIndexColumn() - ? s_noIndexHeaders - : s_headers)); + setModelBuilder(new FolderBrowserTableModelBuilder()); + setColumnModel(new DefaultTableColumnModel(HEADERS)); setHeader(new TableHeader(getColumnModel())); - m_currentFolder = currentFolder; - + this.folderSelectionModel = folderSelectionModel; + /* * * This code should be uncommented if the desired behaviour is for a @@ -173,40 +138,44 @@ public class FolderBrowser extends Table { getHeader().setDefaultRenderer( new com.arsdigita.cms.ui.util.DefaultTableCellRenderer()); - m_nameColumn = getColumn(0); - m_nameColumn.setCellRenderer(new NameCellRenderer()); - m_nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME)); + nameColumn = getColumn(0); + nameColumn.setCellRenderer(new NameCellRenderer()); + nameColumn.setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_NAME)); getColumn(1).setCellRenderer(new LanguagesCellRenderer()); getColumn(2).setHeaderRenderer(new HeaderCellRenderer(SORT_KEY_TITLE)); getColumn(5).setHeaderRenderer(new HeaderCellRenderer( SORT_KEY_CREATION_DATE)); getColumn(6).setHeaderRenderer(new HeaderCellRenderer( SORT_KEY_LAST_MODIFIED_DATE)); - m_deleteColumn = getColumn(7); - m_deleteColumn.setCellRenderer(new ActionCellRenderer()); - m_deleteColumn.setAlign("center"); - m_folderChanger = new FolderChanger(); - addTableActionListener(m_folderChanger); + deleteColumn = getColumn(6); + deleteColumn.setCellRenderer(new ActionCellRenderer()); + deleteColumn.setAlign("center"); + folderChanger = new FolderChanger(); + addTableActionListener(folderChanger); - m_deleter = new ItemDeleter(); - addTableActionListener(m_deleter); + folderDeleter = new ItemDeleter(); + addTableActionListener(folderDeleter); setEmptyView(new Label(globalize("cms.ui.folder.no_items"))); - Assert.exists(m_currentFolder.getStateParameter()); + Assert.exists(folderSelectionModel.getStateParameter()); } @Override - public void register(Page p) { - super.register(p); + public void register(final Page page) { + super.register(page); - p.addComponentStateParam(this, m_currentFolder.getStateParameter()); - p.addComponentStateParam(this, m_sortType); - p.addComponentStateParam(this, m_sortDirection); - p.addActionListener(new ActionListener() { + page.addComponentStateParam(this, + folderSelectionModel.getStateParameter()); + page.addComponentStateParam(this, + sortTypeParameter); + page.addComponentStateParam(this, + sortDirectionParameter); + page.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - final PageState state = e.getPageState(); + @Override + public void actionPerformed(final ActionEvent event) { + final PageState state = event.getPageState(); if (state.isVisibleOnPage(FolderBrowser.this)) { showHideFolderActions(state); @@ -216,139 +185,148 @@ public class FolderBrowser extends Table { }); } - private void showHideFolderActions(PageState state) { + private void showHideFolderActions(final PageState state) { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final PermissionChecker permissionChecker = cdiUtil.findBean( PermissionChecker.class); - Category folder = (Category) m_currentFolder.getSelectedObject(state); - Assert.exists(folder); + final Category folder = (Category) folderSelectionModel + .getSelectedObject( + state); final boolean canDelete = permissionChecker.isPermitted( ItemPrivileges.DELETE, folder); - m_deleteColumn.setVisible(state, canDelete); + deleteColumn.setVisible(state, canDelete); } @Override - public void respond(PageState state) throws ServletException { - String key = state.getControlEventName(); - String value = state.getControlEventValue(); + public void respond(final PageState state) throws ServletException { + final String key = state.getControlEventName(); + final String value = state.getControlEventValue(); if (SORT_ACTION_UP.equals(key)) { - state.setValue(m_sortType, value); - state.setValue(m_sortDirection, SORT_ACTION_UP); + state.setValue(sortTypeParameter, value); + state.setValue(sortDirectionParameter, SORT_ACTION_UP); } else if (SORT_ACTION_DOWN.equals(key)) { - state.setValue(m_sortType, value); - state.setValue(m_sortDirection, SORT_ACTION_DOWN); + state.setValue(sortTypeParameter, value); + state.setValue(sortDirectionParameter, SORT_ACTION_DOWN); } else { super.respond(state); - //throw new ServletException("Unknown control event: " + key); } } public FolderSelectionModel getFolderSelectionModel() { - return m_currentFolder; + return folderSelectionModel; + } + + protected void setFolderManipulator(final FolderManipulator folderManipulator) { + this.folderManipulator = folderManipulator; } - protected void setFilterForm(FolderManipulator.FilterForm filterForm) { - m_filterForm = filterForm; +// protected void setFilterForm(final FolderManipulator.FilterForm filterForm) { +// this.filterForm = filterForm; +// } + + protected void setAtoZfilterParameter( + final StringParameter atozFilterParameter) { + this.atozFilterParameter = atozFilterParameter; } - protected void setAtoZfilterParameter(StringParameter aToZfilter) { - m_aToZfilter = aToZfilter; - } - - protected void setFilterParameter(StringParameter filter) { - m_filter = filter; + protected void setFilterParameter(final StringParameter filterParameter) { + this.filterParameter = filterParameter; } protected long getFolderSize() { - return m_folderSize; + return folderSize; } protected Paginator getPaginator() { - throw new UnsupportedOperationException(); + return paginator; } + protected void setPaginator(final Paginator paginator) { + this.paginator = paginator; + } + protected String getFilter(final PageState state) { - return (String) state.getValue(m_filter); + return (String) state.getValue(filterParameter); } - + protected String getAtoZfilter(final PageState state) { - return (String) state.getValue(m_aToZfilter); - } - - private class FolderTableModelBuilder - extends AbstractTableModelBuilder - implements PaginationModelBuilder, - FolderManipulator.FilterFormModelBuilder { - - private final FolderSelectionModel folderModel; - private final FolderBrowser folderBrowser; -// private final ContentItemRepository itemRepo; -// private final ConfigurationManager confManager; -// private final ContentSectionManager sectionManager; - final FolderBrowserController controller; - - public FolderTableModelBuilder(final FolderSelectionModel folderModel) { - this(folderModel, null); - } - - public FolderTableModelBuilder(final FolderSelectionModel folderModel, - final FolderBrowser folderBrowser) { - this.folderModel = folderModel; - this.folderBrowser = folderBrowser; - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - controller = cdiUtil.findBean(FolderBrowserController.class); -// itemRepo = cdiUtil.findBean(ContentItemRepository.class); -// confManager = cdiUtil.findBean(ConfigurationManager.class); -// sectionManager = cdiUtil.findBean(ContentSectionManager.class); - } - - @Override - public TableModel makeModel(final Table table, final PageState state) { - final FolderSelectionModel folderSelectionModel - = getFolderSelectionModel(); - final Folder folder = folderSelectionModel.getSelectedObject(state); - if (folder == null) { - return Table.EMPTY_MODEL; - } else { - table.getRowSelectionModel().clearSelection(state); - final List subFolders = folder.getSubFolders(); - final List items = folder.getObjects() - .stream() - .map(categorization -> categorization.getCategorizedObject()) - .filter(object -> object instanceof ContentItem) - .map(object -> (ContentItem) object) - .collect(Collectors.toList()); - - final List objects = new ArrayList<>(); - objects.addAll(subFolders); - objects.addAll(items); - - - } - - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public int getTotalSize(final Paginator paginator, - final PageState state) { - throw new UnsupportedOperationException(); - - } - - @Override - public boolean isVisible(final PageState state) { - return folderBrowser != null && folderBrowser.isVisible(state); - } - - @Override - public long getFolderSize(final PageState state) { - throw new UnsupportedOperationException(); - } - + return (String) state.getValue(atozFilterParameter); } +// private class FolderTableModelBuilder +// extends AbstractTableModelBuilder +// implements PaginationModelBuilder, +// FolderManipulator.FilterFormModelBuilder { +// +// private final FolderSelectionModel folderModel; +// private final FolderBrowser folderBrowser; +//// private final ContentItemRepository itemRepo; +//// private final ConfigurationManager confManager; +//// private final ContentSectionManager sectionManager; +// final FolderBrowserController controller; +// +// public FolderTableModelBuilder(final FolderSelectionModel folderModel) { +// this(folderModel, null); +// } +// +// public FolderTableModelBuilder(final FolderSelectionModel folderModel, +// final FolderBrowser folderBrowser) { +// this.folderModel = folderModel; +// this.folderBrowser = folderBrowser; +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); +// controller = cdiUtil.findBean(FolderBrowserController.class); +//// itemRepo = cdiUtil.findBean(ContentItemRepository.class); +//// confManager = cdiUtil.findBean(ConfigurationManager.class); +//// sectionManager = cdiUtil.findBean(ContentSectionManager.class); +// } +// +// @Override +// public TableModel makeModel(final Table table, final PageState state) { +// final FolderSelectionModel folderSelectionModel +// = getFolderSelectionModel(); +// final Folder folder = folderSelectionModel.getSelectedObject(state); +// if (folder == null) { +// return Table.EMPTY_MODEL; +// } else { +// table.getRowSelectionModel().clearSelection(state); +// final List subFolders = folder.getSubFolders(); +// final List items = folder.getObjects() +// .stream() +// .map(categorization -> categorization.getCategorizedObject()) +// .filter(object -> object instanceof ContentItem) +// .map(object -> (ContentItem) object) +// .collect(Collectors.toList()); +// +// final List objects = new ArrayList<>(); +// objects.addAll(subFolders); +// objects.addAll(items); +// +// +// } +// +// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. +// } +// +// @Override +// public int getTotalSize(final Paginator paginator, +// final PageState state) { +// throw new UnsupportedOperationException(); +// +// } +// +// @Override +// public boolean isVisible(final PageState state) { +// return folderBrowser != null && folderBrowser.isVisible(state); +// } +// +// @Override +// public long getFolderSize(final PageState state) { +// throw new UnsupportedOperationException(); +// } +// +// } +// private class HeaderCellRenderer extends com.arsdigita.cms.ui.util.DefaultTableCellRenderer { @@ -360,18 +338,19 @@ public class FolderBrowser extends Table { } @Override - public Component getComponent(final Table table, final PageState state, + public Component getComponent(final Table table, + final PageState state, final Object value, - boolean isSelected, + final boolean isSelected, final Object key, - final int row, + final int row, final int column) { - String headerName = (String) ((GlobalizedMessage) value).localize(); - String sortKey = (String) state.getValue(m_sortType); + final GlobalizedMessage headerName = (GlobalizedMessage) value; + final String sortKey = (String) state.getValue(sortTypeParameter); final boolean isCurrentKey = sortKey.equals(key); final String currentSortDirection = (String) state.getValue( - m_sortDirection); - String imageURLStub; + sortDirectionParameter); + final String imageURLStub; if (SORT_ACTION_UP.equals(currentSortDirection)) { imageURLStub = "gray-triangle-up.gif"; @@ -379,7 +358,7 @@ public class FolderBrowser extends Table { imageURLStub = "gray-triangle-down.gif"; } - ControlLink cl = new ControlLink(headerName) { + final ControlLink link = new ControlLink(new Label(headerName)) { @Override public void setControlEvent(PageState ps) { @@ -398,24 +377,25 @@ public class FolderBrowser extends Table { } }; - Label l = new Label(); - l.setLabel(headerName); - l.setClassAttr("folderBrowserLink"); - l.setOutputEscaping(false); - l.setFontWeight(Label.BOLD); + final Label label = new Label(); + label.setLabel(headerName); + label.setClassAttr("folderBrowserLink"); + label.setOutputEscaping(false); + label.setFontWeight(Label.BOLD); - SimpleContainer container = new SimpleContainer(); - container.add(l); + final SimpleContainer container = new SimpleContainer(); + container.add(label); if (isCurrentKey) { Image image = new Image("/assets/" + imageURLStub); image.setBorder("0"); container.add(image); } - cl.setChild(container); - return cl; + link.setChild(container); + return link; } } +// /** * Produce links to view an item or control links for folders to change into @@ -428,16 +408,16 @@ public class FolderBrowser extends Table { } @Override - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { + 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 ContentItem item = (ContentItem) value; - String name = item.getDisplayName(); + final String name = item.getDisplayName(); // final ContentSection section = item.getContentType(). // getContentSection(); final ContentSection section = CMS.getContext().getContentSection(); @@ -471,16 +451,16 @@ public class FolderBrowser extends Table { } @Override - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { + 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 ContentItem item = (ContentItem) value; - String name = item.getDisplayName(); + final String name = item.getDisplayName(); final SimpleContainer container = new SimpleContainer(); final ContentSection section = CMS.getContext().getContentSection(); @@ -529,274 +509,246 @@ public class FolderBrowser extends Table { private static final Logger LOGGER = LogManager.getLogger( ActionCellRenderer.class); - private static final Label s_noAction; - private static final ControlLink s_link; + private static final Label noActionLabel; + private static final ControlLink link; static { LOGGER.debug("Static initializer is starting..."); - s_noAction = new Label(" ", false); - s_noAction.lock(); - s_link = new ControlLink( + noActionLabel = new Label(" ", false); + noActionLabel.lock(); + link = new ControlLink( new Label(globalize("cms.ui.folder.delete"))); - s_link.setConfirmation( + link.setConfirmation( globalize("cms.ui.folder.delete_confirmation")); LOGGER.debug("Static initializer finished."); } @Override - public Component getComponent(Table table, PageState state, Object value, - boolean isSelected, Object key, - int row, int column) { + public Component getComponent(final Table table, + final PageState state, + final Object value, + final boolean isSelected, + final Object key, + final int row, + final int column) { if (((Boolean) value)) { - return s_link; + return link; } else { - return s_noAction; + return noActionLabel; } } } - private final class IndexToggleRenderer implements TableCellRenderer { - - @Override - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { - - if (value == null) { - return new Label(new GlobalizedMessage( - "cms.ui.folder.na", - CmsConstants.CMS_FOLDER_BUNDLE)); - } - ControlLink link = new ControlLink(""); - - if (((Boolean) value)) { - link.setClassAttr("checkBoxChecked"); - } else { - link.setClassAttr("checkBoxUnchecked"); - } - - return link; - } - - } - // Deletes an item private class ItemDeleter extends TableActionAdapter { @Override - public void cellSelected(TableActionEvent e) { - int col = e.getColumn(); + public void cellSelected(final TableActionEvent event) { + int col = event.getColumn(); - if (m_deleteColumn != getColumn(col)) { + if (deleteColumn != getColumn(col)) { return; } - PageState s = e.getPageState(); - long itemId = Long.parseLong(e.getRowKey().toString()); - - final ContentItemRepository itemRepo = CdiUtil.createCdiUtil(). - findBean(ContentItemRepository.class); - final Optional item = itemRepo.findById(itemId); - if (item.isPresent()) { - itemRepo.delete(item.get()); - } - - ((Table) e.getSource()).clearSelection(s); - } - - } - - /** - * Table model around ItemCollection - */ - private static class FolderTableModel implements TableModel { - - private static final int NAME = 0; - private static final int LANGUAGES = 1; - private static final int TITLE = 2; - private static final int ADDITIONAL_INFO = 3; - private static final int TYPE = 4; - private static final int CREATION_DATE = 5; - private static final int LAST_MODIFIED = 6; - private static final int DELETABLE = 7; - private static final int IS_INDEX = 8; - private PageState m_state; - private FolderBrowser m_table; - private List m_itemColl; - private Category m_fol; - private Long m_folIndexID; - private final ContentItemRepository itemRepo; - private final ContentItemManager itemManager; - private final CategoryManager categoryManager; - private int index = -1; - - //old constructor before using paginator - //public FolderTableModel(Folder folder) { - //m_itemColl = folder.getItems(); - //} - public FolderTableModel(FolderBrowser table, - PageState state, - List itemColl) { - m_state = state; - m_table = table; - m_itemColl = itemColl; - - m_fol = (Category) table.getFolderSelectionModel() - .getSelectedObject(state); + final PageState state = event.getPageState(); + final long itemId = Long.parseLong(event.getRowKey().toString()); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - itemRepo = cdiUtil.findBean(ContentItemRepository.class); - itemManager = cdiUtil.findBean(ContentItemManager.class); - categoryManager = cdiUtil.findBean(CategoryManager.class); + final FolderBrowserController controller = cdiUtil.findBean( + FolderBrowserController.class); + controller.deleteObject(itemId); - if (!hideIndexColumn()) { - final Optional indexItem = categoryManager - .getIndexObject(m_fol); - if (indexItem.isPresent()) { - m_folIndexID = indexItem.get().getObjectId(); - } else { - m_folIndexID = null; - } - } - } - - @Override - public int getColumnCount() { - return 7; - } - - @Override - public boolean nextRow() { - index++; - return index < m_itemColl.size(); - } - - @Override - public Object getElementAt(int columnIndex) { - switch (columnIndex) { - case NAME: - return m_itemColl.get(index); - case LANGUAGES: - return m_itemColl.get(index); - case TITLE: - return m_itemColl.get(index).getDisplayName(); - case ADDITIONAL_INFO: - return ""; - case TYPE: - return m_itemColl.get(index).getContentType().getLabel() - .getValue(); - case CREATION_DATE: { - final CcmRevision firstRevision = itemRepo - .retrieveFirstRevision( - m_itemColl.get(index), m_itemColl.get(index) - .getObjectId()); - if (firstRevision == null) { - return "--"; - } else { - return FormatStandards.formatDate(new Date(firstRevision - .getTimestamp())); - } - } - case LAST_MODIFIED: { - final CcmRevision currentRevision = itemRepo - .retrieveCurrentRevision( - m_itemColl.get(index), - m_itemColl.get(index).getObjectId()); - if (currentRevision == null) { - return "--"; - } else { - return FormatStandards.formatDate(new Date( - currentRevision.getTimestamp())); - } - } - case DELETABLE: - return isDeletable(); - case IS_INDEX: { - if (hideIndexColumn()) { - throw new IndexOutOfBoundsException( - "Column index " + columnIndex - + " not in table model."); - } - if (m_folIndexID == null) { - return false; - } - return m_folIndexID.compareTo( - m_itemColl.get(index).getObjectId()) == 0; - } - default: - throw new IndexOutOfBoundsException("Column index " - + columnIndex - + " not in table model."); - } - } - - public boolean isDeletable() { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Checking to see if " + this + " is deletable"); - } - -// if (m_itemColl.isFolder()) { -// -// if (!m_itemColl.hasChildren()) { -// if (s_log.isDebugEnabled()) { -// s_log.debug( -// "The item is an empty folder; it may be deleted"); -// } -// return true; -// -// } else { -// -// if (s_log.isDebugEnabled()) { -// s_log.debug( -// "The folder is not empty; it cannot be deleted"); -// } -// return false; -// -// } -// } else - if (itemManager.isLive(m_itemColl.get(index))) { - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug( - "This item has a live instance; it cannot be deleted"); - } - return false; - } - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug( - "The item is not a folder and doesn't have a live instance; it may be deleted"); - } - return true; - } - - public Object getKeyAt(int columnIndex) { - // Note: Folders were marked by negative IDs - return m_itemColl.get(index).getObjectId(); + ((Table) event.getSource()).clearSelection(state); } } +// /** +// * Table model around ItemCollection +// */ +// private static class FolderTableModel implements TableModel { +// +// private static final int NAME = 0; +// private static final int LANGUAGES = 1; +// private static final int TITLE = 2; +// private static final int ADDITIONAL_INFO = 3; +// private static final int TYPE = 4; +// private static final int CREATION_DATE = 5; +// private static final int LAST_MODIFIED = 6; +// private static final int DELETABLE = 7; +// private static final int IS_INDEX = 8; +// private PageState m_state; +// private FolderBrowser m_table; +// private List m_itemColl; +// private Category m_fol; +// private Long m_folIndexID; +// private final ContentItemRepository itemRepo; +// private final ContentItemManager itemManager; +// private final CategoryManager categoryManager; +// private int index = -1; +// +// //old constructor before using paginator +// //public FolderTableModel(Folder folder) { +// //m_itemColl = folder.getItems(); +// //} +// public FolderTableModel(FolderBrowser table, +// PageState state, +// List itemColl) { +// m_state = state; +// m_table = table; +// m_itemColl = itemColl; +// +// m_fol = (Category) table.getFolderSelectionModel() +// .getSelectedObject(state); +// +// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); +// itemRepo = cdiUtil.findBean(ContentItemRepository.class); +// itemManager = cdiUtil.findBean(ContentItemManager.class); +// categoryManager = cdiUtil.findBean(CategoryManager.class); +// +// if (!hideIndexColumn()) { +// final Optional indexItem = categoryManager +// .getIndexObject(m_fol); +// if (indexItem.isPresent()) { +// m_folIndexID = indexItem.get().getObjectId(); +// } else { +// m_folIndexID = null; +// } +// } +// } +// +// @Override +// public int getColumnCount() { +// return 7; +// } +// +// @Override +// public boolean nextRow() { +// index++; +// return index < m_itemColl.size(); +// } +// +// @Override +// public Object getElementAt(int columnIndex) { +// switch (columnIndex) { +// case NAME: +// return m_itemColl.get(index); +// case LANGUAGES: +// return m_itemColl.get(index); +// case TITLE: +// return m_itemColl.get(index).getDisplayName(); +// case ADDITIONAL_INFO: +// return ""; +// case TYPE: +// return m_itemColl.get(index).getContentType().getLabel() +// .getValue(); +// case CREATION_DATE: { +// final CcmRevision firstRevision = itemRepo +// .retrieveFirstRevision( +// m_itemColl.get(index), m_itemColl.get(index) +// .getObjectId()); +// if (firstRevision == null) { +// return "--"; +// } else { +// return FormatStandards.formatDate(new Date(firstRevision +// .getTimestamp())); +// } +// } +// case LAST_MODIFIED: { +// final CcmRevision currentRevision = itemRepo +// .retrieveCurrentRevision( +// m_itemColl.get(index), +// m_itemColl.get(index).getObjectId()); +// if (currentRevision == null) { +// return "--"; +// } else { +// return FormatStandards.formatDate(new Date( +// currentRevision.getTimestamp())); +// } +// } +// case DELETABLE: +// return isDeletable(); +// case IS_INDEX: { +// if (hideIndexColumn()) { +// throw new IndexOutOfBoundsException( +// "Column index " + columnIndex +// + " not in table model."); +// } +// if (m_folIndexID == null) { +// return false; +// } +// return m_folIndexID.compareTo( +// m_itemColl.get(index).getObjectId()) == 0; +// } +// default: +// throw new IndexOutOfBoundsException("Column index " +// + columnIndex +// + " not in table model."); +// } +// } +// +// public boolean isDeletable() { +// if (LOGGER.isDebugEnabled()) { +// LOGGER.debug("Checking to see if " + this + " is deletable"); +// } +// +//// if (m_itemColl.isFolder()) { +//// +//// if (!m_itemColl.hasChildren()) { +//// if (s_log.isDebugEnabled()) { +//// s_log.debug( +//// "The item is an empty folder; it may be deleted"); +//// } +//// return true; +//// +//// } else { +//// +//// if (s_log.isDebugEnabled()) { +//// s_log.debug( +//// "The folder is not empty; it cannot be deleted"); +//// } +//// return false; +//// +//// } +//// } else +// if (itemManager.isLive(m_itemColl.get(index))) { +// +// if (LOGGER.isDebugEnabled()) { +// LOGGER.debug( +// "This item has a live instance; it cannot be deleted"); +// } +// return false; +// } +// +// if (LOGGER.isDebugEnabled()) { +// LOGGER.debug( +// "The item is not a folder and doesn't have a live instance; it may be deleted"); +// } +// return true; +// } +// +// public Object getKeyAt(int columnIndex) { +// // Note: Folders were marked by negative IDs +// return m_itemColl.get(index).getObjectId(); +// } +// +// } private class FolderChanger extends TableActionAdapter { @Override - public void cellSelected(TableActionEvent e) { - PageState s = e.getPageState(); - int col = e.getColumn().intValue(); + public void cellSelected(final TableActionEvent event) { + final PageState state = event.getPageState(); + final int col = event.getColumn(); - if (m_nameColumn != getColumn(col)) { + if (nameColumn != getColumn(col)) { return; } - String key = (String) e.getRowKey(); + final String key = (String) event.getRowKey(); if (key.startsWith("-")) { // XXX dirty dirty - clearSelection(s); + clearSelection(state); getFolderSelectionModel().setSelectedKey( - s, Long.parseLong(key.substring(1))); + state, Long.parseLong(key.substring(1))); } } @@ -851,8 +803,5 @@ public class FolderBrowser extends Table { } - private static boolean hideIndexColumn() { - return true; - } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserController.java index 0b92295f0..3f86e3b29 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserController.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserController.java @@ -22,6 +22,7 @@ import com.arsdigita.kernel.KernelConfig; import org.libreccm.configuration.ConfigurationManager; import org.libreccm.core.CcmObject; +import org.libreccm.core.CcmObjectRepository; import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.l10n.LocalizedString; import org.librecms.contentsection.ContentItem; @@ -32,6 +33,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.stream.Collectors; import javax.annotation.PostConstruct; @@ -51,6 +53,9 @@ public class FolderBrowserController { @Inject private EntityManager entityManager; + @Inject + private CcmObjectRepository objectRepo; + @Inject private ConfigurationManager confManager; @@ -164,7 +169,7 @@ public class FolderBrowserController { final TypedQuery query = entityManager.createNamedQuery( "Folder.findObjects", CcmObject.class); query.setParameter("folder", folder); - query.setParameter(filterTerm, filterTerm); + query.setParameter("term", filterTerm); if (first > 0 && maxResults > 0) { query.setFirstResult(first); @@ -174,40 +179,22 @@ public class FolderBrowserController { return query.getResultList(); } - public int countObjects(final Folder folder) { - return countObjects(folder, -1, -1); + public long countObjects(final Folder folder) { + return countObjects(folder, "%"); } - public int countObjects(final Folder folder, - final int frist, - final int maxResults) { - return countObjects(folder, "%", frist, maxResults); - } - - public int countObjects(final Folder folder, - final String filterTerm) { - return countObjects(folder, filterTerm, -1, -1); - } - - public int countObjects(final Folder folder, - final String filterTerm, - final int first, - final int maxResults) { - final TypedQuery query = entityManager.createNamedQuery( - "Folder.countObjects", Integer.class); + public long countObjects(final Folder folder, + final String filterTerm) { + final TypedQuery query = entityManager.createNamedQuery( + "Folder.countObjects", Long.class); query.setParameter("folder", folder); - query.setParameter(filterTerm, filterTerm); - - if (first > 0 && maxResults > 0) { - query.setFirstResult(first); - query.setMaxResults(maxResults); - } + query.setParameter("term", filterTerm); return query.getSingleResult(); } @Transactional(Transactional.TxType.REQUIRED) - protected List getObjectRows(final Folder folder) { + List getObjectRows(final Folder folder) { final List objects = findObjects(folder); return objects.stream() @@ -216,8 +203,8 @@ public class FolderBrowserController { } @Transactional(Transactional.TxType.REQUIRED) - protected List getObjectRows(final Folder folder, - final String filterTerm) { + List getObjectRows(final Folder folder, + final String filterTerm) { final List objects = findObjects(folder, filterTerm); @@ -227,9 +214,9 @@ public class FolderBrowserController { } @Transactional(Transactional.TxType.REQUIRED) - protected List getObjectRows(final Folder folder, - final int first, - final int maxResults) { + List getObjectRows(final Folder folder, + final int first, + final int maxResults) { final List objects = findObjects(folder, first, maxResults); return objects.stream() @@ -238,10 +225,10 @@ public class FolderBrowserController { } @Transactional(Transactional.TxType.REQUIRED) - protected List getObjectRows(final Folder folder, - final String filterTerm, - final int first, - final int maxResults) { + List getObjectRows(final Folder folder, + final String filterTerm, + final int first, + final int maxResults) { final List objects = findObjects(folder, filterTerm, first, @@ -297,4 +284,13 @@ public class FolderBrowserController { return row; } + @Transactional(Transactional.TxType.REQUIRED) + protected void deleteObject(final long objectId) { + final Optional object = objectRepo.findById(objectId); + + if (object.isPresent()) { + objectRepo.delete(object.get()); + } + } + } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserPaginationModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserPaginationModelBuilder.java index fd9b64b66..31a779ece 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserPaginationModelBuilder.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserPaginationModelBuilder.java @@ -21,7 +21,6 @@ package com.arsdigita.cms.ui.folder; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PaginationModelBuilder; import com.arsdigita.bebop.Paginator; -import com.arsdigita.bebop.Table; import org.libreccm.cdi.utils.CdiUtil; import org.librecms.contentsection.Folder; @@ -66,9 +65,10 @@ class FolderBrowserPaginationModelBuilder implements PaginationModelBuilder { } if (filterTerm == null) { - return controller.countObjects(folder, first, pageSize); + return (int) controller.countObjects(folder); } else { - return controller.countObjects(folder, filter, first, pageSize); + return (int) controller.countObjects(folder, + filter); } } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserTableModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserTableModelBuilder.java index 8b0d94843..82515b179 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserTableModelBuilder.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/folder/FolderBrowserTableModelBuilder.java @@ -26,11 +26,9 @@ import com.arsdigita.bebop.table.TableModelBuilder; import com.arsdigita.util.LockableImpl; import org.libreccm.cdi.utils.CdiUtil; -import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.Folder; import java.util.List; -import java.util.stream.Collectors; /** * 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 2b5727af8..4ac86fbd4 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 @@ -102,19 +102,19 @@ import org.librecms.contentsection.privileges.ItemPrivileges; */ @SuppressWarnings("PMD.BeanMembersShouldSerialize") public class FolderManipulator extends SimpleContainer implements - //FormProcessListener, - //FormValidationListener, - //FormSubmissionListener, - Resettable { + //FormProcessListener, + //FormValidationListener, + //FormSubmissionListener, + Resettable { //public static final String RESOURCE_BUNDLE = "com.arsdigita.cms.ui.folder.CMSFolderResources"; private static final Logger LOGGER = LogManager.getLogger( - FolderManipulator.class); + FolderManipulator.class); private static final String ATOZ_FILTER_PARAM = "aToZfilter"; private static final String ACTION_PARAM = "act"; private static final String FILTER_PARAM = "filter"; - + private static final String SOURCES_PARAM = "srcs"; private static final String MOVE = "Move"; private static final String COPY = "Copy"; @@ -122,8 +122,9 @@ public class FolderManipulator extends SimpleContainer implements //private static final String UNPUBLISH = "UnPublish"; private final ArrayParameter sourcesParam = new ArrayParameter( - new BigDecimalParameter(SOURCES_PARAM)); - private final StringParameter actionParam = new StringParameter(ACTION_PARAM); + new BigDecimalParameter(SOURCES_PARAM)); + private final StringParameter actionParam + = new StringParameter(ACTION_PARAM); ; /** * The folder in which the source items live. @@ -135,32 +136,33 @@ public class FolderManipulator extends SimpleContainer implements private FilterForm filterForm; private final StringParameter atozFilterParam = new StringParameter( - ATOZ_FILTER_PARAM); - private final StringParameter filterParam = new StringParameter(FILTER_PARAM); - + ATOZ_FILTER_PARAM); + private final StringParameter filterParam + = new StringParameter(FILTER_PARAM); + public FolderManipulator(final FolderSelectionModel folderModel) { - + super(); - + sourceFolderModel = folderModel; itemView = new ItemView(); itemView.addProcessListener(new ItemViewProcessListener()); itemView.addValidationListener(new ItemViewValidationListener()); add(itemView); - + targetSelector.addProcessListener(new TargetSelectorProcessListener()); targetSelector.addValidationListener( - new TargetSelectorValidationListener()); + new TargetSelectorValidationListener()); targetSelector.addSubmissionListener( - new TargetSelectorSubmissionListener()); + new TargetSelectorSubmissionListener()); add(targetSelector); //publishDialog.addProcessListener(new PublishDialogProcessListener()); } - + @Override public void register(final Page page) { - + super.register(page); page.setVisibleDefault(targetSelector, false); page.setVisibleDefault(filterForm, true); @@ -168,11 +170,11 @@ public class FolderManipulator extends SimpleContainer implements page.addComponentStateParam(this, actionParam); page.addComponentStateParam(this, atozFilterParam); page.addComponentStateParam(this, filterParam); - + } - + public final Long[] getSources(final PageState state) { - + final Long[] result = (Long[]) state.getValue(sourcesParam); //Return empty array instead of null. @@ -182,19 +184,19 @@ public class FolderManipulator extends SimpleContainer implements return result; } } - + public final FolderSelectionModel getSourceFolderModel() { return sourceFolderModel; } - + public final Category getTarget(final PageState state) { return targetSelector.getTarget(state); } - + protected final boolean isMove(final PageState state) { return MOVE.equals(getAction(state)); } - + protected final boolean isCopy(final PageState state) { return COPY.equals(getAction(state)); } @@ -209,18 +211,18 @@ public class FolderManipulator extends SimpleContainer implements private String getAction(final PageState state) { return (String) state.getValue(actionParam); } - + protected void moveItems(final Category target, final Long[] itemIds) { - + for (Long itemId : itemIds) { - + changeItemParent(itemId, target); - + } - + } - + private void changeItemParent(final Long itemId, final Category newParent) { //ToDo @@ -239,7 +241,7 @@ public class FolderManipulator extends SimpleContainer implements // item.setParent(newParent); // item.save(); } - + protected void copyItems(final Category target, final Long[] itemIds) { @@ -421,53 +423,53 @@ public class FolderManipulator extends SimpleContainer implements public final FolderBrowser getBrowser() { return itemView.getBrowser(); } - + private class ItemViewProcessListener implements FormProcessListener { - + public ItemViewProcessListener() { //Nothing } - + @Override public void process(final FormSectionEvent event) throws - FormProcessException { + FormProcessException { final PageState state = event.getPageState(); - + itemView.setVisible(state, false); targetSelector.setVisible(state, true); targetSelector.expose(state); } - + } - + private class TargetSelectorProcessListener implements FormProcessListener { - + public TargetSelectorProcessListener() { //Nothing } - + @Override public void process(final FormSectionEvent event) throws - FormProcessException { - + FormProcessException { + final PageState state = event.getPageState(); - + itemView.setVisible(state, true); targetSelector.setVisible(state, false); - + final Category folder = targetSelector.getTarget(state); final Long[] itemIds = getSources(state); - + if (isCopy(state)) { copyItems(folder, itemIds); } else if (isMove(state)) { moveItems(folder, itemIds); } - + reset(state); - + } - + } // private class PublishDialogProcessListener implements FormProcessListener { @@ -497,113 +499,113 @@ public class FolderManipulator extends SimpleContainer implements // // } private class ItemViewValidationListener implements FormValidationListener { - + public ItemViewValidationListener() { //Nothing } - + @Override public void validate(final FormSectionEvent event) throws - FormProcessException { - + FormProcessException { + final PageState state = event.getPageState(); final FormData data = event.getFormData(); - + if (getSources(state).length <= 0) { data.addError("cms.ui.folder.must_select_item", CmsConstants.CMS_FOLDER_BUNDLE); } } - + } - + private class TargetSelectorValidationListener implements - FormValidationListener { - + FormValidationListener { + public TargetSelectorValidationListener() { //Nothing } - + @Override public void validate(final FormSectionEvent event) throws - FormProcessException { - + FormProcessException { + final PageState state = event.getPageState(); - + if (getSources(state).length <= 0) { throw new IllegalStateException("No source items specified"); } - + final Category target = targetSelector.getTarget(state); final FormData data = event.getFormData(); if (target == null) { data.addError(new GlobalizedMessage( - "cms.ui.folder.need_select_target_folder", - CmsConstants.CMS_FOLDER_BUNDLE)); + "cms.ui.folder.need_select_target_folder", + CmsConstants.CMS_FOLDER_BUNDLE)); //If the target is null, we can skip the rest of the checks return; } - + if (target.equals(sourceFolderModel.getSelectedObject(state))) { data.addError(new GlobalizedMessage( - "cms.ui.folder.not_within_same_folder", - CmsConstants.CMS_FOLDER_BUNDLE)); + "cms.ui.folder.not_within_same_folder", + CmsConstants.CMS_FOLDER_BUNDLE)); } // check create item permission final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final Shiro shiro = cdiUtil.findBean(Shiro.class); final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); + PermissionChecker.class); if (!permissionChecker.isPermitted( - ItemPrivileges.CREATE_NEW, target)) { + ItemPrivileges.CREATE_NEW, target)) { data.addError("cms.ui.folder.no_permission_for_item", CmsConstants.CMS_FOLDER_BUNDLE); } - + for (Long source : getSources(state)) { - + validateItem(source, target, state, data); - + } - + } - + private void validateItem(final Long itemId, final Category target, final PageState state, final FormData data) { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final ContentItemRepository itemRepo = cdiUtil.findBean( - ContentItemRepository.class); + ContentItemRepository.class); final ContentItemManager itemManager = cdiUtil.findBean( - ContentItemManager.class); + ContentItemManager.class); final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - + PermissionChecker.class); + final ContentItem item = itemRepo.findById(itemId).get(); final String name = item.getDisplayName(); - + final long count = itemRepo.countByNameInFolder(target, name); if (count > 0) { // there is an item in the target folder that already has this name addErrorMessage(data, "cms.ui.folder.item_already_exists", name); } - + if (itemManager.isLive(item) && isMove(state)) { addErrorMessage(data, "cms.ui.folder.item_is_live", name); } - + if (!(permissionChecker.isPermitted( ItemPrivileges.DELETE, item)) - && isMove(state)) { + && isMove(state)) { addErrorMessage(data, "cms.ui.folder.no_permission_for_item", name); } } - + } - + private void addErrorMessage(final FormData data, final String message, final String itemName) { @@ -624,32 +626,32 @@ public class FolderManipulator extends SimpleContainer implements // } // } private class TargetSelectorSubmissionListener implements - FormSubmissionListener { - + FormSubmissionListener { + public TargetSelectorSubmissionListener() { //Nothing } - + @Override public void submitted(final FormSectionEvent event) throws - FormProcessException { - + FormProcessException { + final PageState state = event.getPageState(); - + if (targetSelector.isCancelled(state)) { reset(state); throw new FormProcessException(new GlobalizedMessage( - "cms.ui.folder.cancelled", - CmsConstants.CMS_FOLDER_BUNDLE)); + "cms.ui.folder.cancelled", + CmsConstants.CMS_FOLDER_BUNDLE)); } - + } - + } - + @Override public void reset(final PageState state) { - + itemView.setVisible(state, true); itemView.reset(state); targetSelector.setVisible(state, false); @@ -659,55 +661,55 @@ public class FolderManipulator extends SimpleContainer implements state.setValue(sourcesParam, null); //s.setValue(m_aToZfilter, null); state.setValue(filterParam, null); - + } // The form containing the tree to select the target folder from private class TargetSelector extends Form implements Resettable { - + private final FolderSelectionModel targetModel; private final FolderTree folderTree; private final Submit cancelButton; - + public TargetSelector() { super("targetSel", new BoxPanel()); setMethod(GET); targetModel = new FolderSelectionModel("target"); folderTree = new FolderTree(targetModel); folderTree.setCellRenderer(new FolderTreeCellRenderer()); - + final Label label = new Label(new PrintListener() { - + @Override public void prepare(final PrintEvent event) { final PageState state = event.getPageState(); final Label label = (Label) event.getTarget(); final int numberOfItems = getSources(state).length; final Category folder = (Category) sourceFolderModel. - getSelectedObject(state); + getSelectedObject(state); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CategoryManager categoryManager = cdiUtil. - findBean(CategoryManager.class); - + findBean(CategoryManager.class); + if (isMove(state)) { - + label.setLabel(new GlobalizedMessage( - "cms.ui.folder.move", - CmsConstants.CMS_FOLDER_BUNDLE, - new Object[]{numberOfItems, - categoryManager.getCategoryPath( - folder)})); + "cms.ui.folder.move", + CmsConstants.CMS_FOLDER_BUNDLE, + new Object[]{numberOfItems, + categoryManager.getCategoryPath( + folder)})); } else if (isCopy(state)) { label.setLabel(new GlobalizedMessage( - "cms.ui.folder.copy", - new Object[]{numberOfItems, - categoryManager.getCategoryPath( - folder)})); + "cms.ui.folder.copy", + new Object[]{numberOfItems, + categoryManager.getCategoryPath( + folder)})); } } - + }); - + label.setOutputEscaping(false); add(label); add(folderTree); @@ -716,7 +718,7 @@ public class FolderManipulator extends SimpleContainer implements cancelButton = saveCancelSection.getCancelButton(); add(saveCancelSection); } - + @Override public void register(final Page page) { super.register(page); @@ -726,13 +728,13 @@ public class FolderManipulator extends SimpleContainer implements // Set things up the first time the selector gets visible public void expose(final PageState state) { final Category folder = (Category) sourceFolderModel. - getSelectedObject( - state); + getSelectedObject( + state); targetModel.clearSelection(state); if (folder != null) { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final ContentItemManager itemManager = cdiUtil.findBean( - ContentItemManager.class); + ContentItemManager.class); //ToDo // final ItemCollection items = folder.getPathInfo(true); @@ -742,7 +744,7 @@ public class FolderManipulator extends SimpleContainer implements // items.close(); } } - + @Override public void reset(final PageState state) { folderTree.clearSelection(state); @@ -751,15 +753,15 @@ public class FolderManipulator extends SimpleContainer implements state.setValue(folderTree.getSelectionModel().getStateParameter(), null); } - + public Category getTarget(final PageState state) { return (Category) targetModel.getSelectedObject(state); } - + public boolean isCancelled(final PageState state) { return cancelButton.isSelected(state); } - + } //The form which is show for the publish and unpublish action @@ -803,63 +805,65 @@ public class FolderManipulator extends SimpleContainer implements // The form containing the browser and the drop down for selecting an // action private class ItemView extends Form implements Resettable { - + private static final String ITEM_VIEW = "itemView"; - + private final FolderBrowser folderBrowser; private final Paginator paginator; private final OptionGroup checkboxGroup; private final SingleSelect actionSelect; private final Submit submit; - + public ItemView() { - + super(ITEM_VIEW, new SimpleContainer()); setMethod(GET); - + final ActionGroup group = new ActionGroup(); add(group); - + final GridPanel panel = new GridPanel(1); group.setSubject(panel); - + folderBrowser = new FolderBrowser(sourceFolderModel); folderBrowser.setAtoZfilterParameter(atozFilterParam); folderBrowser.setFilterParameter(filterParam); - folderBrowser.setFilterForm(filterForm); +// folderBrowser.setFilterForm(filterForm); + folderBrowser.setFolderManipulator(FolderManipulator.this); paginator = new Paginator( - (PaginationModelBuilder) folderBrowser.getModelBuilder(), - CMSConfig.getConfig().getFolderBrowseListSize()); + new FolderBrowserPaginationModelBuilder(folderBrowser), + CMSConfig.getConfig().getFolderBrowseListSize()); + folderBrowser.setPaginator(paginator); panel.add(paginator); panel.add(folderBrowser); - + LOGGER.debug("Adding filter form..."); - filterForm = new FilterForm((FilterFormModelBuilder) folderBrowser. - getModelBuilder()); + filterForm = new FilterForm(new FolderBrowserFilterFormModelBuilder( + folderBrowser)); FolderManipulator.this.add(filterForm); - + checkboxGroup = new CheckboxGroup(sourcesParam); panel.add(checkboxGroup); - + panel.add(new FormErrorDisplay(this)); - + final Container container = new SimpleContainer(); group.addAction(container); - + container.add(new Label(new GlobalizedMessage( - "cms.ui.folder.edit_selection", - CmsConstants.CMS_FOLDER_BUNDLE))); + "cms.ui.folder.edit_selection", + CmsConstants.CMS_FOLDER_BUNDLE))); actionSelect = new SingleSelect(actionParam); actionSelect.addOption( - new Option(COPY, - new Label(new GlobalizedMessage( - "cms.ui.folder.copy.action", - CmsConstants.CMS_FOLDER_BUNDLE)))); + 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)))); + new Option(MOVE, + new Label(new GlobalizedMessage( + "cms.ui.folder.move.action", + CmsConstants.CMS_FOLDER_BUNDLE)))); //Publishing in the folder browser only works if threaded publishing is active // if (CMSConfig.getInstanceOf().getThreadedPublishing()) { // actionSelect.addOption(new Option(PUBLISH, @@ -872,8 +876,8 @@ public class FolderManipulator extends SimpleContainer implements container.add(actionSelect); submit = new Submit("Go", new GlobalizedMessage( - "cms.ui.folder.go", - CmsConstants.CMS_FOLDER_BUNDLE)); + "cms.ui.folder.go", + CmsConstants.CMS_FOLDER_BUNDLE)); container.add(submit); // Add a new first column to the table @@ -881,14 +885,18 @@ public class FolderManipulator extends SimpleContainer implements column.setCellRenderer(new CheckboxRenderer()); folderBrowser.getColumnModel().add(0, column); } - + public final FolderBrowser getBrowser() { return folderBrowser; } - + + public Paginator getPaginator() { + return paginator; + } + @Override public void reset(final PageState state) { - + checkboxGroup.setValue(state, null); actionSelect.setValue(state, null); paginator.reset(state); @@ -899,11 +907,11 @@ public class FolderManipulator extends SimpleContainer implements // The renderer for the first column in the itemView table private class CheckboxRenderer implements TableCellRenderer { - + public CheckboxRenderer() { //Nothing to do } - + @Override public Component getComponent(final Table table, final PageState state, @@ -918,44 +926,44 @@ public class FolderManipulator extends SimpleContainer implements result.setGroup(checkboxGroup); return result; } - + } - + } - + protected class FilterForm extends Form implements FormProcessListener, FormInitListener, FormSubmissionListener { - + private final SimpleContainer panel; private boolean visible; private final FilterFormModelBuilder modelBuilder; private final TextField filterField; - + public FilterForm(final FilterFormModelBuilder modelBuilder) { super("folderFilterForm"); - + LOGGER.debug("Creating filter form..."); - + this.modelBuilder = modelBuilder; - + addProcessListener(this); addInitListener(this); addSubmissionListener(this); - + panel = new BoxPanel(BoxPanel.HORIZONTAL); - + final ActionLink allLink = new ActionLink( - new GlobalizedMessage("cms.ui.folder.filter.all", - CmsConstants.CMS_FOLDER_BUNDLE)); + new GlobalizedMessage("cms.ui.folder.filter.all", + CmsConstants.CMS_FOLDER_BUNDLE)); allLink.addActionListener(new ActionListener() { - + @Override public void actionPerformed(final ActionEvent event) { //event.getPageState().setValue(m_aToZfilter, ""); event.getPageState().setValue(filterParam, ""); } - + }); panel.add(allLink); @@ -973,59 +981,59 @@ public class FolderManipulator extends SimpleContainer implements // panel.add(link); // } panel.add(new Label(new GlobalizedMessage( - "cms.ui.folder.filter", - CmsConstants.CMS_FOLDER_BUNDLE))); + "cms.ui.folder.filter", + CmsConstants.CMS_FOLDER_BUNDLE))); filterField = new TextField(filterParam); panel.add(filterField); panel.add(new Submit("filterFolderSubmit", new GlobalizedMessage( - "cms.ui.folder.filter_do", - CmsConstants.CMS_FOLDER_BUNDLE))); - + "cms.ui.folder.filter_do", + CmsConstants.CMS_FOLDER_BUNDLE))); + add(panel); - + } - + public TextField getFilterField() { return filterField; } - + @Override public void process(final FormSectionEvent event) throws - FormProcessException { + FormProcessException { //Nothing } - + @Override public void init(final FormSectionEvent event) throws - FormProcessException { + FormProcessException { //fse.getPageState().setValue(FolderManipulator.this.m_filter, null); //filterField.setValue(fse.getPageState(), null); } - + @Override public void submitted(final FormSectionEvent event) throws - FormProcessException { + FormProcessException { } - + @Override public boolean isVisible(PageState state) { if (super.isVisible(state) - && (modelBuilder.getFolderSize(state) - >= CMSConfig.getConfig(). - getFolderAtoZShowLimit())) { + && (modelBuilder.getFolderSize(state) + >= CMSConfig.getConfig(). + getFolderAtoZShowLimit())) { return true; } else { return false; } } - + } - + protected interface FilterFormModelBuilder { - + public long getFolderSize(PageState state); - + } /** @@ -1043,7 +1051,7 @@ public class FolderManipulator extends SimpleContainer implements // return new GlobalizedMessage(key, RESOURCE_BUNDLE, args); // } private class FolderTreeCellRenderer implements TreeCellRenderer { - + private RequestLocal m_invalidFolders = new RequestLocal(); /** @@ -1110,9 +1118,8 @@ public class FolderManipulator extends SimpleContainer implements // // Save the invalid folder list // m_invalidFolders.set(state, invalidFolders); // } - final Label label = new Label(value.toString()); - + if (invalidFolders.contains(key.toString())) { return label; } @@ -1122,10 +1129,10 @@ public class FolderManipulator extends SimpleContainer implements label.setFontWeight(Label.BOLD); return label; } - + return new ControlLink(label); } - + } - + } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java index d48423b96..d6c8cd321 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSection.java @@ -56,16 +56,30 @@ import static org.librecms.CmsConstants.*; @Entity @Table(name = "CONTENT_SECTIONS", schema = DB_SCHEMA) @NamedQueries({ + @NamedQuery( + name = "ContentSection.findById", + query = "SELECT S FROM ContentSection s WHERE s.objectId = :objectId") + , @NamedQuery( name = "ContentSection.findByLabel", query = "SELECT s FROM ContentSection s WHERE s.label = :label") , + @NamedQuery( + name = "ContentSection.findContentTypes", + query = "SELECT t FROM ContentType t WHERE t.contentSection = :section") + , + @NamedQuery( + name = "ContentSection.countContentTypes", + query + = "SELECT COUNT(t) FROM ContentType t WHERE t.contentSection = :section" + ) + , @NamedQuery( name = "ContentSection.findPermissions", query = "SELECT p FROM Permission p " + "WHERE (p.object = :section " + " OR p.object = :rootDocumentsFolder" - + " OR p.object = :rootAssetsFolder) " + + " OR p.object = :rootAssetsFolder) " + "AND p.grantee = :role") }) //@ApplicationType( diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionRepository.java index 94d557e86..5cf07f672 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionRepository.java @@ -23,9 +23,11 @@ import org.libreccm.core.CoreConstants; import org.libreccm.security.AuthorizationRequired; import org.libreccm.security.RequiresPrivilege; +import java.util.Optional; import java.util.UUID; import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import javax.transaction.Transactional; @@ -42,12 +44,12 @@ public class ContentSectionRepository throw new IllegalArgumentException( "The label of a ContentSection can't be empty."); } - + final TypedQuery query = getEntityManager() - .createNamedQuery("ContentSection.findByLabel", + .createNamedQuery("ContentSection.findByLabel", ContentSection.class); query.setParameter("label", label); - + return query.getSingleResult(); } @@ -66,11 +68,11 @@ public class ContentSectionRepository @Transactional(Transactional.TxType.REQUIRED) @Override public void save(final ContentSection section) { - if(isNew(section)) { + if (isNew(section)) { section.setUuid(UUID.randomUUID().toString()); section.setApplicationType(ContentSection.class.getName()); } - + super.save(section); } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionSetup.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionSetup.java index 9581ee818..ceb7f39bb 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionSetup.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentSectionSetup.java @@ -20,6 +20,7 @@ package org.librecms.contentsection; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.libreccm.core.UnexpectedErrorException; import org.libreccm.modules.InstallEvent; import org.libreccm.security.Role; import org.libreccm.web.AbstractCcmApplicationSetup; @@ -32,8 +33,15 @@ import static org.librecms.contentsection.ContentSection.*; import org.librecms.contentsection.privileges.AdminPrivileges; import org.librecms.contentsection.privileges.AssetPrivileges; import org.librecms.contentsection.privileges.ItemPrivileges; +import org.librecms.contenttypes.Article; +import org.librecms.contenttypes.Event; +import org.librecms.contenttypes.MultiPartArticle; +import org.librecms.contenttypes.News; import org.librecms.dispatcher.MultilingualItemResolver; +import java.util.Arrays; +import java.util.logging.Level; + /** * * @author Jens Pelzetter @@ -47,6 +55,11 @@ public class ContentSectionSetup extends AbstractCcmApplicationSetup { = "org.librecms.initial_content_sections"; private static final String DEFAULT_ITEM_RESOLVER = "org.librecms.default_item_resolver"; + private static final String[] DEFAULT_TYPES = new String[]{ + Article.class.getName(), + Event.class.getName(), + MultiPartArticle.class.getName(), + News.class.getName()}; public ContentSectionSetup(final InstallEvent event) { super(event); @@ -241,22 +254,61 @@ public class ContentSectionSetup extends AbstractCcmApplicationSetup { section.addRole(publisher); section.addRole(contentReader); - - final String itemResolverClassName; if (getIntegrationProps().containsKey(String.format("%s.item_resolver", sectionName))) { itemResolverClassName = getIntegrationProps().getProperty( String.format("%s.item_resolver", sectionName)); - } else if(getIntegrationProps().containsKey("default_item_resolver")) { - itemResolverClassName = getIntegrationProps().getProperty("default_item_resolver_name"); + } else if (getIntegrationProps().containsKey("default_item_resolver")) { + itemResolverClassName = getIntegrationProps().getProperty( + "default_item_resolver_name"); } else { itemResolverClassName = MultilingualItemResolver.class.getName(); } section.setItemResolverClass(itemResolverClassName); - + + final String[] types; + if (getIntegrationProps().containsKey(String.format("%s.content_types", + sectionName))) { + final String typesStr = getIntegrationProps().getProperty(String + .format("%s.content_types", sectionName)); + types = typesStr.split(","); + } else if (getIntegrationProps().containsKey("default_content_types")) { + final String typesStr = getIntegrationProps().getProperty( + "default_content_types"); + types = typesStr.split(","); + } else { + types = DEFAULT_TYPES; + } + Arrays.stream(types).forEach(type -> addContentTypeToSection(section, + type)); + getEntityManager().merge(section); } + private void addContentTypeToSection(final ContentSection section, + final String contentType) { + final String typeClassName = contentType.trim(); + final Class clazz; + try { + clazz = Class.forName(typeClassName); + } catch (ClassNotFoundException ex) { + throw new UnexpectedErrorException(String.format( + "No class for content type '%s'.", typeClassName)); + } + + if (ContentItem.class.isAssignableFrom(clazz)) { + final ContentType type = new ContentType(); + type.setContentSection(section); + type.setContentItemClass(clazz.getName()); + section.addContentType(type); + } else { + throw new UnexpectedErrorException(String.format( + "The class '%s' is not a sub class of '%s'.", + clazz.getName(), + ContentItem.class.getName())); + } + } + } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java b/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java index 2efd01c11..55cddedac 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/Folder.java @@ -68,71 +68,97 @@ import static org.librecms.CmsConstants.*; + "ORDER BY f.name" ) , - @NamedQuery( - name = "Folder.countSubFolders", - query - = "SELECT COUNT(f) FROM Folder f WHERE f.parentCategory = :parent " - + "AND LOWER(f.name) LIKE :term" - ) - , - @NamedQuery( - name = "Folder.findItems", - query = "SELECT c.categorizedObject " - + "FROM Categorization c " - + "WHERE c.category = :folder " - + "AND TYPE(c.categorizedObject) IN ContentItem " - + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " - + "AND c.version = " - + "org.librecms.contentsection.ContentItemVersion.DRAFT" - + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " - + "OR LOWER(c.categorizedObject.name.value) LIKE :term) " - + "ORDER BY c.categorizedObject.name") - , - @NamedQuery( - name = "Folder.countItems", - query = "SELECT COUNT(c).categorizedObject " - + "FROM Categorization c " - + "WHERE c.category = :folder " - + "AND Type(c.categorizedObject) IN ContentItem " - + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " - + "AND c.version = " - + "org.librecms.contentsection.ContentItemVersion.DRAFT" - + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " - + "OR LOWER(c.categorizedObject.name.value) LIKE :term)") - , +// @NamedQuery( +// name = "Folder.countSubFolders", +// query +// = "SELECT COUNT(f) FROM Folder f WHERE f.parentCategory = :parent " +// + "AND LOWER(f.name) LIKE :term" +// ) +// , +// @NamedQuery( +// name = "Folder.findItems", +// query = "SELECT c.categorizedObject " +// + "FROM Categorization c " +// + "WHERE c.category = :folder " +// + "AND TYPE(c.categorizedObject) IN ContentItem " +// + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " +// + "AND c.version = " +// + "org.librecms.contentsection.ContentItemVersion.DRAFT" +// + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " +// + "OR LOWER(c.categorizedObject.name.value) LIKE :term) " +// + "ORDER BY c.categorizedObject.name") +// , +// @NamedQuery( +// name = "Folder.countItems", +// query = "SELECT COUNT(c).categorizedObject " +// + "FROM Categorization c " +// + "WHERE c.category = :folder " +// + "AND Type(c.categorizedObject) IN ContentItem " +// + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " +// + "AND c.version = " +// + "org.librecms.contentsection.ContentItemVersion.DRAFT" +// + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " +// + "OR LOWER(c.categorizedObject.name.value) LIKE :term)") +// , @NamedQuery( name = "Folder.findObjects", query = "SELECT o FROM CcmObject o " + "WHERE o IN (SELECT f FROM Folder f " - + "WHERE f.parentCategory = :parent " - + "AND lower(f.name) LIKE :term) " - + "OR o IN (SELECT c.categorizedObject " - + "FROM Categorization c " - + "WHERE c.category = :folder " - + "AND TYPE(c.categorizedObject) IN ContentItem " + + "WHERE f.parentCategory = :folder " + + "AND LOWER(f.name) LIKE :term) " + + "OR o IN (SELECT i FROM ContentItem i JOIN i.categories c " + + "WHERE c.category = :folder " + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " - + "AND c.version = " - + "org.librecms.contentsection.ContentItemVersion.DRAFT" - + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " - + "OR LOWER(c.categorizedObject.name.value) LIKE :term)) " - + "ORDER BY o.displayName") + + "AND i.version = " + + "org.librecms.contentsection.ContentItemVersion.DRAFT " + + "AND (LOWER(i.displayName) LIKE LOWER(:term) " +// + "OR LOWER(i.name.values) LIKE LOWER(:term)" + + ")) " + + "ORDER BY o.displayName" + // query = "SELECT o FROM CcmObject o " + // + "WHERE o IN (SELECT f FROM Folder f " + // + "WHERE f.parentCategory = :parent " + // + "AND lower(f.name) LIKE :term) " + // + "OR o IN (SELECT c.categorizedObject " + // + "FROM Categorization c " + // + "WHERE c.category = :folder " + // + "AND TYPE(c.categorizedObject) IN ContentItem " + // + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " + // + "AND c.version = " + // + "org.librecms.contentsection.ContentItemVersion.DRAFT" + // + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " + // + "OR LOWER(c.categorizedObject.name.value) LIKE :term)) " + // + "ORDER BY o.displayName" + ) , @NamedQuery( name = "Folder.countObjects", query = "SELECT COUNT(o) FROM CcmObject o " + "WHERE o IN (SELECT f FROM Folder f " - + "WHERE f.parentCategory = :parent " - + "AND lower(f.name) LIKE :term) " - + "OR o IN (SELECT c.categorizedObject " - + "FROM Categorization c " - + "WHERE c.category = :folder " - + "AND TYPE(c.categorizedObject) IN ContentItem " + + "WHERE f.parentCategory = :folder " + + "AND LOWER(f.name) LIKE :term) " + + "OR o IN (SELECT i FROM ContentItem i JOIN i.categories c " + + "WHERE c.category = :folder " + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " - + "AND c.version = " - + "org.librecms.contentsection.ContentItemVersion.DRAFT" - + "AND (LOWER(c.categorizedObject.displayName) LIKE :term " - + "OR LOWER(c.categorizedObject.name.value) LIKE :term)) " - + "ORDER BY o.displayName") + + "AND i.version = " + + "org.librecms.contentsection.ContentItemVersion.DRAFT " + + "AND (LOWER(i.displayName) LIKE LOWER(:term) " +// + "OR LOWER(i.name.values) LIKE LOWER(:term)" + + "))" + // query = "SELECT COUNT(o) FROM CcmObject o " + // + "WHERE o IN (SELECT f FROM Folder f " + // + "WHERE f.parentCategory = :parent " + // + "AND lower(f.name) LIKE :term) " + // + "OR o IN (SELECT c.categorizedObject AS co " + // + "FROM Categorization c " + // + "WHERE c.category = :folder " + // // + "AND TYPE(co) IN ContentItem " + // + "AND c.type = '" + CATEGORIZATION_TYPE_FOLDER + "' " + // + "AND co.version = " + // + "org.librecms.contentsection.ContentItemVersion.DRAFT " + // + "AND ((LOWER(co.displayName) LIKE :term " + // + "OR LOWER(co.name.value) LIKE :term)))" + ) }) public class Folder extends Category implements Serializable { diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties index f709c4fd1..0ccc980e1 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties @@ -44,4 +44,8 @@ cms.ui.permissions.table.remove_all.header=Remove all cms.ui.category.select_index_item=Select index item for category cms.ui.category.non_option=None -cms.ui.category.inherit_parent=Inherit Index from Parent Category \ No newline at end of file +cms.ui.category.inherit_parent=Inherit Index from Parent Category +cms.ui.authoring.no_types_registered=No types registered +cms.ui.contents_of=Contents of +cms.ui.new_folder=Create new folder +cms.ui.edit_folder=Rename the current folder 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 a4ba9b51e..12dec9783 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties @@ -43,4 +43,8 @@ cms.ui.permissions.table.actions.remove_all.confirm=Sind Sie sicher, dass Sie al cms.ui.permissions.table.remove_all.header=Alle entfernen cms.ui.category.select_index_item=Index Element f\u00fcr diese Kategorie ausw\u00e4hlen -cms.ui.category.inherit_parent=Inherit Index from Parent Category \ No newline at end of file +cms.ui.category.inherit_parent=Inherit Index from Parent Category +cms.ui.authoring.no_types_registered=Keine Typen registiert +cms.ui.contents_of=Inhalt von +cms.ui.new_folder=Neuen Ordner erstellen +cms.ui.edit_folder=Aktuellen Ordner umbenennen 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 7ed47c00a..d441f3ada 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties @@ -44,3 +44,7 @@ cms.ui.folder_browser=Folders cms.ui.permissions.table.actions.remove_all=Remove all permissions cms.ui.permissions.table.actions.remove_all.confirm=Are you sure to remove all permissions for this role from the current object? cms.ui.permissions.table.remove_all.header=Remove all +cms.ui.authoring.no_types_registered=No types registered +cms.ui.contents_of=Contents of +cms.ui.new_folder=Create new folder +cms.ui.edit_folder=Rename the current folder