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
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];
54 - (void)setUid:(NSString *)_value {
55 if (self->uid != _value) {
56 [self->uid autorelease];
57 self->uid = [_value retain];
64 - (void)setSummary:(NSString *)_value {
65 if (self->summary != _value) {
66 [self->summary autorelease];
67 self->summary = [_value retain];
70 - (NSString *)summary {
74 - (void)setLocation:(NSString *)_value {
75 if (self->location != _value) {
76 [self->location autorelease];
77 self->location = [_value retain];
80 - (NSString *)location {
81 return self->location;
84 - (void)setComment:(NSString *)_value {
85 if (self->comment != _value) {
86 [self->comment autorelease];
87 self->comment = [_value retain];
90 - (NSString *)comment {
94 - (void)setAccessClass:(NSString *)_value {
95 if (self->accessClass != _value) {
96 [self->accessClass autorelease];
97 self->accessClass = [_value retain];
100 - (NSString *)accessClass {
101 return self->accessClass;
104 - (void)setPriority:(NSString *)_value {
105 if (self->priority != _value) {
106 [self->priority autorelease];
107 self->priority = [_value retain];
110 - (NSString *)priority {
111 return self->priority;
114 - (void)setCategories:(NSString *)_value {
115 ASSIGN(self->categories, _value);
117 - (NSString *)categories {
118 return self->categories;
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];
130 - (NSNumber *)sequence {
131 return self->sequence;
133 - (void)increaseSequence {
136 seq = [[self sequence] intValue];
138 [self setSequence:[NSNumber numberWithInt:seq]];
141 - (void)setStatus:(NSString *)_value {
142 ASSIGNCOPY(self->status, _value);
144 - (NSString *)status {
145 // eg: STATUS:CONFIRMED
149 - (void)setCreated:(NSCalendarDate *)_value {
150 if (self->created != _value) {
151 [self->created autorelease];
152 self->created = [_value retain];
155 - (NSCalendarDate *)created {
156 return self->created;
158 - (void)setLastModified:(NSCalendarDate *)_value {
159 if (self->lastModified != _value) {
160 [self->lastModified autorelease];
161 self->lastModified = [_value retain];
164 - (NSCalendarDate *)lastModified {
165 return self->lastModified;
168 - (void)setTimeStampAsDate:(NSCalendarDate *)_date {
169 /* TODO: too be completed */
171 - (NSCalendarDate *)timeStampAsDate {
172 return [NSDate dateWithTimeIntervalSince1970:self->timestamp];
175 - (void)setStartDate:(NSCalendarDate *)_date {
176 if (self->startDate != _date) {
177 [self->startDate autorelease];
178 self->startDate = [_date retain];
181 - (NSCalendarDate *)startDate {
182 return self->startDate;
185 - (void)setOrganizer:(iCalPerson *)_organizer {
186 if (self->organizer != _organizer) {
187 [self->organizer autorelease];
188 self->organizer = [_organizer retain];
191 - (iCalPerson *)organizer {
192 return self->organizer;
195 - (void)removeAllAttendees {
196 [self->attendees removeAllObjects];
198 - (void)addToAttendees:(iCalPerson *)_person {
199 if (_person == nil) return;
200 if (self->attendees == nil)
201 self->attendees = [[NSMutableArray alloc] initWithCapacity:4];
202 [self->attendees addObject:_person];
204 - (NSArray *)attendees {
205 return self->attendees;
208 - (void)removeAllAlarms {
209 [self->alarms removeAllObjects];
211 - (void)addToAlarms:(id)_alarm {
212 if (_alarm == nil) return;
213 if (self->alarms == nil)
214 self->alarms = [[NSMutableArray alloc] initWithCapacity:1];
215 [self->alarms addObject:_alarm];
218 return [self->alarms count] > 0 ? YES : NO;
220 - (NSArray *)alarms {
224 - (void)setUserComment:(NSString *)_userComment {
225 ASSIGN(self->userComment, _userComment);
227 - (NSString *)userComment {
228 return self->userComment;
233 - (NSArray *)participants {
234 return [self _filteredAttendeesThinkingOfPersons:YES];
236 - (NSArray *)resources {
237 return [self _filteredAttendeesThinkingOfPersons:NO];
240 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons {
242 NSMutableArray *filtered;
245 list = [self attendees];
246 count = [list count];
247 filtered = [NSMutableArray arrayWithCapacity:count];
248 for (i = 0; i < count; i++) {
252 p = [list objectAtIndex:i];
255 if (role == nil || ![role hasPrefix:@"NON-PART"])
256 [filtered addObject:p];
259 if ([role hasPrefix:@"NON-PART"])
260 [filtered addObject:p];
266 - (BOOL)isOrganizer:(id)_email {
267 _email = [_email lowercaseString];
268 return [[[[self organizer] rfc822Email] lowercaseString]
269 isEqualToString:_email];
272 - (BOOL)isParticipant:(id)_email {
275 _email = [_email lowercaseString];
276 partEmails = [[self participants] valueForKey:@"rfc822Email"];
277 partEmails = [partEmails valueForKey:@"lowercaseString"];
278 return [partEmails containsObject:_email];
281 - (iCalPerson *)findParticipantWithEmail:(id)_email {
285 _email = [_email lowercaseString];
286 ps = [self participants];
289 for (i = 0; i < count; i++) {
292 p = [ps objectAtIndex:i];
293 if ([[[p rfc822Email] lowercaseString] isEqualToString:_email])
296 return nil; /* not found */
299 @end /* iCalEntityObject */