From 65c52972bfd52a5744358a0e761f17d1fac51e26 Mon Sep 17 00:00:00 2001 From: baka Date: Wed, 8 Feb 2017 19:21:45 +0000 Subject: [PATCH] Adds some localization strings Refactored and reimplemented IndexItemSelectionForm git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4558 8810af33-2d31-482b-a856-94f89814c4df --- .../ui/category/IndexItemSelectionForm.java | 212 +++++++++++++++++ .../category/IndexItemSelectionForm.java.off | 222 ------------------ .../cms/ui/category/SortableCategoryList.java | 2 - .../org/librecms/dispatcher/ItemResolver.java | 4 +- .../org/librecms/CmsResources.properties | 4 + .../org/librecms/CmsResources_de.properties | 3 + .../org/librecms/CmsResources_fr.properties | 3 + 7 files changed, 224 insertions(+), 226 deletions(-) create mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java.off diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java new file mode 100755 index 000000000..0d7ee7f93 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +package com.arsdigita.cms.ui.category; + +import com.arsdigita.bebop.*; +import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.FormSectionEvent; +import com.arsdigita.bebop.form.FormErrorDisplay; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.RadioGroup; +import com.arsdigita.bebop.form.Submit; +import com.arsdigita.bebop.parameters.ParameterData; +import com.arsdigita.bebop.parameters.StringParameter; + +import com.arsdigita.bebop.util.GlobalizationUtil; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ui.CMSForm; +import com.arsdigita.cms.ui.FormSecurityListener; +import com.arsdigita.util.Assert; +import com.arsdigita.util.UncheckedWrapperException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.libreccm.categorization.Categorization; +import org.libreccm.categorization.Category; +import org.libreccm.categorization.CategoryManager; +import org.libreccm.categorization.CategoryRepository; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.core.CcmObject; +import org.librecms.contentsection.*; +import org.librecms.contentsection.privileges.AdminPrivileges; +import org.librecms.dispatcher.ItemResolver; + +import java.util.Optional; + +/** + * Allows the user to select an index item to display when the front end user is + * browsing by Category + * + * @author Randy Graebner (randyg@alum.mit.edu) + * @author Yannick Bülter ++ */ +public class IndexItemSelectionForm extends CMSForm { + + private static final Logger LOGGER = LogManager.getLogger( + CategoryEditForm.class); + + private final CategoryRequestLocal m_category; + private RadioGroup m_options; + private static final String NULL_OPTION_VALUE = ""; + private static final String NONE_OPTION_VALUE = "None"; + + private FormErrorDisplay m_errors; + private SaveCancelSection m_saveCancelSection; + + public IndexItemSelectionForm(CategoryRequestLocal m) { + super("EditCategory"); + + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final ContentSectionManager sectionManager = + cdiUtil.findBean(ContentSectionManager.class); + final CategoryManager categoryManager = cdiUtil.findBean(CategoryManager.class); + final CategoryRepository categoryRepository = cdiUtil.findBean(CategoryRepository.class); + final ContentItemManager contentItemManager = cdiUtil.findBean(ContentItemManager.class); + final ContentItemRepository contentItemRepository = cdiUtil.findBean(ContentItemRepository.class); + + setMethod(Form.POST); + + m_category = m; + + // Form header + Label header = new Label(GlobalizationUtil.globalize("cms.ui.category.select_index_item")); + header.setFontWeight(Label.BOLD); + add(header, ColumnPanel.FULL_WIDTH); + + // Form errors + m_errors = new FormErrorDisplay(this); + add(m_errors, ColumnPanel.FULL_WIDTH); + + // Option Group + m_options = new RadioGroup(new StringParameter("items")); + try { + m_options.addPrintListener(event -> { + RadioGroup group = (RadioGroup) event.getTarget(); + PageState state = event.getPageState(); + Category category = getCategory(event.getPageState()); + java.util.List children = category.getObjects(); + + group.clearOptions(); + + // option for NO index Object + group.addOption(new Option(NONE_OPTION_VALUE, + new Label(GlobalizationUtil.globalize("cms.ui.category.non_option")))); + + // option for inheriting from the parent category + if (category.getParentCategory() != null) { + group.addOption(new Option(NULL_OPTION_VALUE, + new Label(GlobalizationUtil.globalize("cms.ui.category.inherit_parent")))); + } + + final ContentSection section = CMS.getContext().getContentSection(); + final ItemResolver itemResolver = sectionManager.getItemResolver( + section); + for (Categorization child : children) { + ContentItem item = (ContentItem) child.getCategorizedObject(); + Link link = new Link( + item.getDisplayName(), + itemResolver.generateItemURL( + state, + item.getObjectId(), + item.getDisplayName(), + section, + item.getVersion().name() + ) + ); + Component linkComponent = link; + //add the option with the link + group.addOption(new Option(item.getItemUuid(), //TODO + linkComponent)); + } + + // get currently selected item + Optional optionalIndexObject = categoryManager.getIndexObject(category); + if (optionalIndexObject.isPresent()) { + ContentItem indexItem = (ContentItem) optionalIndexObject.get(); + group.setValue( + state, + contentItemManager.getDraftVersion(indexItem, ContentItem.class).getItemUuid() + ); + } else { + String value = category.getParentCategory() != null + ? NULL_OPTION_VALUE + : NONE_OPTION_VALUE; + group.setValue(state, value); + } + }); + } catch (java.util.TooManyListenersException e) { + LOGGER.error("Error adding init listener to Radio Group", e); + throw new UncheckedWrapperException(e); + } + m_options.setLayout(RadioGroup.VERTICAL); + add(m_options); + + // Save and cancel buttons + m_saveCancelSection = new SaveCancelSection(); + add(m_saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT); + + addSubmissionListener(new FormSecurityListener(AdminPrivileges.ADMINISTER_CATEGORIES)); + + // Process listener + addProcessListener(new FormProcessListener() { + public void process(FormSectionEvent event) + throws FormProcessException { + PageState state = event.getPageState(); + FormData data = event.getFormData(); + ParameterData param = data.getParameter(m_options.getParameterModel().getName()); + String selectedValue = (String) param.getValue(); + + Category category + = getCategory(event.getPageState()); + + if (selectedValue != null) { + Optional optionalItem = contentItemRepository.findById(Long.parseLong(selectedValue)); + if (optionalItem.isPresent()) { + ContentItem item = contentItemManager.getDraftVersion(optionalItem.get(), ContentItem.class); + //category.setIndexObject(item); TODO + categoryRepository.save(category); + } + } + + } + }); + } + + /** + * Get the cancel button. + * + * @return The cancel button + */ + protected Submit getCancelButton() { + return m_saveCancelSection.getCancelButton(); + } + + /** + * Fetch the selected category. + * + * @param state The page state + * @return The selected category + * @pre ( state != null ) + */ + protected Category getCategory(PageState state) { + Category category = m_category.getCategory(state); + Assert.exists(category); + return category; + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java.off b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java.off deleted file mode 100755 index 6d7d838ef..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/IndexItemSelectionForm.java.off +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved. - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.cms.ui.category; - -import com.arsdigita.bebop.ColumnPanel; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Link; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.event.PrintListener; -import com.arsdigita.bebop.form.FormErrorDisplay; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.RadioGroup; -import com.arsdigita.bebop.form.Submit; -import com.arsdigita.bebop.parameters.ParameterData; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.categorization.Category; -import com.arsdigita.categorization.CategorizedCollection; -import com.arsdigita.cms.ContentBundle; -import com.arsdigita.cms.ContentItem; -import com.arsdigita.cms.ContentSection; -import com.arsdigita.cms.SecurityManager; -import com.arsdigita.cms.dispatcher.ItemResolver; -import com.arsdigita.cms.ui.CMSForm; -import com.arsdigita.cms.ui.FormSecurityListener; -import com.arsdigita.cms.util.GlobalizationUtil; -import com.arsdigita.kernel.ACSObject; -import com.arsdigita.util.Assert; -import com.arsdigita.util.UncheckedWrapperException; - -import java.math.BigDecimal; - -/** - * Allows the user to select an index item to display when the front end user is - * browsing by Category - * - * @author Randy Graebner (randyg@alum.mit.edu) - * @version $Revision: #18 $ $DateTime: 2004/08/17 23:15:09 $ - */ -public class IndexItemSelectionForm extends CMSForm { - - private static org.apache.log4j.Logger s_log - = org.apache.log4j.Logger.getLogger( - IndexItemSelectionForm.class); - private final CategoryRequestLocal m_category; - private RadioGroup m_options; - private static final String NULL_OPTION_VALUE = ""; - private static final String NONE_OPTION_VALUE = "None"; - private FormErrorDisplay m_errors; - private SaveCancelSection m_saveCancelSection; - - public IndexItemSelectionForm(CategoryRequestLocal m) { - super("EditCategory"); - setMethod(Form.POST); - - m_category = m; - - // Form header - Label header = new Label(GlobalizationUtil.globalize("cms.ui.category.select_index_item")); - header.setFontWeight(Label.BOLD); - add(header, ColumnPanel.FULL_WIDTH); - - // Form errors - m_errors = new FormErrorDisplay(this); - add(m_errors, ColumnPanel.FULL_WIDTH); - - // Option Group - m_options = new RadioGroup(new StringParameter("items")); - try { - m_options.addPrintListener(new PrintListener() { - public void prepare(PrintEvent event) { - RadioGroup group = (RadioGroup) event.getTarget(); - PageState state = event.getPageState(); - Category category = getCategory(event.getPageState()); - CategorizedCollection children = category.getObjects( - ContentItem.BASE_DATA_OBJECT_TYPE); - - group.clearOptions(); - - // option for NO index Object - group.addOption(new Option(NONE_OPTION_VALUE, - new Label(NONE_OPTION_VALUE))); - - // option for inheriting from the parent category - if (category.getParentCategoryCount() > 0) { - group.addOption(new Option(NULL_OPTION_VALUE, - new Label("Inherit Index from Parent Category"))); - } - - while (children.next()) { - ACSObject item - = (ACSObject) children.getDomainObject(); - - if ((item instanceof ContentItem) && ((ContentItem) item).getVersion(). - equals(ContentItem.DRAFT)) { - - //create a link to the item: - ContentBundle bundleItem = (ContentBundle) item; - ContentSection section = bundleItem.getContentSection(); - ItemResolver resolver = section.getItemResolver(); - - Link link = new Link( - bundleItem.getDisplayName(), - resolver.generateItemURL(state, - ((ContentBundle) bundleItem.getDraftVersion()).getPrimaryInstance(), - section, - ((ContentBundle) bundleItem.getDraftVersion()).getPrimaryInstance().getVersion())); - Component linkComponent = link; - //add the option with the link - group.addOption(new Option(item.getID().toString(), - linkComponent)); - } - } - // get currently selected item - ACSObject indexItem = category.getDirectIndexObject(); - if (indexItem != null && indexItem instanceof ContentItem) { - group.setValue(state, ((ContentItem) indexItem) - .getWorkingVersion() - .getID().toString()); - } else { - String value = NONE_OPTION_VALUE; - if (!category.ignoreParentIndexItem() - && category.getParentCategoryCount() > 0) { - value = NULL_OPTION_VALUE; - } - group.setValue(state, value); - } - } - - }); - } catch (java.util.TooManyListenersException e) { - s_log.error("Error adding init listener to Radio Group", e); - throw new UncheckedWrapperException(e); - } - m_options.setLayout(RadioGroup.VERTICAL); - add(m_options); - - // Save and cancel buttons - m_saveCancelSection = new SaveCancelSection(); - add(m_saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT); - - addSubmissionListener(new FormSecurityListener(SecurityManager.CATEGORY_ADMIN)); - - // Process listener - addProcessListener(new FormProcessListener() { - public void process(FormSectionEvent event) - throws FormProcessException { - PageState state = event.getPageState(); - FormData data = event.getFormData(); - ParameterData param = data.getParameter(m_options.getParameterModel().getName()); - String selectedValue = (String) param.getValue(); - - Category category - = getCategory(event.getPageState()); - - ContentItem item = null; - if (selectedValue != null) { - if (NULL_OPTION_VALUE.equals(selectedValue)) { - category.setIgnoreParentIndexItem(false); - selectedValue = null; - } else if (NONE_OPTION_VALUE.equals(selectedValue)) { - category.setIgnoreParentIndexItem(true); - selectedValue = null; - - } else { - item = new ContentItem(new BigDecimal(selectedValue)); - item = item.getWorkingVersion(); - } - } - category.setIndexObject(item); - category.save(); - } - - }); - } - - /** - * Get the cancel button. - * - * @return The cancel button - */ - protected Submit getCancelButton() { - return m_saveCancelSection.getCancelButton(); - } - - /** - * Fetch the selected category. - * - * @param state The page state - * @return The selected category - * @pre ( state != null ) - */ - protected Category getCategory(PageState state) { - Category category = m_category.getCategory(state); - Assert.exists(category); - return category; - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/SortableCategoryList.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/SortableCategoryList.java index c5b583174..ea9ca199f 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/SortableCategoryList.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/SortableCategoryList.java @@ -44,10 +44,8 @@ import javax.servlet.ServletException; * "up" arrow n/2 times where n is the number of items in the list. * This clearly is not a good setup. * - * @author Randy Graebner (randyg@alum.mit.edu) * @author Yannick Bülter - */ abstract class SortableCategoryList extends SortableList { diff --git a/ccm-cms/src/main/java/org/librecms/dispatcher/ItemResolver.java b/ccm-cms/src/main/java/org/librecms/dispatcher/ItemResolver.java index e27c994c5..5903a59e7 100644 --- a/ccm-cms/src/main/java/org/librecms/dispatcher/ItemResolver.java +++ b/ccm-cms/src/main/java/org/librecms/dispatcher/ItemResolver.java @@ -41,7 +41,7 @@ import javax.servlet.http.HttpServletRequest; * The item resolver would be asked to map the URL stub {@code /cheese} in the * content section mounted at {@code /cms} to a content item. To this end, the * dispatcher calls the {@link #getItem} method, passing in the - * {@link com.arsdigita.cms.ContentSection} and the URL stub for the item within + * {@link ContentSection} and the URL stub for the item within * the section, {@code /cheese} in our example. As a final argument, the * dispatcher passes either {@link ContentItemVersion#DRAFT} or * {@link ContentItemVersion#LIVE} to the {@code ItemResolver}, depending on @@ -92,9 +92,9 @@ public interface ItemResolver { /** * Generates a URL for a content item. * + * @param state The page state * @param itemId The item ID * @param name The name of the content page - * @param state The page state * @param section the content section to which the item belongs * @param context the context of the URL, such as "live" or "admin" * diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties index 59a9ffe1c..f709c4fd1 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties @@ -41,3 +41,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.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 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 165c9cd17..a4ba9b51e 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties @@ -41,3 +41,6 @@ cms.ui.folder_browser=Ordner cms.ui.permissions.table.actions.remove_all=Alle Berechtigungen entfernen cms.ui.permissions.table.actions.remove_all.confirm=Sind Sie sicher, dass Sie alle Berechtigungen f\u00fcr diese Rolle von dem aktuellen Objekt entfernen wollen? 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 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 185a2956e..7ed47c00a 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties @@ -16,6 +16,9 @@ cms.ui.admin_center=Admin Center cms.ui.contentcenter.section_hint=All documents are organized in one or more contect sections. Each content section may have its own system of permission and its own administrators, independent from each other. Select a section where you will edit a document or create a new one. cms.ui.contentcenter.location=Location cms.ui.contentcenter.location_hint=In Legacy mode links to public pages. +cms.ui.category.select_index_item=S\u00e9lectionnez la page d'accueil de la rubrique +cms.ui.category.non_option=Aucun +cms.ui.category.inherit_parent=Inherit Index from Parent Category cms.ui.browse=Documents cms.ui.search=Search cms.ui.roles=Roles