diff --git a/source/java/org/alfresco/repo/imap/AbstractMimeMessage.java b/source/java/org/alfresco/repo/imap/AbstractMimeMessage.java index 0061043aa1..a6ff8488d0 100644 --- a/source/java/org/alfresco/repo/imap/AbstractMimeMessage.java +++ b/source/java/org/alfresco/repo/imap/AbstractMimeMessage.java @@ -31,16 +31,13 @@ import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.MimeMessage; -import org.alfresco.model.ContentModel; import org.alfresco.repo.imap.ImapService.EmailBodyFormat; -import org.alfresco.repo.site.SiteModel; import org.alfresco.repo.template.TemplateNode; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -193,7 +190,7 @@ public abstract class AbstractMimeMessage extends MimeMessage model.put("alfTicket", new String(serviceRegistry.getAuthenticationService().getCurrentTicket())); if (isMessageInSitesLibrary) { - String pathFromSites = getPathFromSites(parent); + String pathFromSites = imapService.getPathFromSites(parent); StringBuilder parsedPath = new StringBuilder(); String[] pathParts = pathFromSites.split("/"); if (pathParts.length > 2) @@ -216,21 +213,6 @@ public abstract class AbstractMimeMessage extends MimeMessage return model; } - private String getPathFromSites(NodeRef ref) - { - NodeService nodeService = serviceRegistry.getNodeService(); - String name = ((String) nodeService.getProperty(ref, ContentModel.PROP_NAME)).toLowerCase(); - if (nodeService.getType(ref).equals(SiteModel.TYPE_SITE)) - { - return name; - } - else - { - NodeRef parent = nodeService.getPrimaryParent(ref).getParentRef(); - return getPathFromSites(parent) + "/" + name; - } - } - protected void updateMessageID() throws MessagingException { setHeader("Message-ID", "<" + this.messageFileInfo.getNodeRef().getId() + DEFAULT_SUFFIX + ">"); diff --git a/source/java/org/alfresco/repo/imap/ImapService.java b/source/java/org/alfresco/repo/imap/ImapService.java index b481a657dc..ad58e0fb8f 100644 --- a/source/java/org/alfresco/repo/imap/ImapService.java +++ b/source/java/org/alfresco/repo/imap/ImapService.java @@ -333,4 +333,10 @@ public interface ImapService this.search = search; } } + + /** + * @param nodeRef + * @return path for node relatively to site root + */ + public String getPathFromSites(NodeRef nodeRef); } diff --git a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java index 1a5c0bf58f..41ed28891c 100644 --- a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java +++ b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java @@ -1902,31 +1902,40 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea /** * Return true if provided nodeRef is in Sites/.../documentlibrary */ - public boolean isNodeInSitesLibrary(NodeRef nodeRef) + public boolean isNodeInSitesLibrary(final NodeRef inputNodeRef) { - boolean isInDocLibrary = false; - NodeRef parent = nodeService.getPrimaryParent(nodeRef).getParentRef(); - while (parent != null && !nodeService.getType(parent).equals(SiteModel.TYPE_SITE)) + return doAsSystem(new RunAsWork() { - String parentName = (String) nodeService.getProperty(parent, ContentModel.PROP_NAME); - if (parentName.equalsIgnoreCase("documentlibrary")) + @Override + public Boolean doWork() throws Exception { - isInDocLibrary = true; + NodeRef nodeRef = inputNodeRef; + boolean isInDocLibrary = false; + NodeRef parent = nodeService.getPrimaryParent(nodeRef).getParentRef(); + while (parent != null && !nodeService.getType(parent).equals(SiteModel.TYPE_SITE)) + { + String parentName = (String) nodeService.getProperty(parent, ContentModel.PROP_NAME); + if (parentName.equalsIgnoreCase("documentlibrary")) + { + isInDocLibrary = true; + } + nodeRef = parent; + if (nodeService.getPrimaryParent(nodeRef) != null) + { + parent = nodeService.getPrimaryParent(nodeRef).getParentRef(); + } + } + if (parent == null) + { + return false; + } + else + { + return nodeService.getType(parent).equals(SiteModel.TYPE_SITE) && isInDocLibrary; + } } - nodeRef = parent; - if (nodeService.getPrimaryParent(nodeRef) != null) - { - parent = nodeService.getPrimaryParent(nodeRef).getParentRef(); - } - } - if (parent == null) - { - return false; - } - else - { - return nodeService.getType(parent).equals(SiteModel.TYPE_SITE) && isInDocLibrary; - } + }); + } public void setNamespaceService(NamespaceService namespaceService) @@ -2008,4 +2017,27 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea return message; } } + + @Override + public String getPathFromSites(final NodeRef ref) + { + return doAsSystem(new RunAsWork() + { + @Override + public String doWork() throws Exception + { + String name = ((String) nodeService.getProperty(ref, ContentModel.PROP_NAME)).toLowerCase(); + if (nodeService.getType(ref).equals(SiteModel.TYPE_SITE)) + { + return name; + } + else + { + NodeRef parent = nodeService.getPrimaryParent(ref).getParentRef(); + return getPathFromSites(parent) + "/" + name; + } + } + }); + } + } \ No newline at end of file