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