1 package org.columba.addressbook.model; 19 20 import java.util.Date ; 21 import java.util.Iterator ; 22 23 import javax.swing.Icon ; 24 import javax.swing.ImageIcon ; 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 36 public class ContactModelXMLFactory { 37 38 public static Document marshall(IContactModel contactModel) 39 throws SyntaxException { 40 41 if (contactModel == null) 42 throw new IllegalArgumentException ("contactModel == null"); 43 44 XMLContactDocumentParser parser = new XMLContactDocumentParser(); 45 parser.setId(contactModel.getId()); 46 47 if (contactModel.getSortString() != null) 49 parser.set(VCARD.SORTSTRING, contactModel.getSortString()); 50 51 if (contactModel.getFormattedName() != null) 53 parser.set(VCARD.FN, contactModel.getFormattedName()); 54 if (contactModel.getNickName() != null) 56 parser.set(VCARD.NICKNAME, contactModel.getNickName()); 57 58 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 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 parser.set(VCARD.ORG, contactModel.getOrganisation()); 90 parser.set(VCARD.X_COLUMBA_DEPARTMENT, contactModel.getDepartment()); 92 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 date = contactModel.getBirthday(); 101 if (date != null) { 102 long time = date.getTime(); 103 parser.set(VCARD.BDAY, new Long (time).toString()); 104 } 105 106 Iterator it = contactModel.getEmailIterator(); 111 while (it.hasNext()) { 112 IEmailModel m = ((IEmailModel) it.next()); 113 parser.addEmail(m); 114 } 115 116 it = contactModel.getInstantMessagingIterator(); 122 while (it.hasNext()) { 123 InstantMessagingModel m = ((InstantMessagingModel) it.next()); 124 parser.addInstantMessaging(m); 125 } 126 127 it = contactModel.getPhoneIterator(); 132 while (it.hasNext()) { 133 PhoneModel m = (PhoneModel) it.next(); 134 parser.addPhone(m); 135 } 136 137 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 ImageIcon image = contactModel.getPhoto(); 156 if (image != null) 157 parser.set(VCARD.PHOTO, ParserUtil 158 .createBase64StringFromImage(image)); 159 160 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 id) 170 throws SyntaxException { 171 172 if (document == null) 173 throw new IllegalArgumentException ("document == null"); 174 if (id == null) 175 throw new IllegalArgumentException ("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 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 datestring = parser.get(VCARD.BDAY); 203 model.setBirthday(new Date (Long.parseLong(datestring))); 204 } catch (NumberFormatException 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 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 imageString = parser.get(VCARD.PHOTO); 239 ImageIcon image = ParserUtil.createImageFromBase64String(imageString); 240 model.setPhoto(image); 241 242 model.setCategory(parser.get(VCARD.CATEGORY)); 245 246 return model; 247 } 248 } 249
| Popular Tags
|