org.alfresco.repo.imap
Class ImapServiceImpl

java.lang.Object
  extended by org.alfresco.repo.imap.ImapServiceImpl
All Implemented Interfaces:
ImapService, NodeServicePolicies.BeforeDeleteNodePolicy, NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.OnDeleteChildAssociationPolicy, NodeServicePolicies.OnUpdatePropertiesPolicy, AssociationPolicy, ClassPolicy, Policy

public class ImapServiceImpl
extends java.lang.Object
implements ImapService, NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.OnDeleteChildAssociationPolicy, NodeServicePolicies.OnUpdatePropertiesPolicy, NodeServicePolicies.BeforeDeleteNodePolicy

Since:
3.2

Nested Class Summary
static class ImapServiceImpl.ImapServiceBootstrap
          Bootstrap initialization bean for the service implementation.
 
Nested classes/interfaces inherited from interface org.alfresco.repo.imap.ImapService
ImapService.EmailBodyFormat, ImapService.FolderStatus
 
Nested classes/interfaces inherited from interface org.alfresco.repo.policy.Policy
Policy.Arg
 
Field Summary
 
Fields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy
QNAME
 
Fields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnDeleteChildAssociationPolicy
QNAME
 
Fields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy
ARG_0, ARG_1, ARG_2, QNAME
 
Fields inherited from interface org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy
QNAME
 
Fields inherited from interface org.alfresco.repo.policy.Policy
NAMESPACE
 
Constructor Summary
ImapServiceImpl()
           
 
Method Summary
 void beforeDeleteNode(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Called before a node is deleted.
protected  void bindBehaviour()
           
 com.icegreen.greenmail.store.SimpleStoredMessage createImapMessage(FileInfo fileInfo, boolean generateBody)
          Creates a MIME message for the given file
 void deleteMailbox(AlfrescoImapUser user, java.lang.String mailboxName)
          Deletes an existing MailBox.
 void expungeMessage(FileInfo fileInfo)
          Expunges (deletes) an IMAP message if its flags indicates
 org.alfresco.service.cmr.repository.NodeRef extractAttachments(org.alfresco.service.cmr.repository.NodeRef parentFolder, org.alfresco.service.cmr.repository.NodeRef messageFile, javax.mail.internet.MimeMessage originalMessage)
          Extract attachments from a MimeMessage Puts the attachments into a subfolder below the parent folder.
 java.lang.String getAlfrescoServerUID()
          This method should returns a unique identifier of Alfresco server.
 java.lang.String getDefaultEmailBodyTemplate(ImapService.EmailBodyFormat type)
          Returns a template for email body.
 java.lang.String getDefaultFromAddress()
           
 java.lang.String getDefaultToAddress()
           
 javax.mail.Flags getFlags(FileInfo messageInfo)
          Return flags that belong to the specified imap folder.
 ImapService.FolderStatus getFolderStatus(java.lang.String userName, org.alfresco.service.cmr.repository.NodeRef contextNodeRef, AlfrescoImapConst.ImapViewMode viewMode)
          Search for emails in specified folder depending on view mode.
 boolean getImapServerEnabled()
          Determines whether the IMAP server is enabled.
 com.icegreen.greenmail.store.SimpleStoredMessage getMessage(FileInfo mesInfo)
          Gets a cached MIME message for the given file, complete with message body.
 org.alfresco.service.namespace.NamespaceService getNamespaceService()
           
 AlfrescoImapFolder getOrCreateMailbox(AlfrescoImapUser user, java.lang.String mailboxName, boolean mayExist, boolean mayCreate)
          Returns a reference to a mailbox, either creating a new one or retrieving an existing one.
 java.lang.String getRepositoryTemplatePath()
           
 org.alfresco.service.cmr.search.SearchService getSearchService()
           
 java.lang.String getShareApplicationContextUrl()
           
 org.alfresco.service.cmr.repository.NodeRef getUserImapHomeRef(java.lang.String userName)
          Get the node ref of the user's imap home.
 java.lang.String getWebApplicationContextUrl()
           
 void init()
           
 boolean isNodeInSitesLibrary(org.alfresco.service.cmr.repository.NodeRef nodeRef)
          Return true if provided nodeRef is in Sites/.../documentlibrary
 java.util.List listMailboxes(AlfrescoImapUser user, java.lang.String mailboxPattern, boolean listSubscribed)
          Depend on listSubscribed param, list Mailboxes or list subscribed Mailboxes
 void onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef childAssocRef, boolean isNewNode)
          Called after a node child association has been created.
 void onDeleteChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef childAssocRef)
          Called after a node child association has been deleted.
 void onUpdateProperties(org.alfresco.service.cmr.repository.NodeRef nodeRef, java.util.Map before, java.util.Map after)
          Called after a node's properties have been changed.
 void renameMailbox(AlfrescoImapUser user, java.lang.String oldMailboxName, java.lang.String newMailboxName)
          Renames an existing mailbox.
 void setDefaultFromAddress(java.lang.String defaultFromAddress)
           
 void setDefaultToAddress(java.lang.String defaultToAddress)
           
 void setExtractAttachmentsEnabled(boolean extractAttachmentsEnabled)
           
 void setFileFolderService(FileFolderService fileFolderService)
           
 void setFlag(FileInfo messageInfo, javax.mail.Flags.Flag flag, boolean value)
          Set flags to the specified imapFolder.
 void setFlags(FileInfo messageInfo, javax.mail.Flags flags, boolean value)
          Set flags to the specified imapFolder.
 void setFolderCacheSize(int folderCacheSize)
           
 void setIgnoreExtractionFolders(RepositoryFolderConfigBean[] ignoreExtractionFolders)
           
 void setImapConfigMountPoints(ImapConfigMountPointsBean[] imapConfigMountPointsBeans)
           
 void setImapHome(RepositoryFolderConfigBean imapHomeConfigBean)
           
 void setImapServerEnabled(boolean enabled)
           
 void setMessageCache(org.alfresco.repo.cache.SimpleCache messageCache)
           
 void setMimetypeService(org.alfresco.service.cmr.repository.MimetypeService mimetypeService)
           
 void setNamespaceService(org.alfresco.service.namespace.NamespaceService namespaceService)
           
 void setNodeService(org.alfresco.service.cmr.repository.NodeService nodeService)
           
 void setPermissionService(org.alfresco.service.cmr.security.PermissionService permissionService)
           
 void setPolicyFilter(BehaviourFilter policyFilter)
           
 void setRepositoryTemplatePath(java.lang.String repositoryTemplatePath)
           
 void setSearchService(org.alfresco.service.cmr.search.SearchService searchService)
           
 void setServiceRegistry(ServiceRegistry serviceRegistry)
           
 void setSysAdminParams(SysAdminParams sysAdminParams)
           
 void shutdown()
           
 void startup()
          This method is run as System within a single transaction on startup.
