KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > parser > XMLContactDocumentParser


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.parser;
19
20 import java.util.Iterator JavaDoc;
21 import java.util.Vector JavaDoc;
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 /**
34  * Wraps an xml document containing vCard data and offers many convienience
35  * methods to access vCard attributes.
36  * <p>
37  *
38  * @author fdietz
39  */

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 JavaDoc("document == null");
59
60         this.doc = document;
61
62         this.root = doc.getRootElement();
63
64         if (!root.getName().equalsIgnoreCase(VCARD.VCARD)) {
65             // wrong xml-format
66
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     /**
77      * @return Returns the parentElement.
78      */

79     protected Element getParentElement() {
80         return parentElement;
81     }
82
83     public void set(String JavaDoc key, String JavaDoc 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 JavaDoc key, String JavaDoc prefix, String JavaDoc 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 JavaDoc get(String JavaDoc 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 JavaDoc get(String JavaDoc key, String JavaDoc 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     /**
135      * @return Returns the id.
136      */

137     public String JavaDoc getId() {
138         return get(VCARD.ID);
139     }
140
141     public void setId(String JavaDoc id) {
142         set(VCARD.ID, id);
143     }
144
145     public void addEmail(IEmailModel model) {
146         // create <email> element, if it doesn't exist yet
147
Element child = getParentElement().getChild(VCARD.EMAIL);
148         if (child == null) {
149             child = new Element(VCARD.EMAIL);
150             getParentElement().addContent(child);
151         }
152
153         // create <type> element
154
Element prefixchild = new Element(model.getTypeString());
155         child.addContent(prefixchild);
156
157         prefixchild.setText(model.getAddress());
158     }
159
160     public Iterator JavaDoc getEmailIterator() {
161         Element child = getParentElement().getChild(VCARD.EMAIL);
162         // if not specified return empty iterator
163
if (child == null)
164             return new Vector JavaDoc().iterator();
165
166         Iterator JavaDoc it = child.getChildren().iterator();
167         Vector JavaDoc v = new Vector JavaDoc();
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 JavaDoc getAddressIterator() {
177         Vector JavaDoc<AddressModel> v = new Vector JavaDoc<AddressModel>();
178
179         Element child = getParentElement().getChild(VCARD.ADR);
180         // if not specified return empty iterator
181
if (child == null)
182             return v.iterator();
183
184         Iterator JavaDoc it = child.getChildren().iterator();
185         // iterate over all type elements
186
while (it.hasNext()) {
187             Element typeElement = (Element) it.next();
188
189             String JavaDoc poBox = "";
190             Element e1 = typeElement.getChild(VCARD.ADR_POSTOFFICEBOX);
191             if (e1 != null)
192                 poBox = e1.getText();
193             String JavaDoc street = "";
194             Element e2 = typeElement.getChild(VCARD.ADR_STREETADDRESS);
195             if (e2 != null)
196                 street = e2.getText();
197             String JavaDoc locality = "";
198             Element e3 = typeElement.getChild(VCARD.ADR_LOCALITY);
199             if (e3 != null)
200                 locality = e3.getText();
201             String JavaDoc postalCode = "";
202             Element e4 = typeElement.getChild(VCARD.ADR_POSTALCODE);
203             if (e4 != null)
204                 postalCode = e4.getText();
205             String JavaDoc region = "";
206             Element e5 = typeElement.getChild(VCARD.ADR_REGION);
207             if (e5 != null)
208                 region = e5.getText();
209             String JavaDoc country = "";
210             Element e6 = typeElement.getChild(VCARD.ADR_COUNTRY);
211             if (e6 != null)
212                 country = e6.getText();
213             String JavaDoc 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         // create <adr>, if it doesn't exist
234
Element child = getParentElement().getChild(VCARD.ADR);
235         if (child == null) {
236             child = new Element(VCARD.ADR);
237             getParentElement().addContent(child);
238         }
239
240         // create <type> element
241
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         // create a CDATA section for the label
269
Element labelElement = new Element(VCARD.LABEL);
270         labelElement.addContent(new CDATA(m.getLabel()));
271         prefixchild.addContent(labelElement);
272
273     }
274
275     public Iterator JavaDoc getPhoneIterator() {
276         Element child = getParentElement().getChild(VCARD.TEL);
277         // if not specified return empty iterator
278
if (child == null)
279             return new Vector JavaDoc().iterator();
280
281         Iterator JavaDoc it = child.getChildren().iterator();
282         Vector JavaDoc v = new Vector JavaDoc();
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 JavaDoc getInstantMessagingIterator() {
306         Element child = getParentElement().getChild(VCARD.IM);
307         // if not specified return empty iterator
308
if (child == null)
309             return new Vector JavaDoc().iterator();
310
311         Iterator JavaDoc it = child.getChildren().iterator();
312         Vector JavaDoc v = new Vector JavaDoc();
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