KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > composer > action > SaveAsDraftAction


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.gui.composer.action;
17
18 import java.awt.Toolkit JavaDoc;
19 import java.awt.event.ActionEvent JavaDoc;
20 import java.awt.event.KeyEvent JavaDoc;
21
22 import javax.swing.KeyStroke JavaDoc;
23
24 import org.columba.api.gui.frame.IFrameMediator;
25 import org.columba.core.command.CommandProcessor;
26 import org.columba.core.gui.action.AbstractColumbaAction;
27 import org.columba.core.resourceloader.ImageLoader;
28 import org.columba.mail.command.ComposerCommandReference;
29 import org.columba.mail.command.MailFolderCommandReference;
30 import org.columba.mail.config.AccountItem;
31 import org.columba.mail.config.SpecialFoldersItem;
32 import org.columba.mail.folder.IMailbox;
33 import org.columba.mail.folder.command.ExpungeFolderCommand;
34 import org.columba.mail.folder.command.MarkMessageCommand;
35 import org.columba.mail.gui.composer.ComposerController;
36 import org.columba.mail.gui.composer.ComposerModel;
37 import org.columba.mail.gui.composer.command.SaveMessageCommand;
38 import org.columba.mail.gui.tree.FolderTreeModel;
39 import org.columba.mail.util.MailResourceLoader;
40 import org.columba.ristretto.message.Flags;
41
42 /**
43  * @author freddy
44  */

45 public class SaveAsDraftAction extends AbstractColumbaAction {
46     public SaveAsDraftAction(IFrameMediator frameMediator) {
47         super(frameMediator, MailResourceLoader.getString("menu", "composer",
48                 "menu_file_savedraft"));
49
50         putValue(SMALL_ICON, ImageLoader.getSmallIcon("document-save.png"));
51         putValue(LARGE_ICON, ImageLoader.getIcon("document-save.png"));
52
53         // tooltip text
54
putValue(SHORT_DESCRIPTION, MailResourceLoader.getString("menu",
55                 "composer", "menu_file_savedraft").replaceAll("&", ""));
56
57         // shortcut key
58
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_S,
59                 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
60     }
61
62     /*
63      * (non-Javadoc)
64      *
65      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
66      */

67     public void actionPerformed(ActionEvent JavaDoc evt) {
68         final ComposerController composerController = (ComposerController) getFrameMediator();
69
70         // view data ->model
71
composerController.updateComponents(false);
72
73         ComposerModel model = ((ComposerModel) composerController.getModel());
74
75         // get selected account
76
AccountItem item = model.getAccountItem();
77         // get "Drafts" folder of account
78
SpecialFoldersItem folderItem = item.getSpecialFoldersItem();
79         String JavaDoc str = folderItem.get("drafts");
80         IMailbox destFolder = (IMailbox) FolderTreeModel.getInstance()
81                 .getFolder(str);
82
83         // check if we are currently editing a draft message
84
if (model.getMessage().getHeader().getFlags().getDraft()) {
85             // -> we need to replace old message
86

87             // delete source message
88
MailFolderCommandReference r = model.getSourceReference();
89             if (r != null) {
90                 r.setMarkVariant(MarkMessageCommand.MARK_AS_EXPUNGED);
91                 CommandProcessor.getInstance().addOp(new MarkMessageCommand(r));
92                 CommandProcessor.getInstance().addOp(
93                         new ExpungeFolderCommand(r));
94             }
95         }
96
97         // mark as read, mark as draft
98
Flags flags = new Flags();
99         flags.setSeen(true);
100         flags.setDraft(true);
101         model.getMessage().getHeader().setFlags(flags);
102
103         // create command reference
104
ComposerCommandReference r = new ComposerCommandReference(
105                 composerController, destFolder);
106         r.setAppendSignature(false);
107
108         // create command
109
SaveMessageCommand c = new SaveMessageCommand(r);
110
111         CommandProcessor.getInstance().addOp(c);
112     }
113 }
114
Popular Tags