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-94f89814c4dfmaster
parent
bdc3b33151
commit
0004054b52
|
|
@ -186,7 +186,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
|
||||||
|
|
||||||
for(String language : languages) {
|
for(String language : languages) {
|
||||||
final Element langElem = availableLangsElem.newChildElement("language");
|
final Element langElem = availableLangsElem.newChildElement("language");
|
||||||
langElem.setText(language);
|
langElem.addAttribute("locale", language);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ package com.arsdigita.navigation;
|
||||||
import com.arsdigita.bebop.PageState;
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.categorization.Categorization;
|
import com.arsdigita.categorization.Categorization;
|
||||||
import com.arsdigita.categorization.Category;
|
import com.arsdigita.categorization.Category;
|
||||||
|
import com.arsdigita.cms.ContentBundle;
|
||||||
import com.arsdigita.cms.ContentItem;
|
import com.arsdigita.cms.ContentItem;
|
||||||
import com.arsdigita.cms.dispatcher.ItemResolver;
|
import com.arsdigita.cms.dispatcher.ItemResolver;
|
||||||
import com.arsdigita.cms.dispatcher.SimpleXMLGenerator;
|
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.PermissionDescriptor;
|
||||||
import com.arsdigita.kernel.permissions.PermissionService;
|
import com.arsdigita.kernel.permissions.PermissionService;
|
||||||
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
||||||
|
import com.arsdigita.globalization.GlobalizationHelper;
|
||||||
import com.arsdigita.persistence.DataAssociation;
|
import com.arsdigita.persistence.DataAssociation;
|
||||||
import com.arsdigita.persistence.DataAssociationCursor;
|
import com.arsdigita.persistence.DataAssociationCursor;
|
||||||
import com.arsdigita.persistence.DataCollection;
|
import com.arsdigita.persistence.DataCollection;
|
||||||
|
|
@ -46,6 +48,7 @@ import com.arsdigita.xml.Element;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -144,7 +147,7 @@ public class DataCollectionRenderer extends LockableImpl {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param objects
|
* @param objects
|
||||||
* @param pageNum
|
* @param pageNum
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -152,7 +155,7 @@ public class DataCollectionRenderer extends LockableImpl {
|
||||||
Assert.isLocked(this);
|
Assert.isLocked(this);
|
||||||
|
|
||||||
int pageNumber = pageNum;
|
int pageNumber = pageNum;
|
||||||
|
|
||||||
final long objectCount = objects.size();
|
final long objectCount = objects.size();
|
||||||
|
|
||||||
// Quasimodo: Begin
|
// Quasimodo: Begin
|
||||||
|
|
@ -174,7 +177,7 @@ public class DataCollectionRenderer extends LockableImpl {
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
final int pageCount = (int) Math.ceil((double) objectCount / (double) m_pageSize);
|
final int pageCount = (int) Math.ceil((double) objectCount / (double) m_pageSize);
|
||||||
|
|
||||||
if (pageNumber < 1) {
|
if (pageNumber < 1) {
|
||||||
|
|
@ -251,14 +254,14 @@ public class DataCollectionRenderer extends LockableImpl {
|
||||||
final PermissionDescriptor edit;
|
final PermissionDescriptor edit;
|
||||||
if (!m_specializeObjects || object == null) {
|
if (!m_specializeObjects || object == null) {
|
||||||
edit = new PermissionDescriptor(PrivilegeDescriptor.get(
|
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 {
|
} else {
|
||||||
//Create a link for editing the item. Works only if the item is specalised because
|
//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 ItemResolver provided by the ContentSection of the item is needed for creating
|
||||||
//the link.
|
//the link.
|
||||||
edit = new PermissionDescriptor(PrivilegeDescriptor.get(
|
edit = new PermissionDescriptor(PrivilegeDescriptor.get(
|
||||||
com.arsdigita.cms.SecurityManager.CMS_EDIT_ITEM), object, currentParty);
|
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 ContentItem contentItem = (ContentItem) object;
|
||||||
final ItemResolver resolver = contentItem.getContentSection().getItemResolver();
|
final ItemResolver resolver = contentItem.getContentSection().getItemResolver();
|
||||||
final Element editLinkElem = item.newChildElement("editLink");
|
final Element editLinkElem = item.newChildElement("editLink");
|
||||||
|
|
@ -302,6 +305,7 @@ public class DataCollectionRenderer extends LockableImpl {
|
||||||
|
|
||||||
protected String getStableURL(final DataObject dobj, final ACSObject obj) {
|
protected String getStableURL(final DataObject dobj, final ACSObject obj) {
|
||||||
final OID oid = new OID((String) dobj.get(ACSObject.OBJECT_TYPE), dobj.get(ACSObject.ID));
|
final OID oid = new OID((String) dobj.get(ACSObject.OBJECT_TYPE), dobj.get(ACSObject.ID));
|
||||||
|
|
||||||
return Navigation.redirectURL(oid);
|
return Navigation.redirectURL(oid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
* as published by the Free Software Foundation; either version 2.1 of
|
* as published by the Free Software Foundation; either version 2.1 of
|
||||||
* the License, or (at your option) any later version.
|
* the License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This library is distributed in the hope that it will be useful,
|
* This library is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
* Lesser General Public License for more details.
|
* Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* 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.DataObject;
|
||||||
import com.arsdigita.persistence.OID;
|
import com.arsdigita.persistence.OID;
|
||||||
import com.arsdigita.xml.Element;
|
import com.arsdigita.xml.Element;
|
||||||
|
import com.arsdigita.web.ParameterMap;
|
||||||
|
import com.arsdigita.globalization.GlobalizationHelper;
|
||||||
|
|
||||||
public class CMSDataCollectionRenderer extends DataCollectionRenderer {
|
public class CMSDataCollectionRenderer extends DataCollectionRenderer {
|
||||||
|
|
||||||
|
|
@ -60,6 +62,18 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
|
||||||
}
|
}
|
||||||
if (obj instanceof ContentItem) {
|
if (obj instanceof ContentItem) {
|
||||||
OID oid = ((ContentItem) obj).getDraftVersion().getOID();
|
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 Navigation.redirectURL(oid);
|
||||||
}
|
}
|
||||||
return super.getStableURL(dobj, obj);
|
return super.getStableURL(dobj, obj);
|
||||||
|
|
@ -76,7 +90,7 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
|
||||||
&& XMLDeliveryCache.getInstance().isCached(obj.getOID())) {
|
&& XMLDeliveryCache.getInstance().isCached(obj.getOID())) {
|
||||||
|
|
||||||
XMLDeliveryCache.getInstance().retrieveFromCache(item, obj.getOID());
|
XMLDeliveryCache.getInstance().retrieveFromCache(item, obj.getOID());
|
||||||
|
|
||||||
createEditLink(item, (ContentItem) obj);
|
createEditLink(item, (ContentItem) obj);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -87,10 +101,10 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
|
||||||
renderer.setWrapRoot(false);
|
renderer.setWrapRoot(false);
|
||||||
renderer.setWrapObjects(false);
|
renderer.setWrapObjects(false);
|
||||||
//renderer.walk(obj, SimpleXMLGenerator.ADAPTER_CONTEXT);
|
//renderer.walk(obj, SimpleXMLGenerator.ADAPTER_CONTEXT);
|
||||||
/* jensp 2011-01-03:
|
/* jensp 2011-01-03:
|
||||||
* I needed the option to use different traversal adapters for
|
* I needed the option to use different traversal adapters for
|
||||||
* the object in the detail view and the list view. It is now
|
* the object in the detail view and the list view. It is now
|
||||||
* possible to set the adapter context used from a JSP template,
|
* possible to set the adapter context used from a JSP template,
|
||||||
* using DataCollectionRenderer#setSpecializeObjectsContext(String).
|
* using DataCollectionRenderer#setSpecializeObjectsContext(String).
|
||||||
*/
|
*/
|
||||||
renderer.walk(obj, getSpecializeObjectsContext());
|
renderer.walk(obj, getSpecializeObjectsContext());
|
||||||
|
|
@ -102,11 +116,11 @@ public class CMSDataCollectionRenderer extends DataCollectionRenderer {
|
||||||
generator.setListMode(true);
|
generator.setListMode(true);
|
||||||
generator.generateXML(contentItem, item, null);
|
generator.generateXML(contentItem, item, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
XMLDeliveryCache.getInstance().cache(contentItem.getOID(), contentItem, item, "", false);
|
XMLDeliveryCache.getInstance().cache(contentItem.getOID(), contentItem, item, "", false);
|
||||||
|
|
||||||
createEditLink(item, contentItem);
|
createEditLink(item, contentItem);
|
||||||
|
|
||||||
// Party currentParty = Kernel.getContext().getParty();
|
// Party currentParty = Kernel.getContext().getParty();
|
||||||
// if (currentParty == null) {
|
// if (currentParty == null) {
|
||||||
// currentParty = Kernel.getPublicUser();
|
// currentParty = Kernel.getPublicUser();
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract base class for object lists
|
* Abstract base class for object lists
|
||||||
*
|
*
|
||||||
* @author unknown
|
* @author unknown
|
||||||
* @author Sören Bernstein <quasi@quasiweb.de>
|
* @author Sören Bernstein <quasi@quasiweb.de>
|
||||||
*/
|
*/
|
||||||
|
|
@ -41,6 +41,7 @@ public abstract class AbstractObjectList
|
||||||
|
|
||||||
private DataCollectionRenderer m_renderer = new DataCollectionRenderer();
|
private DataCollectionRenderer m_renderer = new DataCollectionRenderer();
|
||||||
private DataCollectionDefinition m_definition = new DataCollectionDefinition();
|
private DataCollectionDefinition m_definition = new DataCollectionDefinition();
|
||||||
|
private boolean m_languageIndependent = false;
|
||||||
|
|
||||||
public final void setDefinition(DataCollectionDefinition definition) {
|
public final void setDefinition(DataCollectionDefinition definition) {
|
||||||
Assert.isUnlocked(this);
|
Assert.isUnlocked(this);
|
||||||
|
|
@ -52,6 +53,10 @@ public abstract class AbstractObjectList
|
||||||
m_renderer = renderer;
|
m_renderer = renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void setLanguageIndependent(final boolean value) {
|
||||||
|
m_languageIndependent = value;
|
||||||
|
}
|
||||||
|
|
||||||
public final DataCollectionDefinition getDefinition() {
|
public final DataCollectionDefinition getDefinition() {
|
||||||
return m_definition;
|
return m_definition;
|
||||||
}
|
}
|
||||||
|
|
@ -60,13 +65,17 @@ public abstract class AbstractObjectList
|
||||||
return m_renderer;
|
return m_renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final boolean isLanguageIndependent() {
|
||||||
|
return m_languageIndependent;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of objects from the database which meet a set criteria or
|
* Get a list of objects from the database which meet a set criteria or
|
||||||
* null if the requested object type is invalid
|
* null if the requested object type is invalid
|
||||||
*
|
*
|
||||||
* @param request
|
* @param request
|
||||||
* @param response
|
* @param response
|
||||||
* @return the object list or null
|
* @return the object list or null
|
||||||
*/
|
*/
|
||||||
protected DataCollection getObjects(HttpServletRequest request,
|
protected DataCollection getObjects(HttpServletRequest request,
|
||||||
HttpServletResponse response) {
|
HttpServletResponse response) {
|
||||||
|
|
@ -92,7 +101,7 @@ public abstract class AbstractObjectList
|
||||||
}
|
}
|
||||||
|
|
||||||
public Element generateObjectListXML(HttpServletRequest request,
|
public Element generateObjectListXML(HttpServletRequest request,
|
||||||
HttpServletResponse response) {
|
HttpServletResponse response) {
|
||||||
Assert.isLocked(this);
|
Assert.isLocked(this);
|
||||||
|
|
||||||
String pageNumberValue = request.getParameter("pageNumber");
|
String pageNumberValue = request.getParameter("pageNumber");
|
||||||
|
|
@ -107,13 +116,14 @@ public abstract class AbstractObjectList
|
||||||
throw new UncheckedWrapperException(
|
throw new UncheckedWrapperException(
|
||||||
"cannot parse page number " + pageNumber, ex);
|
"cannot parse page number " + pageNumber, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
DataCollection objects = getObjects(request, response);
|
DataCollection objects = getObjects(request, response);
|
||||||
|
|
||||||
// Quasimodo: Begin
|
// Quasimodo: Begin
|
||||||
// Limit list to objects in the negotiated language and language invariant items
|
// Limit list to objects in the negotiated language and language invariant items
|
||||||
if (objects != null && objects.size() > 0) {
|
if (objects != null && objects.size() > 0) {
|
||||||
if (Kernel.getConfig().languageIndependentItems()) {
|
if (Kernel.getConfig().languageIndependentItems()
|
||||||
|
|| m_languageIndependent) {
|
||||||
FilterFactory ff = objects.getFilterFactory();
|
FilterFactory ff = objects.getFilterFactory();
|
||||||
Filter filter = ff.or().
|
Filter filter = ff.or().
|
||||||
addFilter(ff.equals("language", com.arsdigita.globalization.GlobalizationHelper.
|
addFilter(ff.equals("language", com.arsdigita.globalization.GlobalizationHelper.
|
||||||
|
|
@ -134,10 +144,10 @@ public abstract class AbstractObjectList
|
||||||
|
|
||||||
//final long renderStart = System.nanoTime();
|
//final long renderStart = System.nanoTime();
|
||||||
final Element listXML = m_renderer.generateXML(objects, pageNumber.intValue());
|
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);
|
//System.out.printf("Generated object list in %d ms\n", (System.nanoTime() - start) / 1000000);
|
||||||
|
|
||||||
return listXML;
|
return listXML;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ public class GreetingItem extends AbstractComponent {
|
||||||
final Element availableLangsElem = content.newChildElement("availableLanguages");
|
final Element availableLangsElem = content.newChildElement("availableLanguages");
|
||||||
for(String language : languages) {
|
for(String language : languages) {
|
||||||
final Element langElem = availableLangsElem.newChildElement("language");
|
final Element langElem = availableLangsElem.newChildElement("language");
|
||||||
langElem.setText(language);
|
langElem.addAttribute("locale", language);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (baseItem instanceof XMLGenerator) {
|
if (baseItem instanceof XMLGenerator) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue