Dictionary optimisation: improve performance when getting sub classes and property defs

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6825 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2007-09-19 11:47:29 +00:00
parent a0c3970d65
commit b56284a70a

View File

@@ -299,21 +299,13 @@ public class DictionaryWebService extends AbstractWebService implements Dictiona
private void getSubClasses(org.alfresco.service.cmr.dictionary.ClassDefinition classDef, Set<org.alfresco.service.cmr.dictionary.ClassDefinition> subClasses, boolean recurse) private void getSubClasses(org.alfresco.service.cmr.dictionary.ClassDefinition classDef, Set<org.alfresco.service.cmr.dictionary.ClassDefinition> subClasses, boolean recurse)
{ {
QName superClass = classDef.getName(); QName superClass = classDef.getName();
Collection<QName> candidates = (classDef.isAspect()) ? dictionaryService.getAllAspects() : dictionaryService.getAllTypes();
// Note: this is the brute force way of finding sub-classes Collection<QName> subClassNames = (classDef.isAspect()) ? dictionaryService.getSubAspects(superClass, recurse) : dictionaryService.getSubTypes(superClass, recurse);
// TODO: Add support into Dictionary for retrieving sub-classes
for (QName candidate : candidates) for (QName subClass : subClassNames)
{ {
if (dictionaryService.isSubClass(candidate, superClass) && !candidate.equals(superClass)) org.alfresco.service.cmr.dictionary.ClassDefinition subClassDef = dictionaryService.getClass(subClass);
{
org.alfresco.service.cmr.dictionary.ClassDefinition subClassDef = dictionaryService.getClass(candidate);
subClasses.add(subClassDef); subClasses.add(subClassDef);
if (recurse)
{
getSubClasses(subClassDef, subClasses, recurse);
}
}
} }
} }