From b4d71d7613107e678ecdcf48249a7c42e1a9b926 Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 22 Jun 2019 12:39:24 +0000 Subject: [PATCH] ObjectList component using sub categories as headers git-svn-id: https://svn.libreccm.org/ccm/trunk@6134 8810af33-2d31-482b-a856-94f89814c4df --- .../ui/object/CategoriesObjectList.java | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 ccm-navigation/src/com/arsdigita/navigation/ui/object/CategoriesObjectList.java diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/object/CategoriesObjectList.java b/ccm-navigation/src/com/arsdigita/navigation/ui/object/CategoriesObjectList.java new file mode 100644 index 000000000..9fab449bb --- /dev/null +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/object/CategoriesObjectList.java @@ -0,0 +1,122 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.arsdigita.navigation.ui.object; + +import com.arsdigita.categorization.Category; +import com.arsdigita.categorization.CategoryCollection; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.navigation.DataCollectionRenderer; +import com.arsdigita.navigation.Navigation; +import com.arsdigita.navigation.ui.AbstractComponent; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.xml.Element; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * + * @author Jens Pelzetter + */ +public class CategoriesObjectList extends AbstractComponent { + + private String objectType; + private DataCollectionRenderer renderer; + + public CategoriesObjectList() { + super(); + objectType = ContentItem.BASE_DATA_OBJECT_TYPE; + } + + public DataCollectionRenderer getRenderer() { + return renderer; + } + + public String getObjectType() { + return objectType; + } + + public void setObjectType(final String objectType) { + this.objectType = objectType; + } + + public void setRenderer(final DataCollectionRenderer renderer) { + this.renderer = renderer; + renderer.setPageSize(100); + } + + @Override + public void lock() { + super.lock(); + renderer.lock(); + } + + @Override + public Element generateXML(final HttpServletRequest request, + final HttpServletResponse response) { + + final Element listRootElem = Navigation + .newElement("categoriesObjectList"); + + final Category category = getCategory(); + final CategoryCollection subCategories = category.getChildren(); + + while (subCategories.next()) { + generateCategoryListXml(listRootElem, subCategories.getCategory()); + } + + return listRootElem; + } + + private void generateCategoryListXml(final Element rootListElem, + final Category category) { + + final String lang = GlobalizationHelper + .getNegotiatedLocale() + .getLanguage(); + + final Element catListElem = rootListElem + .newChildElement("categoryObjectList"); + final Element titleElem = catListElem.newChildElement("title"); + titleElem.setText(category.getName(lang)); + + final Element objListElem = catListElem + .newChildElement("simpleObjectList"); + + final DataCollection objects = SessionManager + .getSession() + .retrieve(objectType); + objects.addPath("masterVersion.id"); + objects.addPath("masterVersion.objectType"); + objects.addEqualsFilter("parent.categories.id", + category.getID()); + final com.arsdigita.persistence.Filter moreChildren = objects + .addNotInSubqueryFilter( + "parent.id", + "com.arsdigita.categorization.liveIndexItemsInCategory"); + moreChildren.set("categoryID", category.getID()); + + objects.addEqualsFilter(ContentItem.VERSION, ContentItem.LIVE); + + System.err.printf("Found %s objects%n", objects.size()); + + final Element listElem = renderer.generateXML(objects, 0); + objListElem.addContent(listElem); + + + +// final CategorizedCollection items = category +// .getObjects(ACSObject.BASE_DATA_OBJECT_TYPE); +// +// while (items.next()) { +// final items.getACSObject() +// } + } + +}