package org.alfresco.repo.virtual.config; import java.io.Serializable; import javax.transaction.UserTransaction; import junit.framework.TestCase; import org.alfresco.model.ContentModel; import org.alfresco.repo.virtual.VirtualizationTest; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ApplicationContextHelper; import org.junit.Test; import org.springframework.context.ApplicationContext; public class NodeRefPathExpressionTest extends TestCase implements VirtualizationTest { private static final String NODE_REF_PATH_EXPRESSION_FACTORY_ID = "config.NodeRefPathExpressionFactory"; protected static final ApplicationContext ctx = ApplicationContextHelper.getApplicationContext(CONFIG_LOCATIONS); private UserTransaction txn; private ServiceRegistry serviceRegistry; private NodeService nodeService; private NodeRefPathExpressionFactory nodeRefPathExpressionFactory; @Override protected void setUp() throws Exception { super.setUp(); serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); nodeService = (NodeService) ctx.getBean("nodeService"); nodeRefPathExpressionFactory = (NodeRefPathExpressionFactory) ctx.getBean(NODE_REF_PATH_EXPRESSION_FACTORY_ID); TransactionService transactionService = serviceRegistry.getTransactionService(); // start the transaction txn = transactionService.getUserTransaction(); txn.begin(); } @Override protected void tearDown() throws Exception { txn.rollback(); super.tearDown(); } protected void assertResolvablePath(String path, String toName) { NodeRefPathExpression pathExpression = nodeRefPathExpressionFactory.createInstance(); pathExpression.setPath(path); NodeRef nodeRef = pathExpression.resolve(); assertNotNull(nodeRef); Serializable theName = nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); assertEquals("Unexpected name for path " + pathExpression, toName, theName); } @Test public void testResolveNamePath() throws Exception { assertResolvablePath("/Data Dictionary", "Data Dictionary"); assertResolvablePath("/Data Dictionary//Messages", "Messages"); assertResolvablePath("", "Company Home"); assertResolvablePath("//", "Company Home"); } @Test public void testResolveQNamePath() throws Exception { assertResolvablePath("", "Company Home"); assertResolvablePath("app:dictionary", "Data Dictionary"); assertResolvablePath("/app:dictionary/app:messages", "Messages"); } @Test public void testNonSingleton() throws Exception { NodeRefPathExpression spe1 = nodeRefPathExpressionFactory.createInstance(); NodeRefPathExpression spe2 = nodeRefPathExpressionFactory.createInstance(); assertNotSame(spe1, spe2); spe1.setPath("Data Dictionary"); spe2.setPath("/Data Dictionary//Messages"); NodeRef nr = spe1.resolve(); Serializable theName = nodeService.getProperty(nr, ContentModel.PROP_NAME); assertEquals("Data Dictionary", theName); } }