diff --git a/source/java/org/alfresco/repo/template/AVMTemplateNode.java b/source/java/org/alfresco/repo/template/AVMTemplateNode.java index df84af7184..c8e94176ce 100644 --- a/source/java/org/alfresco/repo/template/AVMTemplateNode.java +++ b/source/java/org/alfresco/repo/template/AVMTemplateNode.java @@ -28,8 +28,10 @@ import java.io.Serializable; import java.io.StringReader; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.alfresco.model.WCMModel; import org.alfresco.repo.avm.AVMNodeConverter; @@ -109,7 +111,7 @@ public class AVMTemplateNode extends BasePermissionsNode Pair pair = AVMNodeConverter.ToAVMVersionPath(nodeRef); this.services = services; this.imageResolver = resolver; - init(pair.getFirst(), pair.getSecond()); + init(pair.getFirst(), pair.getSecond(), null); } /** @@ -135,18 +137,48 @@ public class AVMTemplateNode extends BasePermissionsNode this.nodeRef = AVMNodeConverter.ToNodeRef(version, path); this.services = services; this.imageResolver = resolver; - init(version, path); + init(version, path, null); } - private void init(int version, String path) + /** + * Constructor + * + * @param descriptor AVMNodeDescriptior + * @param services + * @param resolver + */ + public AVMTemplateNode(AVMNodeDescriptor descriptor, ServiceRegistry services, TemplateImageResolver resolver) + { + if (descriptor == null) + { + throw new IllegalArgumentException("AVMNodeDescriptor must be supplied."); + } + + if (services == null) + { + throw new IllegalArgumentException("The ServiceRegistry must be supplied."); + } + + this.version = -1; + this.path = descriptor.getPath(); + this.nodeRef = AVMNodeConverter.ToNodeRef(this.version, this.path); + this.services = services; + this.imageResolver = resolver; + init(this.version, this.path, descriptor); + } + + private void init(int version, String path, AVMNodeDescriptor descriptor) { this.version = version; this.path = path; this.properties = new QNameMap(this.services.getNamespaceService()); - AVMNodeDescriptor descriptor = this.services.getAVMService().lookup(version, path, true); if (descriptor == null) { - throw new IllegalArgumentException("Invalid node specified: " + nodeRef.toString()); + descriptor = this.services.getAVMService().lookup(version, path, true); + if (descriptor == null) + { + throw new IllegalArgumentException("Invalid node specified: " + nodeRef.toString()); + } } this.avmRef = descriptor; this.deleted = descriptor.isDeleted(); @@ -341,6 +373,21 @@ public class AVMTemplateNode extends BasePermissionsNode return this.properties; } + /** + * @return The list of aspects applied to this node + */ + @Override + public Set getAspects() + { + if (this.aspects == null) + { + this.aspects = new HashSet(); + this.aspects.addAll(this.services.getAVMService().getAspects(this.version, this.path)); + } + + return this.aspects; + } + // ------------------------------------------------------------------------------ // Audit API diff --git a/source/java/org/alfresco/repo/template/BaseContentNode.java b/source/java/org/alfresco/repo/template/BaseContentNode.java index 1cfa31ba64..6d78f059bd 100644 --- a/source/java/org/alfresco/repo/template/BaseContentNode.java +++ b/source/java/org/alfresco/repo/template/BaseContentNode.java @@ -66,7 +66,7 @@ public abstract class BaseContentNode implements TemplateContent protected ServiceRegistry services = null; protected TemplateImageResolver imageResolver = null; - private Set aspects = null; + protected Set aspects = null; private String displayPath = null; private Boolean isDocument = null; @@ -285,7 +285,7 @@ public abstract class BaseContentNode implements TemplateContent { if (this.aspects == null) { - this.aspects = this.services.getNodeService().getAspects(getNodeRef()); + getAspects(); } if (aspect.startsWith(NAMESPACE_BEGIN))