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.dao;
017    
018    import java.util.List;
019    
020    import com.hs.mail.imap.mailbox.Mailbox;
021    import com.hs.mail.imap.message.PhysMessage;
022    
023    /**
024     * 
025     * @author Won Chul Doh
026     * @since Mar 8, 2010
027     *
028     */
029    public interface MailboxDao {
030    
031            /**
032             * Get the named mailbox.
033             * 
034             * @param ownerID
035             *            the id of the user who owns the mailbox
036             * @param mailboxName
037             *            fullname of the mailbox
038             * @return Mailbox object
039             */
040            public Mailbox getMailbox(long ownerID, String mailboxName);
041    
042            /**
043             * Get all child mailboxes of named mailbox.
044             * 
045             * @param userID
046             *            ID of user who called this method
047             * @param ownerID
048             *            ID of user who owns the mailbox
049             * @param mailboxName
050             *            fullname of the parent mailbox
051             * @param subscribed
052             *            If true, only subscribed mailboxes are returned
053             * @return list of child Mailbox objects
054             */
055            public List<Mailbox> getChildren(long userID, long ownerID,
056                            String mailboxName, boolean subscribed);
057    
058            /**
059             * Get the child mailboxes count.
060             * 
061             * @param ownerID
062             *            ID of the user who owns the mailbox
063             * @param mailboxName
064             *            fullname of the parent mailbox
065             * @return total number of child mailboxes
066             */
067            public int getChildCount(long ownerID, String mailboxName);
068    
069            /**
070             * Get the identifiers of mailboxes whose name match the given name.
071             * 
072             * @param mailboxName
073             *            fullname of the mailboxes to find
074             * @return list of mailbox identifiers
075             */
076            public List<Long> getMailboxIDList(String mailboxName);
077            
078            /**
079             * Get the deleted message's identifiers.
080             * 
081             * @param mailboxID
082             *            id of the mailbox
083             * @return list of message identifies which has \Delete message flag
084             */
085            public List<Long> getDeletedMessageIDList(long mailboxID);
086    
087            /**
088             * Get the list of physical message identifiers which will be dangling
089             * pointers (pointing messages which are already deleted) after deleting all
090             * the messages owned by the user.
091             * 
092             * @param ownerID
093             *            ID of the user
094             * @return list of PhysMessage objects
095             */
096            public List<PhysMessage> getDanglingMessageIDList(long ownerID);
097            
098            /**
099             * Get the list of physical message identifiers which will be dangling
100             * pointers (pointing messages which are already deleted) after expunging
101             * the mailbox.
102             * 
103             * @param ownerID
104             *            ID of the user who owns the mailbox
105             * @param mailboxID
106             *            ID of the mailbox
107             * @return list of PhysMessage objects
108             */
109            public List<PhysMessage> getDanglingMessageIDList(long ownerID, long mailboxID);
110            
111            /**
112             * Check whether the mailbox really exists.
113             * 
114             * @param ownerID
115             *            ID of the user who owns the mailbox
116             * @param mailboxName
117             *            fullname of the parent mailbox
118             * @return true if the mailbox exists, otherwise false
119             */
120            public boolean mailboxExists(long ownerID, String mailboxName);
121            
122            /**
123             * Create a mailbox with given name.
124             * 
125             * @param ownerID
126             *            ID of the user who owns the mailbox
127             * @param mailboxName
128             *            fullname of the mailbox to create
129             * @return Mailbox object created
130             */
131            public Mailbox createMailbox(long ownerID, String mailboxName);
132            
133            /**
134             * Rename the mailbox.
135             * 
136             * @param source
137             *            fullname of the mailbox to rename
138             * @param dest
139             *            new name for the mailbox
140             */
141            public void renameMailbox(Mailbox source, String dest);
142            
143            /**
144             * Delete all the mailboxes owned by the user.
145             * 
146             * @param ownerID
147             *            ID of the user
148             */
149            public void deleteMailboxes(long ownerID);
150            /**
151             * Delete the mailbox.
152             * 
153             * @param ownerID
154             *            ID of the user
155             * @param mailboxID
156             *            ID of the mailbox
157             */
158            public void deleteMailbox(long ownerID, long mailboxID);
159    
160            /**
161             * Delete all the messages owned by the user.
162             * 
163             * @param ownerID
164             *            ID of the user
165             */
166            public void deleteMessages(long ownerID);
167            
168            /**
169             * Delete all the messages in the mailbox.
170             * 
171             * @param ownerID
172             *            ID of the user
173             * @param mailboxID
174             *            ID of the mailbox
175             */
176            public void deleteMessages(long ownerID, long mailboxID);
177    
178            /**
179             * Set \Noselect mailbox name attribute.
180             * 
181             * @param ownerID
182             *            ID of the user
183             * @param mailboxID
184             *            ID of the mailbox
185             */
186            public void forbidSelectMailbox(long ownerID, long mailboxID);
187            
188            /**
189             * Check whether the mailbox is subscribed.
190             * 
191             * @param userID
192             *            ID of the user
193             * @param mailboxID
194             *            ID of the mailbox
195             * @return true if the mailbox is subscribed, otherwise false
196             */
197            public boolean isSubscribed(long userID, String mailboxName);
198            
199            /**
200             * Subscribe the mailbox.
201             * 
202             * @param userID
203             *            ID of the user
204             * @param mailboxID
205             *            ID of the mailbox to subscribe
206             */
207            public void addSubscription(long userID, long mailboxID, String mailboxName);
208    
209            /**
210             * Unsubscribe the mailbox.
211             * 
212             * @param userID
213             *            ID of the user
214             * @param mailboxName
215             *            name of the mailbox to unsubscribe
216             */
217            public void deleteSubscription(long userID, String mailboxName);
218            
219            /**
220             * Get the total message count.
221             * 
222             * @param mailboxID
223             *            ID of the mailbox
224             * @return total number of messages
225             */
226            public int getMessageCount(long mailboxID);
227    
228            /**
229             * Get the recent message count.
230             * 
231             * @param mailboxID
232             *            ID of the mailbox
233             * @return number of recent messages
234             */
235            public int getRecentMessageCount(long mailboxID);
236    
237            /**
238             * Get the unseen message count.
239             * 
240             * @param mailboxID
241             *            ID of the mailbox
242             * @return total number of unseen messages
243             */
244            public int getUnseenMessageCount(long mailboxID);
245    
246            /**
247             * Get the message identifier of the first unseen message.
248             * 
249             * @param mailboxID
250             *            ID of the mailbox.
251             * @return ID of the first unseen message
252             */
253            public long getFirstUnseenMessageID(long mailboxID);
254    
255    }