2 Copyright (C) 2005 Helge Hess
4 This file is part of SOPE.
6 SOPE is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with SOPE; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "NGVCardSaxHandler.h"
24 #include "NGVCardStrArrayValue.h"
25 #include "NGVCardName.h"
26 #include "NGVCardOrg.h"
27 #include <SaxObjC/SaxXMLReader.h>
28 #include <SaxObjC/SaxXMLReaderFactory.h>
31 @implementation NGVCard
33 static id<NSObject,SaxXMLReader> parser = nil; // THREAD
34 static NGVCardSaxHandler *sax = nil; // THREAD
36 + (id<NSObject,SaxXMLReader>)vCardParser {
38 sax = [[NGVCardSaxHandler alloc] init];
42 [[[SaxXMLReaderFactory standardXMLReaderFactory]
43 createXMLReaderForMimeType:@"text/x-vcard"]
46 NSLog(@"%s: did not find a parser for text/x-vcard !",
51 [parser setContentHandler:sax];
52 [parser setErrorHandler:sax];
58 + (NSArray *)parseVCardsFromSource:(id)_src {
59 static id<NSObject,SaxXMLReader> parser;
61 if ((parser = [self vCardParser]) == nil)
64 [parser parseFromSource:_src];
68 - (id)initWithUid:(NSString *)_uid version:(NSString *)_version {
69 if ((self = [super init]) != nil) {
70 self->uid = [_uid copy];
71 self->version = [_version copy];
76 return [self initWithUid:nil version:@"3.0"];
80 [self->profile release];
81 [self->source release];
82 [self->vName release];
85 [self->nickname release];
86 [self->categories release];
87 [self->caluri release];
88 [self->fburl release];
91 [self->title release];
94 [self->vClass release];
95 [self->prodID release];
100 [self->email release];
101 [self->label release];
102 [self->version release];
109 - (NSString *)version {
110 return self->version;
113 - (void)setUid:(NSString *)_uid {
114 ASSIGNCOPY(self->uid, _uid);
120 - (void)setVClass:(NSString *)_vClass {
121 ASSIGNCOPY(self->vClass, _vClass);
123 - (NSString *)vClass {
127 - (void)setVName:(NSString *)_value {
128 ASSIGNCOPY(self->vName, _value);
130 - (NSString *)vName {
134 - (void)setProdID:(NSString *)_prodID {
135 ASSIGNCOPY(self->prodID, _prodID);
137 - (NSString *)prodID {
141 - (void)setProfile:(NSString *)_value {
142 ASSIGNCOPY(self->profile, _value);
144 - (NSString *)profile {
145 return self->profile;
148 - (void)setSource:(NSString *)_value {
149 ASSIGNCOPY(self->source, _value);
151 - (NSString *)source {
155 - (void)setFn:(NSString *)_fn {
156 ASSIGNCOPY(self->fn, _fn);
162 - (void)setRole:(NSString *)_role {
163 ASSIGNCOPY(self->role, _role);
169 - (void)setTitle:(NSString *)_title {
170 ASSIGNCOPY(self->title, _title);
172 - (NSString *)title {
176 - (void)setBday:(NSString *)_bday {
177 ASSIGNCOPY(self->bday, _bday);
183 - (void)setNote:(NSString *)_note {
184 ASSIGNCOPY(self->note, _note);
191 - (void)setN:(NGVCardName *)_v {
192 ASSIGNCOPY(self->n, _v);
198 - (void)setOrg:(NGVCardOrg *)_v {
199 ASSIGNCOPY(self->org, _v);
201 - (NGVCardOrg *)org {
206 - (void)setNickname:(id)_v {
207 if (![_v isKindOfClass:[NGVCardStrArrayValue class]] && [_v isNotNull])
208 _v = [[[NGVCardStrArrayValue alloc] initWithPropertyList:_v] autorelease];
210 ASSIGNCOPY(self->nickname, _v);
212 - (NGVCardStrArrayValue *)nickname {
213 return self->nickname;
216 - (void)setCategories:(id)_v {
217 if (![_v isKindOfClass:[NGVCardStrArrayValue class]] && [_v isNotNull])
218 _v = [[[NGVCardStrArrayValue alloc] initWithPropertyList:_v] autorelease];
220 ASSIGNCOPY(self->categories, _v);
222 - (NGVCardStrArrayValue *)categories {
223 return self->categories;
227 - (void)setTel:(NSArray *)_tel {
228 ASSIGNCOPY(self->tel, _tel);
234 - (void)setAdr:(NSArray *)_adr {
235 ASSIGNCOPY(self->adr, _adr);
241 - (void)setEmail:(NSArray *)_email {
242 ASSIGNCOPY(self->email, _email);
248 - (void)setLabel:(NSArray *)_label {
249 ASSIGNCOPY(self->label, _label);
255 - (void)setUrl:(NSArray *)_url {
256 ASSIGNCOPY(self->url, _url);
263 - (void)setFreeBusyURL:(NSArray *)_v {
264 ASSIGNCOPY(self->fburl, _v);
266 - (NSArray *)freeBusyURL {
269 - (void)setCalURI:(NSArray *)_v {
270 ASSIGNCOPY(self->caluri, _v);
272 - (NSArray *)calURI {
277 - (void)setX:(NSDictionary *)_dict {
278 ASSIGNCOPY(self->x, _dict);
280 - (NSDictionary *)x {
286 - (void)appendAttributesToDescription:(NSMutableString *)_ms {
287 if (self->uid != nil) [_ms appendFormat:@" uid='%@'", self->uid];
289 if ([self->tel count] > 0) [_ms appendFormat:@" tel=%@", self->tel];
290 if ([self->adr count] > 0) [_ms appendFormat:@" adr=%@", self->adr];
291 if ([self->email count] > 0) [_ms appendFormat:@" email=%@", self->email];
292 if ([self->label count] > 0) [_ms appendFormat:@" label=%@", self->label];
293 if ([self->x count] > 0) [_ms appendFormat:@" x=%@", self->x];
296 - (NSString *)description {
297 NSMutableString *str = nil;
299 str = [NSMutableString stringWithCapacity:64];
300 [str appendFormat:@"<0x%08X[%@]:", self, NSStringFromClass([self class])];
301 [self appendAttributesToDescription:str];
302 [str appendString:@">"];