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 java.util.Map;
import org.alfresco.repo.imap.exception.AlfrescoImapFolderException; import org.alfresco.repo.imap.exception.AlfrescoImapFolderException;
import org.alfresco.repo.imap.exception.AlfrescoImapRuntimeException;
import org.alfresco.util.Utf7; import org.alfresco.util.Utf7;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 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) public MailFolder getFolder(final GreenMailUser user, final String mailboxName, boolean mustExist)
throws FolderException 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.cache.SimpleCache;
import org.alfresco.repo.imap.AlfrescoImapConst.ImapViewMode; import org.alfresco.repo.imap.AlfrescoImapConst.ImapViewMode;
import org.alfresco.repo.imap.config.ImapConfigMountPointsBean; 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.BeforeDeleteNodePolicy;
import org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy; import org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy;
import org.alfresco.repo.node.NodeServicePolicies.OnDeleteChildAssociationPolicy; 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.AbstractLifecycleBean;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
import com.icegreen.greenmail.store.FolderException;
import com.icegreen.greenmail.store.SimpleStoredMessage; 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) public AlfrescoImapFolder getOrCreateMailbox(AlfrescoImapUser user, String mailboxName, boolean mayExist, boolean mayCreate)
{ {
if (mailboxName == null) if (mailboxName == null)
@@ -659,13 +664,13 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea
} }
catch (FileNotFoundException e) 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 (mailFolder == null)
{ {
if (!mayCreate) 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()) if (logger.isDebugEnabled())
{ {
@@ -677,7 +682,7 @@ public class ImapServiceImpl implements ImapService, OnRestoreNodePolicy, OnCrea
{ {
if (!mayExist) 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); 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);
}
}