From 0004054b52d5da018392ab00d94993742bb54881 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 15 Dec 2016 10:36:41 +0000 Subject: [PATCH] It is now possible to enable language independent items for specific objects lists git-svn-id: https://svn.libreccm.org/ccm/trunk@4478 8810af33-2d31-482b-a856-94f89814c4df --- .../cms/dispatcher/SimpleXMLGenerator.java | 2 +- .../navigation/DataCollectionRenderer.java | 14 +++++---- .../cms/CMSDataCollectionRenderer.java | 30 ++++++++++++++----- .../navigation/ui/AbstractObjectList.java | 30 ++++++++++++------- .../arsdigita/navigation/ui/GreetingItem.java | 2 +- 5 files changed, 53 insertions(+), 25 deletions(-) diff --git a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java index a581d1f4b..20d6c7830 100755 --- a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java +++ b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java @@ -186,7 +186,7 @@ public class SimpleXMLGenerator implements XMLGenerator { for(String language : languages) { final Element langElem = availableLangsElem.newChildElement("language"); - langElem.setText(language); + langElem.addAttribute("locale", language); } } diff --git a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java index fd7e93b1f..432eedebf 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java +++ b/ccm-navigation/src/com/arsdigita/navigation/DataCollectionRenderer.java @@ -20,6 +20,7 @@ package com.arsdigita.navigation; import com.arsdigita.bebop.PageState; import com.arsdigita.categorization.Categorization; import com.arsdigita.categorization.Category; +import com.arsdigita.cms.ContentBundle; import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.dispatcher.ItemResolver; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; @@ -30,6 +31,7 @@ import com.arsdigita.kernel.Party; import com.arsdigita.kernel.permissions.PermissionDescriptor; import com.arsdigita.kernel.permissions.PermissionService; import com.arsdigita.kernel.permissions.PrivilegeDescriptor; +import com.arsdigita.globalization.GlobalizationHelper; import com.arsdigita.persistence.DataAssociation; import com.arsdigita.persistence.DataAssociationCursor; import com.arsdigita.persistence.DataCollection; @@ -46,6 +48,7 @@ import com.arsdigita.xml.Element; import java.text.DateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -144,7 +147,7 @@ public class DataCollectionRenderer extends LockableImpl { /** * @param objects - * @param pageNum + * @param pageNum * * @return */ @@ -152,7 +155,7 @@ public class DataCollectionRenderer extends LockableImpl { Assert.isLocked(this); int pageNumber = pageNum; - + final long objectCount = objects.size(); // Quasimodo: Begin @@ -174,7 +177,7 @@ public class DataCollectionRenderer extends LockableImpl { return content; } - + final int pageCount = (int) Math.ceil((double) objectCount / (double) m_pageSize); if (pageNumber < 1) { @@ -251,14 +254,14 @@ public class DataCollectionRenderer extends LockableImpl { final PermissionDescriptor edit; if (!m_specializeObjects || object == null) { edit = new PermissionDescriptor(PrivilegeDescriptor.get( - com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), dobj.getOID(), currentParty.getOID()); + com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), dobj.getOID(), currentParty.getOID()); } else { //Create a link for editing the item. Works only if the item is specalised because //the ItemResolver provided by the ContentSection of the item is needed for creating //the link. edit = new PermissionDescriptor(PrivilegeDescriptor.get( com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), object, currentParty); - if (PermissionService.checkPermission(edit) && (object instanceof ContentItem)) { + if (PermissionService.checkPermission(edit) && (object instanceof ContentItem)) { final ContentItem contentItem = (ContentItem) object; final ItemResolver resolver = contentItem.getContentSection().getItemResolver(); final Element editLinkElem = item.newChildElement("editLink"); @@ -302,6 +305,7 @@ public class DataCollectionRenderer extends LockableImpl { protected String getStableURL(final DataObject dobj, final ACSObject obj) { final OID oid = new OID((String) dobj.get(ACSObject.OBJECT_TYPE), dobj.get(ACSObject.ID)); + return Navigation.redirectURL(oid); } diff --git a/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java b/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java index 9105222d1..17078866a 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java +++ b/ccm-navigation/src/com/arsdigita/navigation/cms/CMSDataCollectionRenderer.java @@ -5,12 +5,12 @@ * 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 @@ -36,6 +36,8 @@ import com.arsdigita.navigation.Navigation; import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.OID; import com.arsdigita.xml.Element; +import com.arsdigita.web.ParameterMap; +import com.arsdigita.globalization.GlobalizationHelper; public class CMSDataCollectionRenderer extends DataCollectionRenderer { @@ -60,6 +62,18 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer { } if (obj instanceof ContentItem) { OID oid = ((ContentItem) obj).getDraftVersion().getOID(); + + /*final String language = (String) ((ContentItem)obj).get("language"); + if (!Kernel.getConfig().languageIndependentItems() + && !language.equals(GlobalizationHelper.getNegotiatedLocale().toString())) { + final ParameterMap parameters = new ParameterMap(); + parameters.setParameter("lang", language); + + return Navigation.redirectURL(oid, parameters); + }*/ + + + return Navigation.redirectURL(oid); } return super.getStableURL(dobj, obj); @@ -76,7 +90,7 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer { && XMLDeliveryCache.getInstance().isCached(obj.getOID())) { XMLDeliveryCache.getInstance().retrieveFromCache(item, obj.getOID()); - + createEditLink(item, (ContentItem) obj); } else { @@ -87,10 +101,10 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer { renderer.setWrapRoot(false); renderer.setWrapObjects(false); //renderer.walk(obj, SimpleXMLGenerator.ADAPTER_CONTEXT); - /* jensp 2011-01-03: + /* jensp 2011-01-03: * I needed the option to use different traversal adapters for - * the object in the detail view and the list view. It is now - * possible to set the adapter context used from a JSP template, + * the object in the detail view and the list view. It is now + * possible to set the adapter context used from a JSP template, * using DataCollectionRenderer#setSpecializeObjectsContext(String). */ renderer.walk(obj, getSpecializeObjectsContext()); @@ -102,11 +116,11 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer { generator.setListMode(true); generator.generateXML(contentItem, item, null); } - + XMLDeliveryCache.getInstance().cache(contentItem.getOID(), contentItem, item, "", false); createEditLink(item, contentItem); - + // Party currentParty = Kernel.getContext().getParty(); // if (currentParty == null) { // currentParty = Kernel.getPublicUser(); diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/AbstractObjectList.java b/ccm-navigation/src/com/arsdigita/navigation/ui/AbstractObjectList.java index 15ccc239a..18b8de7be 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/ui/AbstractObjectList.java +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/AbstractObjectList.java @@ -32,7 +32,7 @@ import javax.servlet.http.HttpServletResponse; /** * Abstract base class for object lists - * + * * @author unknown * @author Sören Bernstein */ @@ -41,6 +41,7 @@ public abstract class AbstractObjectList private DataCollectionRenderer m_renderer = new DataCollectionRenderer(); private DataCollectionDefinition m_definition = new DataCollectionDefinition(); + private boolean m_languageIndependent = false; public final void setDefinition(DataCollectionDefinition definition) { Assert.isUnlocked(this); @@ -52,6 +53,10 @@ public abstract class AbstractObjectList m_renderer = renderer; } + public final void setLanguageIndependent(final boolean value) { + m_languageIndependent = value; + } + public final DataCollectionDefinition getDefinition() { return m_definition; } @@ -60,13 +65,17 @@ public abstract class AbstractObjectList return m_renderer; } + public final boolean isLanguageIndependent() { + return m_languageIndependent; + } + /** * Get a list of objects from the database which meet a set criteria or * null if the requested object type is invalid - * + * * @param request * @param response - * @return the object list or null + * @return the object list or null */ protected DataCollection getObjects(HttpServletRequest request, HttpServletResponse response) { @@ -92,7 +101,7 @@ public abstract class AbstractObjectList } public Element generateObjectListXML(HttpServletRequest request, - HttpServletResponse response) { + HttpServletResponse response) { Assert.isLocked(this); String pageNumberValue = request.getParameter("pageNumber"); @@ -107,13 +116,14 @@ public abstract class AbstractObjectList throw new UncheckedWrapperException( "cannot parse page number " + pageNumber, ex); } - + DataCollection objects = getObjects(request, response); - + // Quasimodo: Begin // Limit list to objects in the negotiated language and language invariant items if (objects != null && objects.size() > 0) { - if (Kernel.getConfig().languageIndependentItems()) { + if (Kernel.getConfig().languageIndependentItems() + || m_languageIndependent) { FilterFactory ff = objects.getFilterFactory(); Filter filter = ff.or(). addFilter(ff.equals("language", com.arsdigita.globalization.GlobalizationHelper. @@ -134,10 +144,10 @@ public abstract class AbstractObjectList //final long renderStart = System.nanoTime(); final Element listXML = m_renderer.generateXML(objects, pageNumber.intValue()); - //System.out.printf("Rendered items of list in %d ms\n", (System.nanoTime() - renderStart) / 1000000); - + //System.out.printf("Rendered items of list in %d ms\n", (System.nanoTime() - renderStart) / 1000000); + //System.out.printf("Generated object list in %d ms\n", (System.nanoTime() - start) / 1000000); - + return listXML; } diff --git a/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java b/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java index ff454a1a8..4d24e70a8 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java +++ b/ccm-navigation/src/com/arsdigita/navigation/ui/GreetingItem.java @@ -134,7 +134,7 @@ public class GreetingItem extends AbstractComponent { final Element availableLangsElem = content.newChildElement("availableLanguages"); for(String language : languages) { final Element langElem = availableLangsElem.newChildElement("language"); - langElem.setText(language); + langElem.addAttribute("locale", language); } if (baseItem instanceof XMLGenerator) {