]> err.no Git - scalable-opengroupware.org/blob - OGoContentStore/OCSContactFieldExtractor.m
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1044 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / OGoContentStore / OCSContactFieldExtractor.m
1 /*
2   Copyright (C) 2004-2005 SKYRIX Software AG
3
4   This file is part of OpenGroupware.org.
5
6   OGo 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
9   later version.
10
11   OGo 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.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with OGo; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21
22 #import <GDLContentStore/GCSFieldExtractor.h>
23 #import <NGCards/NGVCard.h>
24 #import "common.h"
25
26 @interface OCSContactFieldExtractor : GCSFieldExtractor
27 @end
28
29 @implementation OCSContactFieldExtractor
30
31 - (NSMutableDictionary *) extractQuickFieldsFromVCard: (NGVCard *) vCard
32 {
33   NSMutableDictionary *fields;
34   NSArray *values;
35   CardElement *adr;
36   NSString *value;
37   unsigned int max;
38
39   fields = [NSMutableDictionary dictionaryWithCapacity: 16];
40
41   value = [vCard fn];
42   if (value)
43     [fields setObject: value forKey: @"cn"];
44   values = [vCard n];
45   if (values)
46     {
47       max = [values count];
48       if (max > 0)
49         {
50           [fields setObject: [values objectAtIndex: 0] forKey: @"sn"];
51           if (max > 1)
52             [fields setObject: [values objectAtIndex: 1]
53                     forKey: @"givenName"];
54         }
55     }
56   value = [vCard preferredTel];
57   if (value)
58     [fields setObject: value forKey: @"telephoneNumber"];
59   value = [vCard preferredEMail];
60   if (value)
61     [fields setObject: value forKey: @"mail"];
62   values = [vCard org];
63   max = [values count];
64   if (max > 0)
65     {
66       [fields setObject: [values objectAtIndex: 0] forKey: @"o"];
67       if (max > 1)
68         [fields setObject: [values objectAtIndex: 1] forKey: @"ou"];
69     }
70   adr = [vCard preferredAdr];
71   if (adr)
72     [fields setObject: [adr value: 3] forKey: @"l"];
73   value = [[vCard uniqueChildWithTag: @"X-AIM"] value: 0];
74   [fields setObject: value forKey: @"screenname"];
75
76   return fields;
77 }
78
79 - (NSMutableDictionary *) extractQuickFieldsFromContent: (NSString *) content
80 {
81   NSMutableDictionary *fields;
82   NGVCard *vCard;
83
84   fields = nil;
85   if ([content length] > 0
86       && [[content uppercaseString] hasPrefix: @"BEGIN:VCARD"])
87     {
88       vCard = [NGVCard parseSingleFromSource: content];
89       if (vCard)
90         fields = [self extractQuickFieldsFromVCard: vCard];
91       else
92         [self errorWithFormat: @"Could not parse content as a vCard."];
93     }
94   else
95     [self errorWithFormat: @"Content is not a vCard"];
96
97   return fields;
98 }
99
100 @end /* OCSContactFieldExtractor */