KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > folder > imap > IMAPCache


1 //The contents of this file are subject to the Mozilla Public License Version
2
//1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
//Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18

19 package org.columba.mail.folder.imap;
20
21 import java.io.ByteArrayInputStream JavaDoc;
22 import java.io.ByteArrayOutputStream JavaDoc;
23 import java.io.File JavaDoc;
24 import java.io.IOException JavaDoc;
25 import java.io.InputStream JavaDoc;
26 import java.io.ObjectInputStream JavaDoc;
27 import java.io.ObjectOutputStream JavaDoc;
28
29 import org.columba.core.config.DefaultConfigDirectory;
30 import org.columba.core.io.StreamCache;
31 import org.columba.core.shutdown.ShutdownManager;
32 import org.columba.ristretto.message.MimeTree;
33
34 public class IMAPCache implements Runnable JavaDoc {
35
36     //TODO:add a configuration of the cache size
37

38     private StreamCache cache;
39     private static IMAPCache instance = new IMAPCache();
40
41     protected IMAPCache() {
42         File JavaDoc configDir = DefaultConfigDirectory.getInstance().getCurrentPath();
43         cache = new StreamCache(new File JavaDoc(configDir, "imap_cache"));
44
45         ShutdownManager.getInstance().register(this);
46     }
47
48     public static IMAPCache getInstance() {
49         return instance;
50     }
51
52     public void addMimeTree(IMAPFolder folder, Object JavaDoc uid, MimeTree mimeTree) throws IOException JavaDoc {
53         cache.activeAdd(createMimeTreeKey(folder, uid), convertToStream(mimeTree));
54     }
55
56     public MimeTree getMimeTree(IMAPFolder folder, Object JavaDoc uid) throws IOException JavaDoc {
57         InputStream JavaDoc in = cache.get(createMimeTreeKey(folder, uid));
58         if( in != null ) {
59             try {
60                 return (MimeTree) new ObjectInputStream JavaDoc(in).readObject();
61             } catch (Exception JavaDoc e) {
62                 return null;
63             }
64
65         } else {
66             return null;
67         }
68     }
69
70     private InputStream JavaDoc convertToStream(Object JavaDoc o) throws IOException JavaDoc {
71         ByteArrayOutputStream JavaDoc out = new ByteArrayOutputStream JavaDoc(1024);
72         new ObjectOutputStream JavaDoc(out).writeObject(o);
73
74         return new ByteArrayInputStream JavaDoc(out.toByteArray());
75
76     }
77
78
79     public InputStream JavaDoc addMimeBody(IMAPFolder folder, Object JavaDoc uid, Integer JavaDoc[] address, InputStream JavaDoc data ) throws IOException JavaDoc {
80
81         return cache.passiveAdd(createMimeBodyKey(folder, uid, address), data);
82     }
83
84     public InputStream JavaDoc getMimeBody(IMAPFolder folder, Object JavaDoc uid, Integer JavaDoc[] address) {
85         return cache.get(createMimeBodyKey(folder, uid, address));
86     }
87
88     protected String JavaDoc createMimeBodyKey(IMAPFolder folder, Object JavaDoc uid, Integer JavaDoc[] address) {
89         return folder.getId() + uid.toString() + addressToString(address);
90     }
91
92     protected String JavaDoc createMimeTreeKey(IMAPFolder folder, Object JavaDoc uid) {
93         return folder.getId() + uid.toString();
94     }
95
96     protected String JavaDoc addressToString(Integer JavaDoc[] address) {
97         String JavaDoc result = address[0].toString();
98         for(int i=1; i<address.length; i++) {
99             result += "." + address[i];
100         }
101
102         return result;
103     }
104
105     public void run() {
106         //cache.clear();
107
try {
108             cache.persist();
109         } catch (IOException JavaDoc e) {
110             cache.clear();
111         }
112     }
113 }
114
Popular Tags