(cars.size());
for (ChildAssociationRef car : cars)
{
- categoryNodes.add(new CategoryTemplateNode(car.getChildRef(), this.services, this.imageResolver));
+ categoryNodes.add(new CategoryTemplateNode(car.getChildRef(), this.services, getTemplateImageResolver()));
}
return categoryNodes;
}
diff --git a/source/java/org/alfresco/repo/template/DateCompareMethod.java b/source/java/org/alfresco/repo/template/DateCompareMethod.java
index 991a0dd467..0f97f55025 100644
--- a/source/java/org/alfresco/repo/template/DateCompareMethod.java
+++ b/source/java/org/alfresco/repo/template/DateCompareMethod.java
@@ -43,7 +43,7 @@ import freemarker.template.TemplateNumberModel;
* dateCompare(dateA, dateB) - 1 if dateA if greater than dateB
* dateCompare(dateA, dateB, millis) - 1 if dateA is greater than dateB by at least millis, else 0
*/
-public final class DateCompareMethod implements TemplateMethodModelEx
+public class DateCompareMethod extends BaseTemplateExtensionImplementation implements TemplateMethodModelEx
{
/**
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
diff --git a/source/java/org/alfresco/repo/template/DateIncrementMethod.java b/source/java/org/alfresco/repo/template/DateIncrementMethod.java
index c7ec804ec3..75f3c5ebd0 100644
--- a/source/java/org/alfresco/repo/template/DateIncrementMethod.java
+++ b/source/java/org/alfresco/repo/template/DateIncrementMethod.java
@@ -34,10 +34,8 @@ import freemarker.template.TemplateNumberModel;
/**
* @author Roy Wetherall
- *
-
*/
-public final class DateIncrementMethod implements TemplateMethodModelEx
+public class DateIncrementMethod extends BaseTemplateExtensionImplementation implements TemplateMethodModelEx
{
/**
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
diff --git a/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java b/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java
index f626753ff0..6f6d5924ca 100644
--- a/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java
+++ b/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java
@@ -35,6 +35,7 @@ import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.TemplateException;
+import org.alfresco.service.cmr.repository.TemplateExtensionImplementation;
import org.alfresco.service.cmr.repository.TemplateImageResolver;
import org.alfresco.service.cmr.repository.TemplateNode;
import org.alfresco.service.cmr.repository.TemplateProcessor;
@@ -100,7 +101,7 @@ public class FreeMarkerProcessor implements TemplateProcessor
{
this.contentService = contentService;
}
-
+
/**
* Set the default template encoding
*
@@ -338,18 +339,13 @@ public class FreeMarkerProcessor implements TemplateProcessor
// current date/time is useful to have and isn't supplied by FreeMarker by default
model.put("date", new Date());
- // Session support
- model.put("session", new Session(services, imageResolver));
-
- // Classification support
-
- model.put("classification", new Classification(companyHome.getStoreRef(), services, imageResolver));
-
- // add custom method objects
- model.put("hasAspect", new HasAspectMethod());
- model.put("message", new I18NMessageMethod());
- model.put("dateCompare", new DateCompareMethod());
- model.put("incrementDate", new DateIncrementMethod());
+ // add the template extensions to the model
+ // the extensions include custom root helper objects and custom template method objects
+ for (TemplateExtensionImplementation ext : services.getTemplateService().getExtensions())
+ {
+ ext.setTemplateImageResolver(imageResolver);
+ model.put(ext.getExtensionName(), ext);
+ }
return model;
}
diff --git a/source/java/org/alfresco/repo/template/HasAspectMethod.java b/source/java/org/alfresco/repo/template/HasAspectMethod.java
index caa8d4e865..5a3c167b08 100644
--- a/source/java/org/alfresco/repo/template/HasAspectMethod.java
+++ b/source/java/org/alfresco/repo/template/HasAspectMethod.java
@@ -24,14 +24,11 @@
*/
package org.alfresco.repo.template;
-import java.util.ArrayList;
import java.util.List;
import org.alfresco.service.cmr.repository.TemplateNode;
-import org.alfresco.service.namespace.QName;
import freemarker.ext.beans.BeanModel;
-import freemarker.ext.beans.StringModel;
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModelException;
import freemarker.template.TemplateScalarModel;
@@ -44,9 +41,9 @@ import freemarker.template.TemplateScalarModel;
* Method returns whether a TemplateNode has a particular aspect applied to it. The aspect
* name can be either the fully qualified QName or the short prefixed name string.
*
- * Usage: hasAspect(TemplateNode node, String aspect)
+ * Usage: hasAspect(TemplateNode node, String aspect) - 1 on true, 0 on false
*/
-public final class HasAspectMethod implements TemplateMethodModelEx
+public class HasAspectMethod extends BaseTemplateExtensionImplementation implements TemplateMethodModelEx
{
/**
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
diff --git a/source/java/org/alfresco/repo/template/I18NMessageMethod.java b/source/java/org/alfresco/repo/template/I18NMessageMethod.java
index b8db182c47..693560a6d5 100644
--- a/source/java/org/alfresco/repo/template/I18NMessageMethod.java
+++ b/source/java/org/alfresco/repo/template/I18NMessageMethod.java
@@ -37,11 +37,11 @@ import freemarker.template.TemplateScalarModel;
*
* Custom FreeMarker Template language method.
*
- * Method an I18N message resolved for the current locale and specified message ID.
+ * Returns an I18N message resolved for the current locale and specified message ID.
*
* Usage: message(String id)
*/
-public final class I18NMessageMethod implements TemplateMethodModelEx
+public class I18NMessageMethod extends BaseTemplateExtensionImplementation implements TemplateMethodModelEx
{
/**
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
diff --git a/source/java/org/alfresco/repo/template/Session.java b/source/java/org/alfresco/repo/template/Session.java
index aa1064b805..9855f8802a 100644
--- a/source/java/org/alfresco/repo/template/Session.java
+++ b/source/java/org/alfresco/repo/template/Session.java
@@ -32,20 +32,20 @@ import org.alfresco.service.cmr.repository.TemplateImageResolver;
*
* @author Andy Hind
*/
-public class Session
+public class Session extends BaseTemplateExtensionImplementation
{
-
private ServiceRegistry services;
- @SuppressWarnings("unused")
- private TemplateImageResolver imageResolver;
-
- public Session(ServiceRegistry services, TemplateImageResolver imageResolver)
+ /**
+ * Sets the service registry
+ *
+ * @param services the service registry
+ */
+ public void setServiceRegistry(ServiceRegistry services)
{
this.services = services;
- this.imageResolver = imageResolver;
}
-
+
/**
* Get the current authentication ticket.
*
diff --git a/source/java/org/alfresco/repo/template/TemplateServiceImpl.java b/source/java/org/alfresco/repo/template/TemplateServiceImpl.java
index d8c54bf90e..66cff32385 100644
--- a/source/java/org/alfresco/repo/template/TemplateServiceImpl.java
+++ b/source/java/org/alfresco/repo/template/TemplateServiceImpl.java
@@ -26,11 +26,15 @@ package org.alfresco.repo.template;
import java.io.StringWriter;
import java.io.Writer;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.service.cmr.repository.ScriptImplementation;
import org.alfresco.service.cmr.repository.TemplateException;
+import org.alfresco.service.cmr.repository.TemplateExtensionImplementation;
import org.alfresco.service.cmr.repository.TemplateProcessor;
import org.alfresco.service.cmr.repository.TemplateService;
import org.apache.commons.logging.Log;
@@ -40,6 +44,8 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
+ * Implementation of the TemplateService using Spring configured template engines.
+ *
* @author Kevin Roast
*/
public class TemplateServiceImpl implements TemplateService, ApplicationContextAware
@@ -58,6 +64,10 @@ public class TemplateServiceImpl implements TemplateService, ApplicationContextA
/** Threadlocal instance for template processor cache */
private static ThreadLocal