From d9af7b3994bff0be1aed832e0f786d6c6db43144 Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Mon, 4 Mar 2013 14:44:47 +0000 Subject: [PATCH] Added helper to ScriptNode to allow scripts to retrieve the short prefix qname version of the list of Aspects for a node, avoiding further processing later. Modified treenode.get.js to use the faster helper: Test 8x threads x25 repeats - average response time: Before: 280ms After: 170ms git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@47518 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/jscript/ScriptNode.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/source/java/org/alfresco/repo/jscript/ScriptNode.java b/source/java/org/alfresco/repo/jscript/ScriptNode.java index e15e4ac513..15ee8ead49 100644 --- a/source/java/org/alfresco/repo/jscript/ScriptNode.java +++ b/source/java/org/alfresco/repo/jscript/ScriptNode.java @@ -1103,7 +1103,7 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider } /** - * @return The array of aspects applied to this node + * @return The array of aspects applied to this node as fully qualified qname strings */ public Scriptable getAspects() { @@ -1117,6 +1117,31 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider return Context.getCurrentContext().newArray(this.scope, result); } + /** + * @return The array of aspects applied to this node as short prefix qname strings + */ + public Scriptable getAspectsShort() + { + final NamespaceService ns = this.services.getNamespaceService(); + final Map cache = new HashMap(); + final Set aspects = getAspectsSet(); + final Object[] result = new Object[aspects.size()]; + int count = 0; + for (final QName qname : aspects) + { + String prefix = cache.get(qname.getNamespaceURI()); + if (prefix == null) + { + // first request for this namespace prefix, get and cache result + Collection prefixes = ns.getPrefixes(qname.getNamespaceURI()); + prefix = prefixes.size() != 0 ? prefixes.iterator().next() : ""; + cache.put(qname.getNamespaceURI(), prefix); + } + result[count++] = prefix + QName.NAMESPACE_PREFIX + qname.getLocalName(); + } + return Context.getCurrentContext().newArray(this.scope, result); + } + /** * @param aspect The aspect name to test for (fully qualified or short-name form) * @return true if the node has the aspect false otherwise