KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > folder > command > AddAllSendersToAddressbookCommand


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.folder.command;
19
20 import java.util.ArrayList JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.StringTokenizer JavaDoc;
24 import java.util.Vector JavaDoc;
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 /**
44  * Add all senders contained in the selected messages to the addressbook.
45  * <p>
46  * A dialog asks the user to choose the destination addressbook.
47  *
48  * @author fdietz
49  */

50 public class AddAllSendersToAddressbookCommand extends Command {
51
52     /**
53      * Constructor for AddAllSendersToAddressbookCommand.
54      *
55      * @param references
56      */

57     public AddAllSendersToAddressbookCommand(ICommandReference reference) {
58         super(reference);
59     }
60
61     /**
62      * @see org.columba.api.command.Command#execute(org.columba.api.command.Worker)
63      */

64     public void execute(IWorkerStatusController worker) throws Exception JavaDoc {
65         // get reference
66
IFolderCommandReference r = (IFolderCommandReference) getReference();
67
68         // selected messages
69
Object JavaDoc[] uids = r.getUids();
70
71         // selected folder
72
IMailbox folder = (IMailbox) r.getSourceFolder();
73
74         // register for status events
75
((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 JavaDoc<String JavaDoc> addresses = new ArrayList JavaDoc<String JavaDoc>();
88
89         // for every message
90
for (int i = 0; i < uids.length; i++) {
91             // get header of message
92
Header header = folder.getHeaderFields(uids[i], new String JavaDoc[] {
93                     "From", "To", "Cc", "Bcc" });
94
95             String JavaDoc addrStr = (String JavaDoc) header.get("From");
96             addresses.addAll(parseAddrStr(addrStr));
97
98             addrStr = (String JavaDoc) header.get("To");
99             addresses.addAll(parseAddrStr(addrStr));
100
101             addrStr = (String JavaDoc) header.get("Cc");
102             addresses.addAll(parseAddrStr(addrStr));
103
104             addrStr = (String JavaDoc) header.get("Bcc");
105             addresses.addAll(parseAddrStr(addrStr));
106
107         }
108
109         // add sender to addressbook
110
Iterator JavaDoc<String JavaDoc> it = addresses.listIterator();
111         List JavaDoc<IContactItem> contactItems = new ArrayList JavaDoc<IContactItem>();
112         while (it.hasNext()) {
113             try {
114                 String JavaDoc addrStr = it.next();
115                 if (addrStr == null)
116                     continue;
117                 Address address = Address.parse(addrStr);
118
119                 // add contact to addressbook
120
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     /**
133      * Parse an address string containing multiple comma-separated mail addresses
134      * @param addrStr The comma-separated address string.
135      * @return List containing individual address strings
136      */

137     private List JavaDoc<String JavaDoc> parseAddrStr(String JavaDoc addrStr) {
138         List JavaDoc<String JavaDoc> addresses = new ArrayList JavaDoc<String JavaDoc>();
139         if (addrStr == null)
140             return addresses;
141         StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(addrStr, ",");
142         while (st.hasMoreTokens()) {
143             String JavaDoc addr = st.nextToken();
144             addresses.add(addr);
145         }
146         return addresses;
147     }
148
149 }
Popular Tags