diff --git a/source/java/org/alfresco/repo/imap/AlfrescoImapHostManager.java b/source/java/org/alfresco/repo/imap/AlfrescoImapHostManager.java index 149c0ab2a6..d1d72fd3f9 100644 --- a/source/java/org/alfresco/repo/imap/AlfrescoImapHostManager.java +++ b/source/java/org/alfresco/repo/imap/AlfrescoImapHostManager.java @@ -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; + } } /** diff --git a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java index 92acffa143..dd2d49023e 100644 --- a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java +++ b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java @@ -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); diff --git a/source/java/org/alfresco/repo/imap/exception/AlfrescoImapRuntimeException.java b/source/java/org/alfresco/repo/imap/exception/AlfrescoImapRuntimeException.java new file mode 100644 index 0000000000..e22c83f587 --- /dev/null +++ b/source/java/org/alfresco/repo/imap/exception/AlfrescoImapRuntimeException.java @@ -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 . + */ +package org.alfresco.repo.imap.exception; + +import org.alfresco.error.AlfrescoRuntimeException; + +/** + * Throw runtime exceptions with following Id and cause:
+ * - ERROR_CANNOT_GET_A_FOLDER, new FolderException(FolderException.NOT_LOCAL) cause, when folder wasn't found
+ * - ERROR_FOLDER_ALREADY_EXISTS, new FolderException(FolderException.ALREADY_EXISTS_LOCALLY), when folder already exists
+ * + * @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); + } +} \ No newline at end of file