Merge DEV to HEAD

19904 : ALF-2126 - IMAP extremely slow (read: unusable) if messages are uploaded to server

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19915 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2010-04-20 13:05:05 +00:00
parent 4d60018f0c
commit b53c4f4fae

View File

@@ -33,7 +33,6 @@ import javax.mail.Flags;
import javax.mail.Flags.Flag; import javax.mail.Flags.Flag;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.springframework.extensions.surf.util.I18NUtil;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.model.ImapModel; import org.alfresco.model.ImapModel;
import org.alfresco.repo.admin.SysAdminParams; import org.alfresco.repo.admin.SysAdminParams;
@@ -55,13 +54,14 @@ import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteInfo;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.springframework.extensions.surf.util.AbstractLifecycleBean;
import org.alfresco.util.PropertyCheck; import org.alfresco.util.PropertyCheck;
import org.alfresco.util.Utf7; import org.alfresco.util.Utf7;
import org.alfresco.util.config.RepositoryFolderConfigBean; import org.alfresco.util.config.RepositoryFolderConfigBean;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
import org.springframework.extensions.surf.util.AbstractLifecycleBean;
import org.springframework.extensions.surf.util.I18NUtil;
/** /**
* @author Dmitry Vaserin * @author Dmitry Vaserin
@@ -552,15 +552,23 @@ public class ImapServiceImpl implements ImapService
if (logger.isDebugEnabled()) if (logger.isDebugEnabled())
{ {
logger.debug("Processing of " + folderNames[i]); logger.debug("Processing of " + folderNames[i]);
}
NodeRef targetNode = nodeService.getChildByName(nodeRef, ContentModel.ASSOC_CONTAINS, folderNames[i]);
if (targetNode == null)
{
List<FileInfo> folderList = searchFolders(nodeRef, folderNames[i], false, viewMode);
if (folderList != null && !folderList.isEmpty() && folderList.get(0) != null)
{
targetNode = folderList.get(0).getNodeRef();
}
} }
List<FileInfo> folderList = searchFolders(nodeRef, folderNames[i], false, viewMode); if (targetNode == null)
if (folderList.isEmpty())
{ {
return new AlfrescoImapFolder(user.getQualifiedMailboxName(), serviceRegistry); return new AlfrescoImapFolder(user.getQualifiedMailboxName(), serviceRegistry);
} }
FileInfo folderFileInfo = folderList.get(0); // we need the only one
if (i == (folderNames.length - 1)) // is last if (i == (folderNames.length - 1)) // is last
{ {
FileInfo folderFileInfo = fileFolderService.getFileInfo(targetNode);
return new AlfrescoImapFolder( return new AlfrescoImapFolder(
user.getQualifiedMailboxName(), user.getQualifiedMailboxName(),
folderFileInfo, folderFileInfo,
@@ -573,7 +581,7 @@ public class ImapServiceImpl implements ImapService
} }
else else
{ {
nodeRef = folderFileInfo.getNodeRef(); // next parent nodeRef = targetNode; // next parent
} }
} }
@@ -591,7 +599,13 @@ public class ImapServiceImpl implements ImapService
*/ */
public List<FileInfo> searchFolders(NodeRef contextNodeRef, String namePattern, boolean includeSubFolders, ImapViewMode viewMode) public List<FileInfo> searchFolders(NodeRef contextNodeRef, String namePattern, boolean includeSubFolders, ImapViewMode viewMode)
{ {
List<FileInfo> result = fileFolderService.search(contextNodeRef, namePattern, false, true, includeSubFolders); if (logger.isDebugEnabled())
{
logger.debug("Search folders namePattern" + namePattern);
}
List<FileInfo> searchResult = fileFolderService.search(contextNodeRef, namePattern, false, true, includeSubFolders);
Set<FileInfo> result = new HashSet<FileInfo>(searchResult);
if (viewMode == ImapViewMode.VIRTUAL || viewMode == ImapViewMode.MIXED) if (viewMode == ImapViewMode.VIRTUAL || viewMode == ImapViewMode.MIXED)
{ {
List<SiteInfo> nonFavSites = getNonFavouriteSites(getCurrentUser()); List<SiteInfo> nonFavSites = getNonFavouriteSites(getCurrentUser());
@@ -633,6 +647,11 @@ public class ImapServiceImpl implements ImapService
logger.warn("Root sites folder was deleted."); logger.warn("Root sites folder was deleted.");
} }
} }
if (logger.isDebugEnabled())
{
logger.debug("Search folders return ");
}
return res; return res;
} }
@@ -646,7 +665,12 @@ public class ImapServiceImpl implements ImapService
} }
} }
return result;
if (logger.isDebugEnabled())
{
logger.debug("Search folders return at end");
}
return new ArrayList<FileInfo>(result);
} }
/** /**
@@ -660,7 +684,20 @@ public class ImapServiceImpl implements ImapService
*/ */
public List<FileInfo> searchFiles(NodeRef contextNodeRef, String namePattern, boolean includeSubFolders) public List<FileInfo> searchFiles(NodeRef contextNodeRef, String namePattern, boolean includeSubFolders)
{ {
return fileFolderService.search(contextNodeRef, namePattern, true, false, includeSubFolders);
if (logger.isDebugEnabled())
{
logger.debug("Search files namePattern," + contextNodeRef + ", " + namePattern + ", " + includeSubFolders);
}
List<FileInfo> files = fileFolderService.search(contextNodeRef, namePattern, true, false, includeSubFolders);
if (logger.isDebugEnabled())
{
logger.debug("Search files return");
}
return files;
} }
/** /**
@@ -674,6 +711,11 @@ public class ImapServiceImpl implements ImapService
*/ */
public List<FileInfo> searchMails(NodeRef contextNodeRef, String namePattern, ImapViewMode viewMode, boolean includeSubFolders) public List<FileInfo> searchMails(NodeRef contextNodeRef, String namePattern, ImapViewMode viewMode, boolean includeSubFolders)
{ {
if (logger.isDebugEnabled())
{
logger.debug("Search mails namePattern," + contextNodeRef + ", " + namePattern + ", " + viewMode + ", " + includeSubFolders);
}
List<FileInfo> result = new LinkedList<FileInfo>(); List<FileInfo> result = new LinkedList<FileInfo>();
List<FileInfo> searchResult = fileFolderService.search(contextNodeRef, namePattern, true, false, includeSubFolders); List<FileInfo> searchResult = fileFolderService.search(contextNodeRef, namePattern, true, false, includeSubFolders);
switch (viewMode) switch (viewMode)