]> err.no Git - scalable-opengroupware.org/commitdiff
added class versions to some files
authorhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 13 Jul 2005 10:36:09 +0000 (10:36 +0000)
committerhelge <helge@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 13 Jul 2005 10:36:09 +0000 (10:36 +0000)
added uid=>resourcename mapping

git-svn-id: http://svn.opengroupware.org/SOGo/trunk@733 d1b88da0-ebda-0310-925b-ed51d893ca5b

SOGo/SoObjects/Appointments/ChangeLog
SOGo/SoObjects/Appointments/SOGoAppointmentFolder.h
SOGo/SoObjects/Appointments/SOGoAppointmentFolder.m
SOGo/SoObjects/Appointments/SOGoGroupAppointmentFolder.m
SOGo/SoObjects/SOGo/ChangeLog
SOGo/SoObjects/SOGo/SOGoFolder.m
SOGo/SoObjects/SOGo/SOGoObject.m
SOGo/SoObjects/SOGo/SOGoUserFolder.m
SOGo/SoObjects/SOGo/Version

index a3a68373198c4ba900ed602dc9aeeeaa89556784..0020203e72a5e1058595e92bbee636902ffc58cd 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-13  Helge Hess  <helge.hess@opengroupware.org>
+
+       * SOGoAppointmentFolder.m: added a method to determine the resource
+         name from a vevent UID (v0.9.41)
+
 2005-07-12  Marcus Mueller  <znek@mulle-kybernetik.com>
 
        * SOGoAppointmentObject.m: tries ambitiously to detect the baseURL in
index 9214e38a8be97fe5e234498098a0f3e6d9b68b29..27782d9819f38a64b42a803c545f32598a30631c 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2004 SKYRIX Software AG
+  Copyright (C) 2004-2005 SKYRIX Software AG
 
   This file is part of OpenGroupware.org.
 
@@ -18,7 +18,6 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
 
 #ifndef __Appointments_SOGoAppointmentFolder_H__
 #define __Appointments_SOGoAppointmentFolder_H__
     
   The SOGoAppointmentFolder maps to an GCS folder of type 'appointment', that
   is, a content folder containing iCalendar files (and a proper quicktable).
+  
+  Important:
+  The folder assumes a 1:1 mapping between the vevent UID field and the
+  resource name in the content store. In other words, you are not allowed to
+  create two different vevent-files with the same uid in the store.
 */
 
-@class NSString, NSArray, NSCalendarDate, NSException;
+@class NSString, NSArray, NSCalendarDate, NSException, NSMutableDictionary;
 @class GCSFolder;
 
 @interface SOGoAppointmentFolder : SOGoFolder
 {
+  NSMutableDictionary *uidToFilename;
 }
 
 + (NSString *)globallyUniqueObjectId;
 
 - (NSArray *)calendarUIDs;
 
+/* vevent UID handling */
+
+- (NSString *)resourceNameForEventUID:(NSString *)_uid;
+
 /* fetching */
 
 - (NSArray *)fetchFields:(NSArray *)_fields
index e85d762ae2266ea2c78f25a141de649304d70177..b01b4a3f82a736c18e7ec9da7b4f1358f89d6d48 100644 (file)
 static NGLogger   *logger = nil;
 static NSTimeZone *MET    = nil;
 
++ (int)version {
+  return [super version] + 1 /* v1 */;
+}
 + (void)initialize {
   NGLoggerManager *lm;
   static BOOL     didInit = NO;
 
   if (didInit) return;
   didInit = YES;
+  
+  NSAssert2([super version] == 0,
+            @"invalid superclass (%@) version %i !",
+            NSStringFromClass([self superclass]), [super version]);
 
   lm      = [NGLoggerManager defaultLoggerManager];
   logger  = [lm loggerForDefaultKey:@"SOGoAppointmentFolderDebugEnabled"];
@@ -77,6 +84,7 @@ static NSTimeZone *MET    = nil;
 }
 
 - (void)dealloc {
+  [self->uidToFilename release];
   [super dealloc];
 }
 
@@ -142,6 +150,63 @@ static NSTimeZone *MET    = nil;
   return MET;
 }
 
+/* vevent UID handling */
+
+- (NSString *)resourceNameForEventUID:(NSString *)_u inFolder:(GCSFolder *)_f {
+  static NSArray *nameFields = nil;
+  EOQualifier *qualifier;
+  NSArray     *records;
+  
+  if (![_u isNotNull]) return nil;
+  if (_f == nil) {
+    [self errorWithFormat:@"(%s): missing folder for fetch!",
+           __PRETTY_FUNCTION__];
+    return nil;
+  }
+  
+  if (nameFields == nil)
+    nameFields = [[NSArray alloc] initWithObjects:@"c_name", nil];
+  
+  qualifier = [EOQualifier qualifierWithQualifierFormat:@"uid = %@", _u];
+  records   = [_f fetchFields:nameFields matchingQualifier:qualifier];
+  
+  if ([records count] == 1)
+    return [[records objectAtIndex:0] valueForKey:@"c_name"];
+  if ([records count] == 0)
+    return nil;
+  
+  [self errorWithFormat:
+         @"The storage contains more than file with the same UID!"];
+  return [[records objectAtIndex:0] valueForKey:@"c_name"];
+}
+
+- (NSString *)resourceNameForEventUID:(NSString *)_uid {
+  /* caches UIDs */
+  GCSFolder *folder;
+  NSString  *rname;
+  
+  if (![_uid isNotNull])
+    return nil;
+  if ((rname = [self->uidToFilename objectForKey:_uid]) != nil)
+    return [rname isNotNull] ? rname : nil;
+  
+  if ((folder = [self ocsFolder]) == nil) {
+    [self errorWithFormat:@"(%s): missing folder for fetch!",
+      __PRETTY_FUNCTION__];
+    return nil;
+  }
+
+  if (self->uidToFilename == nil)
+    self->uidToFilename = [[NSMutableDictionary alloc] initWithCapacity:16];
+  
+  if ((rname = [self resourceNameForEventUID:_uid inFolder:folder]) == nil)
+    [self->uidToFilename setObject:[NSNull null] forKey:_uid];
+  else
+    [self->uidToFilename setObject:rname forKey:_uid];
+  
+  return rname;
+}
+
 /* fetching */
 
 - (NSMutableDictionary *)fixupRecord:(NSDictionary *)_record
