mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Refactor of template and script services to allow easy addition of further template and script processors.
Hightlights of check-in include: - Introduction of script processor - Neutralisation of script and template models - The notion of a processor extension introduced - Extensions applied to processor implementation rather than the services - Auto selection of processor based on file extension of template or script git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5519 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -39,7 +39,6 @@ import javax.transaction.UserTransaction;
|
|||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.template.AbsoluteUrlMethod;
|
import org.alfresco.repo.template.AbsoluteUrlMethod;
|
||||||
import org.alfresco.repo.template.TemplateNode;
|
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
@@ -224,7 +223,7 @@ public abstract class BaseTemplateContentServlet extends BaseServlet
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create the model - put the supplied noderef in as space/document as appropriate
|
// create the model - put the supplied noderef in as space/document as appropriate
|
||||||
Object model = getModel(serviceRegistry, req, templateRef, nodeRef);
|
Map<String, Object> model = getModel(serviceRegistry, req, templateRef, nodeRef);
|
||||||
|
|
||||||
// process the template against the node content directly to the response output stream
|
// process the template against the node content directly to the response output stream
|
||||||
// assuming the repo is capable of streaming in chunks, this should allow large files
|
// assuming the repo is capable of streaming in chunks, this should allow large files
|
||||||
@@ -232,7 +231,6 @@ public abstract class BaseTemplateContentServlet extends BaseServlet
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
templateService.processTemplate(
|
templateService.processTemplate(
|
||||||
null,
|
|
||||||
templateRef.toString(),
|
templateRef.toString(),
|
||||||
model,
|
model,
|
||||||
res.getWriter());
|
res.getWriter());
|
||||||
@@ -280,15 +278,14 @@ public abstract class BaseTemplateContentServlet extends BaseServlet
|
|||||||
* @return an object model ready for executing template against
|
* @return an object model ready for executing template against
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private Object getModel(ServiceRegistry services, HttpServletRequest req, NodeRef templateRef, NodeRef nodeRef)
|
private Map<String, Object> getModel(ServiceRegistry services, HttpServletRequest req, NodeRef templateRef, NodeRef nodeRef)
|
||||||
{
|
{
|
||||||
// build FreeMarker default model and merge
|
// build FreeMarker default model and merge
|
||||||
Map<String, Object> root = buildModel(services, req, templateRef);
|
Map<String, Object> root = buildModel(services, req, templateRef);
|
||||||
|
|
||||||
// put the current NodeRef in as "space" and "document"
|
// put the current NodeRef in as "space" and "document"
|
||||||
TemplateNode node = new TemplateNode(nodeRef, services, this.imageResolver);
|
root.put("space", nodeRef);
|
||||||
root.put("space", node);
|
root.put("document", nodeRef);
|
||||||
root.put("document", node);
|
|
||||||
|
|
||||||
// add URL arguments as a map called 'args' to the root of the model
|
// add URL arguments as a map called 'args' to the root of the model
|
||||||
Map<String, String> args = new HashMap<String, String>(8, 1.0f);
|
Map<String, String> args = new HashMap<String, String>(8, 1.0f);
|
||||||
|
@@ -27,7 +27,6 @@ package org.alfresco.web.app.servlet.command;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.jscript.RhinoScriptService;
|
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
@@ -89,8 +88,7 @@ public final class ExecuteScriptCommand implements Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
// build the model needed to execute the script
|
// build the model needed to execute the script
|
||||||
Map<String, Object> model = RhinoScriptService.buildDefaultModel(
|
Map<String, Object> model = serviceRegistry.getScriptService().buildDefaultModel(
|
||||||
serviceRegistry,
|
|
||||||
personRef,
|
personRef,
|
||||||
new NodeRef(Repository.getStoreRef(), Application.getCompanyRootId()),
|
new NodeRef(Repository.getStoreRef(), Application.getCompanyRootId()),
|
||||||
(NodeRef)nodeService.getProperty(personRef, ContentModel.PROP_HOMEFOLDER),
|
(NodeRef)nodeService.getProperty(personRef, ContentModel.PROP_HOMEFOLDER),
|
||||||
|
@@ -77,7 +77,7 @@ public class NodeInfoBean
|
|||||||
if (this.nodeService.exists(nodeRef))
|
if (this.nodeService.exists(nodeRef))
|
||||||
{
|
{
|
||||||
Repository.getServiceRegistry(context).getTemplateService().processTemplate(
|
Repository.getServiceRegistry(context).getTemplateService().processTemplate(
|
||||||
null, "/alfresco/templates/client/summary_panel.ftl", getModel(nodeRef), out);
|
"/alfresco/templates/client/summary_panel.ftl", getModel(nodeRef), out);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -168,7 +168,7 @@ public class FormImpl
|
|||||||
" in webapp " + webappName +
|
" in webapp " + webappName +
|
||||||
" and xml data " + XMLUtil.toString(formInstanceData));
|
" and xml data " + XMLUtil.toString(formInstanceData));
|
||||||
}
|
}
|
||||||
result = templateService.processTemplateString(null,
|
result = templateService.processTemplateString("freemarker",
|
||||||
outputPathPattern,
|
outputPathPattern,
|
||||||
new SimpleHash(root));
|
new SimpleHash(root));
|
||||||
}
|
}
|
||||||
|
@@ -223,7 +223,7 @@ public class RenderingEngineTemplateImpl
|
|||||||
String result = null;
|
String result = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
result = templateService.processTemplateString(null,
|
result = templateService.processTemplateString("freemarker",
|
||||||
outputPathPattern,
|
outputPathPattern,
|
||||||
new SimpleHash(root));
|
new SimpleHash(root));
|
||||||
}
|
}
|
||||||
|
@@ -37,7 +37,7 @@ import org.alfresco.repo.template.TemplateNode;
|
|||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.ScriptLocation;
|
import org.alfresco.service.cmr.repository.ScriptLocation;
|
||||||
import org.alfresco.service.cmr.repository.TemplateExtensionImplementation;
|
import org.alfresco.service.cmr.repository.TemplateProcessorExtension;
|
||||||
import org.alfresco.service.cmr.repository.TemplateImageResolver;
|
import org.alfresco.service.cmr.repository.TemplateImageResolver;
|
||||||
import org.alfresco.service.descriptor.DescriptorService;
|
import org.alfresco.service.descriptor.DescriptorService;
|
||||||
import org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication;
|
import org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication;
|
||||||
@@ -255,13 +255,13 @@ public abstract class AbstractWebScript implements WebScript
|
|||||||
NodeRef companyHome = scriptContext.getCompanyHome();
|
NodeRef companyHome = scriptContext.getCompanyHome();
|
||||||
if (companyHome != null)
|
if (companyHome != null)
|
||||||
{
|
{
|
||||||
model.put("companyhome", new TemplateNode(scriptContext.getCompanyHome(), serviceRegistry, tr));
|
model.put("companyhome", scriptContext.getCompanyHome());
|
||||||
}
|
}
|
||||||
NodeRef person = scriptContext.getPerson();
|
NodeRef person = scriptContext.getPerson();
|
||||||
if (person != null)
|
if (person != null)
|
||||||
{
|
{
|
||||||
model.put("person", new TemplateNode(person, serviceRegistry, tr));
|
model.put("person", person);
|
||||||
model.put("userhome", new TemplateNode(scriptContext.getUserHome(person), serviceRegistry, tr));
|
model.put("userhome", scriptContext.getUserHome(person));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,14 +275,6 @@ public abstract class AbstractWebScript implements WebScript
|
|||||||
model.put("absurl", new AbsoluteUrlMethod(req.getServerPath()));
|
model.put("absurl", new AbsoluteUrlMethod(req.getServerPath()));
|
||||||
model.put("date", new Date());
|
model.put("date", new Date());
|
||||||
|
|
||||||
// add the template extensions to the model
|
|
||||||
// the extensions include custom root helper objects and custom template method objects
|
|
||||||
for (TemplateExtensionImplementation ext : serviceRegistry.getTemplateService().getExtensions())
|
|
||||||
{
|
|
||||||
ext.setTemplateImageResolver(tr);
|
|
||||||
model.put(ext.getExtensionName(), ext);
|
|
||||||
}
|
|
||||||
|
|
||||||
// add custom model
|
// add custom model
|
||||||
if (customModel != null)
|
if (customModel != null)
|
||||||
{
|
{
|
||||||
|
@@ -26,7 +26,6 @@ package org.alfresco.web.ui.repo.component.template;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.repo.template.FreeMarkerProcessor;
|
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.TemplateImageResolver;
|
import org.alfresco.service.cmr.repository.TemplateImageResolver;
|
||||||
@@ -95,8 +94,8 @@ public class DefaultModelHelper
|
|||||||
NodeRef companyRootRef = new NodeRef(Repository.getStoreRef(), Application.getCompanyRootId());
|
NodeRef companyRootRef = new NodeRef(Repository.getStoreRef(), Application.getCompanyRootId());
|
||||||
NodeRef userRootRef = new NodeRef(Repository.getStoreRef(), user.getHomeSpaceId());
|
NodeRef userRootRef = new NodeRef(Repository.getStoreRef(), user.getHomeSpaceId());
|
||||||
|
|
||||||
return FreeMarkerProcessor.buildDefaultModel(
|
return services.getTemplateService().buildDefaultModel(
|
||||||
services, user.getPerson(), companyRootRef, userRootRef, template, resolver);
|
user.getPerson(), companyRootRef, userRootRef, template, resolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Template Image resolver helper */
|
/** Template Image resolver helper */
|
||||||
|
Reference in New Issue
Block a user