1 package org.columba.mail.gui.composer.command; 17 18 import java.io.InputStream ; 19 import java.util.List ; 20 21 import org.columba.api.command.ICommandReference; 22 import org.columba.api.command.IWorkerStatusController; 23 import org.columba.core.command.Command; 24 import org.columba.core.command.ProgressObservedInputStream; 25 import org.columba.core.command.Worker; 26 import org.columba.mail.command.ComposerCommandReference; 27 import org.columba.mail.composer.MessageBuilderHelper; 28 import org.columba.mail.composer.MessageComposer; 29 import org.columba.mail.composer.SendableMessage; 30 import org.columba.mail.folder.IMailbox; 31 import org.columba.mail.gui.composer.ComposerController; 32 import org.columba.mail.gui.composer.ComposerModel; 33 import org.columba.mail.util.MailResourceLoader; 34 import org.columba.ristretto.message.Address; 35 import org.columba.ristretto.parser.AddressParser; 36 import org.columba.ristretto.parser.ParserException; 37 38 41 public class SaveMessageCommand extends Command { 42 private IMailbox folder; 43 44 49 public SaveMessageCommand(ICommandReference reference) { 50 super(reference); 51 } 52 53 58 public void execute(IWorkerStatusController worker) throws Exception { 59 ComposerCommandReference r = (ComposerCommandReference) getReference(); 60 61 ComposerController composerController = r.getComposerController(); 62 63 SendableMessage message = (SendableMessage) r.getMessage(); 64 65 if (message == null) { 66 message = new MessageComposer(((ComposerModel) composerController 67 .getModel())).compose(worker, r.isAppendSignature()); 68 } 69 70 folder = (IMailbox) r.getSourceFolder(); 71 72 worker.setDisplayText(MailResourceLoader.getString("statusbar", 73 "message", "save_message")); 74 75 InputStream sourceStream = new ProgressObservedInputStream(message 76 .getSourceStream(), worker); 77 folder.addMessage(sourceStream, message.getHeader().getAttributes(), 78 message.getHeader().getFlags()); 79 sourceStream.close(); 80 81 List recipients = message.getRecipients(); 83 if (recipients != null && recipients.size() > 0) { 84 Address[] addresses = new Address[recipients.size()]; 85 for (int i = 0; i < recipients.size(); i++) { 86 try { 87 addresses[i] = AddressParser 88 .parseAddress((String ) recipients.get(i)); 89 } catch (ParserException e) { 90 addresses[i] = addresses[i - 1]; 91 } 92 } 93 94 MessageBuilderHelper.addAddressesToAddressbook(addresses); 95 } 96 } 97 } | Popular Tags |