protected  void startupInTxn(boolean force)
           
 void subscribe(AlfrescoImapUser user, java.lang.String mailbox)
          Subscribes a user to a mailbox.
 void unsubscribe(AlfrescoImapUser user, java.lang.String mailbox)
          Unsubscribes from a given mailbox.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ImapServiceImpl

public ImapServiceImpl()
Method Detail

setSysAdminParams

public void setSysAdminParams(SysAdminParams sysAdminParams)

setMessageCache

public void setMessageCache(org.alfresco.repo.cache.SimpleCache messageCache)

setFileFolderService

public void setFileFolderService(FileFolderService fileFolderService)

setMimetypeService

public void setMimetypeService(org.alfresco.service.cmr.repository.MimetypeService mimetypeService)

setNodeService

public void setNodeService(org.alfresco.service.cmr.repository.NodeService nodeService)

setPermissionService

public void setPermissionService(org.alfresco.service.cmr.security.PermissionService permissionService)

setServiceRegistry

public void setServiceRegistry(ServiceRegistry serviceRegistry)

setPolicyFilter

public void setPolicyFilter(BehaviourFilter policyFilter)

setImapHome

public void setImapHome(RepositoryFolderConfigBean imapHomeConfigBean)

setFolderCacheSize

public void setFolderCacheSize(int folderCacheSize)

getDefaultFromAddress

public java.lang.String getDefaultFromAddress()
Specified by:
getDefaultFromAddress in interface ImapService
Returns:
Default From addreses

