From b9dc94e48bb20b0122627705dd5cff96fdaf7d48 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Thu, 17 Mar 2022 18:51:50 +0100 Subject: [PATCH] Removed depcrecated package com.arsdigita.london.terms.ui from ccm-cms --- .../cms/ui/authoring/ItemCategoryStep.java | 4 +- .../terms/ui/ACSObjectCategoryPicker.java | 202 ---------- .../terms/ui/CategoryPickerController.java | 241 ------------ .../london/terms/ui/ItemCategoryPicker.java | 79 ---- .../arsdigita/london/terms/ui/TermWidget.java | 370 ------------------ .../src/main/java/org/librecms/CMSConfig.java | 17 - 6 files changed, 1 insertion(+), 912 deletions(-) delete mode 100644 ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ACSObjectCategoryPicker.java delete mode 100644 ccm-cms/src/main/java/com/arsdigita/london/terms/ui/CategoryPickerController.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ItemCategoryPicker.java delete mode 100644 ccm-cms/src/main/java/com/arsdigita/london/terms/ui/TermWidget.java diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ItemCategoryStep.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ItemCategoryStep.java index 8d876a45c..b48595c04 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ItemCategoryStep.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ItemCategoryStep.java @@ -75,9 +75,7 @@ public class ItemCategoryStep extends SimpleContainer implements Resettable { itemCategorySummary.registerAction(ItemCategorySummary.ACTION_ADD_JS, new AddActionListener("javascript")); - final String addFormClassName = CMSConfig - .getConfig() - .getCategoryAuthoringAddForm(); + final String addFormClassName = null; final Class addFormClass; try { addFormClass = Class.forName(addFormClassName); diff --git a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ACSObjectCategoryPicker.java b/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ACSObjectCategoryPicker.java deleted file mode 100644 index 5b3300b22..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ACSObjectCategoryPicker.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (C) 2001-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.london.terms.ui; - -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.parameters.LongParameter; -import com.arsdigita.categorization.ui.ACSObjectCategoryForm; - -import org.apache.logging.log4j.LogManager; -import org.libreccm.categorization.Domain; - -import org.apache.logging.log4j.Logger; -import org.libreccm.categorization.DomainRepository; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.core.CcmObject; - -import java.math.BigDecimal; -import java.util.Optional; - -/** - * abstracted from original version of c.ad.aplaws.ui.ItemCategoryPicker r1297 - * - * @author Chris Gilbert - * @author Jens Pelzetter - */ -// NON JavaDoc: -// copied from c.ad.aplaws.ui (module ccm-ldn-aplaws) in order to avoid a -// dependency from the integration layer for forum-categorised. Otherwise you -// have had to specify the specific integration layer (i.e. ccm-???-aplaws) in -// application.xml for compiling, which may be different for each installation. -public abstract class ACSObjectCategoryPicker extends SimpleContainer { - - private static final Logger LOGGER = LogManager - .getLogger(ACSObjectCategoryPicker.class); - - private final ACSObjectCategoryForm form; - private final LongParameter rootParam; - - public ACSObjectCategoryPicker(final LongParameter rootParam, - final StringParameter mode) { - - form = getForm(rootParam, mode); - this.rootParam = rootParam; - - super.add(form); - form.addCompletionListener(new ItemCategoryFormCompletion()); - } - - protected abstract ACSObjectCategoryForm getForm(LongParameter root, - StringParameter mode); - - protected abstract CcmObject getObject(PageState state); - -// protected List getCurrentCategories(final Domain domain, -// final CcmObject object) { -// -// LOGGER.debug("Getting terms from {} to {}", domain, object); -// final List terms = domain.getRoot().getSubCategories(); -// terms.addEqualsFilter("model.childObjects.id", object.getID()); -// terms.addPath("model.id"); -// -// List current = new ArrayList<>(); -// while (terms.next()) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Got term " + terms.get("model.id")); -// } -// current.add(terms.get("model.id")); -// } -// return current; -// } - // TODO move out of UI code -// public static Collection getCurrentTerms(Domain domain, ACSObject object) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Getting terms from " + domain + " to " + object); -// } -// Collection current = new LinkedList(); -// DomainCollection terms = domain.getTerms(); -// terms.addEqualsFilter("model.childObjects.id", object.getID()); -// terms.addPath("model.id"); -// while (terms.next()) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Got term " + terms.get("model.id")); -// } -// current.add(terms.getDomainObject()); -// } -// return current; -// } -// -// // TODO move out of UI code -// public static Collection getRelatedTerms(Collection src, Domain domain) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Getting related terms to " + domain); -// -// } -// if (src.isEmpty()) { -// // this is a hack, it would be better not to use a completion event listener as -// // this is called even when the form is cancelled... -// return new LinkedList(); -// } -// DomainCollection terms = domain.getTerms(); -// // these next two lines build the query -// terms.addEqualsFilter("model.parents.link.relationType", "related"); -// terms.addFilter("model.parents.id in :ids").set("ids", src); -// -// Collection related = new LinkedList(); -// while (terms.next()) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Got term " + terms.getDomainObject()); -// } -// related.add(terms.getDomainObject()); -// } -// return related; -// } -// protected void clearTerms(Domain domain, ACSObject object) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Removing terms from " + domain + " to " + object); -// } -// Iterator terms = getCurrentTerms(domain, object).iterator(); -// while (terms.hasNext()) { -// Term term = (Term) terms.next(); -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Removing term " + term + " from " + object); -// } -// term.removeObject(object); -// } -// } -// // TODO move out of UI code -// public static void assignTerms(Collection terms, ACSObject object) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Assigning terms to " + object); -// } -// Iterator i = terms.iterator(); -// while (i.hasNext()) { -// Term term = (Term) i.next(); -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("Assigning term " + term + " to " + object); -// } -// term.addObject(object); -// } -// } - protected Domain getDomain(final PageState state) { - - LOGGER.debug("Getting domain for {}", state.getValue(rootParam)); - - final Object value = state.getValue(rootParam); - final Long domainId; - if (value instanceof Long) { - domainId = (Long) value; - } else if (value instanceof BigDecimal) { - domainId = ((Number) value).longValue(); - } else if (value instanceof String) { - domainId = Long.parseLong((String) value); - } else { - domainId = Long.parseLong(value.toString()); - } - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryPickerController controller = cdiUtil - .findBean(CategoryPickerController.class); - - return controller.findDomainByRootCategory(domainId); - } - - /** - * - */ - private class ItemCategoryFormCompletion implements ActionListener { - - @Override - public void actionPerformed(final ActionEvent event) { - - final PageState state = event.getPageState(); - final Domain domain = getDomain(state); - final String domainKey = domain.getDomainKey(); - - LOGGER.debug("Saving categories in: {}", domainKey); - - fireCompletionEvent(state); - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/CategoryPickerController.java b/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/CategoryPickerController.java deleted file mode 100644 index 005df55de..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/CategoryPickerController.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (C) 2017 LibreCCM Foundation. - * - * 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., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.london.terms.ui; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryManager; -import org.libreccm.categorization.CategoryRepository; -import org.libreccm.categorization.Domain; -import org.libreccm.categorization.DomainManager; -import org.libreccm.categorization.DomainRepository; -import org.libreccm.categorization.ObjectNotAssignedToCategoryException; -import org.libreccm.core.CcmObject; -import org.libreccm.core.CcmObjectRepository; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Join; -import javax.persistence.criteria.Root; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@RequestScoped -class CategoryPickerController { - - private final static Logger LOGGER = LogManager - .getLogger(CategoryPickerController.class); - - @Inject - private CategoryManager categoryManager; - - @Inject - private CategoryRepository categoryRepo; - - @Inject - private CcmObjectRepository ccmObjectRepo; - - @Inject - private DomainRepository domainRepo; - - @Inject - private DomainManager domainManager; - - @Inject - private EntityManager entityManager; - - @Transactional(Transactional.TxType.REQUIRED) - protected Domain findDomainByRootCategory(final long rootCategoryId) { - - final CriteriaBuilder builder = entityManager.getCriteriaBuilder(); - final CriteriaQuery query = builder.createQuery(Domain.class); - - final Root from = query.from(Domain.class); - final Join rootCatJoin = from.join("root"); - - query.where(builder.equal(rootCatJoin.get("objectId"), rootCategoryId)); - - return entityManager - .createQuery(query) - .getSingleResult(); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected List getCurrentCategories(final Domain domain, - final CcmObject object) { - - Objects.requireNonNull(domain); - Objects.requireNonNull(object); - - final Domain catDomain = domainRepo - .findById(domain.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No Domain with ID %d in the database.", - domain.getObjectId()))); - - final CcmObject ccmObject = ccmObjectRepo - .findById(object.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No CcmObject with ID %d in the database.", - object.getObjectId()))); - - final Category root = catDomain.getRoot(); - return collectAssignedCategories(ccmObject, root); - } - - private List collectAssignedCategories(final CcmObject object, - final Category root) { - - final List categories = new ArrayList<>(); - if (categoryManager.isAssignedToCategory(root, object)) { - categories.add(root); - } - - if (!root.getSubCategories().isEmpty()) { - for (final Category subCategory : root.getSubCategories()) { - categories.addAll(collectAssignedCategories(object, - subCategory)); - } - } - - return categories; - } - - @Transactional(Transactional.TxType.REQUIRED) - protected void clearCategories(final Domain domain, final CcmObject object) { - - Objects.requireNonNull(domain); - Objects.requireNonNull(object); - - final Domain catDomain = domainRepo - .findById(domain.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No Domain with ID %d in the database.", - domain.getObjectId()))); - - final CcmObject ccmObject = ccmObjectRepo - .findById(object.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No CcmObject with ID %d in the database.", - object.getObjectId()))); - - final Category root = catDomain.getRoot(); - final List assignedCategories = collectAssignedCategories( - ccmObject, root); - - for (final Category category : assignedCategories) { - try { - categoryManager.removeObjectFromCategory(ccmObject, category); - } catch (ObjectNotAssignedToCategoryException ex) { - LOGGER.warn("Tried to remove category {} from object {} but " - + "the object was not assigned to that category.", - Objects.toString(category), - Objects.toString(ccmObject)); - } - } - } - - @Transactional(Transactional.TxType.REQUIRED) - protected void assignCategories(final List categories, - final CcmObject object) { - - Objects.requireNonNull(categories); - Objects.requireNonNull(object); - - final CcmObject ccmObject = ccmObjectRepo - .findById(object.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No CcmObject with ID %d in the database.", - object.getObjectId()))); - - for (final Category category : categories) { - - final Category cat = categoryRepo - .findById(category.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No Category with ID %d in the database.", - category.getObjectId()))); - categoryManager.addObjectToCategory(ccmObject, category, ""); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - protected Category getDomainModelCategory(final Domain domain) { - - Objects.requireNonNull(domain); - - final Domain catDomain = domainRepo - .findById(domain.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No Domain with ID %d in the database.", - domain.getObjectId()))); - - return catDomain.getRoot(); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected List getRootCategories(final Domain domain) { - - return getDomainModelCategory(domain) - .getSubCategories() - .stream() - .collect(Collectors.toList()); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected List getSubCategories(final Category category) { - - Objects.requireNonNull(category); - - final Category cat = categoryRepo - .findById(category.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No Category with ID %d in the database.", - category.getObjectId()))); - - return cat.getSubCategories(); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected Category getParentCategory(final Category category) { - - Objects.requireNonNull(category); - - final Category cat = categoryRepo - .findById(category.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No Category with ID %d in the database.", - category.getObjectId()))); - - return cat.getParentCategory(); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ItemCategoryPicker.java b/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ItemCategoryPicker.java deleted file mode 100755 index 2da9fdf75..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/ItemCategoryPicker.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2001-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.london.terms.ui; - -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.parameters.BigDecimalParameter; -import com.arsdigita.bebop.parameters.LongParameter; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.categorization.ui.ACSObjectCategoryForm; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentItem; - -import com.arsdigita.cms.ui.authoring.ItemCategoryForm; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.core.CcmObject; - -/** - * Replacement for cms authoring ItemCategoryForm which replaces the category - * widget with a terms based widget. - * - * Provides a ccm-cms specific concrete implementation of - * {@link com.arsdigita.london.terms.ui.ACSObjectCategoryPicker}. - * - * Is is activated / used by pointing the parameter - * {@code com.arsdigita.cms.category_authoring_add_form} to it. -*/ -public class ItemCategoryPicker extends ACSObjectCategoryPicker { - - private static final Logger LOGGER = LogManager - .getLogger(ItemCategoryPicker.class); - - public ItemCategoryPicker(final LongParameter root, - final StringParameter mode) { - super(root, mode); - LOGGER.debug("instantiating ItemCategoryPicker"); - - } - - /* - * @see com.arsdigita.london.terms.ui.ACSObjectCategoryPicker#getForm( - * com.arsdigita.bebop.parameters.BigDecimalParameter, - * com.arsdigita.bebop.parameters.StringParameter) - */ - @Override - protected ACSObjectCategoryForm getForm(final LongParameter root, - final StringParameter mode) { - LOGGER.debug("getForm"); - return new ItemCategoryForm(root, mode, new TermWidget(mode, this)); - } - - - /* - * @see com.arsdigita.london.terms.ui.ACSObjectCategoryPicker#getObject() - */ - @Override - protected CcmObject getObject(final PageState state) { - - return CMS.getContext().getContentItem(); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/TermWidget.java b/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/TermWidget.java deleted file mode 100644 index 349aa7568..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/london/terms/ui/TermWidget.java +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Copyright (C) 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.london.terms.ui; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.form.Widget; -import com.arsdigita.bebop.parameters.ArrayParameter; -import com.arsdigita.bebop.parameters.BigDecimalParameter; -import com.arsdigita.bebop.parameters.StringParameter; - -import org.libreccm.categorization.Category; - -import com.arsdigita.cms.CMS; - -import org.libreccm.categorization.Domain; - -import com.arsdigita.xml.Element; -import com.arsdigita.xml.XML; - -import org.librecms.CMSConfig; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.l10n.GlobalizationHelper; - -import java.util.ArrayList; - -/** - * A Widget for selecting Terms. Based heavily on CategoryWidget. - * - * @author mbooth@redhat.com - * @author Chris Gilbert - * @author Jens Pelzetter - * - * Chris Gilbert - updated to identify each node uniquely (correct behaviour for - * polyhierarchical trees) - also, allow ajax update on all branches or just top - * level branch - * - * nb - widget applies to allocation of categories to any ACSObject hence xml - * prefix should be more generic eg bebop rather than cms. cms retained for - * compatibility with existing stylesheets - * - * Jens Pelzetter: Variable naming etc changed to comply with usual Java - * conventions. Adapted to CCM NG. - */ -// NON Javadoc comment: -// Copied from c.ad.aplaws.ui in order to make forum-categorised independend from -// a specific ccm-???-aplaws, i.e. a specific integration layer. -public class TermWidget extends Widget { - - private final StringParameter mode; - private final ACSObjectCategoryPicker picker; - - public TermWidget(final StringParameter mode, - final ACSObjectCategoryPicker picker) { - - super(new ArrayParameter(new BigDecimalParameter("category"))); - - this.mode = mode; - this.picker = picker; - - } - - @Override - protected String getType() { - return "category"; - } - - @Override - public boolean isCompound() { - return false; - } - - @Override - protected void generateWidget(final PageState state, final Element parent) { - - final Domain domain = picker.getDomain(state); - - final Element widget = parent.newChildElement("cms:categoryWidget", - CMS.CMS_XML_NS); - exportAttributes(widget); - - widget.addAttribute("mode", (String) state.getValue(mode)); - widget.addAttribute("name", getName()); - - final Set selectedCats = new HashSet<>(); - - //jensp 2015-03-12: In same cases we need to be able to pass the - //selected categories *and* the selected roots for displaying the - //categories nicely. To maintain backwards - //compatibility we check the type of the value and work either with the - //selected categories only or with the selected categories and their - //roots. - final Set selectedAncestors = new HashSet<>(); - - final Long[] values; - final Long[] selAncestorsValues; //selectedAncestors - final Object valueObj = getValue(state); - if (valueObj instanceof Long[][]) { - if (((Long[][]) valueObj).length >= 1) { - values = ((Long[][]) valueObj)[0]; - } else { - throw new IllegalArgumentException( - "Value of TermWidget is of type BigDecimal[][] but the array is empty."); - } - - if (((Long[][]) valueObj).length >= 2) { - selAncestorsValues = ((Long[][]) valueObj)[1]; - } else { - selAncestorsValues = null; - } - } else if (valueObj instanceof Long[]) { - values = (Long[]) valueObj; - selAncestorsValues = null; - } else { - throw new IllegalArgumentException( - "Value of TermWidget is not of type BigDecimal[] or BigDecimal[][]"); - } - - //BigDecimal[] values = (BigDecimal[]) getValue(state); - if (values != null) { - selectedCats.addAll(Arrays.asList(values)); - } - - if (selAncestorsValues != null) { - selectedAncestors.addAll(Arrays.asList(selAncestorsValues)); - } - - final Element selEl = widget.newChildElement( - "cms:selectedCategories", CMS.CMS_XML_NS); - selEl.addAttribute("name", getName()); - final Iterator selCats = selectedCats.iterator(); -// while (selCats.hasNext()) { -// final Element selCat = selEl.newChildElement("cms:category", -// CMS.CMS_XML_NS); -// selCat.addAttribute("id", selCats.next().toString()); -// } - for (Long selectedCat : selectedCats) { - final Element selectedCatElem = selEl.newChildElement( - "cms:category", CMS.CMS_XML_NS); - selectedCatElem.addAttribute("id", selectedCat.toString()); - } - - final Element selAncestorsElem = widget.newChildElement( - "cms:selectedAncestorCategories", CMS.CMS_XML_NS); - selAncestorsElem.addAttribute("name", getName()); - for (Long selAncestor : selectedAncestors) { - final Element selAncestorElem = selAncestorsElem.newChildElement( - "cms:category", CMS.CMS_XML_NS); - selAncestorElem.addAttribute("id", selAncestor.toString()); - } - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryPickerController controller = cdiUtil - .findBean(CategoryPickerController.class); - - // only root terms at first, the rest is loaded on-demand via AJAX - final List roots = controller.getRootCategories(domain); - - final Element element = generateCategory( - widget, - controller.getDomainModelCategory(domain), - selectedCats, - null); - - if (CMSConfig.getConfig().isCategoryPickerAjaxExpandAll()) { - // add attribute to the parent node, so that in stylesheet - // we can look for any ancestor with this attribute (can't - // add attribute to categoryWidget element as that is not - // visible when subbranches are transformed) - element.addAttribute("expand", "all"); - } - - for (final Category category : roots) { - - generateRootTerm(element, - category, - selectedCats, - category.getCategoryOrder()); - - } - } - - public static Element generateCategory(final Element parent, - final Category category, - final Set selected, - final Long sortKey) { - - final Element element = parent.newChildElement("cms:category", - CMS.CMS_XML_NS); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final GlobalizationHelper globalizationHelper = cdiUtil - .findBean(GlobalizationHelper.class); - - element.addAttribute("id", XML.format(category.getObjectId())); - element.addAttribute("name", category.getName()); - element.addAttribute( - "description", - globalizationHelper.getValueFromLocalizedString(category - .getDescription())); - if (selected.contains(category.getObjectId())) { - element.addAttribute("isSelected", "1"); - } else { - element.addAttribute("isSelected", "0"); - } - if (category.isAbstractCategory()) { - element.addAttribute("isAbstract", "1"); - } else { - element.addAttribute("isAbstract", "0"); - } - if (category.isEnabled()) { - element.addAttribute("isEnabled", "1"); - } else { - element.addAttribute("isEnabled", "0"); - } - if (sortKey != null) { - element.addAttribute("sortKey", sortKey.toString()); - } - // sort order attribute added to every node so that we can - // correctly transform xml fragments returned by ajax - element.addAttribute("order", "sortKey"); - element.addAttribute("genCat", "true"); - - StringBuilder path = new StringBuilder(parent.getAttribute("fullname")); - if (path.length() > 0) { - path.append(" > "); - - } - path.append(category.getName()); - element.addAttribute("fullname", path.toString()); - - // need to uniquely identify each node in polyhierarchical trees - // so that expand/contract is applied to the correct node by - // javascript getElementByID function - StringBuilder nodeID = new StringBuilder(parent.getAttribute("node-id")); - if (nodeID.length() > 0) { - nodeID.append("-"); - - } - nodeID.append(category.getObjectId()); - element.addAttribute("node-id", nodeID.toString()); - - return element; - } - - public static Element generateTerm(final Element parent, - final Category category, - final Set selected, - final Long sortKey) { - final Element element = generateCategory(parent, - category, - selected, - sortKey); - - element.addAttribute("pid", category.getUniqueId()); - return element; - } - - private static void generateRootTerm(final Element parent, - final Category term, - final Set selected, - final Long sortKey) { - final Element element = generateTerm(parent, term, selected, sortKey); - element.addAttribute("root", "1"); - } - - public static void generateSubtree(final Element parent, - final Category root, - final Set ids) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryPickerController controller = cdiUtil - .findBean(CategoryPickerController.class); - - final List terms = controller.getSubCategories(root); - - final Map> children = new HashMap<>(); - for (final Category term : terms) { - final Long parentId = controller - .getParentCategory(term) - .getObjectId(); - - final List childList; - if (children.containsKey(parentId)) { - childList = children.get(parentId); - } else { - childList = new ArrayList<>(); - children.put(parentId, childList); - } - - childList.add(term); - } - - final Element element = generateCategory(parent, root, ids, null); - element.addAttribute("fullname", root.getName()); - element.addAttribute("node-id", Long.toString(root.getObjectId())); - element.addAttribute("order", "sortKey"); - if (CMSConfig.getConfig().isCategoryPickerAjaxExpandAll()) { - //recognisable attribute has to be in the XML for each snippet that - //is transformed, hence add it to the parent - element.addAttribute("expand", "all"); - } - - if (children.containsKey(root.getObjectId())) { - final List roots = children.get(root.getObjectId()); - for (final Category category : roots) { - generateTermWithChildren(element, - category, - ids, - category.getCategoryOrder(), - children); - } - } - } - - private static void generateTermWithChildren( - final Element parent, - final Category category, - final Set selected, - final Long sortKey, - final Map> children) { - - final Element element = generateCategory(parent, - category, - selected, - sortKey); - - element.addAttribute("pid", category.getUniqueId()); - - if (children.containsKey(category.getObjectId())) { - final List childs = children.get(category.getObjectId()); - for (final Category child : childs) { - if (CMSConfig.getConfig().isCategoryPickerAjaxExpandAll()) { - generateTerm(element, - child, - selected, - child.getCategoryOrder()); - } else { - generateTermWithChildren(element, - child, - selected, - child.getCategoryOrder(), - children); - } - } - } - } -} diff --git a/ccm-cms/src/main/java/org/librecms/CMSConfig.java b/ccm-cms/src/main/java/org/librecms/CMSConfig.java index 1443dc615..9cd2f083c 100644 --- a/ccm-cms/src/main/java/org/librecms/CMSConfig.java +++ b/ccm-cms/src/main/java/org/librecms/CMSConfig.java @@ -20,7 +20,6 @@ package org.librecms; import com.arsdigita.bebop.form.DHTMLEditor; import com.arsdigita.cms.ui.authoring.ItemCategoryExtension; -import com.arsdigita.london.terms.ui.ItemCategoryPicker; import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.configuration.Configuration; @@ -554,12 +553,6 @@ public class CMSConfig { ) private int xmlCacheAge = 60 * 60 * 24; - @Setting( - descKey = "categoryAuthoringAddForm.desc", - labelKey = "categoryAuthoringAddForm.label" - ) - private String categoryAuthoringAddForm = ItemCategoryPicker.class.getName(); - @Setting( descKey = "categoryAuthoringExtension.desc", labelKey = "categoryAuthoringExtension.label" @@ -1136,16 +1129,6 @@ public class CMSConfig { this.linkDescMaxLength = linkDescMaxLength; } - public String getCategoryAuthoringAddForm() { - return categoryAuthoringAddForm; - } - - public void setCategoryAuthoringAddForm( - final String categoryAuthoringAddForm) { - - this.categoryAuthoringAddForm = categoryAuthoringAddForm; - } - public String getCategoryAuthoringExtension() { return categoryAuthoringExtension; }