KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > composer > command > ReplyWithTemplateCommand


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
package org.columba.mail.gui.composer.command;
19
20 import java.io.IOException JavaDoc;
21 import java.io.InputStream JavaDoc;
22
23 import org.columba.api.command.ICommandReference;
24 import org.columba.api.command.IWorkerStatusController;
25 import org.columba.api.gui.frame.IFrameMediator;
26 import org.columba.core.command.CommandCancelledException;
27 import org.columba.core.io.StreamUtils;
28 import org.columba.core.xml.XmlElement;
29 import org.columba.mail.command.MailFolderCommandReference;
30 import org.columba.mail.config.MailConfig;
31 import org.columba.mail.folder.IMailbox;
32 import org.columba.mail.gui.composer.ComposerModel;
33 import org.columba.mail.gui.config.template.ChooseTemplateDialog;
34 import org.columba.mail.gui.tree.FolderTreeModel;
35 import org.columba.mail.message.IHeaderList;
36 import org.columba.ristretto.message.MimePart;
37 import org.columba.ristretto.message.MimeTree;
38
39 /**
40  * Opens a dialog to ask the user which template to use
41  *
42  * @author fdietz
43  */

44 public class ReplyWithTemplateCommand extends ReplyCommand {
45
46     private IFrameMediator mediator;
47
48     public ReplyWithTemplateCommand(IFrameMediator mediator,
49             ICommandReference reference) {
50         super(reference);
51
52         this.mediator = mediator;
53     }
54
55     public void execute(IWorkerStatusController worker) throws Exception JavaDoc {
56         // create composer model
57
model = new ComposerModel();
58
59         // get selected folder
60
IMailbox folder = (IMailbox) ((MailFolderCommandReference) getReference())
61                 .getSourceFolder();
62
63         // get first selected message
64
Object JavaDoc[] uids = ((MailFolderCommandReference) getReference()).getUids();
65
66         // ->set source reference in composermodel
67
// when replying this is the original sender's message
68
// you selected and replied to
69
MailFolderCommandReference ref = new MailFolderCommandReference(folder,
70                 uids);
71         model.setSourceReference(ref);
72
73         // setup to, references and account
74
initHeader(folder, uids);
75
76         // get mimeparts
77
MimeTree mimePartTree = folder.getMimePartTree(uids[0]);
78
79         XmlElement html = MailConfig.getInstance().getMainFrameOptionsConfig()
80                 .getRoot().getElement("/options/html");
81
82         // Which Bodypart shall be shown? (html/plain)
83
MimePart bodyPart = null;
84
85         if (Boolean.valueOf(html.getAttribute("prefer")).booleanValue()) {
86             bodyPart = mimePartTree.getFirstTextPart("html");
87         } else {
88             bodyPart = mimePartTree.getFirstTextPart("plain");
89         }
90
91         if (bodyPart != null) {
92             // setup charset and html
93
initMimeHeader(bodyPart);
94
95             Integer JavaDoc[] address = bodyPart.getAddress();
96
97             String JavaDoc quotedBodyText = createQuotedBody(bodyPart.getHeader(),
98                     folder, uids, address);
99
100             // get answer from template
101
String JavaDoc templateBody = getTemplateBody();
102
103             model.setBodyText(quotedBodyText + templateBody);
104         } else {
105             model.setBodyText(getTemplateBody());
106         }
107     }
108
109     private String JavaDoc getTemplateBody() throws Exception JavaDoc,
110             CommandCancelledException, IOException JavaDoc {
111         // template folder has uid=107
112
IMailbox templateFolder = (IMailbox) FolderTreeModel
113                 .getInstance().getFolder("107");
114
115         // retrieve headerlist of tempate folder
116
IHeaderList list = templateFolder.getHeaderList();
117
118         // choose template
119
ChooseTemplateDialog d = new ChooseTemplateDialog(mediator.getView()
120                 .getFrame(), list);
121
122         Object JavaDoc uid = null;
123
124         if (d.isResult()) {
125             // user pressed OK
126
uid = d.getUid();
127         } else {
128             throw new CommandCancelledException();
129         }
130
131         // get bodytext of template message
132
MimeTree tree = templateFolder.getMimePartTree(uid);
133
134         // *20030926, karlpeder* Added html support
135
// MimePart mp = tree.getFirstTextPart("plain");
136
MimePart mp;
137
138         if (model.isHtml()) {
139             mp = tree.getFirstTextPart("html");
140         } else {
141             mp = tree.getFirstTextPart("text");
142         }
143
144         InputStream JavaDoc bodyStream = templateFolder.getMimePartBodyStream(uid, mp
145                 .getAddress());
146
147         String JavaDoc body = StreamUtils.readCharacterStream(bodyStream).toString();
148
149         bodyStream.close();
150         return body;
151     }
152 }
Popular Tags