From 9a4627d2a58f04b0864a27b36b601ba71fd0a47b Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Thu, 15 Oct 2009 15:25:40 +0000 Subject: [PATCH] Merged DEV/BELARUS/V3.2-2009_10_05 to HEAD 16926 : ETHREEOH-3042 Imap access error git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16970 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/repo/imap/ImapServiceImpl.java | 71 ++++++++++++++++++- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java index 3f1f3fc0ae..39814f1aaa 100755 --- a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java +++ b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java @@ -25,6 +25,7 @@ package org.alfresco.repo.imap; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -44,10 +45,13 @@ import org.alfresco.model.ImapModel; import org.alfresco.repo.imap.AlfrescoImapConst.ImapViewMode; import org.alfresco.repo.imap.config.ImapConfigMountPointsBean; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.site.SiteServiceException; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.preference.PreferenceService; +import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.search.SearchService; @@ -608,7 +612,36 @@ public class ImapServiceImpl implements ImapService else { // Remove folders from Sites - List sites = serviceRegistry.getSiteService().listSites(getCurrentUser()); + List sites = serviceRegistry.getTransactionService().getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback>() + { + public List execute() throws Exception + { + List res = new ArrayList(); + try + { + + res = serviceRegistry.getSiteService().listSites(getCurrentUser()); + } + catch (SiteServiceException e) + { + // Do nothing. Root sites folder was not created. + if (logger.isWarnEnabled()) + { + logger.warn("Root sites folder was not created."); + } + } + catch (InvalidNodeRefException e) + { + // Do nothing. Root sites folder was deleted. + if (logger.isWarnEnabled()) + { + logger.warn("Root sites folder was deleted."); + } + } + + return res; + } + }, false, true); for (SiteInfo siteInfo : sites) { List siteChilds = fileFolderService.search(siteInfo.getNodeRef(), namePattern, false, true, true); @@ -1280,12 +1313,44 @@ public class ImapServiceImpl implements ImapService * @param userName name of user * @return List of nonFavourite sites. */ - private List getNonFavouriteSites(String userName) + private List getNonFavouriteSites(final String userName) { List nonFavSites = new LinkedList(); + PreferenceService preferenceService = (PreferenceService) serviceRegistry.getService(ServiceRegistry.PREFERENCE_SERVICE); Map prefs = preferenceService.getPreferences(userName, AlfrescoImapConst.PREF_IMAP_FAVOURITE_SITES); - List sites = serviceRegistry.getSiteService().listSites(userName); + + List sites = serviceRegistry.getTransactionService().getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback>() + { + public List execute() throws Exception + { + List res = new ArrayList(); + try + { + + res = serviceRegistry.getSiteService().listSites(userName); + } + catch (SiteServiceException e) + { + //Do nothing. Root sites folder was not created. + if (logger.isDebugEnabled()) + { + logger.warn("Root sites folder was not created."); + } + } + catch (InvalidNodeRefException e) + { + //Do nothing. Root sites folder was deleted. + if (logger.isDebugEnabled()) + { + logger.warn("Root sites folder was deleted."); + } + } + + return res; + } + }, false, true); + for (SiteInfo siteInfo : sites) { String key = AlfrescoImapConst.PREF_IMAP_FAVOURITE_SITES + "." + siteInfo.getShortName();