Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.0/Cloud)

85821: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud)
      85774: Merged DEV to V4.2-BUG-FIX (4.2.4)
         85761: MNT-12381 IMAP server does not respect RFC for failed SELECT
            - The new AlfrescoImapRuntimeException was added. Greenmail FolderException exceptions will be thrown instead of AlfrescoRuntimeException in AlfrescoImapHostManager.getFolder() method with throws declaration.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@94518 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2015-01-31 09:34:19 +00:00
parent 16b6069313
commit bb740fb0a6
3 changed files with 68 additions and 4 deletions

View File

@@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map;
import org.alfresco.repo.imap.exception.AlfrescoImapFolderException;
import org.alfresco.repo.imap.exception.AlfrescoImapRuntimeException;
import org.alfresco.util.Utf7;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -246,7 +247,22 @@ public class AlfrescoImapHostManager implements ImapHostManager
public MailFolder getFolder(final GreenMailUser user, final String mailboxName, boolean mustExist)
throws FolderException
{
return getFolder(user, mailboxName);
try
{
return getFolder(user, mailboxName);
}
catch (AlfrescoImapRuntimeException e)
{
if (!mustExist)
{
return null;
}
else if (e.getCause() instanceof FolderException)
{
throw (FolderException) e.getCause();
}
throw e;
}
}
/**

View File

@@ -53,6 +53,7 @@ import org.alfresco.repo.admin.SysAdminParams;
import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.imap.AlfrescoImapConst.ImapViewMode;
import org.alfresco.repo.imap.config.ImapConfigMountPointsBean;
import org.alfresco.repo.imap.exception.AlfrescoImapRuntimeException;
import org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy;
import org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy;
import org.alfresco.repo.node.NodeServicePolicies.OnDeleteChildAssociationPolicy;
@@ -105,6 +106,7 @@ import org.springframework.context.ApplicationEvent;
import org.springframework.extensions.surf.util.AbstractLifecycleBean;
import org.springframework.extensions.surf.util.I18NUtil;
import com.icegreen.greenmail.store.FolderException;
import com.icegreen.greenmail.store.SimpleStoredMessage;
/**
@@ -607,6 +609,9 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea
}
}
/**
* @throws AlfrescoImapRuntimeException
*/
public AlfrescoImapFolder getOrCreateMailbox(AlfrescoImapUser user, String mailboxName, boolean mayExist, boolean mayCreate)
{
if (mailboxName == null)
@@ -659,13 +664,13 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea
}
catch (FileNotFoundException e)
{
throw new AlfrescoRuntimeException(ERROR_CANNOT_GET_A_FOLDER, new String[] { mailboxName });
throw new AlfrescoImapRuntimeException(ERROR_CANNOT_GET_A_FOLDER, new String[] { mailboxName }, new FolderException(FolderException.NOT_LOCAL));
}
if (mailFolder == null)
{
if (!mayCreate)
{
throw new AlfrescoRuntimeException(ERROR_CANNOT_GET_A_FOLDER, new String[] { mailboxName });
throw new AlfrescoImapRuntimeException(ERROR_CANNOT_GET_A_FOLDER, new String[] { mailboxName }, new FolderException(FolderException.NOT_LOCAL));
}
if (logger.isDebugEnabled())
{
@@ -677,7 +682,7 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea
{
if (!mayExist)
{
throw new AlfrescoRuntimeException(ERROR_FOLDER_ALREADY_EXISTS);
throw new AlfrescoImapRuntimeException(ERROR_FOLDER_ALREADY_EXISTS, new FolderException(FolderException.ALREADY_EXISTS_LOCALLY));
}
}
String path = (null != pathElements) ? (pathElements.get(pathElements.size() - 1)) : (rootPath);

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.imap.exception;
import org.alfresco.error.AlfrescoRuntimeException;
/**
* Throw runtime exceptions with following Id and cause:<br />
* - ERROR_CANNOT_GET_A_FOLDER, new FolderException(FolderException.NOT_LOCAL) cause, when folder wasn't found<br />
* - ERROR_FOLDER_ALREADY_EXISTS, new FolderException(FolderException.ALREADY_EXISTS_LOCALLY), when folder already exists<br />
*
* @author Alex Bykov
*/
public class AlfrescoImapRuntimeException extends AlfrescoRuntimeException
{
private static final long serialVersionUID = -2721708848878740336L;
public AlfrescoImapRuntimeException(String msgId, Object[] msgParams, Throwable cause)
{
super(msgId, msgParams, cause);
}
public AlfrescoImapRuntimeException(String msgId, Throwable cause)
{
super(msgId, cause);
}
}