CCM NG: Admin UI for Pages final part

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5140 8810af33-2d31-482b-a856-94f89814c4df

Former-commit-id: 10fa61b0c0
pull/2/head
jensp 2017-11-26 16:55:53 +00:00
parent 15a305a300
commit 759377841a
7 changed files with 95 additions and 40 deletions

View File

@ -31,6 +31,9 @@ import com.arsdigita.bebop.SaveCancelSection;
import com.arsdigita.bebop.TabbedPane; import com.arsdigita.bebop.TabbedPane;
import com.arsdigita.bebop.Text; import com.arsdigita.bebop.Text;
import com.arsdigita.bebop.Tree; 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.FormSectionEvent;
import com.arsdigita.bebop.event.PrintEvent; import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.Option;
@ -92,23 +95,24 @@ public class PagesAdminPage extends Page {
super.addGlobalStateParam(selectedCategory.getStateParameter()); super.addGlobalStateParam(selectedCategory.getStateParameter());
categoryTree = new Tree(new CategoryTreeModelBuilder()); categoryTree = new Tree(new CategoryTreeModelBuilder());
categoryTree.addChangeListener(this::categoryTreeStateChanged);
final LayoutPanel panel = new LayoutPanel(); final LayoutPanel panel = new LayoutPanel();
panel.setLeft(categoryTree); 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"); pageModelForm = new Form("pageModelForm");
super.setVisibleDefault(pageModelForm, false);
final Label heading = new Label(); final Label heading = new Label();
heading.addPrintListener(this::printPageModelFormHeading); heading.addPrintListener(this::printPageModelFormHeading);
heading.setClassAttr("heading"); heading.setClassAttr("heading");
pageModelForm.add(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); indexPageModelSelect = new SingleSelect(INDEX_PAGE_MODEL_SELECT);
try { try {
@ -117,6 +121,7 @@ public class PagesAdminPage extends Page {
throw new UnexpectedErrorException(ex); throw new UnexpectedErrorException(ex);
} }
pageModelForm.add(indexPageModelSelect); pageModelForm.add(indexPageModelSelect);
// super.setVisibleDefault(indexPageModelSelect, false);
itemPageModelSelect = new SingleSelect(ITEM_PAGE_MODEL_SELECT); itemPageModelSelect = new SingleSelect(ITEM_PAGE_MODEL_SELECT);
try { try {
@ -125,26 +130,29 @@ public class PagesAdminPage extends Page {
throw new UnexpectedErrorException(ex); throw new UnexpectedErrorException(ex);
} }
pageModelForm.add(itemPageModelSelect); pageModelForm.add(itemPageModelSelect);
// super.setVisibleDefault(itemPageModelSelect, false);
saveCancelSection = new SaveCancelSection(); saveCancelSection = new SaveCancelSection();
pageModelForm.add(saveCancelSection); pageModelForm.add(saveCancelSection);
// super.setVisibleDefault(saveCancelSection, false);
pageModelForm.addInitListener(this::initPageModelForm); pageModelForm.addInitListener(this::initPageModelForm);
pageModelForm.addValidationListener(this::validatePageModelForm); pageModelForm.addValidationListener(this::validatePageModelForm);
pageModelForm.addProcessListener(this::processPageModelForm); pageModelForm.addProcessListener(this::processPageModelForm);
final BoxPanel rightPanel = new BoxPanel(BoxPanel.VERTICAL); final BoxPanel rightPanel = new BoxPanel(BoxPanel.VERTICAL);
// rightPanel.add(nothingSelectedLabel); rightPanel.add(nothingSelectedLabel);
rightPanel.add(pageModelForm); rightPanel.add(pageModelForm);
panel.setRight(rightPanel); panel.setRight(rightPanel);
final TabbedPane tabbedPane = new TabbedPane(); final TabbedPane tabbedPane = new TabbedPane();
tabbedPane.addTab(new Label(new GlobalizedMessage( tabbedPane.addTab(new Label(new GlobalizedMessage(
"cms.ui.pages.tab.pages", "cms.ui.pages.tab.pages", CmsConstants.CMS_BUNDLE)),
CmsConstants.CMS_BUNDLE)),
panel); panel);
super.add(tabbedPane); super.add(tabbedPane);
super.addActionListener(this::initPage);
super.lock(); super.lock();
} }
@ -167,20 +175,33 @@ public class PagesAdminPage extends Page {
// page.addGlobalStateParam(selectedCategory.getStateParameter()); // page.addGlobalStateParam(selectedCategory.getStateParameter());
// //
// } // }
private void printNothingSelectedLabel(final PrintEvent event) { private void initPage(final ActionEvent event) {
final PageState state = event.getPageState(); 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) { private void printPageModelFormHeading(final PrintEvent event) {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Label target = (Label) event.getTarget(); final Label target = (Label) event.getTarget();
target.setVisible(state, !selectedCategory.isSelected(state)); // target.setVisible(state, !selectedCategory.isSelected(state));
if (selectedCategory.isSelected(state)) { if (selectedCategory.isSelected(state)) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
@ -202,15 +223,13 @@ public class PagesAdminPage extends Page {
private void populatePageModelSelect(final PrintEvent event) { private void populatePageModelSelect(final PrintEvent event) {
final PageState state = event.getPageState(); // final PageState state = event.getPageState();
final SingleSelect target = (SingleSelect) event.getTarget(); final SingleSelect target = (SingleSelect) event.getTarget();
if (!selectedCategory.isSelected(state)) { // if (!selectedCategory.isSelected(state)) {
target.setVisible(state, false); // target.setVisible(state, false);
return; // return;
} // }
target.clearOptions(); target.clearOptions();
target.addOption(new Option(INHERIT_PAGEMODEL, 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) private void initPageModelForm(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
@ -244,6 +271,10 @@ public class PagesAdminPage extends Page {
// pageModelForm.setVisible(state, selectedCategory.isSelected(state)); // pageModelForm.setVisible(state, selectedCategory.isSelected(state));
saveCancelSection.setVisible(state, selectedCategory.isSelected(state)); saveCancelSection.setVisible(state, selectedCategory.isSelected(state));
if (!selectedCategory.isSelected(state)) {
return;
}
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final CategoryRepository categoryRepo = cdiUtil final CategoryRepository categoryRepo = cdiUtil
.findBean(CategoryRepository.class); .findBean(CategoryRepository.class);
@ -261,16 +292,25 @@ public class PagesAdminPage extends Page {
if (page.isPresent()) { if (page.isPresent()) {
indexPageModelSelect.setValue(state, if (page.get().getIndexPageModel() == null) {
Long.toString(page indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
.get() } else {
.getIndexPageModel() indexPageModelSelect.setValue(state,
.getPageModelId())); Long.toString(page
itemPageModelSelect.setValue(state, .get()
Long.toString(page .getIndexPageModel()
.get() .getPageModelId()));
.getItemPageModel() }
.getPageModelId()));
if (page.get().getItemPageModel() == null) {
itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
} else {
itemPageModelSelect.setValue(state,
Long.toString(page
.get()
.getItemPageModel()
.getPageModelId()));
}
} else { } else {
indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL);
@ -328,7 +368,7 @@ public class PagesAdminPage extends Page {
if (!INHERIT_PAGEMODEL.equals(selectedItemPageModelId)) { if (!INHERIT_PAGEMODEL.equals(selectedItemPageModelId)) {
final PageModel model = pageModelRepo final PageModel model = pageModelRepo
.findById(Long.parseLong(selectedIndexPageModelId)) .findById(Long.parseLong(selectedItemPageModelId))
.orElseThrow(() -> new UnexpectedErrorException(String .orElseThrow(() -> new UnexpectedErrorException(String
.format("No PageModel with ID %s in the database.", .format("No PageModel with ID %s in the database.",
selectedItemPageModelId))); selectedItemPageModelId)));
@ -350,7 +390,8 @@ public class PagesAdminPage extends Page {
public TreeModel makeModel(final Tree tree, public TreeModel makeModel(final Tree tree,
final PageState state) { final PageState state) {
return new CategoriesTreeModel(pagesInstance.getCategoryDomain()); return new CategoriesTreeModel(tree,
pagesInstance.getCategoryDomain());
} }
} }

View File

@ -494,3 +494,4 @@ cms.ui.contentcenter.pages.add_link=Add page tree
cms.ui.pages.title=Administer pages cms.ui.pages.title=Administer pages
cms.ui.pages.page_config_for_category=Page Configuration for category {0} 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.assigned_page_model.inherit=Inherit from parent
cms.ui.pages.no_category_selected=No category selected

View File

@ -491,3 +491,4 @@ cms.ui.contentcenter.pages.add_link=Seitenbaum hinzuf\u00fcgen
cms.ui.pages.title=Seitenbaum verwalten cms.ui.pages.title=Seitenbaum verwalten
cms.ui.pages.page_config_for_category=Seiten-Konfiguration f\u00fcr Kategorie {0} 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.assigned_page_model.inherit=PageModel der \u00fcbergeordneten Seite verwenden
cms.ui.pages.no_category_selected=Keine Kategorie ausgew\u00e4hlt

View File

@ -450,3 +450,4 @@ cms.ui.contentcenter.pages.add_link=Add page tree
cms.ui.pages.title=Administer pages cms.ui.pages.title=Administer pages
cms.ui.pages.page_config_for_category=Page Configuration for category {0} 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.assigned_page_model.inherit=Inherit from parent
cms.ui.pages.no_category_selected=No category selected

View File

@ -973,8 +973,6 @@ public class Page extends SimpleComponent implements Container {
/** /**
* Adds a component to the page model. * Adds a component to the page model.
*
* @deprecated This method will become private in ACS 5.0.
*/ */
public void addComponent(Component c) { public void addComponent(Component c) {
Assert.isUnlocked(this); Assert.isUnlocked(this);

View File

@ -19,6 +19,7 @@
package com.arsdigita.ui.admin.categories; package com.arsdigita.ui.admin.categories;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Tree;
import com.arsdigita.bebop.tree.TreeModel; import com.arsdigita.bebop.tree.TreeModel;
import com.arsdigita.bebop.tree.TreeNode; import com.arsdigita.bebop.tree.TreeNode;
@ -31,23 +32,29 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
/** /**
* * A reusable implementation of {@link TreeModel} for creating category trees.
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
public class CategoriesTreeModel implements TreeModel { public class CategoriesTreeModel implements TreeModel {
private final Tree tree;
private final Domain domain; private final Domain domain;
public CategoriesTreeModel(final Domain domain) { public CategoriesTreeModel(final Tree tree, final Domain domain) {
this.tree = tree;
this.domain = domain; this.domain = domain;
} }
@Override @Override
public TreeNode getRoot(final PageState data) { public TreeNode getRoot(final PageState state) {
final CategoryRepository categoryRepository = CdiUtil.createCdiUtil() final CategoryRepository categoryRepository = CdiUtil.createCdiUtil()
.findBean(CategoryRepository.class); .findBean(CategoryRepository.class);
final Category category = categoryRepository.findById(domain.getRoot() final Category category = categoryRepository.findById(domain.getRoot()
.getObjectId()).get(); .getObjectId()).get();
tree.expand(Long.toString(category.getObjectId()), state);
return new CategoryTreeNode(category); return new CategoryTreeNode(category);
} }
@ -65,6 +72,12 @@ public class CategoriesTreeModel implements TreeModel {
public Iterator getChildren(final TreeNode node, public Iterator getChildren(final TreeNode node,
final PageState state) { 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 final CategoriesController controller = CdiUtil
.createCdiUtil() .createCdiUtil()
.findBean(CategoriesController.class); .findBean(CategoriesController.class);

View File

@ -53,7 +53,7 @@ class CategoriesTreeModelBuilder
final Domain domain = domainRepository.findById(Long.parseLong( final Domain domain = domainRepository.findById(Long.parseLong(
selectedDomainId.getSelectedKey(state))).get(); selectedDomainId.getSelectedKey(state))).get();
return new CategoriesTreeModel(domain); return new CategoriesTreeModel(tree, domain);
} }
} }