diff --git a/ccm-cms/src/com/arsdigita/cms/CMSConfig.java b/ccm-cms/src/com/arsdigita/cms/CMSConfig.java index 41ff0b2b8..c30385041 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSConfig.java +++ b/ccm-cms/src/com/arsdigita/cms/CMSConfig.java @@ -450,6 +450,11 @@ public final class CMSConfig extends AbstractConfig { private final Parameter m_folderBrowseListSize = new IntegerParameter("com.arsdigita.cms.folder_browse_list_size", Parameter.REQUIRED, 20); + ///////////////////////////////////////////// + // Folder A to Z show limit: Display a A to Z filter bar when a folder has more than x items + ///////////////////////////////////////////// + private final Parameter m_folderAtoZShowLimit = new IntegerParameter("com.arsdigita.cms.folder_atoz_show_limit", + Parameter.REQUIRED, 100); // /////////////////////////////////////////// // publishToFile package related parameter @@ -526,6 +531,7 @@ public final class CMSConfig extends AbstractConfig { register(m_itemSearchDefaultTab); register(m_folderBrowseListSize); + register(m_folderAtoZShowLimit); // publishToFile package related parameter // Moved to publishToFile.PublishToFileConfig as of version 6.0.2 @@ -903,4 +909,8 @@ public final class CMSConfig extends AbstractConfig { public Integer getFolderBrowseListSize() { return (Integer) get(m_folderBrowseListSize); } + + public Integer getFolderAtoZShowLimit() { + return (Integer) get(m_folderAtoZShowLimit); + } } diff --git a/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties b/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties index 7ec30fc15..915948242 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSConfig_parameter.properties @@ -238,6 +238,11 @@ com.arsdigita.cms.folder_browse_list_size.purpose=Allows to change the number of com.arsdigita.cms.folder_browse_list_size.example=20 com.arsdigita.cms.folder_browse_list_size.format=[integer] +com.arsdigita.cms.folder_atoz_show_limit.title=Show a a to z filter bar when a folder has more than x items. +com.arsdigita.cms.folder_atoz_show_limit.purpose=Show a a to z filter bar when a folder has more than x items. The filter makes a little bit easier to find a certain item in a folder +com.arsdigita.cms.folder_atoz_show_limit.example=100 +com.arsdigita.cms.folder_atoz_show_limit.format=[integer] + com.arsdigita.cms.xx.title= com.arsdigita.cms.xx.purpose= com.arsdigita.cms.xx.example= diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java index 5aac6988f..a15cd5462 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderBrowser.java @@ -250,11 +250,13 @@ public class FolderBrowser extends Table { } protected long getFolderSize() { - return m_folderSize; + return m_folderSize; } private class FolderTableModelBuilder - extends AbstractTableModelBuilder implements PaginationModelBuilder { + extends AbstractTableModelBuilder + implements PaginationModelBuilder, + FolderManipulator.FilterFormModelBuilder { private FolderSelectionModel m_folder; private RequestLocal m_size; @@ -299,6 +301,20 @@ public class FolderBrowser extends Table { } } + @Override + public long getFolderSize(PageState state) { + Folder f = (Folder) m_folder.getSelectedObject(state); + + Folder.ItemCollection itemColl = f.getPrimaryInstances(); + + if (itemColl == null) { + return 0; + } else { + return itemColl.size(); + } + } + + @Override public int getTotalSize(Paginator paginator, PageState state) { Integer size = (Integer) m_size.get(state); @@ -312,7 +328,7 @@ public class FolderBrowser extends Table { if (itemColl == null) { return 0; } - + if (state.getValue(m_filter) != null) { itemColl.addFilter(String.format( "lower(name) like lower('%s%%') or lower(displayName) like lower('%s%%')", diff --git a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java index 32342c7ea..0cb10ba03 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/folder/FolderManipulator.java @@ -59,6 +59,7 @@ import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.table.TableCellRenderer; import com.arsdigita.bebop.table.TableColumn; import com.arsdigita.bebop.tree.TreeCellRenderer; +import com.arsdigita.cms.CMSConfig; import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentSection; @@ -138,7 +139,7 @@ public class FolderManipulator extends SimpleContainer public void register(Page p) { super.register(p); p.setVisibleDefault(m_targetSelector, false); - //p.setVisibleDefault(m_filterForm, true); + p.setVisibleDefault(m_filterForm, true); p.addComponentStateParam(this, m_sources); p.addComponentStateParam(this, m_action); p.addComponentStateParam(this, m_filter); @@ -458,10 +459,10 @@ public class FolderManipulator extends SimpleContainer panel.add(m_paginator); panel.add(m_browser); - /*s_log.debug("Adding filter form..."); - m_filterForm = new FilterForm((PaginationModelBuilder) m_browser. + s_log.debug("Adding filter form..."); + m_filterForm = new FilterForm((FilterFormModelBuilder) m_browser. getModelBuilder()); - getPanel().add(m_filterForm);*/ + FolderManipulator.this.add(m_filterForm); m_checkboxGroup = new CheckboxGroup(m_sources); panel.add(m_checkboxGroup); @@ -522,9 +523,9 @@ public class FolderManipulator extends SimpleContainer private SimpleContainer panel; private boolean visible; - private PaginationModelBuilder modelBuilder; + private FilterFormModelBuilder modelBuilder; - public FilterForm(PaginationModelBuilder modelBuilder) { + public FilterForm(FilterFormModelBuilder modelBuilder) { super("folderFilterForm"); s_log.debug("Creating filter form..."); @@ -579,17 +580,22 @@ public class FolderManipulator extends SimpleContainer public void submitted(FormSectionEvent fse) throws FormProcessException { } - public void setVisible(boolean visible) { - this.visible = visible; - } - @Override public boolean isVisible(PageState state) { - //return super.isVisible(state); - return visible; + if (super.isVisible(state) + && (modelBuilder.getFolderSize(state) >= CMSConfig.getInstance().getFolderAtoZShowLimit())) { + return true; + } else { + return false; + } } } + protected interface FilterFormModelBuilder { + + public long getFolderSize(PageState state); + } + /** * Getting the GlobalizedMessage using a CMS Class targetBundle. *