Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)

91561: Merged 5.0.N (5.0.1) to HEAD-BUG-FIX (5.1/Cloud)
      91503: Fix for MNT-12875 - Tags list in Repository view does not work when overridden repository root node using xpath syntax is used.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@94808 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2015-01-31 11:33:50 +00:00
parent 36ec97b170
commit af849d4521
5 changed files with 199 additions and 7 deletions

View File

@@ -18,16 +18,26 @@
*/
package org.alfresco.repo.jscript;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.alfresco.repo.nodelocator.CompanyHomeNodeLocator;
import org.alfresco.repo.nodelocator.NodeLocatorService;
import org.alfresco.repo.nodelocator.SharedHomeNodeLocator;
import org.alfresco.repo.nodelocator.SitesHomeNodeLocator;
import org.alfresco.repo.nodelocator.UserHomeNodeLocator;
import org.alfresco.repo.nodelocator.XPathNodeLocator;
import org.alfresco.repo.security.permissions.noop.PermissionServiceNOOPImpl;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.module.ModuleDetails;
import org.alfresco.service.cmr.module.ModuleService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.ScriptPagingDetails;
@@ -109,6 +119,71 @@ public class ScriptUtils extends BaseScopableProcessorExtension
return (ScriptNode)new ValueConverter().convertValueForScript(this.services, getScope(), null, nodeRef);
}
/**
* Use the Node Locator Service to find the given root node from a number of possible locator types.
* This method is responsible for determining the locator type and then calling the Service as the
* Service does not know how to guess which locator to use.
* <p>
* This service supports 'virtual' nodes including the following:
* <p>
* alfresco://company/home The Company Home root node
* alfresco://user/home The User Home node under Company Home
* alfresco://company/shared The Shared node under Company Home
* alfresco://sites/home The Sites home node under Company Home
* workspace://.../... Any standard NodeRef
* /app:company_home/cm:... XPath QName style node reference
*
* @param rootNode
*
* @return ScriptNode representing the node or null if not found
*/
public ScriptNode resolveNodeReference(final String reference)
{
if (reference == null)
{
throw new IllegalArgumentException("Node 'reference' argument is mandatory.");
}
final NodeLocatorService locatorService = this.services.getNodeLocatorService();
NodeRef nodeRef = null;
switch (reference)
{
case "alfresco://company/home":
nodeRef = locatorService.getNode(CompanyHomeNodeLocator.NAME, null, null);
break;
case "alfresco://user/home":
nodeRef = locatorService.getNode(UserHomeNodeLocator.NAME, null, null);
break;
case "alfresco://company/shared":
nodeRef = locatorService.getNode(SharedHomeNodeLocator.NAME, null, null);
break;
case "alfresco://sites/home":
nodeRef = locatorService.getNode(SitesHomeNodeLocator.NAME, null, null);
break;
default:
if (reference.indexOf("://") > 0)
{
NodeRef ref = new NodeRef(reference);
if (this.services.getNodeService().exists(ref) &&
this.services.getPermissionService().hasPermission(ref, PermissionService.READ) == AccessStatus.ALLOWED)
{
nodeRef = ref;
}
}
else if (reference.startsWith("/"))
{
final Map<String, Serializable> params = new HashMap<>(1, 1.0f);
params.put(XPathNodeLocator.QUERY_KEY, reference);
nodeRef = locatorService.getNode(XPathNodeLocator.NAME, null, params);
}
break;
}
return nodeRef != null ? (ScriptNode)new ValueConverter().convertValueForScript(this.services, getScope(), null, nodeRef) : null;
}
/**
* Gets a boolean value from a string
*