]> err.no Git - sope/blob - sope-ical/NGiCal/iCalEntityObject.m
added -increaseSequence
[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 - (void)increaseSequence {
134   int seq;
135   
136   seq = [[self sequence] intValue];
137   seq += 1;
138   [self setSequence:[NSNumber numberWithInt:seq]];
139 }
140
141 - (void)setStatus:(NSString *)_value {
142   ASSIGNCOPY(self->status, _value);
143 }
144 - (NSString *)status {
145   // eg: STATUS:CONFIRMED
146   return self->status;
147 }
148
149 - (void)setCreated:(NSCalendarDate *)_value {
150   if (self->created != _value) {
151     [self->created autorelease];
152     self->created = [_value retain];
153   }
154 }
155 - (NSCalendarDate *)created {
156   return self->created;
157 }
158 - (void)setLastModified:(NSCalendarDate *)_value {
159   if (self->lastModified != _value) {
160     [self->lastModified autorelease];
161     self->lastModified = [_value retain];
162   }
163 }
164 - (NSCalendarDate *)lastModified {
165   return self->lastModified;
166 }
167
168 - (void)setTimeStampAsDate:(NSCalendarDate *)_date {
169   /* TODO: too be completed */
170 }
171 - (NSCalendarDate *)timeStampAsDate {
172   return [NSDate dateWithTimeIntervalSince1970:self->timestamp];
173 }
174
175 - (void)setStartDate:(NSCalendarDate *)_date {
176   if (self->startDate != _date) {
177     [self->startDate autorelease];
178     self->startDate = [_date retain];
179   }
180 }
181 - (NSCalendarDate *)startDate {
182   return self->startDate;
183 }
184
185 - (void)setOrganizer:(iCalPerson *)_organizer {
186   if (self->organizer != _organizer) {
187     [self->organizer autorelease];
188     self->organizer = [_organizer retain];
189   }
190 }
191 - (iCalPerson *)organizer {
192   return self->organizer;
193 }
194
195 - (void)removeAllAttendees {
196     [self->attendees removeAllObjects];
197 }
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];
203 }
204 - (NSArray *)attendees {
205   return self->attendees;
206 }
207
208 - (void)removeAllAlarms {
209     [self->alarms removeAllObjects];
210 }
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];
216 }
217 - (BOOL)hasAlarms {
218   return [self->alarms count] > 0 ? YES : NO;
219 }
220 - (NSArray *)alarms {
221   return self->alarms;
222 }
223
224 - (void)setUserComment:(NSString *)_userComment {
225   ASSIGN(self->userComment, _userComment);
226 }
227 - (NSString *)userComment {
228   return self->userComment;
229 }
230
231 /* stuff */
232
233 - (NSArray *)participants {
234   return [self _filteredAttendeesThinkingOfPersons:YES];
235 }
236 - (NSArray *)resources {
237   return [self _filteredAttendeesThinkingOfPersons:NO];
238 }
239
240 - (NSArray *)_filteredAttendeesThinkingOfPersons:(BOOL)_persons {
241   NSArray        *list;
242   NSMutableArray *filtered;
243   unsigned       i, count;
244   
245   list     = [self attendees];
246   count    = [list count];
247   filtered = [NSMutableArray arrayWithCapacity:count];
248   for (i = 0; i < count; i++) {
249     iCalPerson *p;
250     NSString   *role;
251     
252     p = [list objectAtIndex:i];
253     role = [p role];
254     if (_persons) {
255       if (role == nil || ![role hasPrefix:@"NON-PART"])
256         [filtered addObject:p];
257     }
258     else {
259       if ([role hasPrefix:@"NON-PART"])
260         [filtered addObject:p];
261     }
262   }
263   return filtered;
264 }
265
266 - (BOOL)isOrganizer:(id)_email {
267   _email = [_email lowercaseString];
268   return [[[[self organizer] rfc822Email] lowercaseString]
269                                           isEqualToString:_email];
270 }
271
272 - (BOOL)isParticipant:(id)_email {
273   NSArray *partEmails;
274   
275   _email     = [_email lowercaseString];
276   partEmails = [[self participants] valueForKey:@"rfc822Email"];
277   partEmails = [partEmails valueForKey:@"lowercaseString"];
278   return [partEmails containsObject:_email];
279 }
280
281 - (iCalPerson *)findParticipantWithEmail:(id)_email {
282   NSArray  *ps;
283   unsigned i, count;
284   
285   _email = [_email lowercaseString];
286   ps     = [self participants];
287   count  = [ps count];
288
289   for (i = 0; i < count; i++) {
290     iCalPerson *p;
291     
292     p = [ps objectAtIndex:i];
293     if ([[[p rfc822Email] lowercaseString] isEqualToString:_email])
294       return p;
295   }
296   return nil; /* not found */
297 }
298
299 @end /* iCalEntityObject */