@@ -323,10 +388,10 @@ static NSTimeZone *MET    = nil;
   if (records != nil) {
     records = [self fixupRecords:records fetchRange:r];
     if (logger)
-      [self debugWithFormat:@"fetched %i records: %@", [records count], records];
+      [self debugWithFormat:@"fetched %i records: %@",[records count],records];
     ma = [NSMutableArray arrayWithArray:records];
   }
-
+  
   /* fetch recurrent apts now */
   sql = [NSString stringWithFormat:@"(startdate < %d) AND (cycleenddate > %d)"
                                    @" AND (iscycle = 1)",
@@ -395,7 +460,7 @@ static NSTimeZone *MET    = nil;
   if (infos == nil) {
     infos = [[NSArray alloc] initWithObjects:
                                @"title", 
-                               @"location", @"orgmail", @"status", @"ispublic", 
+                               @"location", @"orgmail", @"status", @"ispublic",
                                @"isallday", @"priority",
                                @"partmails", @"partstates",
                                nil];
@@ -425,6 +490,7 @@ static NSTimeZone *MET    = nil;
 /* URL generation */
 
 - (NSString *)baseURLForAptWithUID:(NSString *)_uid inContext:(id)_ctx {
+  // TODO: who calls this?
   NSString *url;
   
   if ([_uid length] == 0)
@@ -433,6 +499,8 @@ static NSTimeZone *MET    = nil;
   url = [self baseURLInContext:_ctx];
   if (![url hasSuffix:@"/"])
     url = [url stringByAppendingString:@"/"];
+  
+  // TODO: this should run a query to determine the uid!
   return [url stringByAppendingString:_uid];
 }
 
index 324fa443c16d98f810311a438b02cef6a211efad..4c51355340c8bf27c38746f3a84ffd657b0af635 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2004 SKYRIX Software AG
+  Copyright (C) 2004-2005 SKYRIX Software AG
 
   This file is part of OpenGroupware.org.
 
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id: SOGoAppointmentFolder.m 137 2004-07-02 17:42:14Z helge $
 
 #include "SOGoGroupAppointmentFolder.h"
 #include "common.h"
 
 @implementation SOGoGroupAppointmentFolder
 
++ (int)version {
+  return [super version] + 0 /* v1 */;
+}
++ (void)initialize {
+  NSAssert2([super version] == 1,
+            @"invalid superclass (%@) version %i !",
+            NSStringFromClass([self superclass]), [super version]);
+}
+
 - (void)dealloc {
   [self->uidToFolder release];
   [super dealloc];
index f51ea6262c50b90f70a1d105f8b42bcc6b8618a0..4635c188a0c2b402f7c911d5176b41b8bd2196d5 100644 (file)
@@ -1,5 +1,8 @@
 2005-07-13  Helge Hess  <helge.hess@opengroupware.org>
 
+       * SOGoObject.m, SOGoFolder.m: added +version methods to detect fragile
+         base class issues (v0.9.51)
+
        * SOGoFolder.m: changed to use plain column names (v0.9.50)
 
 2005-07-12  Marcus Mueller  <znek@mulle-kybernetik.com>
index d8e10aee3c22e6cc8624753ff2749d63dcf91506..c4a11c08f447030f957bcc2cad65c54655de5fbe 100644 (file)
 
 @implementation SOGoFolder
 
++ (int)version {
+  return [super version] + 0 /* v0 */;
+}
++ (void)initialize {
+  NSAssert2([super version] == 0,
+            @"invalid superclass (%@) version %i !",
+            NSStringFromClass([self superclass]), [super version]);
+}
+
 - (void)dealloc {
   [self->ocsFolder release];
   [self->ocsPath   release];
index f29e295b97fa07ebfbd5af90341114edf9935b7d..c597beb2af0c4ca3fa7eff486e3ffcd6aaac6ffe 100644 (file)
 
 @implementation SOGoObject
 
++ (int)version {
+  return 0;
+}
+
 - (BOOL)doesRetainContainer {
   return YES;
 }
index 66057cc45b8e6f8c3b1bec8e725c5312adface92..469c862c2cee5bf986ec7036f5f4e187bd24bd82 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2004 SKYRIX Software AG
+  Copyright (C) 2004-2005 SKYRIX Software AG
 
   This file is part of OpenGroupware.org.
 
@@ -18,7 +18,6 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
 
 #include "SOGoUserFolder.h"
 #include "WOContext+Agenor.h"
 
 @implementation SOGoUserFolder
 
-- (void)dealloc {
-  [super dealloc];
-}
-
 /* accessors */
 
 - (NSString *)login {
index 5ccb7b3ce22215ff595a0107441ed090cacb273a..fae7b092e7b52c6c3a471532eaf3c2fc5c07185e 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=50
+SUBMINOR_VERSION:=51
 
 # v0.9.50 requires libGDLContentStore v4.5.30
 # v0.9.34 requires libGDLContentStore v4.5.26