]> err.no Git - sope/blob - sope-ical/NGiCal/iCalEntityObject.m
af9d240648141a161300e972aae2ec1b5c909d64
[sope] / sope-ical / NGiCal / iCalEntityObject.m
1 /*
2   Copyright (C) 2000-2005 SKYRIX Software AG
3
4   This file is part of SOPE.
5
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
9   later version.
10
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.
15
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
19   02111-1307, USA.
20 */
21
22 #include "iCalEntityObject.h"
23 #include "iCalPerson.h"
24 #include "common.h"
25
26 @interface iCalEntityObject (PrivateAPI)
27 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons;
28 @end
29
30 @implementation iCalEntityObject
31
32 - (void)dealloc {
33   [self->uid          release];
34   [self->summary      release];
35   [self->created      release];
36   [self->lastModified release];
37   [self->startDate    release];
38   [self->accessClass  release];
39   [self->priority     release];
40   [self->alarms       release];
41   [self->organizer    release];
42   [self->attendees    release];
43   [self->comment      release];
44   [self->sequence     release];
45   [self->location     release];
46   [self->status       release];
47   [self->categories   release];
48   [self->userComment  release];
49   [super dealloc];
50 }
51
52 /* accessors */
53
54 - (void)setUid:(NSString *)_value {
55   if (self->uid != _value) {
56     [self->uid autorelease];
57     self->uid = [_value retain];
58   }
59 }
60 - (NSString *)uid {
61   return self->uid;
62 }
63
64 - (void)setSummary:(NSString *)_value {
65   if (self->summary != _value) {
66     [self->summary autorelease];
67     self->summary = [_value retain];
68   }
69 }
70 - (NSString *)summary {
71   return self->summary;
72 }
73
74 - (void)setLocation:(NSString *)_value {
75   if (self->location != _value) {
76     [self->location autorelease];
77     self->location = [_value retain];
78   }
79 }
80 - (NSString *)location {
81   return self->location;
82 }
83
84 - (void)setComment:(NSString *)_value {
85   if (self->comment != _value) {
86     [self->comment autorelease];
87     self->comment = [_value retain];
88   }
89 }
90 - (NSString *)comment {
91   return self->comment;
92 }
93
94 - (void)setAccessClass:(NSString *)_value {
95   if (self->accessClass != _value) {
96     [self->accessClass autorelease];
97     self->accessClass = [_value retain];
98   }
99 }
100 - (NSString *)accessClass {
101   return self->accessClass;
102 }
103
104 - (void)setPriority:(NSString *)_value {
105   if (self->priority != _value) {
106     [self->priority autorelease];
107     self->priority = [_value retain];
108   }
109 }
110 - (NSString *)priority {
111   return self->priority;
112 }
113
114 - (void)setCategories:(NSString *)_value {
115   ASSIGN(self->categories, _value);
116 }
117 - (NSString *)categories {
118   return self->categories;
119 }
120
121 - (void)setSequence:(NSNumber *)_value {
122   if (![_value isNotNull]) _value = nil;
123   if (self->sequence != _value) {
124     if (_value != nil && ![_value isKindOfClass:[NSNumber class]])
125       _value = [NSNumber numberWithInt:[_value intValue]];
126     [self->sequence autorelease];
127     self->sequence = [_value retain];
128   }
129 }
130 - (NSNumber *)sequence {
131   return self->sequence;
132 }
133
134 - (void)setStatus:(NSString *)_value {
135   ASSIGNCOPY(self->status, _value);
136 }
137 - (NSString *)status {
138   // eg: STATUS:CONFIRMED
139   return self->status;
140 }
141
142 - (void)setCreated:(NSCalendarDate *)_value {
143   if (self->created != _value) {
144     [self->created autorelease];
145     self->created = [_value retain];
146   }
147 }
148 - (NSCalendarDate *)created {
149   return self->created;
150 }
151 - (void)setLastModified:(NSCalendarDate *)_value {
152   if (self->lastModified != _value) {
153     [self->lastModified autorelease];
154     self->lastModified = [_value retain];
155   }
156 }
157 - (NSCalendarDate *)lastModified {
158   return self->lastModified;
159 }
160
161 - (void)setTimeStampAsDate:(NSCalendarDate *)_date {
162   /* TODO: too be completed */
163 }
164 - (NSCalendarDate *)timeStampAsDate {
165   return [NSDate dateWithTimeIntervalSince1970:self->timestamp];
166 }
167
168 - (void)setStartDate:(NSCalendarDate *)_date {
169   if (self->startDate != _date) {
170     [self->startDate autorelease];
171     self->startDate = [_date retain];
172   }
173 }
174 - (NSCalendarDate *)startDate {
175   return self->startDate;
176 }
177
178 - (void)setOrganizer:(iCalPerson *)_organizer {
179   if (self->organizer != _organizer) {
180     [self->organizer autorelease];
181     self->organizer = [_organizer retain];
182   }
183 }
184 - (iCalPerson *)organizer {
185   return self->organizer;
186 }
187
188 - (void)removeAllAttendees {
189     [self->attendees removeAllObjects];
190 }
191 - (void)addToAttendees:(iCalPerson *)_person {
192   if (_person == nil) return;
193   if (self->attendees == nil)
194     self->attendees = [[NSMutableArray alloc] initWithCapacity:4];
195   [self->attendees addObject:_person];
196 }
197 - (NSArray *)attendees {
198   return self->attendees;
199 }
200
201 - (void)removeAllAlarms {
202     [self->alarms removeAllObjects];
203 }
204 - (void)addToAlarms:(id)_alarm {
205   if (_alarm == nil) return;
206   if (self->alarms == nil)
207     self->alarms = [[NSMutableArray alloc] initWithCapacity:1];
208   [self->alarms addObject:_alarm];
209 }
210 - (BOOL)hasAlarms {
211   return [self->alarms count] > 0 ? YES : NO;
212 }
213 - (NSArray *)alarms {
214   return self->alarms;
215 }
216
217 - (void)setUserComment:(NSString *)_userComment {
218   ASSIGN(self->userComment, _userComment);
219 }
220 - (NSString *)userComment {
221   return self->userComment;
222 }
223
224 /* stuff */
225
226 - (NSArray *)participants {
227   return [self _filteredAttendeesThinkingOfPersons:YES];
228 }
229 - (NSArray *)resources {
230   return [self _filteredAttendeesThinkingOfPersons:NO];
231 }
232
233 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons {
234   NSArray        *list;
235   NSMutableArray *filtered;
236   unsigned       i, count;
237   
238   list     = [self attendees];
239   count    = [list count];
240   filtered = [NSMutableArray arrayWithCapacity:count];
241   for (i = 0; i < count; i++) {
242     iCalPerson *p;
243     NSString   *role;
244     
245     p = [list objectAtIndex:i];
246     role = [p role];
247     if (_persons) {
248       if (role == nil || ![role hasPrefix:@"NON-PART"])
249         [filtered addObject:p];
250     }
251     else {
252       if ([role hasPrefix:@"NON-PART"])
253         [filtered addObject:p];
254     }
255   }
256   return filtered;
257 }
258
259 - (BOOL)isOrganizer:(id)_email {
260   _email = [_email lowercaseString];
261   return [[[[self organizer] rfc822Email] lowercaseString]
262                                           isEqualToString:_email];
263 }
264
265 - (BOOL)isParticipant:(id)_email {
266   NSArray *partEmails;
267   
268   _email     = [_email lowercaseString];
269   partEmails = [[self participants] valueForKey:@"rfc822Email"];
270   partEmails = [partEmails valueForKey:@"lowercaseString"];
271   return [partEmails containsObject:_email];
272 }
273
274 - (iCalPerson *)findParticipantWithEmail:(id)_email {
275   NSArray  *ps;
276   unsigned i, count;
277   
278   _email = [_email lowercaseString];
279   ps     = [self participants];
280   count  = [ps count];
281
282   for (i = 0; i < count; i++) {
283     iCalPerson *p;
284     
285     p = [ps objectAtIndex:i];
286     if ([[[p rfc822Email] lowercaseString] isEqualToString:_email])
287       return p;
288   }
289   return nil; /* not found */
290 }
291
292 @end /* iCalEntityObject */