From 71e498bcede21be0178b8e1d0605345ee6b92787 Mon Sep 17 00:00:00 2001 From: jensp Date: Tue, 5 Mar 2019 15:37:27 +0000 Subject: [PATCH] Macro for content items now works for object lists and details views git-svn-id: https://svn.libreccm.org/ccm/trunk@5846 8810af33-2d31-482b-a856-94f89814c4df --- .../ccm-cms/macros/contentitems.ftl | 17 +++- .../FreeMarkerPresentationManager.java | 94 ++++++++++--------- 2 files changed, 61 insertions(+), 50 deletions(-) diff --git a/ccm-cms/web/themes/freemarker/ccm-cms/macros/contentitems.ftl b/ccm-cms/web/themes/freemarker/ccm-cms/macros/contentitems.ftl index ac48f7ac2..bda077111 100644 --- a/ccm-cms/web/themes/freemarker/ccm-cms/macros/contentitems.ftl +++ b/ccm-cms/web/themes/freemarker/ccm-cms/macros/contentitems.ftl @@ -23,12 +23,21 @@ --> <#macro contentItem item view="detail" style=""> - <#include getContentItemTemplate(item, view, style)> - <#--
-        Using content item template ${getContentItemTemplate(item, view, style)}
+        item["/objectType"]: ${item["./objectType"]?size}
+        item["/nav:attribute[@name='objectType']"]: ${item["./nav:attribute[@name='objectType']"]?size}
     
--> + + <#if (item["./objectType"]?size > 0)> + <#include getContentItemTemplate(item["./objectType"], view, style)> + <#elseif (item["./nav:attribute[@name='objectType']"]?size > 0)> + <#include getContentItemTemplate(item["./nav:attribute[@name='objectType'][1]"], view, style)> + <#else> + <#include getContentItemTemplate("com.arsdigita.cms.ContentItem", view, style)> + + + <#-- @@ -40,4 +49,4 @@ <#elseif (item["./nav:attribute[@name='title']"]?size > 0)> ${item["./nav:attribute[@name='title']"]} - \ No newline at end of file + diff --git a/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java b/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java index 3dbb2ca26..d304ca416 100644 --- a/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java +++ b/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java @@ -17,15 +17,12 @@ import freemarker.cache.MultiTemplateLoader; import freemarker.cache.TemplateLoader; import freemarker.cache.WebappTemplateLoader; import freemarker.ext.dom.NodeModel; -import freemarker.ext.xml.NodeListModel; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import freemarker.template.TemplateMethodModelEx; -import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; import freemarker.template.TemplateScalarModel; -import freemarker.template.TemplateSequenceModel; import org.libreccm.theming.manifest.ThemeManifest; import org.libreccm.theming.manifest.ThemeManifestUtil; import org.w3c.dom.NamedNodeMap; @@ -376,16 +373,21 @@ public class FreeMarkerPresentationManager implements PresentationManager { + "item: NodeModel, view: String, style: String"); } - final Object arg0 = list.get(0); - if (!(arg0 instanceof NodeModel)) { - throw new IllegalArgumentException( - "Parameter item must be a NodeModel."); - } - final NodeModel itemModel = (NodeModel) arg0; +// final Object arg0 = list.get(0); +// if (!(arg0 instanceof NodeModel)) { +// throw new IllegalArgumentException( +// "Parameter item must be a NodeModel."); +// } +// final NodeModel itemModel = (NodeModel) arg0; + final String objectType = ((TemplateScalarModel) list + .get(0)) + .getAsString(); + final String view; if (list.size() >= 2) { - view = ((TemplateScalarModel) list.get(1)) + view = ((TemplateScalarModel) list + .get(1)) .getAsString() .toUpperCase(Locale.ROOT); } else { @@ -402,7 +404,7 @@ public class FreeMarkerPresentationManager implements PresentationManager { } return findContentItemTemplate(templates, - itemModel, + objectType, contentItemView, style); } @@ -411,49 +413,49 @@ public class FreeMarkerPresentationManager implements PresentationManager { private String findContentItemTemplate( final Templates templates, - final NodeModel itemModel, + final String objectType, final ContentItemViews view, final String style) throws TemplateModelException { - final String nodeNamespace = itemModel.getNodeNamespace(); - final String nodeName = itemModel.getNodeName(); +// final String nodeNamespace = itemModel.getNodeNamespace(); +// final String nodeName = itemModel.getNodeName(); - final String contentType; - if ("http://www.arsdigita.com/cms/1.0".equals(nodeNamespace) - && "item".equals(nodeName)) { - contentType = ((TemplateScalarModel) itemModel - .get("objectType")) - .getAsString(); - } else if ("http://ccm.redhat.com/navigation".equals(nodeNamespace) - && "item".equals(nodeName)) { - final TemplateModel objectTypeElems = itemModel - .get("attribute[@name='objectType']"); - if (objectTypeElems instanceof TemplateSequenceModel) { - final TemplateModel objectTypeElem - = ((TemplateSequenceModel) objectTypeElems) - .get(0); - contentType = ((TemplateScalarModel) objectTypeElem) - .getAsString(); - } else if (objectTypeElems instanceof TemplateScalarModel) { - contentType = ((TemplateScalarModel) objectTypeElems) - .getAsString(); - } else { - throw new IllegalArgumentException( - "Can't determine object type of item."); - } - } else { - throw new IllegalArgumentException(String.format( - "Unexpected combination of node namespace and nodename. " - + "nodeNamespace = \"%s\"; nodeName = \"%s\"", - nodeNamespace, - nodeName)); - } +// final String contentType; +// if ("http://www.arsdigita.com/cms/1.0".equals(nodeNamespace) +// && "item".equals(nodeName)) { +// contentType = ((TemplateScalarModel) itemModel +// .get("objectType")) +// .getAsString(); +// } else if ("http://ccm.redhat.com/navigation".equals(nodeNamespace) +// && "item".equals(nodeName)) { +// final TemplateModel objectTypeElems = itemModel +// .get("attribute[@name='objectType']"); +// if (objectTypeElems instanceof TemplateSequenceModel) { +// final TemplateModel objectTypeElem +// = ((TemplateSequenceModel) objectTypeElems) +// .get(0); +// contentType = ((TemplateScalarModel) objectTypeElem) +// .getAsString(); +// } else if (objectTypeElems instanceof TemplateScalarModel) { +// contentType = ((TemplateScalarModel) objectTypeElems) +// .getAsString(); +// } else { +// throw new IllegalArgumentException( +// "Can't determine object type of item."); +// } +// } else { +// throw new IllegalArgumentException(String.format( +// "Unexpected combination of node namespace and nodename. " +// + "nodeNamespace = \"%s\"; nodeName = \"%s\"", +// nodeNamespace, +// nodeName)); +// } final Optional forTypeViewAndStyle = templates .getContentItems() .stream() .filter(template -> filterContentItemTemplate(template, - contentType, + objectType, view, style)) .findAny(); @@ -466,7 +468,7 @@ public class FreeMarkerPresentationManager implements PresentationManager { .getContentItems() .stream() .filter(template -> filterContentItemTemplate(template, - contentType, + objectType, view)) .findAny();