001 /* 002 * Copyright 2010 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package com.hs.mail.imap.mailbox; 017 018 import java.io.File; 019 import java.io.IOException; 020 import java.util.Date; 021 import java.util.List; 022 import java.util.Map; 023 024 import javax.mail.Flags; 025 026 import com.hs.mail.imap.event.EventDispatcher; 027 import com.hs.mail.imap.event.EventListener; 028 import com.hs.mail.imap.message.FetchData; 029 import com.hs.mail.imap.message.MailMessage; 030 import com.hs.mail.imap.message.search.SearchKey; 031 032 /** 033 * 034 * @author WonChul Doh 035 * @since Feb 2, 2010 036 * 037 */ 038 public interface MailboxManager { 039 040 public EventDispatcher getEventDispatcher(); 041 042 public void addEventListener(EventListener listener); 043 044 public void removeEventListener(EventListener listener); 045 046 /** 047 * Returns user's <code>Mailbox</code> with a given path 048 * 049 * @param ownerID 050 * owner of the mailbox 051 * @param mailboxName 052 * path to the mailbox 053 * @return the mailbox as <code>Mailbox</code> 054 */ 055 public Mailbox getMailbox(long ownerID, String mailboxName); 056 057 /** 058 * Check if given mailbox exists. 059 * 060 * @param ownerID 061 * owner of this mailbox 062 * @param mailboxName 063 * the name of mailbox for checking existence 064 * @return true when the mailbox exists, false otherwise 065 */ 066 public boolean mailboxExists(long ownerID, String mailboxName); 067 068 public List<Mailbox> getChildren(long userID, long ownerID, 069 String mailboxName, boolean subscribed); 070 071 public List<Long> getMailboxIDList(String mailboxName); 072 073 /** 074 * Does the mailbox have inferior child mailboxes? 075 * 076 * @param mailbox 077 * ID of the mailbox 078 * @return true when the mailbox has children, false otherwise 079 */ 080 public boolean hasChildren(Mailbox mailbox); 081 082 /** 083 * Gets the UIDs of messages which has /Deleted flag. 084 * 085 * @param mailboxID 086 * ID of mailbox 087 * @return list of UIDs of messages which has /Deleted flag 088 */ 089 public List<Long> expunge(long mailboxID); 090 091 /** 092 * Searches for the messages matching the given query. 093 * 094 * @param map 095 * UID to MSN converting map 096 * @param mailboxID 097 * ID of mailbox to search 098 * @param key 099 * the search query 100 * @return list of UIDs of messages searched 101 */ 102 public List<Long> search(UidToMsnMapper map, long mailboxID, SearchKey key); 103 104 /** 105 * Creates a new mailbox. Any intermediary mailboxes missing from the 106 * hierarchy will be created. 107 * 108 * @param ownerID 109 * owner of the mailbox 110 * @param mailboxName 111 * the name of mailbox to create 112 * @return <code>Mailbox</code> created 113 */ 114 public Mailbox createMailbox(final long ownerID, final String mailboxName); 115 116 /** 117 * Renames a mailbox. 118 * 119 * @param source 120 * original mailbox 121 * @param targetName 122 * new name for the mailbox 123 */ 124 public void renameMailbox(final Mailbox source, final String targetName); 125 126 /** 127 * Delete or empty a mailbox from store. 128 * 129 * @param ownerID 130 * ID of the user who owns the mailbox 131 * @param mailboxID 132 * ID of the mailbox 133 * @param delete 134 * true when delete, false when empty 135 */ 136 public void deleteMailbox(final long ownerID, final long mailboxID, 137 final boolean delete); 138 139 /** 140 * Check if given mailbox is subscribed to user 141 * 142 * @param userID 143 * ID of user 144 * @param mailboxID 145 * ID of mailbox 146 * @return true if mailbox is subscribed, otherwise false 147 */ 148 public boolean isSubscribed(long userID, String mailboxName); 149 150 /** 151 * Subscribe the user to the given mailbox. 152 * 153 * @param userID 154 * ID of the user 155 * @param mailboxID 156 * ID of the mailbox to subscribe 157 */ 158 public void addSubscription(final long userID, final long mailboxID, 159 final String mailboxName); 160 /** 161 * Unsubscribes the user from the given mailbox. 162 * 163 * @param mailboxID 164 * ID of the mailbox to unsubscribe 165 */ 166 public void deleteSubscription(final long userID, final String mailboxName); 167 168 public FetchData getMessageFetchData(long uid); 169 170 public Flags getFlags(long uid); 171 172 public List<Long> getMessageIDList(long mailboxID); 173 174 /** 175 * Appends a message to the user's INBOX. This method is called by MDA. 176 */ 177 public void addMessage(final long ownerID, final MailMessage message, 178 String mailboxName); 179 180 /** 181 * Appends a message to this mailbox. 182 * 183 * @param mailboxID 184 * ID of mailbox to append a message 185 * @param internalDate 186 * the time of addition to be set 187 * @param flags 188 * optionally set these flags on created message, or null when no 189 * additional flags should be set 190 * @param file 191 * the file containing the mail contents 192 * @throws IOException 193 */ 194 public void appendMessage(long mailboxID, Date internalDate, Flags flags, 195 File file) throws IOException; 196 197 /** 198 * Deletes the given message. 199 * 200 * @param uid 201 * ID of the message to delete 202 */ 203 public void deleteMessage(final long uid); 204 205 /** 206 * Copies a message to the given mailbox. 207 * 208 * @param uid 209 * ID of the message to copy 210 * @param mailboxID 211 * ID of mailbox where message will be copied 212 */ 213 public void copyMessage(final long uid, final long mailboxID); 214 215 public void resetRecent(final long mailboxID); 216 217 /** 218 * Sets flags on this message. 219 * 220 * @param uid 221 * ID of the message to set flags 222 * @param flags 223 * flags to be set 224 * @param replace 225 * true if to replace 226 * @param set 227 * true if to set, false to reset 228 */ 229 public void setFlags(final long uid, final Flags flags, 230 final boolean replace, final boolean set); 231 232 /** 233 * Gets the headers of the message. 234 * 235 * @param physMessageID 236 * ID of the physical message 237 * @return map containing header name and value entries 238 */ 239 public Map<String, String> getHeader(long physMessageID); 240 241 /** 242 * Gets the headers of the message. 243 * 244 * @param physMessageID 245 * ID of the physical message 246 * @param fields 247 * Array of fields to retrieve 248 * @return map containing header name and value entries 249 */ 250 public Map<String, String> getHeader(long physMessageID, String[] fields); 251 252 }