1 package org.columba.mail.folder.command; 19 20 import java.util.ArrayList ; 21 import java.util.Iterator ; 22 import java.util.List ; 23 import java.util.StringTokenizer ; 24 import java.util.Vector ; 25 26 import org.columba.addressbook.facade.IContactFacade; 27 import org.columba.addressbook.facade.IContactItem; 28 import org.columba.addressbook.facade.IModelFacade; 29 import org.columba.api.command.ICommandReference; 30 import org.columba.api.command.IWorkerStatusController; 31 import org.columba.api.exception.ServiceNotFoundException; 32 import org.columba.api.exception.StoreException; 33 import org.columba.core.command.Command; 34 import org.columba.core.command.StatusObservableImpl; 35 import org.columba.core.folder.api.IFolderCommandReference; 36 import org.columba.mail.connector.FacadeUtil; 37 import org.columba.mail.connector.ServiceConnector; 38 import org.columba.mail.folder.IMailbox; 39 import org.columba.ristretto.message.Address; 40 import org.columba.ristretto.message.Header; 41 import org.columba.ristretto.parser.ParserException; 42 43 50 public class AddAllSendersToAddressbookCommand extends Command { 51 52 57 public AddAllSendersToAddressbookCommand(ICommandReference reference) { 58 super(reference); 59 } 60 61 64 public void execute(IWorkerStatusController worker) throws Exception { 65 IFolderCommandReference r = (IFolderCommandReference) getReference(); 67 68 Object [] uids = r.getUids(); 70 71 IMailbox folder = (IMailbox) r.getSourceFolder(); 73 74 ((StatusObservableImpl) folder.getObservable()).setWorker(worker); 76 77 IContactFacade contactFacade = null; 78 IModelFacade modelFacade = null; 79 try { 80 contactFacade = ServiceConnector.getContactFacade(); 81 modelFacade = ServiceConnector.getModelFacade(); 82 } catch (ServiceNotFoundException e) { 83 e.printStackTrace(); 84 return; 85 } 86 87 List <String > addresses = new ArrayList <String >(); 88 89 for (int i = 0; i < uids.length; i++) { 91 Header header = folder.getHeaderFields(uids[i], new String [] { 93 "From", "To", "Cc", "Bcc" }); 94 95 String addrStr = (String ) header.get("From"); 96 addresses.addAll(parseAddrStr(addrStr)); 97 98 addrStr = (String ) header.get("To"); 99 addresses.addAll(parseAddrStr(addrStr)); 100 101 addrStr = (String ) header.get("Cc"); 102 addresses.addAll(parseAddrStr(addrStr)); 103 104 addrStr = (String ) header.get("Bcc"); 105 addresses.addAll(parseAddrStr(addrStr)); 106 107 } 108 109 Iterator <String > it = addresses.listIterator(); 111 List <IContactItem> contactItems = new ArrayList <IContactItem>(); 112 while (it.hasNext()) { 113 try { 114 String addrStr = it.next(); 115 if (addrStr == null) 116 continue; 117 Address address = Address.parse(addrStr); 118 119 IContactItem contactItem = modelFacade.createContactItem(); 121 FacadeUtil.getInstance().initContactItem(contactItem, address.getDisplayName(), address.getMailAddress()); 122 contactItems.add(contactItem); 123 } catch (ParserException e) { 124 e.printStackTrace(); 125 } catch (StoreException e) { 126 e.printStackTrace(); 127 } 128 } 129 contactFacade.addContacts(contactItems.toArray(new IContactItem[contactItems.size()])); 130 } 131 132 137 private List <String > parseAddrStr(String addrStr) { 138 List <String > addresses = new ArrayList <String >(); 139 if (addrStr == null) 140 return addresses; 141 StringTokenizer st = new StringTokenizer (addrStr, ","); 142 while (st.hasMoreTokens()) { 143 String addr = st.nextToken(); 144 addresses.add(addr); 145 } 146 return addresses; 147 } 148 149 } | Popular Tags |