diff --git a/ccm-cms/src/WEB-INF/resources/cms-item-adapters.xml b/ccm-cms/src/WEB-INF/resources/cms-item-adapters.xml
index eae113b18..c7d3a29d4 100755
--- a/ccm-cms/src/WEB-INF/resources/cms-item-adapters.xml
+++ b/ccm-cms/src/WEB-INF/resources/cms-item-adapters.xml
@@ -23,7 +23,7 @@
-
+
diff --git a/ccm-cms/src/com/arsdigita/cms/ContentItemXMLRenderer.java b/ccm-cms/src/com/arsdigita/cms/ContentItemXMLRenderer.java
index 4ba983a78..e6a773276 100644
--- a/ccm-cms/src/com/arsdigita/cms/ContentItemXMLRenderer.java
+++ b/ccm-cms/src/com/arsdigita/cms/ContentItemXMLRenderer.java
@@ -4,10 +4,12 @@
*/
package com.arsdigita.cms;
+import com.arsdigita.cms.contenttypes.GenericAddress;
import com.arsdigita.dispatcher.DispatcherHelper;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectTraversalAdapter;
import com.arsdigita.domain.DomainObjectXMLRenderer;
+import com.arsdigita.persistence.metadata.Property;
import com.arsdigita.xml.Element;
/**
@@ -22,14 +24,12 @@ import com.arsdigita.xml.Element;
*
* @author quasi
*/
-
public class ContentItemXMLRenderer extends DomainObjectXMLRenderer {
public ContentItemXMLRenderer(Element root) {
super(root);
}
-
// This method will be called by DomainObjectTraversal.walk()
// It's purpose is to test for ContentBundle objects and if found, replace
// that object with the negotiated version of the content item.
@@ -50,4 +50,24 @@ public class ContentItemXMLRenderer extends DomainObjectXMLRenderer {
super.walk(adapter, nObj, path, context, linkObject);
}
+
+ @Override
+ protected void handleAttribute(DomainObject obj,
+ String path,
+ Property property) {
+
+ String name = property.getName();
+
+ if (obj instanceof GenericAddress) {
+ if (name.equals("isoCountryCode")) {
+ super.handleAttribute(obj, path, property);
+
+ Element element = newElement(m_element, "country");
+ element.setText(GenericAddress.getCountryNameFromIsoCode(((GenericAddress) obj).getIsoCountryCode()));
+ return;
+ }
+ }
+
+ super.handleAttribute(obj, path, property);
+ }
}
diff --git a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java
index ca12b77ce..5825b69e5 100755
--- a/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java
+++ b/ccm-cms/src/com/arsdigita/cms/dispatcher/SimpleXMLGenerator.java
@@ -115,10 +115,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
if (!item.getClass().getName().equals(className)) {
s_log.info("Specializing item");
try {
- item = (ContentItem) DomainObjectFactory.newInstance(new OID(item.
- getObjectType().getQualifiedName(),
- item.
- getID()));
+ item = (ContentItem) DomainObjectFactory.newInstance(new OID(item. getObjectType().getQualifiedName(), item.getID()));
} catch (DataObjectNotFoundException ex) {
throw new UncheckedWrapperException(
(String) GlobalizationUtil.globalize(
@@ -133,8 +130,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
XMLGenerator xitem = (XMLGenerator) item;
xitem.generateXML(state, parent, useContext);
- } else if (className.equals(
- "com.arsdigita.cms.UserDefinedContentItem")) {
+ } else if (className.equals("com.arsdigita.cms.UserDefinedContentItem")) {
s_log.info("Item is a user defined content item");
UserDefinedContentItem UDItem = (UserDefinedContentItem) item;
generateUDItemXML(UDItem, state, parent, useContext);
@@ -145,8 +141,7 @@ public class SimpleXMLGenerator implements XMLGenerator {
// This is the preferred method
Element content = startElement(useContext);
- ContentItemXMLRenderer renderer =
- new ContentItemXMLRenderer(content);
+ ContentItemXMLRenderer renderer = new ContentItemXMLRenderer(content);
renderer.setWrapAttributes(true);
renderer.setWrapRoot(false);
diff --git a/ccm-core/src/com/arsdigita/domain/DomainObjectXMLRenderer.java b/ccm-core/src/com/arsdigita/domain/DomainObjectXMLRenderer.java
index 71814cdbc..0ec2e250d 100755
--- a/ccm-core/src/com/arsdigita/domain/DomainObjectXMLRenderer.java
+++ b/ccm-core/src/com/arsdigita/domain/DomainObjectXMLRenderer.java
@@ -45,10 +45,19 @@ import org.apache.log4j.Logger;
*/
public class DomainObjectXMLRenderer extends DomainObjectTraversal {
- private static final Logger s_log = Logger.getLogger
- (DomainObjectXMLRenderer.class);
-
+ private static final Logger s_log = Logger.getLogger(DomainObjectXMLRenderer.class);
private static Map s_formatters = new HashMap();
+ private Stack m_elements = new Stack();
+ protected Element m_element;
+ private boolean m_wrapRoot = false;
+ private boolean m_wrapObjects = false;
+ private boolean m_wrapAttributes = false;
+ private boolean m_revisitFullObject = false;
+ private Map m_objectElements;
+ private String m_namespaceURI;
+ private String m_namespacePrefix;
+ private DomainObjectXMLFormatter m_formatter;
+ private String m_context;
/**
* Registers a traversal formatter for an object type in a given
@@ -59,8 +68,8 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
* @param context the context in which the formatter should be used
*/
public static void registerFormatter(ObjectType type,
- DomainObjectXMLFormatter formatter,
- String context) {
+ DomainObjectXMLFormatter formatter,
+ String context) {
s_formatters.put(new AdapterKey(type, context), formatter);
}
@@ -72,7 +81,7 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
* @param context the context in which the formatter should be used
*/
public static void unregisterFormatter(ObjectType type,
- String context) {
+ String context) {
s_formatters.remove(new AdapterKey(type, context));
}
@@ -85,17 +94,17 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
* @param context the context in which the formatter should be used
*/
public static void registerFormatter(String type,
- DomainObjectXMLFormatter formatter,
- String context) {
- if( s_log.isDebugEnabled() ) {
- s_log.debug( "Registering formatter " +
- formatter.getClass().getName() + " for type " + type +
- " in context " + context );
+ DomainObjectXMLFormatter formatter,
+ String context) {
+ if (s_log.isDebugEnabled()) {
+ s_log.debug("Registering formatter "
+ + formatter.getClass().getName() + " for type " + type
+ + " in context " + context);
}
registerFormatter(MetadataRoot.getMetadataRoot().getObjectType(type),
- formatter,
- context);
+ formatter,
+ context);
}
/**
@@ -106,9 +115,9 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
* @param context the context in which the formatter should be used
*/
public static void unregisterFormatter(String type,
- String context) {
+ String context) {
unregisterFormatter(MetadataRoot.getMetadataRoot().getObjectType(type),
- context);
+ context);
}
/**
@@ -119,10 +128,9 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
* @param context the formatter context
*/
public static DomainObjectXMLFormatter getFormatter(
- ObjectType type,
- String context) {
- return (DomainObjectXMLFormatter)s_formatters
- .get(new AdapterKey(type, context));
+ ObjectType type,
+ String context) {
+ return (DomainObjectXMLFormatter) s_formatters.get(new AdapterKey(type, context));
}
/**
@@ -135,34 +143,18 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
* @param context the formatter context
*/
public static DomainObjectXMLFormatter findFormatter(ObjectType type,
- String context) {
+ String context) {
DomainObjectXMLFormatter formatter = null;
while (formatter == null && type != null) {
formatter = getFormatter(type, context);
if (s_log.isDebugEnabled()) {
- s_log.debug("getFormatter("+type+","+context+")="+formatter);
+ s_log.debug("getFormatter(" + type + "," + context + ")=" + formatter);
}
type = type.getSupertype();
}
return formatter;
}
- private Stack m_elements = new Stack();
- private Element m_element;
-
- private boolean m_wrapRoot = false;
- private boolean m_wrapObjects = false;
- private boolean m_wrapAttributes = false;
- private boolean m_revisitFullObject = false;
-
- private Map m_objectElements;
-
- private String m_namespaceURI;
- private String m_namespacePrefix;
-
- private DomainObjectXMLFormatter m_formatter;
- private String m_context;
-
/**
* Creates a new DomainObject XML renderer
* that outputs XML into the element passed into
@@ -176,22 +168,22 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
}
public void setNamespace(String prefix,
- String uri) {
+ String uri) {
m_namespacePrefix = prefix;
m_namespaceURI = uri;
}
- protected Object format(DomainObject obj,
- String path,
- Property prop,
- Object value) {
+ protected Object format(DomainObject obj,
+ String path,
+ Property prop,
+ Object value) {
if (m_formatter != null) {
String propertyPath = appendToPath(path, prop.getName());
- Object rendered = m_formatter.format(obj,
- propertyPath,
- prop, value);
+ Object rendered = m_formatter.format(obj,
+ propertyPath,
+ prop, value);
if (s_log.isDebugEnabled()) {
- s_log.debug("FORMAT "+obj+" m_formatter="+m_formatter+" rendered="+rendered);
+ s_log.debug("FORMAT " + obj + " m_formatter=" + m_formatter + " rendered=" + rendered);
}
if (rendered == null) {
// try supertype formatters
@@ -205,7 +197,7 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
rendered = null;
}
if (s_log.isDebugEnabled()) {
- s_log.debug("FALLBACK supertype "+objectType+" formatter="+formatter+" rendered="+rendered);
+ s_log.debug("FALLBACK supertype " + objectType + " formatter=" + formatter + " rendered=" + rendered);
}
objectType = objectType.getSupertype();
}
@@ -220,11 +212,11 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
@Override
protected void walk(DomainObject obj,
- String context,
- DomainObjectTraversalAdapter adapter) {
+ String context,
+ DomainObjectTraversalAdapter adapter) {
if (s_log.isDebugEnabled()) {
- s_log.debug("Traversing " + obj + " for context " + context + " " +
- "using adapter " + adapter);
+ s_log.debug("Traversing " + obj + " for context " + context + " "
+ + "using adapter " + adapter);
}
m_formatter = findFormatter(obj.getObjectType(), context);
@@ -237,7 +229,6 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
super.walk(obj, context, adapter);
}
-
/**
* Determines XML output for root object.
* If set to true a separate element will
@@ -281,7 +272,6 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
m_revisitFullObject = value;
}
-
public boolean isWrappingAttributes() {
return m_wrapAttributes;
}
@@ -289,13 +279,13 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
public boolean isWrappingObjects() {
return m_wrapObjects;
}
-
+
public boolean isWrappingRoot() {
return m_wrapRoot;
}
protected void beginObject(DomainObject obj,
- String path) {
+ String path) {
if (m_wrapRoot || !path.equals("/object")) {
String name = m_wrapObjects ? "object" : nameFromPath(path);
Element element = newElement(m_element, name);
@@ -310,19 +300,19 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
}
protected void endObject(DomainObject obj,
- String path) {
+ String path) {
if (m_wrapRoot || !path.equals("/object")) {
- m_element = (Element)m_elements.pop();
+ m_element = (Element) m_elements.pop();
}
}
protected void revisitObject(DomainObject obj,
- String path) {
+ String path) {
Element priorElement = null;
if (m_revisitFullObject) {
priorElement = (Element) m_objectElements.get(obj.getOID());
}
- if (priorElement != null && (m_elements.search(priorElement)==-1)) {
+ if (priorElement != null && (m_elements.search(priorElement) == -1)) {
String name = m_wrapObjects ? "object" : nameFromPath(path);
Element element = newElement(m_element, name, priorElement);
} else {
@@ -331,56 +321,56 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
element.addAttribute("oid", obj.getOID().toString());
}
}
-
+
protected void handleAttribute(DomainObject obj,
- String path,
- Property property) {
+ String path,
+ Property property) {
String name = property.getName();
Object value = obj.get(name);
if (value != null) {
if (m_wrapAttributes) {
- Object formattedValue = format(obj, path, property, value);
- if (formattedValue instanceof Element) {
- m_element.addContent((Element)formattedValue);
-
- } else {
- Element element = newElement(m_element, name);
- element.setText((String)format(obj, path, property, value));
-
- // locale-independent date output
- if (value instanceof Date) {
- Date date = (Date) value;
- Calendar calDate = Calendar.getInstance();
- calDate.setTime(date);
- element.addAttribute("year", Integer.toString(calDate.get(Calendar.YEAR)));
- element.addAttribute("month", Integer.toString(calDate.get(Calendar.MONTH)+1));
- element.addAttribute("day", Integer.toString(calDate.get(Calendar.DAY_OF_MONTH)));
- element.addAttribute("hour", Integer.toString(calDate.get(Calendar.HOUR_OF_DAY)));
- element.addAttribute("minute", Integer.toString(calDate.get(Calendar.MINUTE)));
- element.addAttribute("second", Integer.toString(calDate.get(Calendar.SECOND)));
+ Object formattedValue = format(obj, path, property, value);
+ if (formattedValue instanceof Element) {
+ m_element.addContent((Element) formattedValue);
- // Quasimodo: BEGIN
- // Add attributes for date and time
- Locale negLocale = com.arsdigita.dispatcher.DispatcherHelper.getNegotiatedLocale();
- DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.MEDIUM, negLocale);
- DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT, negLocale);
- element.addAttribute("date", dateFormatter.format(date));
- element.addAttribute("time", timeFormatter.format(date));
- // Quasimodo: END
+ } else {
+ Element element = newElement(m_element, name);
+ element.setText((String) format(obj, path, property, value));
+ // locale-independent date output
+ if (value instanceof Date) {
+ Date date = (Date) value;
+ Calendar calDate = Calendar.getInstance();
+ calDate.setTime(date);
+ element.addAttribute("year", Integer.toString(calDate.get(Calendar.YEAR)));
+ element.addAttribute("month", Integer.toString(calDate.get(Calendar.MONTH) + 1));
+ element.addAttribute("day", Integer.toString(calDate.get(Calendar.DAY_OF_MONTH)));
+ element.addAttribute("hour", Integer.toString(calDate.get(Calendar.HOUR_OF_DAY)));
+ element.addAttribute("minute", Integer.toString(calDate.get(Calendar.MINUTE)));
+ element.addAttribute("second", Integer.toString(calDate.get(Calendar.SECOND)));
+
+ // Quasimodo: BEGIN
+ // Add attributes for date and time
+ Locale negLocale = com.arsdigita.dispatcher.DispatcherHelper.getNegotiatedLocale();
+ DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.MEDIUM, negLocale);
+ DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT, negLocale);
+ element.addAttribute("date", dateFormatter.format(date));
+ element.addAttribute("time", timeFormatter.format(date));
+ // Quasimodo: END
+
+ }
}
- }
} else {
- m_element.addAttribute(property.getName(),
- (String)format(obj, path, property, value));
+ m_element.addAttribute(property.getName(),
+ (String) format(obj, path, property, value));
}
}
}
protected void beginRole(DomainObject obj,
- String path,
- Property property) {
+ String path,
+ Property property) {
if (m_wrapObjects) {
Element element = newElement(m_element, property.getName());
m_elements.push(m_element);
@@ -389,17 +379,16 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
}
protected void endRole(DomainObject obj,
- String path,
- Property property) {
+ String path,
+ Property property) {
if (m_wrapObjects) {
- m_element = (Element)m_elements.pop();
+ m_element = (Element) m_elements.pop();
}
}
-
protected void beginAssociation(DomainObject obj,
- String path,
- Property property) {
+ String path,
+ Property property) {
if (m_wrapObjects) {
Element element = newElement(m_element, property.getName());
m_elements.push(m_element);
@@ -408,10 +397,10 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
}
protected void endAssociation(DomainObject obj,
- String path,
- Property property) {
+ String path,
+ Property property) {
if (m_wrapObjects) {
- m_element = (Element)m_elements.pop();
+ m_element = (Element) m_elements.pop();
}
}
@@ -428,20 +417,20 @@ public class DomainObjectXMLRenderer extends DomainObjectTraversal {
}
protected Element newElement(Element parent,
- String name) {
- return m_namespaceURI == null ?
- parent.newChildElement(name) :
- parent.newChildElement(m_namespacePrefix + ":" + name,
- m_namespaceURI);
+ String name) {
+ return m_namespaceURI == null
+ ? parent.newChildElement(name)
+ : parent.newChildElement(m_namespacePrefix + ":" + name,
+ m_namespaceURI);
}
protected Element newElement(Element parent,
- String name,
- Element copy) {
- return m_namespaceURI == null ?
- parent.newChildElement(name, copy) :
- parent.newChildElement(m_namespacePrefix + ":" + name,
- m_namespaceURI,
- copy);
+ String name,
+ Element copy) {
+ return m_namespaceURI == null
+ ? parent.newChildElement(name, copy)
+ : parent.newChildElement(m_namespacePrefix + ":" + name,
+ m_namespaceURI,
+ copy);
}
}