The XML of ContentPanel and GreetingItem now includes the languages in which an content item is available

git-svn-id: https://svn.libreccm.org/ccm/trunk@4474 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2016-12-14 10:33:23 +00:00
parent 31376f323d
commit c7f8494b90
2 changed files with 38 additions and 12 deletions

View File

@ -18,9 +18,11 @@
*/ */
package com.arsdigita.cms.dispatcher; package com.arsdigita.cms.dispatcher;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.CMSConfig; import com.arsdigita.cms.CMSConfig;
import com.arsdigita.cms.ContentBundle;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentItemXMLRenderer; import com.arsdigita.cms.ContentItemXMLRenderer;
import com.arsdigita.cms.ExtraXMLGenerator; import com.arsdigita.cms.ExtraXMLGenerator;
@ -32,6 +34,7 @@ import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.domain.DomainObjectTraversal; import com.arsdigita.domain.DomainObjectTraversal;
import com.arsdigita.domain.SimpleDomainObjectTraversalAdapter; import com.arsdigita.domain.SimpleDomainObjectTraversalAdapter;
import com.arsdigita.kernel.ACSObject;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
import com.arsdigita.kernel.Party; import com.arsdigita.kernel.Party;
import com.arsdigita.kernel.permissions.PermissionDescriptor; import com.arsdigita.kernel.permissions.PermissionDescriptor;
@ -43,6 +46,7 @@ import com.arsdigita.persistence.metadata.Property;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
@ -59,10 +63,10 @@ public class SimpleXMLGenerator implements XMLGenerator {
private static final Logger s_log = Logger.getLogger(SimpleXMLGenerator.class); private static final Logger s_log = Logger.getLogger(SimpleXMLGenerator.class);
public static final String ADAPTER_CONTEXT = SimpleXMLGenerator.class.getName(); public static final String ADAPTER_CONTEXT = SimpleXMLGenerator.class.getName();
/** /**
* jensp 2011-10-23: Sometimes the extra XML is not needed, for example * jensp 2011-10-23: Sometimes the extra XML is not needed, for example
* when embedding the XML of a content item into the XML output of another * when embedding the XML of a content item into the XML output of another
* content item. The default value {@code true}. To change the value * content item. The default value {@code true}. To change the value
* call {@link #setUseExtraXml(booelan)} after creating an instance of * call {@link #setUseExtraXml(booelan)} after creating an instance of
* your generator. * your generator.
*/ */
private boolean useExtraXml = true; private boolean useExtraXml = true;
@ -79,7 +83,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
private final Map<String, String> itemAttributes = new LinkedHashMap<String, String>(); private final Map<String, String> itemAttributes = new LinkedHashMap<String, String>();
/** /**
* Allows to overwrite the name and the namespace of the XML element * Allows to overwrite the name and the namespace of the XML element
* used to wrap the rendered item. * used to wrap the rendered item.
*/ */
private String itemElemName = "cms:item"; private String itemElemName = "cms:item";
private String itemElemNs = CMS.CMS_XML_NS; private String itemElemNs = CMS.CMS_XML_NS;
@ -173,6 +177,21 @@ public class SimpleXMLGenerator implements XMLGenerator {
} }
} }
final ACSObject parentObj = item.getParent();
if (parentObj instanceof ContentBundle) {
final ContentBundle bundle = (ContentBundle) parentObj;
final Collection<String> languages = bundle.getLanguages();
final Element availableLangsElem = parent.newChildElement("availableLanguages");
for(String language : languages) {
final Element langElem = availableLangsElem.newChildElement("language");
langElem.setText(language);
}
}
// Implementing XMLGenerator directly is now deprecated // Implementing XMLGenerator directly is now deprecated
if (item instanceof XMLGenerator) { if (item instanceof XMLGenerator) {
s_log.info("Item implements XMLGenerator interface"); s_log.info("Item implements XMLGenerator interface");
@ -224,8 +243,8 @@ public class SimpleXMLGenerator implements XMLGenerator {
/* /*
* 2011-08-27 jensp: Introduced to remove the annoying special templates * 2011-08-27 jensp: Introduced to remove the annoying special templates
* for MultiPartArticle, SiteProxy and others. The method called * for MultiPartArticle, SiteProxy and others. The method called
* here was already definied but not used. * here was already definied but not used.
* *
* 2011-10-23 jensp: It is now possible to disable the use of * 2011-10-23 jensp: It is now possible to disable the use of
* extra XML. * extra XML.
*/ */
@ -318,7 +337,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
private Element startElement(final String useContext, final Element parent) { private Element startElement(final String useContext, final Element parent) {
//Element element = new Element("cms:item", CMS.CMS_XML_NS); //Element element = new Element("cms:item", CMS.CMS_XML_NS);
//final Element element = new Element(itemElemName, itemElemNs); //final Element element = new Element(itemElemName, itemElemNs);
final Element element = parent.newChildElement(itemElemName, itemElemNs); final Element element = parent.newChildElement(itemElemName, itemElemNs);
if (useContext != null) { if (useContext != null) {
element.addAttribute("useContext", useContext); element.addAttribute("useContext", useContext);

View File

@ -18,6 +18,7 @@
package com.arsdigita.navigation.ui; package com.arsdigita.navigation.ui;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import java.util.Collection;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -128,8 +129,14 @@ public class GreetingItem extends AbstractComponent {
// get the primary instance instead (fallback) // get the primary instance instead (fallback)
baseItem = bundle.getPrimaryInstance(); baseItem = bundle.getPrimaryInstance();
} }
final Collection<String> languages = bundle.getLanguages();
final Element availableLangsElem = content.newChildElement("availableLanguages");
for(String language : languages) {
final Element langElem = availableLangsElem.newChildElement("language");
langElem.setText(language);
}
if (baseItem instanceof XMLGenerator) { if (baseItem instanceof XMLGenerator) {
final XMLGenerator generator = (XMLGenerator) baseItem; final XMLGenerator generator = (XMLGenerator) baseItem;
generator.generateXML(PageState.getPageState(), content, ""); generator.generateXML(PageState.getPageState(), content, "");
@ -141,15 +148,15 @@ public class GreetingItem extends AbstractComponent {
//XML generation extendable (use another renderer etc.) //XML generation extendable (use another renderer etc.)
/*ContentItemXMLRenderer renderer = /*ContentItemXMLRenderer renderer =
new ContentItemXMLRenderer(itemEl); new ContentItemXMLRenderer(itemEl);
renderer.setWrapAttributes(true); renderer.setWrapAttributes(true);
renderer.setWrapRoot(false); renderer.setWrapRoot(false);
renderer.setWrapObjects(false); renderer.setWrapObjects(false);
renderer.walk(baseItem, SimpleXMLGenerator.ADAPTER_CONTEXT);*/ renderer.walk(baseItem, SimpleXMLGenerator.ADAPTER_CONTEXT);*/
generateGreetingItemXml(itemEl, baseItem); generateGreetingItemXml(itemEl, baseItem);
for (ExtraXMLGenerator generator : baseItem.getExtraXMLGenerators()) { for (ExtraXMLGenerator generator : baseItem.getExtraXMLGenerators()) {
try { try {
@ -160,7 +167,7 @@ public class GreetingItem extends AbstractComponent {
s_log.error(ex); s_log.error(ex);
} }
} }
if (PermissionService.checkPermission(edit)) { if (PermissionService.checkPermission(edit)) {
final ItemResolver resolver = baseItem.getContentSection().getItemResolver(); final ItemResolver resolver = baseItem.getContentSection().getItemResolver();