KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > folder > command > ExportFolderCommand


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16
package org.columba.mail.folder.command;
17
18 import java.io.BufferedInputStream JavaDoc;
19 import java.io.BufferedOutputStream JavaDoc;
20 import java.io.FileOutputStream JavaDoc;
21 import java.io.IOException JavaDoc;
22 import java.io.InputStream JavaDoc;
23 import java.io.OutputStream JavaDoc;
24 import java.text.MessageFormat JavaDoc;
25
26 import javax.swing.JOptionPane JavaDoc;
27
28 import org.columba.api.command.ICommandReference;
29 import org.columba.api.command.IWorkerStatusController;
30 import org.columba.core.command.Command;
31 import org.columba.core.gui.frame.FrameManager;
32 import org.columba.mail.command.IMailFolderCommandReference;
33 import org.columba.mail.folder.IMailbox;
34 import org.columba.mail.util.MailResourceLoader;
35
36 /**
37  * Export all selected folders to a single MBOX mailbox file.
38  *
39  * MBOX mailbox format: http://www.qmail.org/qmail-manual-html/man5/mbox.html
40  *
41  * @author fdietz
42  */

43 public class ExportFolderCommand extends Command {
44
45     protected Object JavaDoc[] destUids;
46
47     /**
48      * @param references
49      */

50     public ExportFolderCommand(ICommandReference reference) {
51         super(reference);
52     }
53
54     /*
55      * (non-Javadoc)
56      *
57      * @see org.columba.api.command.Command#execute(org.columba.api.command.Worker)
58      */

59     public void execute(IWorkerStatusController worker) throws Exception JavaDoc {
60         // get references
61
IMailFolderCommandReference r = (IMailFolderCommandReference) getReference();
62
63         OutputStream JavaDoc os = null;
64
65         try {
66             // create output stream
67
os = new BufferedOutputStream JavaDoc(new FileOutputStream JavaDoc(r.getDestFile()));
68
69             int counter = 0;
70             IMailbox srcFolder;
71             Object JavaDoc[] uids;
72             InputStream JavaDoc in;
73             int read;
74             byte[] buffer = new byte[1024];
75
76             // get source folder
77
srcFolder = (IMailbox) r.getSourceFolder();
78
79             // get array of message UIDs
80
uids = srcFolder.getUids();
81
82             // initialize progressbar with total number of messages
83
worker.setProgressBarMaximum(uids.length);
84             worker.setProgressBarValue(0);
85
86             // for each message in folder i
87
for (int j = 0; (j < uids.length) && !worker.cancelled(); j++) {
88                 // get message source from folder
89
in = new BufferedInputStream JavaDoc(srcFolder
90                         .getMessageSourceStream(uids[j]));
91
92                 // prepend From line
93
os.write(new String JavaDoc("From \r\n").getBytes());
94
95                 // write message source to file
96
while ((read = in.read(buffer, 0, buffer.length)) > 0) {
97                     os.write(buffer, 0, read);
98                 }
99
100                 try {
101                     in.close();
102                 } catch (IOException JavaDoc ioe_) {
103                 }
104
105                 // append newline
106
os.write(new String JavaDoc("\r\n").getBytes());
107
108                 os.flush();
109
110                 worker.setProgressBarValue(j);
111                 counter++;
112             }
113
114             // update status message
115
if (worker.cancelled()) {
116                 worker.setDisplayText(MailResourceLoader.getString("statusbar",
117                         "message", "export_messages_cancelled"));
118             } else {
119                 worker.setDisplayText(MessageFormat.format(MailResourceLoader
120                         .getString("statusbar", "message",
121                                 "export_messages_success"),
122                         new Object JavaDoc[] { Integer.toString(counter) }));
123             }
124         } catch (IOException JavaDoc ioe) {
125             JOptionPane.showMessageDialog(FrameManager.getInstance()
126                     .getActiveFrame(), MailResourceLoader.getString(
127                     "statusbar", "message", "err_export_messages_msg"),
128                     MailResourceLoader.getString("statusbar", "messages",
129                             "err_export_messages_title"),
130                     JOptionPane.ERROR_MESSAGE);
131         } finally {
132             try {
133                 // close output stream
134
if (os != null) {
135                     os.close();
136                 }
137             } catch (IOException JavaDoc ioe) {
138             }
139         }
140     }
141 }
Popular Tags