1 package org.columba.mail.gui.composer.command; 19 20 import java.io.IOException ; 21 import java.io.InputStream ; 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 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 { 56 model = new ComposerModel(); 58 59 IMailbox folder = (IMailbox) ((MailFolderCommandReference) getReference()) 61 .getSourceFolder(); 62 63 Object [] uids = ((MailFolderCommandReference) getReference()).getUids(); 65 66 MailFolderCommandReference ref = new MailFolderCommandReference(folder, 70 uids); 71 model.setSourceReference(ref); 72 73 initHeader(folder, uids); 75 76 MimeTree mimePartTree = folder.getMimePartTree(uids[0]); 78 79 XmlElement html = MailConfig.getInstance().getMainFrameOptionsConfig() 80 .getRoot().getElement("/options/html"); 81 82 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 initMimeHeader(bodyPart); 94 95 Integer [] address = bodyPart.getAddress(); 96 97 String quotedBodyText = createQuotedBody(bodyPart.getHeader(), 98 folder, uids, address); 99 100 String templateBody = getTemplateBody(); 102 103 model.setBodyText(quotedBodyText + templateBody); 104 } else { 105 model.setBodyText(getTemplateBody()); 106 } 107 } 108 109 private String getTemplateBody() throws Exception , 110 CommandCancelledException, IOException { 111 IMailbox templateFolder = (IMailbox) FolderTreeModel 113 .getInstance().getFolder("107"); 114 115 IHeaderList list = templateFolder.getHeaderList(); 117 118 ChooseTemplateDialog d = new ChooseTemplateDialog(mediator.getView() 120 .getFrame(), list); 121 122 Object uid = null; 123 124 if (d.isResult()) { 125 uid = d.getUid(); 127 } else { 128 throw new CommandCancelledException(); 129 } 130 131 MimeTree tree = templateFolder.getMimePartTree(uid); 133 134 MimePart mp; 137 138 if (model.isHtml()) { 139 mp = tree.getFirstTextPart("html"); 140 } else { 141 mp = tree.getFirstTextPart("text"); 142 } 143 144 InputStream bodyStream = templateFolder.getMimePartBodyStream(uid, mp 145 .getAddress()); 146 147 String body = StreamUtils.readCharacterStream(bodyStream).toString(); 148 149 bodyStream.close(); 150 return body; 151 } 152 } | Popular Tags |