1 package org.columba.mail.folder.command; 17 18 import java.io.IOException ; 19 import java.io.InputStream ; 20 import java.text.MessageFormat ; 21 import java.util.logging.Logger ; 22 23 import javax.swing.JOptionPane ; 24 25 import org.columba.api.command.ICommandReference; 26 import org.columba.api.command.IWorkerStatusController; 27 import org.columba.core.command.Command; 28 import org.columba.core.command.StatusObservableImpl; 29 import org.columba.core.command.Worker; 30 import org.columba.core.gui.frame.FrameManager; 31 import org.columba.mail.command.IMailFolderCommandReference; 32 import org.columba.mail.folder.IMailbox; 33 import org.columba.mail.util.MailResourceLoader; 34 import org.columba.ristretto.message.Attributes; 35 import org.columba.ristretto.message.Flags; 36 37 45 public class CopyMessageCommand extends Command { 46 47 48 private static final Logger LOG = Logger 49 .getLogger("org.columba.mail.folder.command"); 50 51 protected IMailbox destFolder; 52 53 protected IMailFolderCommandReference r; 54 55 61 public CopyMessageCommand(ICommandReference reference) { 62 super(reference); 63 } 64 65 protected void doExecute(IWorkerStatusController worker, 66 String statusMessage, String errorRetryMessage, 67 String errorIgnoreMessage, String errorCopyMessage, 68 String errorTitle, String canceledMessage) throws Exception { 69 r = (IMailFolderCommandReference) getReference(); 71 72 destFolder = (IMailbox) r.getDestinationFolder(); 74 75 Object [] uids = r.getUids(); 76 77 IMailbox srcFolder = (IMailbox) r.getSourceFolder(); 79 80 ((StatusObservableImpl) srcFolder.getObservable()).setWorker(worker); 82 83 srcFolder.setLastSelection(null); 85 86 LOG.fine("src=" + srcFolder + " dest=" + destFolder); 87 88 worker.setDisplayText(MessageFormat.format(MailResourceLoader 90 .getString("statusbar", "message", statusMessage), 91 new Object [] { destFolder.getName() })); 92 93 worker.setProgressBarMaximum(uids.length); 95 96 if (srcFolder.getRootFolder().equals(destFolder.getRootFolder())) { 97 srcFolder.innerCopy(destFolder, uids); 104 } else { 105 for (int j = 0; (j < uids.length) && !worker.cancelled(); j++) { 111 if (!srcFolder.exists(uids[j])) { 112 continue; 113 } 114 115 try { 116 Attributes attributes = srcFolder.getAttributes(uids[j]); 118 Flags flags = srcFolder.getFlags(uids[j]); 119 InputStream messageSourceStream = srcFolder 120 .getMessageSourceStream(uids[j]); 121 destFolder.addMessage(messageSourceStream, attributes, 122 flags); 123 messageSourceStream.close(); 124 } catch (IOException ioe) { 125 String [] options = new String [] { 126 MailResourceLoader.getString("statusbar", 127 "message", errorRetryMessage), 128 MailResourceLoader.getString("statusbar", 129 "message", errorIgnoreMessage), 130 MailResourceLoader 131 .getString("", "global", "cancel") }; 132 133 int result = JOptionPane.showOptionDialog(FrameManager.getInstance() 134 .getActiveFrame(), 135 MailResourceLoader.getString("statusbar", 136 "message", errorCopyMessage), 137 MailResourceLoader.getString("statusbar", 138 "message", errorTitle), 139 JOptionPane.YES_NO_CANCEL_OPTION, 140 JOptionPane.ERROR_MESSAGE, null, options, 141 options[0]); 142 switch (result) { 143 case JOptionPane.YES_OPTION: 144 145 j--; 147 148 break; 149 150 case JOptionPane.CANCEL_OPTION: 151 worker.cancel(); 152 153 default: 154 155 continue; 156 } 157 } 158 159 worker.setProgressBarValue(j); 161 } 162 } 163 164 worker.setProgressBarValue(0); 166 167 if (worker.cancelled()) { 168 worker.setDisplayText(MailResourceLoader.getString("statusbar", 169 "message", canceledMessage)); 170 } else { 171 worker.clearDisplayTextWithDelay(); 173 } 174 175 } 176 177 180 public void execute(IWorkerStatusController worker) throws Exception { 181 doExecute(worker, "copy_messages", "err_copy_messages_retry", 182 "err_copy_messages_ignore", "err_copy_messages_msg", 183 "err_copy_messages_title", "copy_messages_cancelled"); 184 } 185 } | Popular Tags |