diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-audit-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-audit-context.xml
new file mode 100644
index 0000000000..d96c8fbe13
--- /dev/null
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-audit-context.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml
index c9da125e11..47d20b61d5 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml
@@ -28,12 +28,6 @@
parent="rmBaseCapability"
class="org.alfresco.module.org_alfresco_module_rm.capability.declarative.CompositeCapability" />
-
-
-
-
-
@@ -148,18 +142,6 @@
-
-
-
-
-
-
-
-
-
-
@@ -184,19 +166,7 @@
parent="declarativeCapability">
-
-
-
-
-
-
-
-
-
-
-
+
@@ -253,12 +223,6 @@
-
-
-
-
-
@@ -327,6 +291,9 @@
+
+
+
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
index db218e3027..1c4208ccef 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml
@@ -225,6 +225,15 @@
+
+
+
+
+
+
+
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/capability/capabilities.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/capability/capabilities.get.desc.xml
new file mode 100644
index 0000000000..cfd9beacc4
--- /dev/null
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/capability/capabilities.get.desc.xml
@@ -0,0 +1,10 @@
+
+ Records Management Capabilities
+ Get the list of capabilities available to the current user on the given node.
+ /api/node/{store_type}/{store_id}/{id}/capabilities?includeAll={includeAll?}
+ /api/capabilities?includeAll={includeAll?}
+ argument
+ user
+ required
+ internal
+
\ No newline at end of file
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/capability/capabilities.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/capability/capabilities.get.json.ftl
new file mode 100644
index 0000000000..857485dfce
--- /dev/null
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/capability/capabilities.get.json.ftl
@@ -0,0 +1,11 @@
+{
+ "data" :
+ {
+ "capabilities" :
+ [
+ <#list capabilities as capability>
+ "${capability}"<#if capability_has_next>,#if>
+ #list>
+ ]
+ }
+}
\ No newline at end of file
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/capability/CapabilitiesGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/capability/CapabilitiesGet.java
new file mode 100644
index 0000000000..86612fb061
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/capability/CapabilitiesGet.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2005-2011 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.module.org_alfresco_module_rm.script.capability;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService;
+import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
+import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.StoreRef;
+import org.alfresco.service.cmr.security.AccessStatus;
+import org.springframework.extensions.webscripts.Cache;
+import org.springframework.extensions.webscripts.DeclarativeWebScript;
+import org.springframework.extensions.webscripts.Status;
+import org.springframework.extensions.webscripts.WebScriptException;
+import org.springframework.extensions.webscripts.WebScriptRequest;
+
+public class CapabilitiesGet extends DeclarativeWebScript
+{
+ private RecordsManagementService recordsManagementService;
+
+ private CapabilityService capabilityService;
+
+ public void setRecordsManagementService(RecordsManagementService recordsManagementService)
+ {
+ this.recordsManagementService = recordsManagementService;
+ }
+
+ public void setCapabilityService(CapabilityService capabilityService)
+ {
+ this.capabilityService = capabilityService;
+ }
+
+ /**
+ * @see org.alfresco.repo.web.scripts.content.StreamContent#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, org.springframework.extensions.webscripts.Status, org.springframework.extensions.webscripts.Cache)
+ */
+ @Override
+ protected Map executeImpl(WebScriptRequest req, Status status, Cache cache)
+ {
+ Map templateVars = req.getServiceMatch().getTemplateVars();
+ String storeType = templateVars.get("store_type");
+ String storeId = templateVars.get("store_id");
+ String nodeId = templateVars.get("id");
+
+ boolean includePrivate = false;
+ String includePrivateString = req.getParameter("includeAll");
+ if (includePrivateString != null)
+ {
+ includePrivate = Boolean.parseBoolean(includePrivateString);
+ }
+
+ NodeRef nodeRef = null;
+ if (storeType != null && storeId != null && nodeId != null)
+ {
+ nodeRef = new NodeRef(new StoreRef(storeType, storeId), nodeId);
+ }
+ else
+ {
+ // we are talking about the file plan node
+ // TODO we are making the assumption there is only one file plan here!
+ List filePlans = recordsManagementService.getFilePlans();
+ if (filePlans.isEmpty() == true)
+ {
+ throw new WebScriptException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "No file plan node has been found.");
+ }
+ else if (filePlans.size() != 1)
+ {
+ throw new WebScriptException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "More than one file plan has been found.");
+ }
+ nodeRef = filePlans.get(0);
+ }
+
+ Map map = capabilityService.getCapabilitiesAccessState(nodeRef, includePrivate);
+ List list = new ArrayList(map.size());
+ for (Map.Entry entry : map.entrySet())
+ {
+ AccessStatus accessStatus = entry.getValue();
+ if (AccessStatus.DENIED.equals(accessStatus) == false)
+ {
+ Capability capability = entry.getKey();
+ list.add(capability.getName());
+ }
+ }
+
+ Map model = new HashMap(1);
+ model.put("capabilities", list);
+ return model;
+ }
+}
\ No newline at end of file