1 package org.columba.addressbook.parser; 19 20 import java.util.Iterator ; 21 import java.util.Vector ; 22 23 import org.columba.addressbook.model.AddressModel; 24 import org.columba.addressbook.model.EmailModel; 25 import org.columba.addressbook.model.IEmailModel; 26 import org.columba.addressbook.model.InstantMessagingModel; 27 import org.columba.addressbook.model.PhoneModel; 28 import org.columba.addressbook.model.VCARD; 29 import org.jdom.CDATA; 30 import org.jdom.Document; 31 import org.jdom.Element; 32 33 40 public class XMLContactDocumentParser { 41 42 private Document doc; 43 44 protected Element parentElement; 45 46 private Element root; 47 48 public XMLContactDocumentParser() { 49 doc = new Document(); 50 root = new Element(VCARD.VCARD); 51 doc.addContent(root); 52 53 parentElement = root; 54 } 55 56 public XMLContactDocumentParser(Document document) throws SyntaxException { 57 if (document == null) 58 throw new IllegalArgumentException ("document == null"); 59 60 this.doc = document; 61 62 this.root = doc.getRootElement(); 63 64 if (!root.getName().equalsIgnoreCase(VCARD.VCARD)) { 65 throw new SyntaxException("Root element must be <vcard>!"); 67 } 68 69 parentElement = root; 70 } 71 72 public Element getRootElement() { 73 return root; 74 } 75 76 79 protected Element getParentElement() { 80 return parentElement; 81 } 82 83 public void set(String key, String value) { 84 Element child = getParentElement().getChild(key); 85 if (child == null) { 86 child = new Element(key); 87 getParentElement().addContent(child); 88 } 89 child.setText(value); 90 } 91 92 public void set(String key, String prefix, String value) { 93 Element child = getParentElement().getChild(key); 94 if (child == null) { 95 child = new Element(key); 96 getParentElement().addContent(child); 97 } 98 Element prefixchild = child.getChild(prefix); 99 if (prefixchild == null) { 100 prefixchild = new Element(prefix); 101 child.addContent(prefixchild); 102 } 103 prefixchild.setText(value); 104 } 105 106 public String get(String key) { 107 Element child = getParentElement().getChild(key); 108 if (child == null) { 109 child = new Element(key); 110 getParentElement().addContent(child); 111 } 112 return child.getTextNormalize(); 113 } 114 115 public String get(String key, String prefix) { 116 Element child = getParentElement().getChild(key); 117 if (child == null) { 118 child = new Element(key); 119 getParentElement().addContent(child); 120 } 121 Element prefixchild = child.getChild(prefix); 122 if (prefixchild == null) { 123 prefixchild = new Element(prefix); 124 child.addContent(prefixchild); 125 } 126 127 return prefixchild.getTextNormalize(); 128 } 129 130 public Document getDocument() { 131 return doc; 132 } 133 134 137 public String getId() { 138 return get(VCARD.ID); 139 } 140 141 public void setId(String id) { 142 set(VCARD.ID, id); 143 } 144 145 public void addEmail(IEmailModel model) { 146 Element child = getParentElement().getChild(VCARD.EMAIL); 148 if (child == null) { 149 child = new Element(VCARD.EMAIL); 150 getParentElement().addContent(child); 151 } 152 153 Element prefixchild = new Element(model.getTypeString()); 155 child.addContent(prefixchild); 156 157 prefixchild.setText(model.getAddress()); 158 } 159 160 public Iterator getEmailIterator() { 161 Element child = getParentElement().getChild(VCARD.EMAIL); 162 if (child == null) 164 return new Vector ().iterator(); 165 166 Iterator it = child.getChildren().iterator(); 167 Vector v = new Vector (); 168 while (it.hasNext()) { 169 Element e = (Element) it.next(); 170 v.add(new EmailModel(e.getValue(), e.getName())); 171 } 172 173 return v.iterator(); 174 } 175 176 public Iterator getAddressIterator() { 177 Vector <AddressModel> v = new Vector <AddressModel>(); 178 179 Element child = getParentElement().getChild(VCARD.ADR); 180 if (child == null) 182 return v.iterator(); 183 184 Iterator it = child.getChildren().iterator(); 185 while (it.hasNext()) { 187 Element typeElement = (Element) it.next(); 188 189 String poBox = ""; 190 Element e1 = typeElement.getChild(VCARD.ADR_POSTOFFICEBOX); 191 if (e1 != null) 192 poBox = e1.getText(); 193 String street = ""; 194 Element e2 = typeElement.getChild(VCARD.ADR_STREETADDRESS); 195 if (e2 != null) 196 street = e2.getText(); 197 String locality = ""; 198 Element e3 = typeElement.getChild(VCARD.ADR_LOCALITY); 199 if (e3 != null) 200 locality = e3.getText(); 201 String postalCode = ""; 202 Element e4 = typeElement.getChild(VCARD.ADR_POSTALCODE); 203 if (e4 != null) 204 postalCode = e4.getText(); 205 String region = ""; 206 Element e5 = typeElement.getChild(VCARD.ADR_REGION); 207 if (e5 != null) 208 region = e5.getText(); 209 String country = ""; 210 Element e6 = typeElement.getChild(VCARD.ADR_COUNTRY); 211 if (e6 != null) 212 country = e6.getText(); 213 String label = ""; 214 Element e7 = typeElement.getChild(VCARD.LABEL); 215 if ( e7 != null) { 216 if (e7.getContent() != null && e7.getContent().size() > 0) { 217 CDATA cdata = (CDATA) e7.getContent().get(0); 218 if ( cdata != null) 219 label = cdata.getText(); 220 } 221 } 222 223 v.add(new AddressModel(poBox, street, locality, postalCode, region, 224 country, label, typeElement.getName())); 225 226 } 227 228 return v.iterator(); 229 230 } 231 232 public void addAddress(AddressModel m) { 233 Element child = getParentElement().getChild(VCARD.ADR); 235 if (child == null) { 236 child = new Element(VCARD.ADR); 237 getParentElement().addContent(child); 238 } 239 240 Element prefixchild = new Element(m.getTypeString()); 242 child.addContent(prefixchild); 243 244 Element poBoxElement = new Element(VCARD.ADR_POSTOFFICEBOX); 245 poBoxElement.setText(m.getPoBox()); 246 prefixchild.addContent(poBoxElement); 247 248 Element streetElement = new Element(VCARD.ADR_STREETADDRESS); 249 streetElement.setText(m.getStreet()); 250 prefixchild.addContent(streetElement); 251 252 Element cityElement = new Element(VCARD.ADR_LOCALITY); 253 cityElement.setText(m.getCity()); 254 prefixchild.addContent(cityElement); 255 256 Element zipPostalCodeElement = new Element(VCARD.ADR_POSTALCODE); 257 zipPostalCodeElement.setText(m.getZipPostalCode()); 258 prefixchild.addContent(zipPostalCodeElement); 259 260 Element stateProvinceCountyElement = new Element(VCARD.ADR_REGION); 261 stateProvinceCountyElement.setText(m.getStateProvinceCounty()); 262 prefixchild.addContent(stateProvinceCountyElement); 263 264 Element countryElement = new Element(VCARD.ADR_COUNTRY); 265 countryElement.setText(m.getCountry()); 266 prefixchild.addContent(countryElement); 267 268 Element labelElement = new Element(VCARD.LABEL); 270 labelElement.addContent(new CDATA(m.getLabel())); 271 prefixchild.addContent(labelElement); 272 273 } 274 275 public Iterator getPhoneIterator() { 276 Element child = getParentElement().getChild(VCARD.TEL); 277 if (child == null) 279 return new Vector ().iterator(); 280 281 Iterator it = child.getChildren().iterator(); 282 Vector v = new Vector (); 283 while (it.hasNext()) { 284 Element e = (Element) it.next(); 285 v.add(new PhoneModel(e.getValue(), e.getName())); 286 } 287 288 return v.iterator(); 289 } 290 291 public void addPhone(PhoneModel m) { 292 Element child = getParentElement().getChild(VCARD.TEL); 293 if (child == null) { 294 child = new Element(VCARD.TEL); 295 getParentElement().addContent(child); 296 } 297 298 Element prefixchild = new Element(m.getTypeString()); 299 child.addContent(prefixchild); 300 301 prefixchild.setText(m.getNumber()); 302 303 } 304 305 public Iterator getInstantMessagingIterator() { 306 Element child = getParentElement().getChild(VCARD.IM); 307 if (child == null) 309 return new Vector ().iterator(); 310 311 Iterator it = child.getChildren().iterator(); 312 Vector v = new Vector (); 313 while (it.hasNext()) { 314 Element e = (Element) it.next(); 315 v.add(new InstantMessagingModel(e.getValue(), e.getName())); 316 } 317 318 return v.iterator(); 319 } 320 321 public void addInstantMessaging(InstantMessagingModel m) { 322 Element child = getParentElement().getChild(VCARD.IM); 323 if (child == null) { 324 child = new Element(VCARD.IM); 325 getParentElement().addContent(child); 326 } 327 328 Element prefixchild = new Element(m.getTypeString()); 329 child.addContent(prefixchild); 330 331 prefixchild.setText(m.getUserId()); 332 333 } 334 } 335 | Popular Tags |