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