From 643bc447adb0f34dbe973ab62734c9d2cd9f1429 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 29 Jun 2007 21:58:23 +0000 Subject: [PATCH] Monotone-Parent: 3f1af1b61e725eb56f00438f4516a03bcff73a5a Monotone-Revision: 6424c6fb13571b9e78000f91abc6a13bf395c042 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-06-29T21:58:23 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++ SoObjects/SOGo/SOGoFolder.m | 56 +++++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index e126dd915..1fa470919 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2007-06-29 Wolfgang Sourdeau + * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new + method that create the folder if considered mandatory. + ([SOGoFolder -folderIsMandatory]): new method that determines + whether the folder should be created automatically or not. To be + overriden by subclasses. + * Main/SOGo.m ([SOGo -run]): override method and create the missing system tables if needed. diff --git a/SoObjects/SOGo/SOGoFolder.m b/SoObjects/SOGo/SOGoFolder.m index 7d914d396..5eb8adb81 100644 --- a/SoObjects/SOGo/SOGoFolder.m +++ b/SoObjects/SOGo/SOGoFolder.m @@ -130,7 +130,7 @@ static NSString *defaultUserID = @""; if (!folderManager) { folderManager = [GCSFolderManager defaultFolderManager]; - [folderManager setFolderNamePrefix: @"SOGo_"]; + [folderManager setFolderNamePrefix: @"SOGo"]; } return folderManager; @@ -138,7 +138,14 @@ static NSString *defaultUserID = @""; - (GCSFolder *) ocsFolderForPath: (NSString *) _path { - return [[self folderManager] folderAtPath:_path]; + return [[self folderManager] folderAtPath: _path]; +} + +- (BOOL) folderIsMandatory +{ + [self subclassResponsibility: _cmd]; + + return NO; } - (GCSFolder *) ocsFolder @@ -146,7 +153,14 @@ static NSString *defaultUserID = @""; GCSFolder *folder; if (!ocsFolder) - ocsFolder = [[self ocsFolderForPath:[self ocsPath]] retain]; + { + ocsFolder = [self ocsFolderForPath: [self ocsPath]]; + if (!ocsFolder + && [self folderIsMandatory] + && [self create]) + ocsFolder = [self ocsFolderForPath: [self ocsPath]]; + [ocsFolder retain]; + } if ([ocsFolder isNotNull]) folder = ocsFolder; @@ -176,18 +190,20 @@ static NSString *defaultUserID = @""; return [[self folderManager] deleteFolderAtPath: ocsPath]; } -- (NSArray *)fetchContentObjectNames { +- (NSArray *) fetchContentObjectNames +{ NSArray *fields, *records; - fields = [NSArray arrayWithObject:@"c_name"]; + fields = [NSArray arrayWithObject: @"c_name"]; records = [[self ocsFolder] fetchFields:fields matchingQualifier:nil]; - if (![records isNotNull]) { - [self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__]; - return nil; - } - if ([records isKindOfClass:[NSException class]]) + if (![records isNotNull]) + { + [self errorWithFormat: @"(%s): fetch failed!", __PRETTY_FUNCTION__]; + return nil; + } + if ([records isKindOfClass: [NSException class]]) return records; - return [records valueForKey:@"c_name"]; + return [records valueForKey: @"c_name"]; } - (BOOL) nameExistsInFolder: (NSString *) objectName @@ -207,14 +223,16 @@ static NSString *defaultUserID = @""; && [records count] > 0); } -- (NSDictionary *)fetchContentStringsAndNamesOfAllObjects { +- (NSDictionary *) fetchContentStringsAndNamesOfAllObjects +{ NSDictionary *files; files = [[self ocsFolder] fetchContentsOfAllFiles]; - if (![files isNotNull]) { - [self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__]; - return nil; - } + if (![files isNotNull]) + { + [self errorWithFormat:@"(%s): fetch failed!", __PRETTY_FUNCTION__]; + return nil; + } if ([files isKindOfClass:[NSException class]]) return files; return files; @@ -222,7 +240,8 @@ static NSString *defaultUserID = @""; /* reflection */ -- (NSString *)defaultFilenameExtension { +- (NSString *) defaultFilenameExtension +{ /* Override to add an extension to a filename @@ -252,7 +271,8 @@ static NSString *defaultUserID = @""; return @"httpd/unix-directory"; } -- (NSArray *) toOneRelationshipKeys { +- (NSArray *) toOneRelationshipKeys +{ /* toOneRelationshipKeys are the 'files' contained in a folder */ NSMutableArray *ma; NSArray *names;