diff --git a/source/java/org/alfresco/repo/jscript/ScriptNode.java b/source/java/org/alfresco/repo/jscript/ScriptNode.java
index 536fc23984..e8e861b510 100644
--- a/source/java/org/alfresco/repo/jscript/ScriptNode.java
+++ b/source/java/org/alfresco/repo/jscript/ScriptNode.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2014 Alfresco Software Limited.
+ * Copyright (C) 2005-2016 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -31,6 +31,7 @@ import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
@@ -45,6 +46,7 @@ import java.util.StringTokenizer;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
+import org.alfresco.opencmis.CMISConnector;
import org.alfresco.query.PagingRequest;
import org.alfresco.query.PagingResults;
import org.alfresco.repo.action.executer.TransformActionExecuter;
@@ -1536,6 +1538,31 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider
return Context.getCurrentContext().newArray(this.scope, retrieveAllSetPermissions(false, true));
}
+ /**
+ * @return Sorted list of AccessPermission
based on CMISConnector.AccessPermissionComparator
+ * and AccessStatus
of the permission for an authority.
+ */
+ public static List getSortedACLs(Set acls)
+ {
+ ArrayList ordered = new ArrayList(acls);
+ Map deDuplicatedPermissions = new HashMap(acls.size());
+ Collections.sort(ordered, new CMISConnector.AccessPermissionComparator());
+ for (AccessPermission current : ordered)
+ {
+ String composedKey = current.getAuthority() + current.getPermission();
+ if (current.getAccessStatus() == AccessStatus.ALLOWED)
+ {
+ deDuplicatedPermissions.put(composedKey, current);
+ }
+ else if (current.getAccessStatus() == AccessStatus.DENIED)
+ {
+ deDuplicatedPermissions.remove(composedKey);
+ }
+ }
+
+ return new ArrayList(deDuplicatedPermissions.values());
+ }
+
/**
* Helper to construct the response object for the various getPermissions() calls.
*
@@ -1549,7 +1576,8 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider
{
Set acls = this.services.getPermissionService().getAllSetPermissions(getNodeRef());
List