mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-08 14:51:49 +00:00
REPO-1110 - Apply patch provided in ALF-21632 (FreeMarker performance improvement)
ALF-21632 - FreeMarker API node.childByNamePath can be very slow - Added test cases git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@132561 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -25,31 +25,36 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.template;
|
package org.alfresco.repo.template;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.StringWriter;
|
import java.io.Serializable;
|
||||||
import java.util.HashMap;
|
import java.io.StringWriter;
|
||||||
import java.util.Map;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
import org.alfresco.repo.dictionary.DictionaryComponent;
|
|
||||||
import org.alfresco.repo.dictionary.DictionaryDAO;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.dictionary.M2Model;
|
import org.alfresco.repo.dictionary.DictionaryComponent;
|
||||||
import org.alfresco.repo.node.BaseNodeServiceTest;
|
import org.alfresco.repo.dictionary.DictionaryDAO;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.dictionary.M2Model;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.node.BaseNodeServiceTest;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
import org.alfresco.service.cmr.model.FileFolderService;
|
||||||
import org.alfresco.service.cmr.repository.TemplateException;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.TemplateService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.service.cmr.repository.TemplateException;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.service.cmr.repository.TemplateService;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.springframework.extensions.surf.util.I18NUtil;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
|
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||||
|
import org.alfresco.util.ApplicationContextHelper;
|
||||||
|
import org.junit.experimental.categories.Category;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.extensions.surf.util.I18NUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Kevin Roast
|
* @author Kevin Roast
|
||||||
@@ -62,7 +67,7 @@ public class TemplateServiceImplTest extends TestCase
|
|||||||
private NodeRef root_node;
|
private NodeRef root_node;
|
||||||
|
|
||||||
private TemplateService templateService;
|
private TemplateService templateService;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
private TransactionService transactionService;
|
private TransactionService transactionService;
|
||||||
private ServiceRegistry serviceRegistry;
|
private ServiceRegistry serviceRegistry;
|
||||||
private AuthenticationComponent authenticationComponent;
|
private AuthenticationComponent authenticationComponent;
|
||||||
@@ -108,7 +113,29 @@ public class TemplateServiceImplTest extends TestCase
|
|||||||
public Object execute() throws Exception
|
public Object execute() throws Exception
|
||||||
{
|
{
|
||||||
StoreRef store = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "template_" + System.currentTimeMillis());
|
StoreRef store = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "template_" + System.currentTimeMillis());
|
||||||
root_node = nodeService.getRootNode(store);
|
root_node = nodeService.getRootNode(store);
|
||||||
|
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(11);
|
||||||
|
properties.put(ContentModel.PROP_NAME, (Serializable) "subFolder");
|
||||||
|
NodeRef subFolderRef = nodeService.createNode(
|
||||||
|
root_node,
|
||||||
|
ContentModel.ASSOC_CHILDREN,
|
||||||
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subFolder")),
|
||||||
|
ContentModel.TYPE_FOLDER,
|
||||||
|
properties).getChildRef();
|
||||||
|
properties.put(ContentModel.PROP_NAME, (Serializable) "subSubFolder");
|
||||||
|
NodeRef subSubFolderRef =nodeService.createNode(
|
||||||
|
subFolderRef,
|
||||||
|
ContentModel.ASSOC_CONTAINS,
|
||||||
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subSubFolder")),
|
||||||
|
ContentModel.TYPE_FOLDER,
|
||||||
|
properties).getChildRef();
|
||||||
|
properties.put(ContentModel.PROP_NAME, (Serializable) "subSubSubFolder");
|
||||||
|
nodeService.createNode(
|
||||||
|
subSubFolderRef,
|
||||||
|
ContentModel.ASSOC_CONTAINS,
|
||||||
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subSubSubFolder")),
|
||||||
|
ContentModel.TYPE_FOLDER,
|
||||||
|
properties);
|
||||||
BaseNodeServiceTest.buildNodeGraph(nodeService, root_node);
|
BaseNodeServiceTest.buildNodeGraph(nodeService, root_node);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -139,7 +166,11 @@ public class TemplateServiceImplTest extends TestCase
|
|||||||
String output = templateService.processTemplate("freemarker", TEMPLATE_1, model);
|
String output = templateService.processTemplate("freemarker", TEMPLATE_1, model);
|
||||||
|
|
||||||
// check template contains the expected output
|
// check template contains the expected output
|
||||||
assertTrue( (output.indexOf(root_node.getId()) != -1) );
|
assertTrue("Cannot find root-node-id", (output.indexOf(root_node.getId()) != -1) );
|
||||||
|
assertTrue("Cannot resolve subFolder properly", (output.indexOf("root.childByNamePath[\"subFolder\"].name=subFolder") != -1) );
|
||||||
|
assertTrue("Cannot resolve subSubFolder properly", (output.indexOf("root.childByNamePath[\"subFolder/subSubFolder\"].name=subSubFolder") != -1) );
|
||||||
|
assertTrue("Cannot resolve subSubSubFolder properly", (output.indexOf("root.childByNamePath[\"subFolder/subSubFolder/subSubSubFolder\"].name=subSubSubFolder") != -1) );
|
||||||
|
assertTrue("Cannot resolve subSubSubFolder with enhancement properly", (output.indexOf("root.childByNamePath[\"subFolder\"].childByNamePath[\"subSubFolder/subSubSubFolder\"].name=subSubSubFolder") != -1) );
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -51,4 +51,18 @@ ${root.icon32}<br>
|
|||||||
${child.name}
|
${child.name}
|
||||||
</#list>
|
</#list>
|
||||||
|
|
||||||
|
<#-- Test childByNamePath -->
|
||||||
|
root.childByNamePath["subFolder"].name=${root.childByNamePath["subFolder"].name}
|
||||||
|
root.childByNamePath["/subFolder"].name=${root.childByNamePath["/subFolder"].name}
|
||||||
|
root.childByNamePath["subFolder/"].name=${root.childByNamePath["subFolder/"].name}
|
||||||
|
root.childByNamePath["/subFolder/"].name=${root.childByNamePath["/subFolder/"].name}
|
||||||
|
root.childByNamePath["subFolder/subSubFolder"].name=${root.childByNamePath["subFolder/subSubFolder"].name}
|
||||||
|
root.childByNamePath["/subFolder/subSubFolder"].name=${root.childByNamePath["/subFolder/subSubFolder"].name}
|
||||||
|
root.childByNamePath["subFolder/subSubFolder/"].name=${root.childByNamePath["subFolder/subSubFolder/"].name}
|
||||||
|
root.childByNamePath["/subFolder/subSubFolder/"].name=${root.childByNamePath["/subFolder/subSubFolder/"].name}
|
||||||
|
root.childByNamePath["subFolder/subSubFolder/subSubSubFolder"].name=${root.childByNamePath["subFolder/subSubFolder/subSubSubFolder"].name}
|
||||||
|
root.childByNamePath["subFolder"].childByNamePath["subSubFolder"].name=${root.childByNamePath["subFolder"].childByNamePath["subSubFolder"].name}
|
||||||
|
root.childByNamePath["subFolder"].childByNamePath["subSubFolder/subSubSubFolder"].name=${root.childByNamePath["subFolder"].childByNamePath["subSubFolder/subSubSubFolder"].name}
|
||||||
|
root.childByNamePath["subFolder/subSubFolder"].childByNamePath["subSubSubFolder"].name=${root.childByNamePath["subFolder/subSubFolder"].childByNamePath["subSubSubFolder"].name}
|
||||||
|
|
||||||
<h6>End Test Template 1</h6>
|
<h6>End Test Template 1</h6>
|
||||||
|
Reference in New Issue
Block a user