KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > model > ContactModelXMLFactory


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.model;
19
20 import java.util.Date JavaDoc;
21 import java.util.Iterator JavaDoc;
22
23 import javax.swing.Icon JavaDoc;
24 import javax.swing.ImageIcon JavaDoc;
25
26 import org.columba.addressbook.parser.ParserUtil;
27 import org.columba.addressbook.parser.SyntaxException;
28 import org.columba.addressbook.parser.XMLContactDocumentParser;
29 import org.jdom.Document;
30
31 /**
32  * Factory creates xml document from contact model or the other way around.
33  *
34  * @author fdietz
35  */

36 public class ContactModelXMLFactory {
37
38     public static Document marshall(IContactModel contactModel)
39             throws SyntaxException {
40
41         if (contactModel == null)
42             throw new IllegalArgumentException JavaDoc("contactModel == null");
43
44         XMLContactDocumentParser parser = new XMLContactDocumentParser();
45         parser.setId(contactModel.getId());
46
47         // <sortstring>value</sortstring>
48
if (contactModel.getSortString() != null)
49             parser.set(VCARD.SORTSTRING, contactModel.getSortString());
50
51         // <fn>value</fn>
52
if (contactModel.getFormattedName() != null)
53             parser.set(VCARD.FN, contactModel.getFormattedName());
54         // <nickname>value</nickname>
55
if (contactModel.getNickName() != null)
56             parser.set(VCARD.NICKNAME, contactModel.getNickName());
57
58         // <n>
59
// <family>value</family>
60
// <given>value</given>
61
// <prefix>value</prefix>
62
// <suffix>value</suffix>
63
// <additionalnames>value</additionalnames>
64
// </n>
65
if (contactModel.getFamilyName() != null)
66             parser.set(VCARD.N, VCARD.N_FAMILY, contactModel.getFamilyName());
67         if (contactModel.getGivenName() != null)
68             parser.set(VCARD.N, VCARD.N_GIVEN, contactModel.getGivenName());
69         if (contactModel.getNamePrefix() != null)
70             parser.set(VCARD.N, VCARD.N_PREFIX, contactModel.getNamePrefix());
71         if (contactModel.getNameSuffix() != null)
72             parser.set(VCARD.N, VCARD.N_SUFFIX, contactModel.getNameSuffix());
73         if (contactModel.getAdditionalNames() != null)
74             parser.set(VCARD.N, VCARD.N_ADDITIONALNAMES, contactModel
75                     .getAdditionalNames());
76
77         // <url>value</url>
78
if (contactModel.getHomePage() != null)
79             parser.set(VCARD.URL, contactModel.getHomePage());
80
81         if (contactModel.getWeblog() != null)
82             parser.set(VCARD.X_COLUMBA_URL_BLOG, contactModel.getWeblog());
83         if (contactModel.getFreeBusy() != null)
84             parser.set(VCARD.X_COLUMBA_URL_FREEBUSY, contactModel.getFreeBusy());
85         if (contactModel.getCalendar() != null)
86             parser.set(VCARD.X_COLUMBA_URL_CALENDAR, contactModel.getCalendar());
87
88         // <org>value</org>
89
parser.set(VCARD.ORG, contactModel.getOrganisation());
90         // <department>value</department>
91
parser.set(VCARD.X_COLUMBA_DEPARTMENT, contactModel.getDepartment());
92         // <office>value</office>
93
parser.set(VCARD.X_COLUMBA_OFFICE, contactModel.getOffice());
94
95         if (contactModel.getProfession() != null)
96             parser.set(VCARD.ROLE, contactModel.getProfession());
97         if (contactModel.getTitle() != null)
98             parser.set(VCARD.TITLE, contactModel.getTitle());
99
100         Date JavaDoc date = contactModel.getBirthday();
101         if (date != null) {
102             long time = date.getTime();
103             parser.set(VCARD.BDAY, new Long JavaDoc(time).toString());
104         }
105
106         // <email>
107
// <work>value</work>
108
// <home>value</home>
109
// </email>
110
Iterator JavaDoc it = contactModel.getEmailIterator();
111         while (it.hasNext()) {
112             IEmailModel m = ((IEmailModel) it.next());
113             parser.addEmail(m);
114         }
115
116         // <im>
117
// <aol>value</aol>
118
// <yahoo>value</yahoo>
119
// <jabber>value</jabber>
120
// </im>
121
it = contactModel.getInstantMessagingIterator();
122         while (it.hasNext()) {
123             InstantMessagingModel m = ((InstantMessagingModel) it.next());
124             parser.addInstantMessaging(m);
125         }
126
127         // <phone>
128
// <business>value</business>
129
// <home>value</home>
130
// </phone>
131
it = contactModel.getPhoneIterator();
132         while (it.hasNext()) {
133             PhoneModel m = (PhoneModel) it.next();
134             parser.addPhone(m);
135         }
136
137         // <adr>
138
// <work>
139
// <pobox>value</pobox>
140
// <street>value</street
141
// ..
142
// </work>
143
// ..
144
// </adr>
145
it = contactModel.getAddressIterator();
146         while (it.hasNext()) {
147             AddressModel m = (AddressModel) it.next();
148             parser.addAddress(m);
149         }
150
151         if (contactModel.getNote() != null)
152             parser.set(VCARD.NOTE, contactModel.getNote());
153
154         // base64 encode photo byte[] to string
155
ImageIcon JavaDoc image = contactModel.getPhoto();
156         if (image != null)
157             parser.set(VCARD.PHOTO, ParserUtil
158                     .createBase64StringFromImage(image));
159
160         // comma-separated category list
161
// <category>value1,value2,value3</category>
162
if (contactModel.getCategory() != null)
163             parser.set(VCARD.CATEGORY, contactModel.getCategory());
164
165         return parser.getDocument();
166
167     }
168
169     public static IContactModel unmarshall(Document document, String JavaDoc id)
170             throws SyntaxException {
171
172         if (document == null)
173             throw new IllegalArgumentException JavaDoc("document == null");
174         if (id == null)
175             throw new IllegalArgumentException JavaDoc("id == null");
176
177         XMLContactDocumentParser parser = new XMLContactDocumentParser(document);
178
179         ContactModel model = new ContactModel(id);
180         
181         model.setSortString(parser.get(VCARD.SORTSTRING));
182         // compatibility - using SORTSTRING internally
183
if ( model.getSortString() == null) {
184             model.setSortString(parser.get(VCARD.DISPLAYNAME));
185         }
186
187         model.setFormattedName(parser.get(VCARD.FN));
188         model.setNickName(parser.get(VCARD.NICKNAME));
189
190         model.setFamilyName(parser.get(VCARD.N, VCARD.N_FAMILY));
191         model.setGivenName(parser.get(VCARD.N, VCARD.N_GIVEN));
192         model.setNamePrefix(parser.get(VCARD.N, VCARD.N_PREFIX));
193         model.setNameSuffix(parser.get(VCARD.N, VCARD.N_SUFFIX));
194         model.setAdditionalNames(parser.get(VCARD.N, VCARD.N_ADDITIONALNAMES));
195
196         model.setHomePage(parser.get(VCARD.URL));
197         model.setWeblog(parser.get(VCARD.X_COLUMBA_URL_BLOG));
198         model.setFreeBusy(parser.get(VCARD.X_COLUMBA_URL_FREEBUSY));
199         model.setCalendar(parser.get(VCARD.X_COLUMBA_URL_CALENDAR));
200
201         try {
202             String JavaDoc datestring = parser.get(VCARD.BDAY);
203             model.setBirthday(new Date JavaDoc(Long.parseLong(datestring)));
204         } catch (NumberFormatException JavaDoc e) {
205             model.setBirthday(null);
206         }
207
208
209         model.setOrganisation(parser.get(VCARD.ORG));
210         model.setDepartment(parser.get(VCARD.X_COLUMBA_DEPARTMENT));
211         model.setOffice(parser.get(VCARD.X_COLUMBA_OFFICE));
212
213         model.setProfession(parser.get(VCARD.ROLE));
214         model.setTitle(parser.get(VCARD.TITLE));
215
216         Iterator JavaDoc it = parser.getEmailIterator();
217         while (it.hasNext()) {
218             model.addEmail((IEmailModel) it.next());
219         }
220
221         it = parser.getPhoneIterator();
222         while (it.hasNext()) {
223             model.addPhone((PhoneModel) it.next());
224         }
225
226         it = parser.getInstantMessagingIterator();
227         while (it.hasNext()) {
228             model.addInstantMessaging((InstantMessagingModel) it.next());
229         }
230
231         it = parser.getAddressIterator();
232         while (it.hasNext()) {
233             model.addAddress((AddressModel) it.next());
234         }
235
236         model.setNote(parser.get(VCARD.NOTE));
237
238         String JavaDoc imageString = parser.get(VCARD.PHOTO);
239         ImageIcon JavaDoc image = ParserUtil.createImageFromBase64String(imageString);
240         model.setPhoto(image);
241
242         // comma-separated category list
243
// <category>value1,value2,value3</category>
244
model.setCategory(parser.get(VCARD.CATEGORY));
245
246         return model;
247     }
248 }
249
Popular Tags