1 /*
2 * Copyright (c) 2005-2007 Creative Sphere Limited.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 *
10 * Creative Sphere - initial API and implementation
11 *
12 */
13 package org.abstracthorizon.mercury.maildir.uid;
14
15 import java.io.File;
16 import javax.mail.Session;
17 import javax.mail.URLName;
18 import org.abstracthorizon.mercury.maildir.MaildirFolder;
19 import org.abstracthorizon.mercury.maildir.MaildirFolderData;
20 import org.abstracthorizon.mercury.maildir.MaildirStore;
21
22
23 /**
24 * <p>This store implementation is aggressive UID implementation.
25 * It maintains UIDs within file names instead using separate index file.
26 * Each file added to the store must have precisely defined name
27 * (see {@link org.abstracthorizon.mercury.maildir.uid.UIDMaildirMessage})
28 * or while being added its name will be changed to conform to it.</p>
29 * <p>
30 * Consequences of such store's behaviour are quicker, less complicated
31 * maintenance of UID and mapping from UIDs to messages; simple tracking
32 * of externally removed and added messages. Negative side is that external
33 * application would see messages disappearing when added to the store and
34 * new messages with exactly the same content appearing after (while)
35 * this store is executing over same directory.
36 * </p>
37 * <p>Only two files that this store needs are ".nextuid" where the last
38 * uid number is stored and ".uidvalidity" where folder's uid validity is
39 * stored.</p>
40 *
41 * @author Daniel Sendula
42 */
43 public class UIDMaildirStore extends MaildirStore {
44
45 /** Name of a file storing next uid number */
46 public static final String NEXT_UID_FILE = ".nextuid";
47
48 /** Name of a file storing folder's uid validity */
49 public static final String UID_VALIDITY_FILE = ".uidvalidity";
50
51 /**
52 * Constructor
53 * @param session mail session
54 * @param urlname url name
55 */
56 public UIDMaildirStore(Session session, URLName urlname) {
57 super(session, urlname);
58 }
59
60 /**
61 * This implementation creates {@link UIDMaildirFolder}
62 * @param folderData folder data
63 * @return new maildir folder
64 */
65 protected MaildirFolder createFolder(MaildirFolderData folderData) {
66 return new UIDMaildirFolder(this, folderData);
67 }
68
69 /**
70 * This implementation creates {@link UIDMaildirFolderData} from supplied file.
71 * @param file file
72 * @return new maildir folder data
73 */
74 protected MaildirFolderData createFolderData(File file) {
75 return new UIDMaildirFolderData(this, file);
76 }
77 }