KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > facade > ContactFacade


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.addressbook.facade;
19
20 import java.util.Iterator JavaDoc;
21 import java.util.List JavaDoc;
22 import java.util.Map JavaDoc;
23 import java.util.Vector JavaDoc;
24
25 import org.columba.addressbook.folder.AbstractFolder;
26 import org.columba.addressbook.folder.IContactFolder;
27 import org.columba.addressbook.folder.IFolder;
28 import org.columba.addressbook.folder.IGroupFolder;
29 import org.columba.addressbook.gui.tree.AddressbookTreeModel;
30 import org.columba.addressbook.gui.tree.util.SelectAddressbookFolderDialog;
31 import org.columba.addressbook.model.ContactModel;
32 import org.columba.addressbook.model.IContactModel;
33 import org.columba.addressbook.model.IContactModelPartial;
34 import org.columba.addressbook.model.IGroupModel;
35 import org.columba.api.exception.StoreException;
36
37 /**
38  * Provides high-level contact management methods.
39  *
40  * @author fdietz
41  */

42 public final class ContactFacade implements IContactFacade {
43
44     private static final java.util.logging.Logger JavaDoc LOG = java.util.logging.Logger
45             .getLogger("org.columba.addressbook.facade"); //$NON-NLS-1$
46

47     /**
48      * @see org.columba.addressbook.facade.IContactFacade#addContact(int,
49      * IContactItem)
50      */

51     public void addContact(String JavaDoc uid, IContactItem contactItem)
52             throws StoreException {
53         if (contactItem == null)
54             throw new IllegalArgumentException JavaDoc("IContactItem is null");
55
56         if (uid == null)
57             throw new IllegalArgumentException JavaDoc("uid == null");
58
59         checkContactItemValidity(contactItem);
60
61         AbstractFolder selectedFolder = (AbstractFolder) AddressbookTreeModel
62                 .getInstance().getFolder(uid);
63
64         IContactModel card = createContactModel(contactItem);
65
66         try {
67             if (selectedFolder.findByEmailAddress(card.getPreferredEmail()) == null)
68                 selectedFolder.add(card);
69         } catch (Exception JavaDoc e) {
70             e.printStackTrace();
71         }
72
73     }
74
75     private ContactModel createContactModel(IContactItem contactItem) {
76         return new ContactModel(contactItem);
77
78     }
79
80     /**
81      * @see org.columba.addressbook.facade.IContactFacade#addContact(int,
82      * IContactItem)
83      */

84     public void addContacts(String JavaDoc uid, IContactItem[] contactItems)
85             throws StoreException {
86         if (uid == null)
87             throw new IllegalArgumentException JavaDoc("uid == null");
88
89         if (contactItems == null)
90             throw new IllegalArgumentException JavaDoc(
91                     "Zero IContactItem's were specified to add to addressbook folder");
92
93         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
94         IContactFolder folder = (IContactFolder) model.getFolder(uid);
95
96         for (int i = 0; i < contactItems.length; i++) {
97             
98             // skip if contact item is not valid
99
try {
100                 checkContactItemValidity(contactItems[i]);
101             }
102             catch (IllegalArgumentException JavaDoc e) {
103                 continue;
104             }
105             
106             IContactModel card = createContactModel(contactItems[i]);
107
108             // check if contact with given email address exists already
109
if (folder.findByEmailAddress(card.getPreferredEmail()) == null)
110                 folder.add(card);
111
112         }
113     }
114
115     /**
116      * @see org.columba.addressbook.facade.IContactFacade#addContact(IContactItem)
117      */

118     public void addContacts(IContactItem[] contactItems) throws StoreException {
119
120         if (contactItems == null)
121             throw new IllegalArgumentException JavaDoc(
122                     "Zero IContactItem's were specified to add to addressbook folder");
123
124         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
125         SelectAddressbookFolderDialog dialog = new SelectAddressbookFolderDialog(
126                 model);
127         if (dialog.success()) {
128             IFolder folder = dialog.getSelectedFolder();
129             String JavaDoc uid = folder.getId();
130
131             addContacts(uid, contactItems);
132         } else
133             return;
134     }
135
136     /**
137      * @see org.columba.addressbook.facade.IContactFacade#addContact(IContactItem)
138      */

139     public void addContact(IContactItem contactItem) throws StoreException {
140         if (contactItem == null)
141             throw new IllegalArgumentException JavaDoc("IContactItem is null");
142
143         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
144         SelectAddressbookFolderDialog dialog = new SelectAddressbookFolderDialog(
145                 model);
146         if (dialog.success()) {
147             IFolder folder = dialog.getSelectedFolder();
148             String JavaDoc uid = folder.getId();
149
150             addContact(uid, contactItem);
151         } else
152             return;
153     }
154
155     private void checkContactItemValidity(IContactItem contactItem) {
156         if (contactItem.getFirstName() != null) {
157             // check if it contains comma character
158
if (contactItem.getFirstName().indexOf(",") != -1)
159                 throw new IllegalArgumentException JavaDoc(
160                         "Firstname contains illegal character <,>");
161         }
162
163         if (contactItem.getLastName() != null) {
164             // check if it contains comma character
165
if (contactItem.getLastName().indexOf(",") != -1)
166                 throw new IllegalArgumentException JavaDoc(
167                         "Lastname contains illegal character <,>");
168         }
169
170     }
171
172     /**
173      * @see org.columba.addressbook.facade.IContactFacade#getAllHeaderItems(java.lang.String)
174      */

175     public List JavaDoc<IHeaderItem> getAllHeaderItems(String JavaDoc folderId,
176             boolean flattenGroupItems) throws StoreException {
177         if (folderId == null)
178             throw new IllegalArgumentException JavaDoc("folderId == null");
179
180         Vector JavaDoc<IHeaderItem> v = new Vector JavaDoc<IHeaderItem>();
181         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
182         IFolder f = model.getFolder(folderId);
183         if (f == null)
184             return v;
185
186         if (!(f instanceof IContactFolder))
187             return v;
188
189         IContactFolder folder = (IContactFolder) f;
190         try {
191             Iterator JavaDoc<IContactModelPartial> it = folder.getHeaderItemList()
192                     .iterator();
193             while (it.hasNext()) {
194                 IContactModelPartial itemPartial = it.next();
195
196                 IContactItem item = createContactItem(itemPartial);
197
198                 v.add(item);
199             }
200
201             List JavaDoc<IGroupItem> groupList = getAllGroups(folderId);
202
203             if (flattenGroupItems) {
204                 // retrieve all contact items and add those to the list only
205
Iterator JavaDoc<IGroupItem> it2 = groupList.iterator();
206                 while (it2.hasNext()) {
207                     IGroupItem groupItem = it2.next();
208                     List JavaDoc<IContactItem> l = groupItem.getContacts();
209                     v.addAll(l);
210                 }
211             } else {
212                 // simply all all group items to the list
213
v.addAll(groupList);
214             }
215
216         } catch (Exception JavaDoc e) {
217             e.printStackTrace();
218         }
219
220         return v;
221     }
222
223     /**
224      * @see org.columba.addressbook.facade.IContactFacade#getAllContacts(java.lang.String)
225      */

226     public List JavaDoc<IContactItem> getAllContacts(String JavaDoc folderId) {
227         if (folderId == null)
228             throw new IllegalArgumentException JavaDoc("folderId == null");
229
230         Vector JavaDoc<IContactItem> v = new Vector JavaDoc<IContactItem>();
231         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
232         IFolder f = model.getFolder(folderId);
233         if (f == null)
234             return v;
235
236         if (!(f instanceof IContactFolder))
237             return v;
238
239         IContactFolder folder = (IContactFolder) f;
240         try {
241             Iterator JavaDoc<IContactModelPartial> it = folder.getHeaderItemList()
242                     .iterator();
243             while (it.hasNext()) {
244                 IContactModelPartial contactModel = it.next();
245
246                 IContactItem item = createContactItem(contactModel);
247
248                 v.add(item);
249             }
250         } catch (Exception JavaDoc e) {
251             e.printStackTrace();
252         }
253
254         return v;
255     }
256
257     /**
258      * @see org.columba.addressbook.facade.IContactFacade#getAllGroups(java.lang.String)
259      */

260     public List JavaDoc<IGroupItem> getAllGroups(String JavaDoc folderId) {
261         if (folderId == null)
262             throw new IllegalArgumentException JavaDoc("folderId = null");
263
264         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
265         IFolder f = (IFolder) model.getFolder(folderId);
266         if (f == null)
267             throw new IllegalArgumentException JavaDoc("contact folder does not exist");
268
269         Vector JavaDoc<IGroupItem> v = new Vector JavaDoc<IGroupItem>();
270
271         if (!(f instanceof IContactFolder))
272             return v;
273
274         IContactFolder contactFolder = (IContactFolder) f;
275
276         // add group items
277
for (int i = 0; i < f.getChildCount(); i++) {
278             IGroupFolder groupFolder = (IGroupFolder) f.getChildAt(i);
279             IGroupModel group = groupFolder.getGroup();
280
281             IGroupItem groupItem = new GroupItem(folderId);
282             groupItem.setName(group.getName());
283             groupItem.setDescription(group.getDescription());
284
285             String JavaDoc[] members = group.getMembers();
286             Map JavaDoc<String JavaDoc, IContactModelPartial> map = contactFolder
287                     .getContactItemMap(members);
288             Iterator JavaDoc<IContactModelPartial> it = map.values().iterator();
289             while (it.hasNext()) {
290                 IContactModelPartial partial = it.next();
291                 IContactItem item = createContactItem(partial);
292                 groupItem.addContact(item);
293             }
294             v.add(groupItem);
295         }
296
297         return v;
298     }
299
300     /**
301      * @see org.columba.addressbook.facade.IContactFacade#findByEmailAddress(java.lang.String,
302      * java.lang.String)
303      */

304     public String JavaDoc findByEmailAddress(String JavaDoc folderId, String JavaDoc emailAddress)
305             throws StoreException {
306         if (folderId == null)
307             throw new IllegalArgumentException JavaDoc("folderId = null");
308         if (emailAddress == null)
309             throw new IllegalArgumentException JavaDoc("emailAddress == null");
310
311         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
312         IFolder f = (IFolder) model.getFolder(folderId);
313         if (f == null)
314             throw new IllegalArgumentException JavaDoc("contact folder does not exist");
315
316         if (!(f instanceof IContactFolder))
317             return null;
318
319         IContactFolder contactFolder = (IContactFolder) f;
320         String JavaDoc id = contactFolder.findByEmailAddress(emailAddress);
321         return id;
322     }
323
324     /**
325      * @see org.columba.addressbook.facade.IContactFacade#findByName(java.lang.String,
326      * java.lang.String)
327      */

328     public String JavaDoc findByName(String JavaDoc folderId, String JavaDoc name)
329             throws StoreException, IllegalArgumentException JavaDoc {
330         if (folderId == null)
331             throw new IllegalArgumentException JavaDoc("folderId = null");
332         if (name == null)
333             throw new IllegalArgumentException JavaDoc("name == null");
334
335         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
336         IFolder f = (IFolder) model.getFolder(folderId);
337         if (f == null)
338             throw new IllegalArgumentException JavaDoc("contact folder does not exist");
339
340         if (!(f instanceof IContactFolder))
341             return null;
342
343         IContactFolder contactFolder = (IContactFolder) f;
344         String JavaDoc id = contactFolder.findByName(name);
345         return id;
346     }
347
348     private IContactItem createContactItem(IContactModelPartial itemPartial) {
349         IContactItem item = new ContactItem(itemPartial.getId(), itemPartial
350                 .getName(), itemPartial.getFirstname(), itemPartial
351                 .getLastname(), itemPartial.getAddress());
352
353         return item;
354     }
355
356     /**
357      * @see org.columba.addressbook.facade.IContactFacade#getContactItem(java.lang.String,
358      * java.lang.String)
359      */

360     public IContactItem getContactItem(String JavaDoc folderId, String JavaDoc contactId)
361             throws StoreException, IllegalArgumentException JavaDoc {
362         if (folderId == null)
363             throw new IllegalArgumentException JavaDoc("folderId = null");
364         if (contactId == null)
365             throw new IllegalArgumentException JavaDoc("contactId == null");
366         AddressbookTreeModel model = AddressbookTreeModel.getInstance();
367         IFolder f = (IFolder) model.getFolder(folderId);
368         if (f == null)
369             throw new IllegalArgumentException JavaDoc("contact folder does not exist");
370
371         if (!(f instanceof IContactFolder))
372             return null;
373
374         IContactFolder contactFolder = (IContactFolder) f;
375         Map JavaDoc<String JavaDoc, IContactModelPartial> map = contactFolder
376                 .getContactItemMap(new String JavaDoc[] { contactId });
377         if (map.isEmpty())
378             return null;
379
380         IContactModelPartial partial = map.get(contactId);
381
382         return createContactItem(partial);
383     }
384
385 }
Popular Tags