setDefaultFromAddress

public void setDefaultFromAddress(java.lang.String defaultFromAddress)

getDefaultToAddress

public java.lang.String getDefaultToAddress()
Specified by:
getDefaultToAddress in interface ImapService
Returns:
Default To addreses

setDefaultToAddress

public void setDefaultToAddress(java.lang.String defaultToAddress)

getWebApplicationContextUrl

public java.lang.String getWebApplicationContextUrl()
Specified by:
getWebApplicationContextUrl in interface ImapService
Returns:
Web application context url (e.g. http://localhost:8080/alfresco)

getShareApplicationContextUrl

public java.lang.String getShareApplicationContextUrl()
Specified by:
getShareApplicationContextUrl in interface ImapService
Returns:
Web application context url for share (e.g. http://localhost:8080/share)

getRepositoryTemplatePath

public java.lang.String getRepositoryTemplatePath()
Specified by:
getRepositoryTemplatePath in interface ImapService
Returns:
Path to the folder containing templates, that will be used for generating body of message in VIRTUAL and MIXED views.

setRepositoryTemplatePath

public void setRepositoryTemplatePath(java.lang.String repositoryTemplatePath)

setImapConfigMountPoints

public void setImapConfigMountPoints(ImapConfigMountPointsBean[] imapConfigMountPointsBeans)

setIgnoreExtractionFolders

public void setIgnoreExtractionFolders(RepositoryFolderConfigBean[] ignoreExtractionFolders)

setExtractAttachmentsEnabled

public void setExtractAttachmentsEnabled(boolean extractAttachmentsEnabled)

setImapServerEnabled

public void setImapServerEnabled(boolean enabled)

getImapServerEnabled

public boolean getImapServerEnabled()
Description copied from interface: ImapService
Determines whether the IMAP server is enabled.

Specified by:
getImapServerEnabled in interface ImapService
Returns:
true if enabled

init

public void init()

startup

public void startup()
This method is run as System within a single transaction on startup.


shutdown

public void shutdown()

startupInTxn

protected void startupInTxn(boolean force)

bindBehaviour

protected void bindBehaviour()

getMessage

public com.icegreen.greenmail.store.SimpleStoredMessage getMessage(FileInfo mesInfo)
                                                            throws javax.mail.MessagingException
Description copied from interface: ImapService
Gets a cached MIME message for the given file, complete with message body.

Specified by:
getMessage in interface ImapService
Parameters:
mesInfo - imap file info.
Returns:
a message.
Throws:
javax.mail.MessagingException

createImapMessage

public com.icegreen.greenmail.store.SimpleStoredMessage createImapMessage(FileInfo fileInfo,
                                                                          boolean generateBody)
                                                                   throws javax.mail.MessagingException
Description copied from interface: ImapService
Creates a MIME message for the given file

Specified by:
createImapMessage in interface ImapService
Parameters:
fileInfo - imap file info.
generateBody - Should the message body be generated?
Returns:
a message.
Throws:
javax.mail.MessagingException

expungeMessage

public void expungeMessage(FileInfo fileInfo)
Description copied from interface: ImapService
Expunges (deletes) an IMAP message if its flags indicates

Specified by:
expungeMessage in interface ImapService
Parameters:
fileInfo - imap file info.

getOrCreateMailbox

public AlfrescoImapFolder getOrCreateMailbox(AlfrescoImapUser user,
                                             java.lang.String mailboxName,
                                             boolean mayExist,
                                             boolean mayCreate)
Description copied from interface: ImapService
Returns a reference to a mailbox, either creating a new one or retrieving an existing one.

Specified by:
getOrCreateMailbox in interface ImapService
Parameters:
user - User making the request.
mailboxName - String name of the target.
mayExist - Is the mailbox allowed to exist already? If false and the mailbox already exists, an error will be thrown
mayCreate - If the mailbox does not exist, can one be created? If false then an error is thrown if the folder does not exist
Returns:
a Mailbox reference

deleteMailbox

public void deleteMailbox(AlfrescoImapUser user,
                          java.lang.String mailboxName)
Description copied from interface: ImapService
Deletes an existing MailBox. Specified mailbox must already exist on this server, and the user must have rights to delete it. This method serves DELETE command of the IMAP protocol.

Specified by:
deleteMailbox in interface ImapService
Parameters:
user - User making the request.
mailboxName - String name of the target,

renameMailbox

public void renameMailbox(AlfrescoImapUser user,
                          java.lang.String oldMailboxName,
                          java.lang.String newMailboxName)
Description copied from interface: ImapService
Renames an existing mailbox. The specified mailbox must already exist, the requested name must not exist already but must be able to be created and the user must have rights to delete the existing mailbox and create a mailbox with the new name. Any inferior hierarchical names must also be renamed. If INBOX is renamed, the contents of INBOX are transferred to a new mailbox with the new name, but INBOX is not deleted. If INBOX has inferior mailbox these are not renamed. This method serves RENAME command of the IMAP protocol.

Specified by:
renameMailbox in interface ImapService
Parameters:
user - User making the request.
oldMailboxName - String name of the existing folder
newMailboxName - String target new name

getFolderStatus

public ImapService.FolderStatus getFolderStatus(java.lang.String userName,
                                                org.alfresco.service.cmr.repository.NodeRef contextNodeRef,
                                                AlfrescoImapConst.ImapViewMode viewMode)
Search for emails in specified folder depending on view mode. Shallow list of files

Specified by:
getFolderStatus in interface ImapService
Parameters:
contextNodeRef - context folder for search
viewMode - context folder view mode
Returns:
list of emails that context folder contains.

subscribe

public void subscribe(AlfrescoImapUser user,
                      java.lang.String mailbox)
Description copied from interface: ImapService
Subscribes a user to a mailbox. The mailbox must exist locally and the user must have rights to modify it.

This method serves SUBSCRIBE command of the IMAP protocol.

Specified by:
subscribe in interface ImapService
Parameters:
user - User making the request
mailbox - String representation of a mailbox name.

unsubscribe

public void unsubscribe(AlfrescoImapUser user,
                        java.lang.String mailbox)
Description copied from interface: ImapService
Unsubscribes from a given mailbox.

This method serves UNSUBSCRIBE command of the IMAP protocol.

Specified by:
unsubscribe in interface ImapService
Parameters:
user - User making the request
mailbox - String representation of a mailbox name.

getFlags

public javax.mail.Flags getFlags(FileInfo messageInfo)
Return flags that belong to the specified imap folder.

Specified by:
getFlags in interface ImapService
Parameters:
messageInfo - imap folder info.
Returns:
flags.

setFlags

public void setFlags(FileInfo messageInfo,
                     javax.mail.Flags flags,
                     boolean value)
Set flags to the specified imapFolder.

Specified by:
setFlags in interface ImapService
Parameters:
messageInfo - FileInfo of imap Folder.
flags - flags to set.
value - value to set.

setFlag

public void setFlag(FileInfo messageInfo,
                    javax.mail.Flags.Flag flag,
                    boolean value)
Set flags to the specified imapFolder.

Specified by:
setFlag in interface ImapService
Parameters:
messageInfo - FileInfo of imap Folder
flag - flag to set.
value - value value to set.

listMailboxes

public java.util.List listMailboxes(AlfrescoImapUser user,
                                    java.lang.String mailboxPattern,
                                    boolean listSubscribed)
Depend on listSubscribed param, list Mailboxes or list subscribed Mailboxes

Specified by:
listMailboxes in interface ImapService
Parameters:
user - User making the request
mailboxPattern - String name of a mailbox, possible including a wildcard.
listSubscribed - list only subscribed folders?
Returns:
Collection of mailboxes matching the pattern.

getUserImapHomeRef

public org.alfresco.service.cmr.repository.NodeRef getUserImapHomeRef(java.lang.String userName)
Get the node ref of the user's imap home. Will create it on demand if it does not already exist.

Specified by:
getUserImapHomeRef in interface ImapService
Parameters:
userName - user name
Returns:
user IMAP home reference and create it if it doesn't exist.

getDefaultEmailBodyTemplate

public java.lang.String getDefaultEmailBodyTemplate(ImapService.EmailBodyFormat type)
Description copied from interface: ImapService
Returns a template for email body. It is either classpath path or NodeRef.toString(). This method trying to find a template on the path in the repository first e.g. "Data Dictionary > IMAP Templates >". This path should be set as the property of the "imapHelper" bean. In this case it returns NodeRef.toString() of the template. If there are no template in the repository it returns a default template on the classpath.

Specified by:
getDefaultEmailBodyTemplate in interface ImapService
Returns:

getAlfrescoServerUID

public java.lang.String getAlfrescoServerUID()
This method should returns a unique identifier of Alfresco server. The possible UID may be calculated based on IP address, Server port, MAC address, Web Application context. This UID should be parseable into initial components. This necessary for the implementation of the following case: If the message being copied (e.g. drag-and-drop) between two different Alfresco accounts in the IMAP client, we must unambiguously identify from which Alfresco server this message being copied. The message itself does not contain content data, so we must download it from the initial server (e.g. using download content servlet) and save it into destination repository.

Returns:
String representation of unique identifier of Alfresco server

onCreateChildAssociation

public void onCreateChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef childAssocRef,
                                     boolean isNewNode)
Description copied from interface: NodeServicePolicies.OnCreateChildAssociationPolicy
Called after a node child association has been created.

Specified by:
onCreateChildAssociation in interface NodeServicePolicies.OnCreateChildAssociationPolicy
Parameters:
childAssocRef - the child association that has been created
isNewNode - true if the node is new or false if the node is being linked in

onDeleteChildAssociation

public void onDeleteChildAssociation(org.alfresco.service.cmr.repository.ChildAssociationRef childAssocRef)
Description copied from interface: NodeServicePolicies.OnDeleteChildAssociationPolicy
Called after a node child association has been deleted.

Specified by:
onDeleteChildAssociation in interface NodeServicePolicies.OnDeleteChildAssociationPolicy
Parameters:
childAssocRef - the child association that has been deleted

onUpdateProperties

public void onUpdateProperties(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                               java.util.Map before,
                               java.util.Map after)
Description copied from interface: NodeServicePolicies.OnUpdatePropertiesPolicy
Called after a node's properties have been changed.

Specified by:
onUpdateProperties in interface NodeServicePolicies.OnUpdatePropertiesPolicy
Parameters:
nodeRef - reference to the updated node
before - the node's properties before the change
after - the node's properties after the change

beforeDeleteNode

public void beforeDeleteNode(org.alfresco.service.cmr.repository.NodeRef nodeRef)
Description copied from interface: NodeServicePolicies.BeforeDeleteNodePolicy
Called before a node is deleted.

Specified by:
beforeDeleteNode in interface NodeServicePolicies.BeforeDeleteNodePolicy
Parameters:
nodeRef - the node reference

isNodeInSitesLibrary

public boolean isNodeInSitesLibrary(org.alfresco.service.cmr.repository.NodeRef nodeRef)
Return true if provided nodeRef is in Sites/.../documentlibrary

Specified by:
isNodeInSitesLibrary in interface ImapService
Parameters:
nodeRef - nodeRef
Returns:
true if provided node belongs to sites.

extractAttachments

public org.alfresco.service.cmr.repository.NodeRef extractAttachments(org.alfresco.service.cmr.repository.NodeRef parentFolder,
                                                                      org.alfresco.service.cmr.repository.NodeRef messageFile,
                                                                      javax.mail.internet.MimeMessage originalMessage)
                                                               throws java.io.IOException,
                                                                      javax.mail.MessagingException
Extract attachments from a MimeMessage Puts the attachments into a subfolder below the parent folder.

Specified by:
extractAttachments in interface ImapService
messageFile - the node ref of the message.
Returns:
the node ref of the folder containing the attachments or null if there are no attachments.
Throws:
java.io.IOException
javax.mail.MessagingException

setNamespaceService

public void setNamespaceService(org.alfresco.service.namespace.NamespaceService namespaceService)

getNamespaceService

public org.alfresco.service.namespace.NamespaceService getNamespaceService()

setSearchService

public void setSearchService(org.alfresco.service.cmr.search.SearchService searchService)

getSearchService

public org.alfresco.service.cmr.search.SearchService getSearchService()


Copyright © 2005 - 2010 Alfresco Software, Inc. All Rights Reserved.