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