]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@70 d1b88da0-ebda-0310-925b-ed51d8...
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 28 Jun 2004 23:37:48 +0000 (23:37 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Mon, 28 Jun 2004 23:37:48 +0000 (23:37 +0000)
OGoContentStore/OCSFolder.m
OGoContentStore/OCSFolderManager.h
OGoContentStore/OCSFolderManager.m
OGoContentStore/ocs_ls.m
OGoContentStore/sql/folderinfo.psql

index 25ddec0ca77db600cab0f6a92846791fccdc9f7a..da120631d1d5de81ba9ec83966c29a9f6adb118d 100644 (file)
 @implementation OCSFolder
 
 - (void)dealloc {
+  [self->folderId   release];
+  [self->folderName release];
+  [self->rootName   release];
+  [self->path       release];
+  [self->location   release];
+  [self->folderType release];
   [super dealloc];
 }
 
index af9db9596274f9ffeddaa25761932a490f85ddf9..2c83471b4998739328fcad44bba8572c98ff6c59 100644 (file)
@@ -33,7 +33,7 @@
 */
 
 @class NSString, NSArray, NSURL;
-@class OCSChannelManager;
+@class OCSChannelManager, OCSFolder;
 
 @interface OCSFolderManager : NSObject
 {
@@ -63,6 +63,8 @@
 - (BOOL)folderExistsAtPath:(NSString *)_path;
 - (NSArray *)listSubFoldersAtPath:(NSString *)_path recursive:(BOOL)_flag;
 
+- (OCSFolder *)folderAtPath:(NSString *)_path;
+
 /* cache management */
 
 - (void)reset;
index a0c9fb805a86f61fd03b4787be38b751c055f221..31d46067ee8f5ae55f775397ec11fa6423c04108 100644 (file)
@@ -321,6 +321,24 @@ static NSArray *emptyArray    = nil;
   return _name;
 }
 
+- (NSDictionary *)filterRecords:(NSArray *)_records forPath:(NSString *)_path {
+  unsigned i, count;
+  NSString *name;
+  
+  if (_records == nil) return nil;
+  if ((name = [self internalNameFromPath:_path]) == nil) return nil;
+  
+  for (i = 0, count = [_records count]; i < count; i++) {
+    NSString *recName;
+    
+    recName = [[_records objectAtIndex:i] objectForKey:@"path"];
+    [self logWithFormat:@"check '%@' vs '%@' ...", name, recName];
+    if ([name isEqualToString:recName])
+      return [_records objectAtIndex:i];
+  }
+  return nil;
+}
+
 - (BOOL)folderExistsAtPath:(NSString *)_path {
   NSString *fname;
   NSArray  *fnames, *records;
@@ -417,6 +435,60 @@ static NSArray *emptyArray    = nil;
   return result;
 }
 
+- (OCSFolder *)folderAtPath:(NSString *)_path {
+  NSMutableString *sql;
+  NSArray      *fnames, *records;
+  NSString     *ws;
+  NSDictionary *record;
+  
+  if ((fnames = [self internalNamesFromPath:_path]) == nil) {
+    [self debugWithFormat:@"got no internal names for path: '%@'", _path];
+    return nil;
+  }
+  
+  /* generate SQL to fetch folder attributes */
+  
+  ws = [self generateSQLWhereForInternalNames:fnames 
+            exactMatch:YES orDirectSubfolderMatch:NO];
+  
+  sql = [NSMutableString stringWithCapacity:256];
+  [sql appendString:@"SELECT "];
+  [sql appendString:@"\"folderid\", \"path\", \"location\", \"foldertype\""];
+  [sql appendString:@" FROM "];
+  [sql appendString:[self folderInfoTableName]];
+  [sql appendString:@" WHERE "];
+  [sql appendString:ws];
+  
+  /* fetching */
+  
+  if ((records = [self performSQL:sql]) == nil) {
+    [self logWithFormat:@"ERROR(%s): executing SQL failed: '%@'", 
+           __PRETTY_FUNCTION__, sql];
+    return nil;
+  }
+  
+  // TODO: need to filter on path
+
+  if ([records count] != 1) {
+    if ([records count] == 0) {
+      [self debugWithFormat:@"found no records for path: '%@'", _path];
+      return nil;
+    }
+    
+    [self logWithFormat:@"ERROR(%s): more than one row for path: '%@'", 
+           __PRETTY_FUNCTION__, _path];
+    return nil;
+  }
+  
+  if ((record = [self filterRecords:records forPath:_path]) == nil) {
+    [self debugWithFormat:@"found no record for path: '%@'", _path];
+    return nil;
+  }
+  
+  [self logWithFormat:@"record: %@", record];
+  return nil;
+}
+
 /* cache management */
 
 - (void)reset {
index bd5d7309c4ae203bdbbe7c631419c5a869da87ec..dba6ac3744967f0a5684bff7dbc2567058b0efb7 100644 (file)
@@ -55,6 +55,9 @@
   for (i = 0, count = [subfolders count]; i < count; i++) {
     printf("%s\n", [[subfolders objectAtIndex:i] cString]);
   }
+  
+  NSLog(@"folder: %@", [self->folderManager folderAtPath:_path]);
+
   return 0;
 }
 
index 4aa12d8513c1e4871c8fe5d1864d596bd03d0e78..9b358f0a645d314a8c469181a0306567a341cc9f 100644 (file)
@@ -22,6 +22,28 @@ CREATE TABLE SOGo_folder_info (
   folderType VARCHAR(255)  NOT NULL  -- the folder type ...
 );
 
+INSERT INTO SOGo_folder_info 
+  ( path, path1, path2, path3, path4, foldername, location, foldertype ) 
+VALUES 
+  ( '/Users', 
+    'Users',
+    NULL,
+    NULL,
+    NULL,
+    'Calendar', 
+    'http://OGo:OGo@localhost/test', 'Container' );
+
+INSERT INTO SOGo_folder_info 
+  ( path, path1, path2, path3, path4, foldername, location, foldertype ) 
+VALUES 
+  ( '/Users/helge', 
+    'Users',
+    'helge',
+    NULL,
+    NULL,
+    'Calendar', 
+    'http://OGo:OGo@localhost/test', 'Container' );
+
 INSERT INTO SOGo_folder_info 
   ( path, path1, path2, path3, path4, foldername, location, foldertype ) 
 VALUES