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;
134 - (void)setStatus:(NSString *)_value {
135 ASSIGNCOPY(self->status, _value);
137 - (NSString *)status {
138 // eg: STATUS:CONFIRMED
142 - (void)setCreated:(NSCalendarDate *)_value {
143 if (self->created != _value) {
144 [self->created autorelease];
145 self->created = [_value retain];
148 - (NSCalendarDate *)created {
149 return self->created;
151 - (void)setLastModified:(NSCalendarDate *)_value {
152 if (self->lastModified != _value) {
153 [self->lastModified autorelease];
154 self->lastModified = [_value retain];
157 - (NSCalendarDate *)lastModified {
158 return self->lastModified;
161 - (void)setTimeStampAsDate:(NSCalendarDate *)_date {
162 /* TODO: too be completed */
164 - (NSCalendarDate *)timeStampAsDate {
165 return [NSDate dateWithTimeIntervalSince1970:self->timestamp];
168 - (void)setStartDate:(NSCalendarDate *)_date {
169 if (self->startDate != _date) {
170 [self->startDate autorelease];
171 self->startDate = [_date retain];
174 - (NSCalendarDate *)startDate {
175 return self->startDate;
178 - (void)setOrganizer:(iCalPerson *)_organizer {
179 if (self->organizer != _organizer) {
180 [self->organizer autorelease];
181 self->organizer = [_organizer retain];
184 - (iCalPerson *)organizer {
185 return self->organizer;
188 - (void)removeAllAttendees {
189 [self->attendees removeAllObjects];
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];
197 - (NSArray *)attendees {
198 return self->attendees;
201 - (void)removeAllAlarms {
202 [self->alarms removeAllObjects];
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];
211 return [self->alarms count] > 0 ? YES : NO;
213 - (NSArray *)alarms {
217 - (void)setUserComment:(NSString *)_userComment {
218 ASSIGN(self->userComment, _userComment);
220 - (NSString *)userComment {
221 return self->userComment;
226 - (NSArray *)participants {
227 return [self _filteredAttendeesThinkingOfPersons:YES];
229 - (NSArray *)resources {
230 return [self _filteredAttendeesThinkingOfPersons:NO];
233 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons {
235 NSMutableArray *filtered;
238 list = [self attendees];
239 count = [list count];
240 filtered = [NSMutableArray arrayWithCapacity:count];
241 for (i = 0; i < count; i++) {
245 p = [list objectAtIndex:i];
248 if (role == nil || ![role hasPrefix:@"NON-PART"])
249 [filtered addObject:p];
252 if ([role hasPrefix:@"NON-PART"])
253 [filtered addObject:p];
259 - (BOOL)isOrganizer:(id)_email {
260 _email = [_email lowercaseString];
261 return [[[[self organizer] rfc822Email] lowercaseString]
262 isEqualToString:_email];
265 - (BOOL)isParticipant:(id)_email {
268 _email = [_email lowercaseString];
269 partEmails = [[self participants] valueForKey:@"rfc822Email"];
270 partEmails = [partEmails valueForKey:@"lowercaseString"];
271 return [partEmails containsObject:_email];
274 - (iCalPerson *)findParticipantWithEmail:(id)_email {
278 _email = [_email lowercaseString];
279 ps = [self participants];
282 for (i = 0; i < count; i++) {
285 p = [ps objectAtIndex:i];
286 if ([[[p rfc822Email] lowercaseString] isEqualToString:_email])
289 return nil; /* not found */
292 @end /* iCalEntityObject */