]> err.no Git - sope/blobdiff - sope-appserver/NGObjWeb/WOApplication.m
fixed bundle resource lookup on MacOSX, changed resource lookup in
[sope] / sope-appserver / NGObjWeb / WOApplication.m
index ea8f4af586e8baa4005c2ff89dc75a417b37dbca..61bca098e6b568ff7d5e1c764de345286f7b91f2 100644 (file)
@@ -57,6 +57,12 @@ static NSString *rapidTurnAroundPath = nil;
 
 @implementation WOApplication
 
+#if 1
+static NSString *defaultCompRqHandlerClassName = @"OWViewRequestHandler";
+#else
+static NSString *defaultCompRqHandlerClassName = @"WOComponentRequestHandler";
+#endif
+
 + (int)version {
   return [super version] + 5 /* v6 */;
 }
@@ -265,12 +271,13 @@ static NSString *rapidTurnAroundPath = nil;
     self->requestHandlerRegistry =
       NSCreateMapTable(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 8);
     
-    rk = [WOApplication componentRequestHandlerKey];
-#if 1
-    rh = [[NSClassFromString(@"OWViewRequestHandler") alloc] init];
-#else
-    rh = [[NSClassFromString(@"WOComponentRequestHandler") alloc] init];
-#endif
+    if ((rk = [WOApplication componentRequestHandlerKey]) == nil) {
+      [self logWithFormat:
+             @"WARNING: no component request handler key is specified, "
+             @"this probably means that share/ngobjweb/Defaults.plist "
+             @"could not get loaded (permissions?)"];
+    }
+    rh = [[NSClassFromString(defaultCompRqHandlerClassName) alloc] init];
     if ([rk length] > 0 && (rh != nil))
       [self registerRequestHandler:rh forKey:rk];
     [rh release]; rh = nil;
@@ -811,23 +818,38 @@ static NSString *rapidTurnAroundPath = nil;
 
 /* resources */
 
+- (void)_setupDefaultResourceManager {
+  NSUserDefaults *ud;
+  Class    rmClass;
+  NSString *p;
+  
+  ud = [NSUserDefaults standardUserDefaults];
+  p  = [ud stringForKey:@"WODefaultResourceManager"];
+  rmClass = ([p length] == 0)
+    ? [WOResourceManager class]
+    : NSClassFromString(p);
+  
+  if (rmClass == Nil) {
+    [self errorWithFormat:
+            @"failed to locate class of resource manager: '%@'", p];
+    return;
+  }
+  
+  if ([rmClass instancesRespondToSelector:@selector(initWithPath:)])
+    self->resourceManager = [[rmClass alloc] init];
+  else {
+    self->resourceManager = 
+      [(WOResourceManager *)[rmClass alloc] initWithPath:[self path]];
+  }
+}
+
 - (void)setResourceManager:(WOResourceManager *)_manager {
   ASSIGN(self->resourceManager, _manager);
 }
 - (WOResourceManager *)resourceManager {
-  if (self->resourceManager == nil) {
-    NSString *p;
-
-#if 0 && DEBUG
-    if ([(p = [self path]) length] > 0)
-      [self debugWithFormat:@"setup WOResourceManager at path '%@' ...", p];
-#else
-    p = [self path];
-#endif
-    
-    self->resourceManager = 
-      [(WOResourceManager *)[WOResourceManager alloc] initWithPath:p];
-  }
+  if (self->resourceManager == nil)
+    [self _setupDefaultResourceManager];
+  
   return self->resourceManager;
 }