From 440b7f6a2f58da371dc624f3b14048d8beb561a5 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 9 Aug 2006 21:11:49 +0000 Subject: [PATCH] Monotone-Parent: 2fb15c70b1de37bda0e1ffb70091e2638b2f9de6 Monotone-Revision: b905373c7a05b0b865e4b2361c76b7a5d079a520 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2006-08-09T21:11:49 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 + SoObjects/Contacts/SOGoContactFolder.h | 60 ------- SoObjects/Contacts/SOGoContactFolder.m | 154 ----------------- SoObjects/Contacts/SOGoContactGCSFolder.h | 37 ++++ SoObjects/Contacts/SOGoContactGCSFolder.m | 198 ++++++++++++++++++++++ 5 files changed, 238 insertions(+), 214 deletions(-) delete mode 100644 SoObjects/Contacts/SOGoContactFolder.h delete mode 100644 SoObjects/Contacts/SOGoContactFolder.m create mode 100644 SoObjects/Contacts/SOGoContactGCSFolder.h create mode 100644 SoObjects/Contacts/SOGoContactGCSFolder.m diff --git a/ChangeLog b/ChangeLog index c90ae0d24..8e92fb808 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-08-09 Wolfgang Sourdeau + * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of + "SOGoContactFolder". + * SoObjects/Contacts/SOGoContactSource.h, SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and protocols. diff --git a/SoObjects/Contacts/SOGoContactFolder.h b/SoObjects/Contacts/SOGoContactFolder.h deleted file mode 100644 index 4b4562387..000000000 --- a/SoObjects/Contacts/SOGoContactFolder.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#ifndef __Contacts_SOGoContactFolder_H__ -#define __Contacts_SOGoContactFolder_H__ - -#include - -/* - SOGoContactFolder - Parent object: the user's SOGoUserFolders - Child objects: SOGoContactObject - - The SOGoContactFolder maps to an GCS folder of type 'contact', that - is, a content folder containing vcal?? files (and a proper quicktable). -*/ - -@class NSString, NSArray, NSCalendarDate, NSException; -@class GCSFolder; - -@class SOGoContactSource; - -@interface SOGoContactFolder : SOGoFolder - -/* fetching */ - -+ (id) contactFolderWithSource: (SOGoContactSource *) source - inContainer: (SOGoObject *) newContainer - andName: (NSString *) name; - -- (id) initWithSource: (SOGoContactSource *) source - inContainer: (SOGoObject *) newContainer - andName: (NSString *) name; - -- (void) setContactSource: (SOGoContactSource *) source - andName: name; - -- (NSArray *)fetchCoreInfos; - -@end - -#endif /* __Contacts_SOGoContactFolder_H__ */ diff --git a/SoObjects/Contacts/SOGoContactFolder.m b/SoObjects/Contacts/SOGoContactFolder.m deleted file mode 100644 index 508fa1b77..000000000 --- a/SoObjects/Contacts/SOGoContactFolder.m +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright (C) 2004-2005 SKYRIX Software AG - - This file is part of OpenGroupware.org. - - OGo is free software; you can redistribute it and/or modify it under - the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - OGo is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with OGo; see the file COPYING. If not, write to the - Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. -*/ - -#include "SOGoContactFolder.h" -#include -#include -#include -#include -#include "common.h" -#include -#include - -@implementation SOGoContactFolder - -+ (id) contactFolderWithSource: (SOGoContactSource *) source - inContainer: (SOGoObject *) newContainer - andName: (NSString *) name -{ - SOGoContactFolder *folder; - - folder = [[self alloc] initWithSource: source - inContainer: newContainer - andName: name]; - [folder autorelease]; - - return folder; -} - -- (id) initWithSource: (SOGoContactSource *) source - inContainer: (SOGoObject *) newContainer - andName: (NSString *) name -{ - if ((self = [self initWithName: name inContainer: newContainer])) - [self setContactSource: source andName: name]; - - return self; -} - -- (void) setContactSource: (SOGoContactSource *) source - andName: name -{ -} - -/* name lookup */ - -- (BOOL)isValidContactName:(NSString *)_key { - if ([_key length] == 0) - return NO; - - return YES; -} - -- (id) contactWithName: (NSString *) _key - inContext: (id)_ctx -{ - static Class ctClass = Nil; - id ct; - - if (ctClass == Nil) - ctClass = NSClassFromString(@"SOGoContactObject"); - if (ctClass == Nil) { - [self errorWithFormat:@"missing SOGoContactObject class!"]; - return nil; - } - - ct = [[ctClass alloc] initWithName:_key inContainer:self]; - return [ct autorelease]; -} - -- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag { - id obj; - - /* first check attributes directly bound to the application */ - if ((obj = [super lookupName:_key inContext:_ctx acquire:NO])) - return obj; - - if ([self isValidContactName:_key]) { -#if 0 - if ([[self ocsFolder] versionOfContentWithName:_key]) -#endif - return [self contactWithName:_key inContext:_ctx]; - } - - /* return 404 to stop acquisition */ - return [NSException exceptionWithHTTPStatus:404 /* Not Found */]; -} - -/* fetching */ - -- (NSArray *)fixupRecords:(NSArray *)_records { - return _records; -} - -- (NSArray *)fetchCoreInfos { - NSArray *fields, *records; - - fields = [NSArray arrayWithObjects: - @"c_name", @"cn", - @"sn", @"givenname", @"l", - @"mail", @"telephonenumber", - nil]; - records = [[self ocsFolder] fetchFields:fields matchingQualifier:nil]; - if (records == nil) { - [self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__]; - return nil; - } - records = [self fixupRecords:records]; - //[self debugWithFormat:@"fetched %i records.", [records count]]; - return records; -} - -/* GET */ - -- (id)GETAction:(id)_ctx { - // TODO: I guess this should really be done by SOPE (redirect to - // default method) - WOResponse *r; - NSString *uri; - - uri = [[_ctx request] uri]; - if (![uri hasSuffix:@"/"]) uri = [uri stringByAppendingString:@"/"]; - uri = [uri stringByAppendingString:@"view"]; - - r = [_ctx response]; - [r setStatus:302 /* moved */]; - [r setHeader:uri forKey:@"location"]; - return r; -} - -/* folder type */ - -- (NSString *)outlookFolderClass { - return @"IPF.Contact"; -} - -@end /* SOGoContactFolder */ diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.h b/SoObjects/Contacts/SOGoContactGCSFolder.h new file mode 100644 index 000000000..71113a6f8 --- /dev/null +++ b/SoObjects/Contacts/SOGoContactGCSFolder.h @@ -0,0 +1,37 @@ +/* + Copyright (C) 2004-2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + OGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#ifndef __Contacts_SOGoContactGCSFolder_H__ +#define __Contacts_SOGoContactGCSFolder_H__ + +#import +#import "SOGoContactFolder.h" + +@class NSString, NSArray; + +@interface SOGoContactGCSFolder : SOGoFolder +{ + NSString *displayName; +} + +@end + +#endif /* __Contacts_SOGoContactGCSFolder_H__ */ diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.m b/SoObjects/Contacts/SOGoContactGCSFolder.m new file mode 100644 index 000000000..780d783eb --- /dev/null +++ b/SoObjects/Contacts/SOGoContactGCSFolder.m @@ -0,0 +1,198 @@ +/* + Copyright (C) 2004-2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + OGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#import + +#import "common.h" + +#import "SOGoContactGCSEntry.h" +#import "SOGoContactGCSFolder.h" + +@implementation SOGoContactGCSFolder + ++ (id ) contactFolderWithName: (NSString *) aName + andDisplayName: (NSString *) aDisplayName + inContainer: (SOGoObject *) aContainer +{ + SOGoContactGCSFolder *folder; + + folder = [[self alloc] initWithName: aName + andDisplayName: aDisplayName + inContainer: aContainer]; + [folder autorelease]; + + return folder; +} + +- (id ) initWithName: (NSString *) aName + andDisplayName: (NSString *) aDisplayName + inContainer: (SOGoObject *) aContainer +{ + if ((self = [self initWithName: aName + inContainer: aContainer])) + [self setDisplayName: aDisplayName]; + + return self; +} + +- (void) setDisplayName: (NSString *) aDisplayName +{ + if (displayName) + [displayName release]; + displayName = aDisplayName; + if (displayName) + [displayName retain]; +} + +- (NSString *) displayName +{ + return displayName; +} + +/* name lookup */ + +- (id ) lookupContactWithId: (NSString *) recordId +{ + SOGoContactGCSEntry *contact; + NSArray *contactIds; + + if ([recordId length] > 0) + { + contactIds = [self fetchContentObjectNames]; + if ([contactIds containsObject: recordId]) + { + contact = [[SOGoContactGCSEntry alloc] initWithName: recordId + inContainer: self]; + [contact autorelease]; + } + else + contact = nil; + } + else + contact = nil; + + return contact; +} + +- (id) lookupName: (NSString *) _key + inContext: (id) _ctx + acquire: (BOOL) _flag +{ + id obj; + + /* first check attributes directly bound to the application */ + obj = [super lookupName:_key inContext:_ctx acquire:NO]; + if (!obj) + obj = [self lookupContactWithId: _key]; + if (!obj) + obj = [NSException exceptionWithHTTPStatus:404 /* Not Found */]; + +// #if 0 +// if ([[self ocsFolder] versionOfContentWithName:_key]) +// #endif +// return [self contactWithName:_key inContext:_ctx]; +// } + + /* return 404 to stop acquisition */ + return obj; +} + +/* fetching */ +- (EOQualifier *) _qualifierForFilter: (NSString *) filter +{ + NSString *qs; + EOQualifier *qualifier; + + if (filter && [filter length] > 0) + { + qs = [NSString stringWithFormat: + @"(sn isCaseInsensitiveLike: '%%%@%%') OR " + @"(givenname isCaseInsensitiveLike: '%%%@%%') OR " + @"(mail isCaseInsensitiveLike: '%%%@%%') OR " + @"(telephonenumber isCaseInsensitiveLike: '%%%@%%')", + filter, filter, filter, filter]; + qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; + } + else + qualifier = nil; + + return qualifier; +} + +- (NSArray *) lookupContactsWithFilter: (NSString *) filter + sortBy: (NSString *) sortKey + ordering: (NSComparisonResult) sortOrdering +{ + NSArray *fields, *records; + EOQualifier *qualifier; + EOSortOrdering *ordering; + + NSLog (@"fetching records matching '*%@*', sorted by '%@' in order %d", + filter, sortKey, sortOrdering); + + fields = folderListingFields; + qualifier = [self _qualifierForFilter: filter]; + records = [[self ocsFolder] fetchFields: fields + matchingQualifier: qualifier]; + if (records) + { + ordering + = [EOSortOrdering sortOrderingWithKey: sortKey + selector: ((sortOrdering == NSOrderedDescending) + ? EOCompareCaseInsensitiveDescending + : EOCompareCaseInsensitiveAscending)]; + records + = [records sortedArrayUsingKeyOrderArray: + [NSArray arrayWithObject: ordering]]; + } + else + [self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__]; + + //[self debugWithFormat:@"fetched %i records.", [records count]]; + return records; +} + +// /* GET */ + +// - (id) GETAction: (id)_ctx +// { +// // TODO: I guess this should really be done by SOPE (redirect to +// // default method) +// WOResponse *r; +// NSString *uri; + +// uri = [[_ctx request] uri]; +// if (![uri hasSuffix:@"/"]) uri = [uri stringByAppendingString:@"/"]; +// uri = [uri stringByAppendingString:@"view"]; + +// r = [_ctx response]; +// [r setStatus:302 /* moved */]; +// [r setHeader:uri forKey:@"location"]; +// return r; +// } + +/* folder type */ + +- (NSString *)outlookFolderClass { + return @"IPF.Contact"; +} + +@end /* SOGoContactGCSFolder */