]> err.no Git - scalable-opengroupware.org/commitdiff
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1321 d1b88da0-ebda-0310...
authorwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 16 Jan 2008 22:30:39 +0000 (22:30 +0000)
committerwolfgang <wolfgang@d1b88da0-ebda-0310-925b-ed51d893ca5b>
Wed, 16 Jan 2008 22:30:39 +0000 (22:30 +0000)
SoObjects/SOGo/SOGoCache.h [new file with mode: 0644]
SoObjects/SOGo/SOGoCache.m [new file with mode: 0644]

diff --git a/SoObjects/SOGo/SOGoCache.h b/SoObjects/SOGo/SOGoCache.h
new file mode 100644 (file)
index 0000000..68243c6
--- /dev/null
@@ -0,0 +1,54 @@
+/* SOGoCache.h - this file is part of SOGo
+ *
+ * Copyright (C) 2008 Inverse groupe conseil
+ *
+ * Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This file 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef SOGOCACHE_H
+#define SOGOCACHE_H
+
+#import <Foundation/NSObject.h>
+
+@class NSMutableDictionary;
+@class NSString;
+
+@class SOGoObject;
+@class SOGoUser;
+
+@interface SOGoCache : NSObject
+{
+  NSMutableDictionary *cache;
+  NSMutableDictionary *users;
+}
+
++ (SOGoCache *) sharedCache;
++ (void) killCache;
+
+- (void) registerObject: (id) object
+              withName: (NSString *) name
+           inContainer: (SOGoObject *) container;
+- (id) objectNamed: (NSString *) name
+       inContainer: (SOGoObject *) container;
+
+- (void) registerUser: (SOGoUser *) user;
+- (id) userNamed: (NSString *) name;
+
+@end
+
+#endif /* SOGOCACHE_H */
diff --git a/SoObjects/SOGo/SOGoCache.m b/SoObjects/SOGo/SOGoCache.m
new file mode 100644 (file)
index 0000000..8a33c76
--- /dev/null
@@ -0,0 +1,139 @@
+/* SOGoCache.m - this file is part of SOGo
+ *
+ * Copyright (C) 2008 Inverse groupe conseil
+ *
+ * Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This file 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#import <Foundation/NSArray.h>
+
+#import <NGObjWeb/SoObject.h>
+
+#import "SOGoUser.h"
+#import "SOGoCache.h"
+
+static SOGoCache *sharedCache = nil;
+
+@implementation SOGoCache
+
++ (SOGoCache *) sharedCache
+{
+  if (!sharedCache)
+    sharedCache = [self new];
+
+  return sharedCache;
+}
+
++ (void) killCache
+{
+  [sharedCache release];
+  sharedCache = nil;
+}
+
+- (id) init
+{
+  if ((self = [super init]))
+    {
+      cache = [NSMutableDictionary new];
+      users = [NSMutableDictionary new];
+    }
+
+  return self;
+}
+
+- (void) dealloc
+{
+  [cache release];
+  [users release];
+  [super dealloc];
+}
+
+- (NSString *) _pathFromObject: (SOGoObject *) container
+                     withName: (NSString *) name
+{
+  NSString *fullPath, *nameInContainer;
+  NSMutableArray *names;
+  id currentObject;
+
+  names = [NSMutableArray new];
+
+  [names addObject: name];
+  currentObject = container;
+  while ((nameInContainer = [currentObject nameInContainer]))
+    {
+      [names addObject: nameInContainer];
+      currentObject = [currentObject container];
+    }
+
+  fullPath = [names componentsJoinedByString: @"/"];
+  [names release];
+
+  return fullPath;
+}
+
+- (void) registerObject: (id) object
+              withName: (NSString *) name
+           inContainer: (SOGoObject *) container
+{
+  NSString *fullPath;
+
+  if (object && name)
+    {
+      [self registerObject: container
+           withName: [container nameInContainer]
+           inContainer: [container container]];
+      fullPath = [self _pathFromObject: container
+                      withName: name];
+      if (![cache objectForKey: fullPath])
+       {
+//       NSLog (@"registering '%@'", fullPath);
+         [cache setObject: object forKey: fullPath];
+       }
+//       else
+//     NSLog (@"'%@' already registered", fullPath);
+    }
+}
+
+- (id) objectNamed: (NSString *) name
+       inContainer: (SOGoObject *) container
+{
+  NSString *fullPath;
+
+  fullPath = [self _pathFromObject: container
+                  withName: name];
+
+  return [cache objectForKey: fullPath];
+//   if (object)
+//     NSLog (@"found cached object '%@'", fullPath);
+}
+
+- (void) registerUser: (SOGoUser *) user
+{
+//   NSLog (@"registerUser: %@", user);
+
+  [users setObject: user forKey: [user login]];
+}
+
+- (id) userNamed: (NSString *) name
+{
+//   NSLog (@"userNamed: %@", name);
+
+  return [users objectForKey: name];
+}
+
+@end