mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Performance improvements to generation of QNamePath for a script object
- the slowest part of the code is the Path.toString() - where it retrieves namespace prefixes for QName's from the DD (!) Execute Share Search REST API test: Before: ScriptNode.getQnamePath() - 74686ms (20% total CPU time) After: ScriptNode.getQnamePath() - 16345ms (5% total CPU time) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@47552 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -196,6 +196,7 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider
|
|||||||
private Boolean isLinkToContainer = null;
|
private Boolean isLinkToContainer = null;
|
||||||
private Boolean hasChildren = null;
|
private Boolean hasChildren = null;
|
||||||
private String displayPath = null;
|
private String displayPath = null;
|
||||||
|
private String qnamePath = null;
|
||||||
protected TemplateImageResolver imageResolver = null;
|
protected TemplateImageResolver imageResolver = null;
|
||||||
protected ScriptNode parent = null;
|
protected ScriptNode parent = null;
|
||||||
private ChildAssociationRef primaryParentAssoc = null;
|
private ChildAssociationRef primaryParentAssoc = null;
|
||||||
@@ -1169,7 +1170,39 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider
|
|||||||
*/
|
*/
|
||||||
public String getQnamePath()
|
public String getQnamePath()
|
||||||
{
|
{
|
||||||
return this.services.getNodeService().getPath(getNodeRef()).toPrefixString(this.services.getNamespaceService());
|
if (this.qnamePath == null)
|
||||||
|
{
|
||||||
|
final NamespaceService ns = this.services.getNamespaceService();
|
||||||
|
final Map<String, String> cache = new HashMap<String, String>();
|
||||||
|
final StringBuilder buf = new StringBuilder(128);
|
||||||
|
final Path path = this.services.getNodeService().getPath(getNodeRef());
|
||||||
|
for (final Path.Element e : path)
|
||||||
|
{
|
||||||
|
if (e instanceof Path.ChildAssocElement)
|
||||||
|
{
|
||||||
|
final QName qname = ((Path.ChildAssocElement)e).getRef().getQName();
|
||||||
|
if (qname != null)
|
||||||
|
{
|
||||||
|
String prefix = cache.get(qname.getNamespaceURI());
|
||||||
|
if (prefix == null)
|
||||||
|
{
|
||||||
|
// first request for this namespace prefix, get and cache result
|
||||||
|
Collection<String> prefixes = ns.getPrefixes(qname.getNamespaceURI());
|
||||||
|
prefix = prefixes.size() != 0 ? prefixes.iterator().next() : "";
|
||||||
|
cache.put(qname.getNamespaceURI(), prefix);
|
||||||
|
}
|
||||||
|
buf.append('/').append(prefix).append(':').append(ISO9075.encode(qname.getLocalName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buf.append('/').append(e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.qnamePath = buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.qnamePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1177,13 +1210,13 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider
|
|||||||
*/
|
*/
|
||||||
public String getDisplayPath()
|
public String getDisplayPath()
|
||||||
{
|
{
|
||||||
if (displayPath == null)
|
if (this.displayPath == null)
|
||||||
{
|
{
|
||||||
displayPath = this.nodeService.getPath(this.nodeRef).toDisplayPath(
|
this.displayPath = this.nodeService.getPath(this.nodeRef).toDisplayPath(
|
||||||
this.nodeService, this.services.getPermissionService());
|
this.nodeService, this.services.getPermissionService());
|
||||||
}
|
}
|
||||||
|
|
||||||
return displayPath;
|
return this.displayPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3399,6 +3432,7 @@ public class ScriptNode implements Scopeable, NamespacePrefixResolverProvider
|
|||||||
this.hasChildren = null;
|
this.hasChildren = null;
|
||||||
this.parentAssocs = null;
|
this.parentAssocs = null;
|
||||||
this.displayPath = null;
|
this.displayPath = null;
|
||||||
|
this.qnamePath = null;
|
||||||
this.isDocument = null;
|
this.isDocument = null;
|
||||||
this.isContainer = null;
|
this.isContainer = null;
|
||||||
this.parent = null;
|
this.parent = null;
|
||||||
|
Reference in New Issue
Block a user