View Javadoc

1   /**
2    *
3    * Copyright 2003-2006 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  
18  package javax.mail;
19  
20  import java.util.Vector;
21  import javax.mail.event.FolderEvent;
22  import javax.mail.event.FolderListener;
23  import javax.mail.event.StoreEvent;
24  import javax.mail.event.StoreListener;
25  
26  /**
27   * Abstract class that represents a message store.
28   *
29   * @version $Rev: 421852 $ $Date: 2006-07-14 03:02:19 -0700 (Fri, 14 Jul 2006) $
30   */
31  public abstract class Store extends Service {
32      private static final Folder[] FOLDER_ARRAY = new Folder[0];
33      private final Vector folderListeners = new Vector(2);
34      private final Vector storeListeners = new Vector(2);
35  
36      /**
37       * Constructor specifying session and url of this store.
38       * Subclasses MUST provide a constructor with this signature.
39       *
40       * @param session the session associated with this store
41       * @param name the URL of the store
42       */
43      protected Store(Session session, URLName name) {
44          super(session, name);
45      }
46  
47      /**
48       * Retutn a Folder object that represents the root of the namespace for the current user.
49       *
50       * Note that in some store configurations (such as IMAP4) then the root folder may
51       * not be the INBOX folder.
52       *
53       * @return the root Folder
54       * @throws MessagingException if there was a problem accessing the store
55       */
56      public abstract Folder getDefaultFolder() throws MessagingException;
57  
58      /**
59       * Return the Folder corresponding to the given name.
60       * The folder may not physically exist; the {@link Folder#exists()} method can be used
61       * to determine if it is real.
62       * @param name the name of the Folder to return
63       * @return the corresponding folder
64       * @throws MessagingException if there was a problem accessing the store
65       */
66      public abstract Folder getFolder(String name) throws MessagingException;
67  
68      /**
69       * Return the folder identified by the URLName; the URLName must refer to this Store.
70       * Implementations may use the {@link URLName#getFile()} method to determined the folder name.
71       *
72       * @param name the folder to return
73       * @return the corresponding folder
74       * @throws MessagingException if there was a problem accessing the store
75       */
76      public abstract Folder getFolder(URLName name) throws MessagingException;
77  
78      /**
79       * Return the root folders of the personal namespace belonging to the current user.
80       *
81       * The default implementation simply returns an array containing the folder returned by {@link #getDefaultFolder()}.
82       * @return the root folders of the user's peronal namespaces
83       * @throws MessagingException if there was a problem accessing the store
84       */
85      public Folder[] getPersonalNamespaces() throws MessagingException {
86          return new Folder[]{getDefaultFolder()};
87      }
88  
89      /**
90       * Return the root folders of the personal namespaces belonging to the supplied user.
91       *
92       * The default implementation simply returns an empty array.
93       *
94       * @param user the user whose namespaces should be returned
95       * @return the root folders of the given user's peronal namespaces
96       * @throws MessagingException if there was a problem accessing the store
97       */
98      public Folder[] getUserNamespaces(String user) throws MessagingException {
99          return FOLDER_ARRAY;
100     }
101 
102     /**
103      * Return the root folders of namespaces that are intended to be shared between users.
104      *
105      * The default implementation simply returns an empty array.
106      * @return the root folders of all shared namespaces
107      * @throws MessagingException if there was a problem accessing the store
108      */
109     public Folder[] getSharedNamespaces() throws MessagingException {
110         return FOLDER_ARRAY;
111     }
112 
113 
114     public void addStoreListener(StoreListener listener) {
115         storeListeners.add(listener);
116     }
117 
118     public void removeStoreListener(StoreListener listener) {
119         storeListeners.remove(listener);
120     }
121 
122     protected void notifyStoreListeners(int type, String message) {
123         queueEvent(new StoreEvent(this, type, message), storeListeners);
124     }
125 
126 
127     public void addFolderListener(FolderListener listener) {
128         folderListeners.add(listener);
129     }
130 
131     public void removeFolderListener(FolderListener listener) {
132         folderListeners.remove(listener);
133     }
134 
135     protected void notifyFolderListeners(int type, Folder folder) {
136         queueEvent(new FolderEvent(this, folder, type), folderListeners);
137     }
138 
139     protected void notifyFolderRenamedListeners(Folder oldFolder, Folder newFolder) {
140         queueEvent(new FolderEvent(this, oldFolder, newFolder, FolderEvent.RENAMED), folderListeners);
141     }
142 }