mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -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
|
||||
*
|
||||
|
Reference in New Issue
Block a user