2 Copyright (C) 2000-2005 SKYRIX Software AG
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
22 #include "iCalEntityObject.h"
23 #include "iCalPerson.h"
26 @interface iCalEntityObject (PrivateAPI)
27 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons;
30 @implementation iCalEntityObject
33 return [super version] + 1 /* v1 */;
36 NSAssert2([super version] == 0,
37 @"invalid superclass (%@) version %i !",
38 NSStringFromClass([self superclass]), [super version]);
43 [self->summary release];
44 [self->created release];
45 [self->lastModified release];
46 [self->startDate release];
47 [self->accessClass release];
48 [self->priority release];
49 [self->alarms release];
50 [self->organizer release];
51 [self->attendees release];
52 [self->comment release];
53 [self->sequence release];
54 [self->location release];
55 [self->status release];
56 [self->categories release];
57 [self->userComment release];
64 - (id)copyWithZone:(NSZone *)_zone {
65 iCalEntityObject *new;
67 new = [super copyWithZone:_zone];
69 new->uid = [self->uid copyWithZone:_zone];
70 new->summary = [self->summary copyWithZone:_zone];
71 new->timestamp = self->timestamp;
72 new->created = [self->created copyWithZone:_zone];
73 new->lastModified = [self->lastModified copyWithZone:_zone];
74 new->startDate = [self->startDate copyWithZone:_zone];
75 new->accessClass = [self->accessClass copyWithZone:_zone];
76 new->priority = [self->priority copyWithZone:_zone];
77 new->alarms = [self->alarms copyWithZone:_zone];
78 new->organizer = [self->organizer copyWithZone:_zone];
79 new->attendees = [self->attendees copyWithZone:_zone];
80 new->comment = [self->comment copyWithZone:_zone];
81 new->sequence = [self->sequence copyWithZone:_zone];
82 new->location = [self->location copyWithZone:_zone];
83 new->status = [self->status copyWithZone:_zone];
84 new->categories = [self->categories copyWithZone:_zone];
85 new->userComment = [self->userComment copyWithZone:_zone];
86 new->url = [self->url copyWithZone:_zone];
93 - (void)setUid:(NSString *)_value {
94 if (self->uid != _value) {
95 [self->uid autorelease];
96 self->uid = [_value retain];
103 - (void)setSummary:(NSString *)_value {
104 if (self->summary != _value) {
105 [self->summary autorelease];
106 self->summary = [_value retain];
109 - (NSString *)summary {
110 return self->summary;
113 - (void)setLocation:(NSString *)_value {
114 if (self->location != _value) {
115 [self->location autorelease];
116 self->location = [_value retain];
119 - (NSString *)location {
120 return self->location;
123 - (void)setComment:(NSString *)_value {
124 if (self->comment != _value) {
125 [self->comment autorelease];
126 self->comment = [_value retain];
129 - (NSString *)comment {
130 return self->comment;
133 - (void)setAccessClass:(NSString *)_value {
134 if (self->accessClass != _value) {
135 [self->accessClass autorelease];
136 self->accessClass = [_value retain];
139 - (NSString *)accessClass {
140 return self->accessClass;
143 - (void)setPriority:(NSString *)_value {
144 if (self->priority != _value) {
145 [self->priority autorelease];
146 self->priority = [_value retain];
149 - (NSString *)priority {
150 return self->priority;
153 - (void)setCategories:(NSString *)_value {
154 ASSIGN(self->categories, _value);
156 - (NSString *)categories {
157 return self->categories;
160 - (void)setSequence:(NSNumber *)_value {
161 if (![_value isNotNull]) _value = nil;
162 if (self->sequence != _value) {
163 if (_value != nil && ![_value isKindOfClass:[NSNumber class]])
164 _value = [NSNumber numberWithInt:[_value intValue]];
165 [self->sequence autorelease];
166 self->sequence = [_value retain];
169 - (NSNumber *)sequence {
170 return self->sequence;
172 - (void)increaseSequence {
175 seq = [[self sequence] intValue];
177 [self setSequence:[NSNumber numberWithInt:seq]];
180 - (void)setStatus:(NSString *)_value {
181 ASSIGNCOPY(self->status, _value);
183 - (NSString *)status {
184 // eg: STATUS:CONFIRMED
188 - (void)setCreated:(NSCalendarDate *)_value {
189 if (self->created != _value) {
190 [self->created autorelease];
191 self->created = [_value retain];
194 - (NSCalendarDate *)created {
195 return self->created;
197 - (void)setLastModified:(NSCalendarDate *)_value {
198 if (self->lastModified != _value) {
199 [self->lastModified autorelease];
200 self->lastModified = [_value retain];
203 - (NSCalendarDate *)lastModified {
204 return self->lastModified;
207 - (void)setTimeStampAsDate:(NSCalendarDate *)_date {
208 /* TODO: too be completed */
210 - (NSCalendarDate *)timeStampAsDate {
211 return [NSDate dateWithTimeIntervalSince1970:self->timestamp];
214 - (void)setStartDate:(NSCalendarDate *)_date {
215 if (self->startDate != _date) {
216 [self->startDate autorelease];
217 self->startDate = [_date retain];
220 - (NSCalendarDate *)startDate {
221 return self->startDate;
224 - (void)setOrganizer:(iCalPerson *)_organizer {
225 if (self->organizer != _organizer) {
226 [self->organizer autorelease];
227 self->organizer = [_organizer retain];
230 - (iCalPerson *)organizer {
231 return self->organizer;
234 - (void)removeAllAttendees {
235 [self->attendees removeAllObjects];
237 - (void)addToAttendees:(iCalPerson *)_person {
238 if (_person == nil) return;
239 if (self->attendees == nil)
240 self->attendees = [[NSMutableArray alloc] initWithCapacity:4];
241 [self->attendees addObject:_person];
243 - (NSArray *)attendees {
244 return self->attendees;
247 - (void)removeAllAlarms {
248 [self->alarms removeAllObjects];
250 - (void)addToAlarms:(id)_alarm {
251 if (_alarm == nil) return;
252 if (self->alarms == nil)
253 self->alarms = [[NSMutableArray alloc] initWithCapacity:1];
254 [self->alarms addObject:_alarm];
257 return [self->alarms count] > 0 ? YES : NO;
259 - (NSArray *)alarms {
263 - (void)setUserComment:(NSString *)_userComment {
264 ASSIGN(self->userComment, _userComment);
266 - (NSString *)userComment {
267 return self->userComment;
270 - (void)setUrl:(id)_value {
271 if (self->url != _value) {
272 [self->url autorelease];
273 if ([_value isKindOfClass:[NSString class]]) {
274 self->url = [[NSURL alloc] initWithString:_value];
277 self->url = [_value retain];
287 - (NSArray *)participants {
288 return [self _filteredAttendeesThinkingOfPersons:YES];
290 - (NSArray *)resources {
291 return [self _filteredAttendeesThinkingOfPersons:NO];
294 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons {
296 NSMutableArray *filtered;
299 list = [self attendees];
300 count = [list count];
301 filtered = [NSMutableArray arrayWithCapacity:count];
302 for (i = 0; i < count; i++) {
306 p = [list objectAtIndex:i];
309 if (role == nil || ![role hasPrefix:@"NON-PART"])
310 [filtered addObject:p];
313 if ([role hasPrefix:@"NON-PART"])
314 [filtered addObject:p];
320 - (BOOL)isOrganizer:(id)_email {
321 _email = [_email lowercaseString];
322 return [[[[self organizer] rfc822Email] lowercaseString]
323 isEqualToString:_email];
326 - (BOOL)isParticipant:(id)_email {
329 _email = [_email lowercaseString];
330 partEmails = [[self participants] valueForKey:@"rfc822Email"];
331 partEmails = [partEmails valueForKey:@"lowercaseString"];
332 return [partEmails containsObject:_email];
335 - (iCalPerson *)findParticipantWithEmail:(id)_email {
339 _email = [_email lowercaseString];
340 ps = [self participants];
343 for (i = 0; i < count; i++) {
346 p = [ps objectAtIndex:i];
347 if ([[[p rfc822Email] lowercaseString] isEqualToString:_email])
350 return nil; /* not found */
353 @end /* iCalEntityObject */