From 85a5ace44a90e0a2e17b3f6b42acfbd396d001d0 Mon Sep 17 00:00:00 2001 From: jensp Date: Tue, 12 Dec 2017 18:33:09 +0000 Subject: [PATCH] CCM NG: Content Center Category Tab (not finished yet) git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5167 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/ui/category/CategoryAdminPane.java | 231 +++++++++++------- .../ui/category/CategoryTreeModelBuilder.java | 59 +++-- .../CategoryUseContextModelBuilder.java | 25 +- .../org/librecms/CmsResources.properties | 4 +- .../org/librecms/CmsResources_de.properties | 4 +- 5 files changed, 207 insertions(+), 116 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryAdminPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryAdminPane.java index 3ffc3bba5..decc0f0d6 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryAdminPane.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryAdminPane.java @@ -48,7 +48,9 @@ import org.apache.logging.log4j.Logger; import org.libreccm.categorization.Categorization; import org.libreccm.categorization.Category; import org.libreccm.categorization.CategoryRepository; +import org.libreccm.categorization.Domain; import org.libreccm.categorization.DomainOwnership; +import org.libreccm.categorization.DomainRepository; import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.core.UnexpectedErrorException; import org.libreccm.security.PermissionChecker; @@ -60,39 +62,45 @@ import org.librecms.contentsection.privileges.AdminPrivileges; * * @author Justin Ross <jross@redhat.com> * @author Yannick Bülter + * @author Jens Pelzetter */ -public final class CategoryAdminPane extends BaseAdminPane { +public final class CategoryAdminPane extends BaseAdminPane { + + private static final Logger LOGGER = LogManager + .getLogger(CategoryAdminPane.class); public static final String CONTEXT_SELECTED = "sel_context"; - private static final String DEFAULT_USE_CONTEXT = ""; - private static final Logger LOGGER = LogManager.getLogger( - CategoryAdminPane.class); - private final SingleSelectionModel m_contextModel; - private final Tree m_categoryTree; - private final SingleSelectionModel m_model; - private final CategoryRequestLocal m_parent; - private final CategoryRequestLocal m_category; +// private static final String DEFAULT_USE_CONTEXT = ""; + + private final SingleSelectionModel selectedCategorySystem; + private final SingleSelectionModel selectedCategory; + + private final Tree categoryTree; + + private final CategoryRequestLocal parentCategoryRequestLocal; + private final CategoryRequestLocal categoryRequestLocal; public CategoryAdminPane() { super(); - m_contextModel = new UseContextSelectionModel(new StringParameter( - CONTEXT_SELECTED)); + selectedCategorySystem = new UseContextSelectionModel( + new StringParameter( + CONTEXT_SELECTED)); // Left column // Use context section List list = new List(new CategoryUseContextModelBuilder()); - list.setSelectionModel(m_contextModel); + list.setSelectionModel(selectedCategorySystem); list.addChangeListener(new ContextSelectionListener()); /* Category tree section */ - m_categoryTree = new BaseTree(new CategoryTreeModelBuilder( - m_contextModel)); - m_categoryTree.addChangeListener(new SelectionListener()); - m_model = m_categoryTree.getSelectionModel(); + categoryTree = new BaseTree(new CategoryTreeModelBuilder( + selectedCategorySystem)); + categoryTree.addChangeListener(new SelectionListener()); + selectedCategory = categoryTree.getSelectionModel(); - setSelectionModel(m_model); - setSelector(m_categoryTree); + super.setSelectionModel(selectedCategory); + setSelector(categoryTree); /* setup use context form */ final Section contextSection = new Section(); @@ -108,41 +116,43 @@ public final class CategoryAdminPane extends BaseAdminPane { if (permissionChecker.isPermitted(AdminPrivileges.ADMINISTER_CATEGORIES)) { ActionLink addContextAction = new ActionLink(new Label(gz( "cms.ui.category.add_use_context"))); - Form addContextForm = new AddUseContextForm(m_contextModel); + Form addContextForm = new AddUseContextForm(selectedCategorySystem); getBody().add(addContextForm); getBody().connect(addContextAction, addContextForm); - contextGroup.addAction(new VisibilityComponent(addContextAction, - AdminPrivileges.ADMINISTER_CATEGORIES)); + contextGroup + .addAction(new VisibilityComponent(addContextAction, + AdminPrivileges.ADMINISTER_CATEGORIES)); } final Section categorySection = new Section(); categorySection.setHeading(new Label(gz("cms.ui.categories"))); ActionGroup categoryGroup = new ActionGroup(); categorySection.setBody(categoryGroup); - categoryGroup.setSubject(m_categoryTree); + categoryGroup.setSubject(categoryTree); final SimpleContainer leftContainer = new SimpleContainer(); leftContainer.add(contextSection); leftContainer.add(categorySection); setLeft(leftContainer); - m_parent = new ParentRequestLocal(); - m_category = new SelectionRequestLocal(); + parentCategoryRequestLocal = new ParentRequestLocal(); + categoryRequestLocal = new SelectionRequestLocal(); setAdd(gz("cms.ui.category.add"), - new CategoryAddForm(m_category, m_model)); + new CategoryAddForm(categoryRequestLocal, selectedCategory)); setEdit(gz("cms.ui.category.edit"), - new CategoryEditForm(m_parent, m_category)); + new CategoryEditForm(parentCategoryRequestLocal, + categoryRequestLocal)); setDelete(new DeleteLink(new Label(gz("cms.ui.category.delete"))), new DeleteForm( new SimpleContainer())); setIntroPane(new Label(gz("cms.ui.category.intro"))); - setItemPane(new CategoryItemPane(m_model, - m_contextModel, - m_category, + setItemPane(new CategoryItemPane(selectedCategory, + selectedCategorySystem, + categoryRequestLocal, getAddLink(), getEditLink(), getDeleteLink())); @@ -165,7 +175,8 @@ public final class CategoryAdminPane extends BaseAdminPane { } @Override - public void generateXML(PageState state, Element parent) { + public void generateXML(final PageState state, final Element parent) { + if (!isVisible(state)) { return; } @@ -185,45 +196,47 @@ public final class CategoryAdminPane extends BaseAdminPane { private final class DeleteForm extends BaseDeleteForm { - DeleteForm(SimpleContainer prompt) { + DeleteForm(final SimpleContainer prompt) { super(prompt); prompt.add(new Label(gz("cms.ui.category.delete_prompt"))); Label catLabel = new Label(); catLabel.addPrintListener(pe -> { Label label = (Label) pe.getTarget(); - Category cat = m_category.getCategory(pe.getPageState()); + Category cat = categoryRequestLocal.getCategory(pe + .getPageState()); java.util.List descendants = cat.getSubCategories(); java.util.List catObjects = cat.getObjects(); - StringBuffer sb = new StringBuffer(" "); + final StringBuilder builder = new StringBuilder(" "); if (descendants.size() > 0) { - sb.append("This category has "); - sb.append(descendants.size()); - sb.append(" descendant category(ies). "); + builder.append("This category has "); + builder.append(descendants.size()); + builder.append(" descendant category(ies). "); } if (catObjects.size() > 0) { - sb.append("It has ").append(catObjects.size()); - sb.append(" descendant object(s). "); + builder.append("It has ").append(catObjects.size()); + builder.append(" descendant object(s). "); } if (descendants.size() > 0 || catObjects.size() > 0) { - sb.append( + builder.append( "Descendants will be orphaned, if this category is removed."); } - label.setLabel(gz(sb.toString())); + label.setLabel(gz(builder.toString())); }); prompt.add(catLabel); } @Override - public final void process(final FormSectionEvent e) + public final void process(final FormSectionEvent event) + throws FormProcessException { - final PageState state = e.getPageState(); + final PageState state = event.getPageState(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final PermissionChecker permissionChecker = cdiUtil.findBean( PermissionChecker.class); final CategoryRepository repository = cdiUtil.findBean( CategoryRepository.class); - final Category category = m_category.getCategory(state); + final Category category = categoryRequestLocal.getCategory(state); if (category == null) { return; } @@ -246,7 +259,7 @@ public final class CategoryAdminPane extends BaseAdminPane { // m_contextModel.setSelectedKey(state, DEFAULT_USE_CONTEXT); // } else { Category parent = category.getParentCategory(); - m_model.setSelectedKey(state, parent.getUniqueId()); + selectedCategory.setSelectedKey(state, parent.getUniqueId()); // } //category.deleteCategoryAndOrphan(); @@ -259,7 +272,7 @@ public final class CategoryAdminPane extends BaseAdminPane { @Override protected final Object initialValue(final PageState state) { - final String id = m_model.getSelectedKey(state).toString(); + final String id = selectedCategory.getSelectedKey(state); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CategoryRepository repository = cdiUtil.findBean( CategoryRepository.class); @@ -276,7 +289,7 @@ public final class CategoryAdminPane extends BaseAdminPane { @Override protected final Object initialValue(final PageState state) { - return m_category.getCategory(state).getParentCategory(); + return categoryRequestLocal.getCategory(state).getParentCategory(); } } @@ -297,20 +310,31 @@ public final class CategoryAdminPane extends BaseAdminPane { // } // // } - private class UseContextSelectionModel extends ParameterSingleSelectionModel { + private class UseContextSelectionModel + extends ParameterSingleSelectionModel { - public UseContextSelectionModel(ParameterModel m) { - super(m); + public UseContextSelectionModel(final ParameterModel parameterModel) { + super(parameterModel); } @Override - public Object getSelectedKey(final PageState state) { + public String getSelectedKey(final PageState state) { - Object val = super.getSelectedKey(state); + String val = super.getSelectedKey(state); if (val == null - || ((CharSequence) val).length() == 0) { + || val.isEmpty() + || val.matches("\\s*")) { - val = DEFAULT_USE_CONTEXT; + final ContentSection section = CMS + .getContext() + .getContentSection(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final CategoryAdminController controller = cdiUtil + .findBean(CategoryAdminController.class); + final Domain categorySystem = controller + .retrieveDomains(section).get(0).getDomain(); + val = Long.toString(categorySystem.getObjectId()); + state.setValue(getStateParameter(), val); fireStateChanged(state); } @@ -321,13 +345,16 @@ public final class CategoryAdminPane extends BaseAdminPane { public String getUseContext(final PageState state) { - String selected = (String) m_contextModel.getSelectedKey(state); - if (DEFAULT_USE_CONTEXT.equals(selected)) { - return null; - } else { - return selected; - } -// return (DEFAULT_USE_CONTEXT).equals(selected) ? (String) null : selected; + final String selected = selectedCategorySystem.getSelectedKey(state); + return selected; +// if (DEFAULT_USE_CONTEXT.equals(selected)) { +// +// +// +// return null; +// } else { +// return selected; +// } } private class ContextSelectionListener implements ChangeListener { @@ -342,40 +369,64 @@ public final class CategoryAdminPane extends BaseAdminPane { getBody().reset(state); - if (m_contextModel.isSelected(state)) { - - final String rootCategoryId = (String) m_contextModel + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final Category root; + if (selectedCategorySystem.isSelected(state)) { + final String categorySystemIdStr = selectedCategorySystem .getSelectedKey(state); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryRepository categoryRepo = cdiUtil - .findBean(CategoryRepository.class); - final Category root; - if (DEFAULT_USE_CONTEXT.equals(rootCategoryId)) { - final ContentSection section = CMS - .getContext() - .getContentSection(); - final CategoryAdminController controller = CdiUtil - .createCdiUtil() - .findBean(CategoryAdminController.class); - final java.util.List ownerships + final DomainRepository domainRepo = cdiUtil + .findBean(DomainRepository.class); + final Domain categorySystem = domainRepo + .findById(Long.parseLong(categorySystemIdStr)) + .orElseThrow(() -> new UnexpectedErrorException(String + .format("No Domain with ID %s in the database.", + categorySystemIdStr))); + root = categorySystem.getRoot(); + +// final String rootCategoryId = selectedCategorySystem +// .getSelectedKey(state); +// +// +// final Category root; +// if (DEFAULT_USE_CONTEXT.equals(rootCategoryId)) { +// final ContentSection section = CMS +// .getContext() +// .getContentSection(); +// +// final CategoryAdminController controller = CdiUtil +// .createCdiUtil() +// .findBean(CategoryAdminController.class); +// final java.util.List ownerships +// = controller +// .retrieveDomains(section); +// root = ownerships.get(0).getDomain().getRoot(); +// } else { +// root = categoryRepo +// .findById(Long.parseLong(rootCategoryId)) +// .orElseThrow(() -> new UnexpectedErrorException(String +// .format("No Category with ID %s in the database.", +// rootCategoryId))); +// } + } else { + final ContentSection section = CMS + .getContext() + .getContentSection(); + + final CategoryAdminController controller = CdiUtil + .createCdiUtil() + .findBean(CategoryAdminController.class); + final java.util.List ownerships = controller - .retrieveDomains(section); - root = ownerships.get(0).getDomain().getRoot(); - } else { - root = categoryRepo - .findById(Long.parseLong(rootCategoryId)) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Category with ID %s in the database.", - rootCategoryId))); - } - if (root != null) { - m_model.setSelectedKey(state, root.getUniqueId()); - m_categoryTree.reset(state); - } - + .retrieveDomains(section); + root = ownerships.get(0).getDomain().getRoot(); } - if (m_model.isSelected(state)) { + + if (root != null) { + selectedCategory.setSelectedKey(state, root.getUniqueId()); + categoryTree.reset(state); + } + if (selectedCategory.isSelected(state)) { LOGGER.debug("The selection model is selected; displaying " + "the item pane"); diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryTreeModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryTreeModelBuilder.java index 399490350..cdece894e 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryTreeModelBuilder.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryTreeModelBuilder.java @@ -27,11 +27,11 @@ import com.arsdigita.cms.CMS; import com.arsdigita.util.LockableImpl; import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryRepository; import org.libreccm.categorization.CategoryTreeModelLite; +import org.libreccm.categorization.Domain; import org.libreccm.categorization.DomainOwnership; +import org.libreccm.categorization.DomainRepository; import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.core.UnexpectedErrorException; import org.librecms.contentsection.ContentSection; /** @@ -43,17 +43,18 @@ import org.librecms.contentsection.ContentSection; class CategoryTreeModelBuilder extends LockableImpl implements TreeModelBuilder { - private static String DEFAULT_USE_CONTEXT = ""; - - private SingleSelectionModel m_contextModel = null; +// private static String DEFAULT_USE_CONTEXT = ""; + private final SingleSelectionModel selectedCategorySystem; public CategoryTreeModelBuilder() { this(null); } - public CategoryTreeModelBuilder(SingleSelectionModel contextModel) { + public CategoryTreeModelBuilder( + final SingleSelectionModel selectedCategorySystem) { + super(); - m_contextModel = contextModel; + this.selectedCategorySystem = selectedCategorySystem; } @Override @@ -61,11 +62,9 @@ class CategoryTreeModelBuilder extends LockableImpl final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final Category root; - if (DEFAULT_USE_CONTEXT.equals(m_contextModel.getSelectedKey(state))) { - final ContentSection section = CMS - .getContext() - .getContentSection(); + if (selectedCategorySystem.getSelectedKey(state) == null) { + final ContentSection section =CMS.getContext().getContentSection(); final CategoryAdminController controller = cdiUtil .findBean(CategoryAdminController.class); final java.util.List ownerships @@ -73,16 +72,40 @@ class CategoryTreeModelBuilder extends LockableImpl .retrieveDomains(section); root = ownerships.get(0).getDomain().getRoot(); } else { - final CategoryRepository categoryRepo = cdiUtil - .findBean(CategoryRepository.class); - root = categoryRepo - .findById(Long.parseLong((String) m_contextModel + final DomainRepository domainRepo = cdiUtil + .findBean(DomainRepository.class); + final Domain categorySystem = domainRepo + .findById(Long.parseLong(selectedCategorySystem .getSelectedKey(state))) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Category with ID %s in the database.", - m_contextModel.getSelectedKey(state)))); + .orElseThrow(() -> new IllegalArgumentException(String + .format("No Domain with ID %s in the database.", + selectedCategorySystem.getSelectedKey(state)))); + + root = categorySystem.getRoot(); } +// if (DEFAULT_USE_CONTEXT.equals(selectedCategorySystem.getSelectedKey( +// state))) { +// final ContentSection section = CMS +// .getContext() +// .getContentSection(); +// +// final CategoryAdminController controller = cdiUtil +// .findBean(CategoryAdminController.class); +// final java.util.List ownerships +// = controller +// .retrieveDomains(section); +// root = ownerships.get(0).getDomain().getRoot(); +// } else { +// final CategoryRepository categoryRepo = cdiUtil +// .findBean(CategoryRepository.class); +// root = categoryRepo +// .findById(Long.parseLong((String) m_contextModel +// .getSelectedKey(state))) +// .orElseThrow(() -> new UnexpectedErrorException(String +// .format("No Category with ID %s in the database.", +// m_contextModel.getSelectedKey(state)))); +// } return new CategoryTreeModelLite(root); } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryUseContextModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryUseContextModelBuilder.java index 120492792..b77ac0021 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryUseContextModelBuilder.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/category/CategoryUseContextModelBuilder.java @@ -23,8 +23,11 @@ import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.list.AbstractListModelBuilder; import com.arsdigita.bebop.list.ListModel; import com.arsdigita.cms.CMS; + +import org.libreccm.categorization.Domain; import org.libreccm.categorization.DomainOwnership; import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.l10n.GlobalizationHelper; import org.librecms.contentsection.ContentSection; import java.util.Iterator; @@ -37,8 +40,6 @@ import java.util.Iterator; */ class CategoryUseContextModelBuilder extends AbstractListModelBuilder { - private static String DEFAULT_USE_CONTEXT = ""; - @Override public final ListModel makeModel(final List list, final PageState state) { return new Model(); @@ -74,12 +75,28 @@ class CategoryUseContextModelBuilder extends AbstractListModelBuilder { @Override public Object getElement() { - return current.getDomain().getRoot(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final GlobalizationHelper globalizationHelper = cdiUtil + .findBean(GlobalizationHelper.class); + final Domain categorySystem = current.getDomain(); + if (categorySystem + .getTitle() + .hasValue(globalizationHelper.getNegotiatedLocale())) { + + return globalizationHelper + .getValueFromLocalizedString(current.getDomain().getTitle()); + } else { + return categorySystem.getDomainKey(); + } + } @Override public String getKey() { - return current.getContext() != null ? current.getContext() : DEFAULT_USE_CONTEXT; + + return Long.toString(current.getDomain().getObjectId()); } + } + } diff --git a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties index eddd91888..a143400f8 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources.properties @@ -106,8 +106,8 @@ cms.ui.category.templates=Category templates cms.ui.category.templates.assigned=Assigned templates cms.ui.category.there_are_no_items_in_this_category=There are no items in this category cms.ui.category.url=URL -cms.ui.category.use_context=Use Context -cms.ui.category.use_contexts=Use Contexts +cms.ui.category.use_context=Category system +cms.ui.category.use_contexts=Category systems cms.ui.category.use_context_must_be_unique=Use context must be unique within a Content Section. cms.ui.category.view_index_item=View index item cms.ui.category.assign_select_missing="Please select a category to assign" 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 c141513e0..d9b434163 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsResources_de.properties @@ -105,8 +105,8 @@ cms.ui.category.templates=Kategorievorlage cms.ui.category.templates.assigned=Zugewiesene Vorlagen cms.ui.category.there_are_no_items_in_this_category=Es gibt keine Elemente in dieser Kategorie cms.ui.category.url=URL -cms.ui.category.use_context=Use Context -cms.ui.category.use_contexts=Use Contexts +cms.ui.category.use_context=Kategoriensystem +cms.ui.category.use_contexts=Kategoriensysteme cms.ui.category.use_context_must_be_unique=Use Context muss innerhalb einer Content Section unique sein. cms.ui.category.view_index_item=Index Element anzeigen