From 10fa61b0c05afd530532012cd326a06b481ff562 Mon Sep 17 00:00:00 2001 From: jensp Date: Sun, 26 Nov 2017 16:55:53 +0000 Subject: [PATCH] CCM NG: Admin UI for Pages final part git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5140 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/ui/pages/PagesAdminPage.java | 109 ++++++++++++------ .../org/librecms/CmsResources.properties | 1 + .../org/librecms/CmsResources_de.properties | 1 + .../org/librecms/CmsResources_fr.properties | 1 + .../main/java/com/arsdigita/bebop/Page.java | 2 - .../admin/categories/CategoriesTreeModel.java | 19 ++- .../CategoriesTreeModelBuilder.java | 2 +- 7 files changed, 95 insertions(+), 40 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java index d0a7fcb6f..248587e61 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java @@ -31,6 +31,9 @@ import com.arsdigita.bebop.SaveCancelSection; import com.arsdigita.bebop.TabbedPane; import com.arsdigita.bebop.Text; import com.arsdigita.bebop.Tree; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ChangeEvent; +import com.arsdigita.bebop.event.ChangeListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.PrintEvent; import com.arsdigita.bebop.form.Option; @@ -92,23 +95,24 @@ public class PagesAdminPage extends Page { super.addGlobalStateParam(selectedCategory.getStateParameter()); categoryTree = new Tree(new CategoryTreeModelBuilder()); + categoryTree.addChangeListener(this::categoryTreeStateChanged); final LayoutPanel panel = new LayoutPanel(); panel.setLeft(categoryTree); + nothingSelectedLabel = new Label(new GlobalizedMessage( + "cms.ui.pages.no_category_selected", + CmsConstants.CMS_BUNDLE)); +// nothingSelectedLabel.addPrintListener(this::printNothingSelectedLabel); + super.setVisibleDefault(nothingSelectedLabel, true); + pageModelForm = new Form("pageModelForm"); + super.setVisibleDefault(pageModelForm, false); + final Label heading = new Label(); heading.addPrintListener(this::printPageModelFormHeading); heading.setClassAttr("heading"); pageModelForm.add(heading); - super.setVisibleDefault(pageModelForm, false); - - nothingSelectedLabel = new Label(new GlobalizedMessage( - "cms.ui.pages.no_category_selected", - CmsConstants.CMS_BUNDLE)); - nothingSelectedLabel.addPrintListener(this::printNothingSelectedLabel); - super.setVisibleDefault(nothingSelectedLabel, true); - pageModelForm.add(nothingSelectedLabel); indexPageModelSelect = new SingleSelect(INDEX_PAGE_MODEL_SELECT); try { @@ -117,6 +121,7 @@ public class PagesAdminPage extends Page { throw new UnexpectedErrorException(ex); } pageModelForm.add(indexPageModelSelect); +// super.setVisibleDefault(indexPageModelSelect, false); itemPageModelSelect = new SingleSelect(ITEM_PAGE_MODEL_SELECT); try { @@ -125,26 +130,29 @@ public class PagesAdminPage extends Page { throw new UnexpectedErrorException(ex); } pageModelForm.add(itemPageModelSelect); +// super.setVisibleDefault(itemPageModelSelect, false); saveCancelSection = new SaveCancelSection(); pageModelForm.add(saveCancelSection); +// super.setVisibleDefault(saveCancelSection, false); pageModelForm.addInitListener(this::initPageModelForm); pageModelForm.addValidationListener(this::validatePageModelForm); pageModelForm.addProcessListener(this::processPageModelForm); final BoxPanel rightPanel = new BoxPanel(BoxPanel.VERTICAL); -// rightPanel.add(nothingSelectedLabel); + rightPanel.add(nothingSelectedLabel); rightPanel.add(pageModelForm); panel.setRight(rightPanel); final TabbedPane tabbedPane = new TabbedPane(); tabbedPane.addTab(new Label(new GlobalizedMessage( - "cms.ui.pages.tab.pages", - CmsConstants.CMS_BUNDLE)), + "cms.ui.pages.tab.pages", CmsConstants.CMS_BUNDLE)), panel); super.add(tabbedPane); + super.addActionListener(this::initPage); + super.lock(); } @@ -167,20 +175,33 @@ public class PagesAdminPage extends Page { // page.addGlobalStateParam(selectedCategory.getStateParameter()); // // } - private void printNothingSelectedLabel(final PrintEvent event) { + private void initPage(final ActionEvent event) { final PageState state = event.getPageState(); - final Label target = (Label) event.getTarget(); - target.setVisible(state, !selectedCategory.isSelected(state)); + if (selectedCategory.isSelected(state)) { + nothingSelectedLabel.setVisible(state, false); + pageModelForm.setVisible(state, true); + } else { + nothingSelectedLabel.setVisible(state, true); + pageModelForm.setVisible(state, false); + } + } +// private void printNothingSelectedLabel(final PrintEvent event) { +// +// final PageState state = event.getPageState(); +// final Label target = (Label) event.getTarget(); +// +// target.setVisible(state, !selectedCategory.isSelected(state)); +// } private void printPageModelFormHeading(final PrintEvent event) { final PageState state = event.getPageState(); final Label target = (Label) event.getTarget(); - target.setVisible(state, !selectedCategory.isSelected(state)); +// target.setVisible(state, !selectedCategory.isSelected(state)); if (selectedCategory.isSelected(state)) { final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); @@ -202,15 +223,13 @@ public class PagesAdminPage extends Page { private void populatePageModelSelect(final PrintEvent event) { - final PageState state = event.getPageState(); - +// final PageState state = event.getPageState(); final SingleSelect target = (SingleSelect) event.getTarget(); - if (!selectedCategory.isSelected(state)) { - target.setVisible(state, false); - return; - } - +// if (!selectedCategory.isSelected(state)) { +// target.setVisible(state, false); +// return; +// } target.clearOptions(); target.addOption(new Option(INHERIT_PAGEMODEL, @@ -236,6 +255,14 @@ public class PagesAdminPage extends Page { } + private void categoryTreeStateChanged(final ChangeEvent event) { + + final PageState state = event.getPageState(); + + final String selectedKey = (String) categoryTree.getSelectedKey(state); + selectedCategory.setSelectedKey(state, selectedKey); + } + private void initPageModelForm(final FormSectionEvent event) throws FormProcessException { @@ -244,6 +271,10 @@ public class PagesAdminPage extends Page { // pageModelForm.setVisible(state, selectedCategory.isSelected(state)); saveCancelSection.setVisible(state, selectedCategory.isSelected(state)); + if (!selectedCategory.isSelected(state)) { + return; + } + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CategoryRepository categoryRepo = cdiUtil .findBean(CategoryRepository.class); @@ -261,16 +292,25 @@ public class PagesAdminPage extends Page { if (page.isPresent()) { - indexPageModelSelect.setValue(state, - Long.toString(page - .get() - .getIndexPageModel() - .getPageModelId())); - itemPageModelSelect.setValue(state, - Long.toString(page - .get() - .getItemPageModel() - .getPageModelId())); + if (page.get().getIndexPageModel() == null) { + indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); + } else { + indexPageModelSelect.setValue(state, + Long.toString(page + .get() + .getIndexPageModel() + .getPageModelId())); + } + + if (page.get().getItemPageModel() == null) { + itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); + } else { + itemPageModelSelect.setValue(state, + Long.toString(page + .get() + .getItemPageModel() + .getPageModelId())); + } } else { indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); @@ -328,7 +368,7 @@ public class PagesAdminPage extends Page { if (!INHERIT_PAGEMODEL.equals(selectedItemPageModelId)) { final PageModel model = pageModelRepo - .findById(Long.parseLong(selectedIndexPageModelId)) + .findById(Long.parseLong(selectedItemPageModelId)) .orElseThrow(() -> new UnexpectedErrorException(String .format("No PageModel with ID %s in the database.", selectedItemPageModelId))); @@ -350,7 +390,8 @@ public class PagesAdminPage extends Page { public TreeModel makeModel(final Tree tree, final PageState state) { - return new CategoriesTreeModel(pagesInstance.getCategoryDomain()); + return new CategoriesTreeModel(tree, + pagesInstance.getCategoryDomain()); } } diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties index 4e0221b4d..a4e5a35c9 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties @@ -494,3 +494,4 @@ cms.ui.contentcenter.pages.add_link=Add page tree cms.ui.pages.title=Administer pages cms.ui.pages.page_config_for_category=Page Configuration for category {0} cms.ui.pages.assigned_page_model.inherit=Inherit from parent +cms.ui.pages.no_category_selected=No category selected 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 b6d5a3b24..db147d26c 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties @@ -491,3 +491,4 @@ cms.ui.contentcenter.pages.add_link=Seitenbaum hinzuf\u00fcgen cms.ui.pages.title=Seitenbaum verwalten cms.ui.pages.page_config_for_category=Seiten-Konfiguration f\u00fcr Kategorie {0} cms.ui.pages.assigned_page_model.inherit=PageModel der \u00fcbergeordneten Seite verwenden +cms.ui.pages.no_category_selected=Keine Kategorie ausgew\u00e4hlt 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 e065dbbc3..755233ebf 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_fr.properties @@ -450,3 +450,4 @@ cms.ui.contentcenter.pages.add_link=Add page tree cms.ui.pages.title=Administer pages cms.ui.pages.page_config_for_category=Page Configuration for category {0} cms.ui.pages.assigned_page_model.inherit=Inherit from parent +cms.ui.pages.no_category_selected=No category selected diff --git a/ccm-core/src/main/java/com/arsdigita/bebop/Page.java b/ccm-core/src/main/java/com/arsdigita/bebop/Page.java index 068fce566..7a2f3aa48 100755 --- a/ccm-core/src/main/java/com/arsdigita/bebop/Page.java +++ b/ccm-core/src/main/java/com/arsdigita/bebop/Page.java @@ -973,8 +973,6 @@ public class Page extends SimpleComponent implements Container { /** * Adds a component to the page model. - * - * @deprecated This method will become private in ACS 5.0. */ public void addComponent(Component c) { Assert.isUnlocked(this); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModel.java index 351e8bd65..85c6c825d 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModel.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModel.java @@ -19,6 +19,7 @@ package com.arsdigita.ui.admin.categories; import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Tree; import com.arsdigita.bebop.tree.TreeModel; import com.arsdigita.bebop.tree.TreeNode; @@ -31,23 +32,29 @@ import java.util.Iterator; import java.util.List; /** - * + * A reusable implementation of {@link TreeModel} for creating category trees. + * * @author Jens Pelzetter */ public class CategoriesTreeModel implements TreeModel { + private final Tree tree; private final Domain domain; - public CategoriesTreeModel(final Domain domain) { + public CategoriesTreeModel(final Tree tree, final Domain domain) { + this.tree = tree; this.domain = domain; } @Override - public TreeNode getRoot(final PageState data) { + public TreeNode getRoot(final PageState state) { final CategoryRepository categoryRepository = CdiUtil.createCdiUtil() .findBean(CategoryRepository.class); final Category category = categoryRepository.findById(domain.getRoot() .getObjectId()).get(); + + tree.expand(Long.toString(category.getObjectId()), state); + return new CategoryTreeNode(category); } @@ -65,6 +72,12 @@ public class CategoriesTreeModel implements TreeModel { public Iterator getChildren(final TreeNode node, final PageState state) { + if (node.getKey().equals(getRoot(state).getKey()) + && tree.isCollapsed(node.getKey().toString(), state)) { + + tree.expand(node.getKey().toString(), state); + } + final CategoriesController controller = CdiUtil .createCdiUtil() .findBean(CategoriesController.class); diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModelBuilder.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModelBuilder.java index c55d84321..8564e2e35 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModelBuilder.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/categories/CategoriesTreeModelBuilder.java @@ -53,7 +53,7 @@ class CategoriesTreeModelBuilder final Domain domain = domainRepository.findById(Long.parseLong( selectedDomainId.getSelectedKey(state))).get(); - return new CategoriesTreeModel(domain); + return new CategoriesTreeModel(tree, domain); } }