]> err.no Git - sope/blobdiff - sope-appserver/NGObjWeb/WOApplication.m
fixed duplicate -awake
[sope] / sope-appserver / NGObjWeb / WOApplication.m
index 7dafabd1ff1f2ddad4bb622967e585394d57afd1..61bca098e6b568ff7d5e1c764de345286f7b91f2 100644 (file)
@@ -1,20 +1,20 @@
 /*
-  Copyright (C) 2000-2004 SKYRIX Software AG
+  Copyright (C) 2000-2005 SKYRIX Software AG
 
-  This file is part of OpenGroupware.org.
+  This file is part of SOPE.
 
-  OGo is free software; you can redistribute it and/or modify it under
+  SOPE is free software; you can redistribute it and/or modify it under
   the terms of the GNU Lesser General Public License as published by the
   Free Software Foundation; either version 2, or (at your option) any
   later version.
 
-  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
+  SOPE 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 Lesser General Public
   License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with OGo; see the file COPYING.  If not, write to the
+  License along with SOPE; see the file COPYING.  If not, write to the
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
@@ -38,6 +38,7 @@
 #include <time.h>
 
 @interface WOApplication(PrivateMethods)
++ (id)logger;
 - (id)_loadComponentDefinitionWithName:(NSString *)_name
   language:(NSArray *)_langs;
 - (NSDictionary *)memoryStatistics;
@@ -56,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 */;
 }
@@ -68,11 +75,11 @@ static NSString *rapidTurnAroundPath = nil;
   c = [(id<NSObject>)clazz performSelector:@selector(defaultSNSConnection)];
 
   if (c == nil) {
-    [self logFatalWithFormat:@"could not connect SNS, exiting .."];
+    [[self logger] fatalWithFormat:@"could not connect SNS, exiting .."];
     exit(20);
   }
   
-  [self logInfoWithFormat:@"SNS enabled"];
+  [[self logger] logWithFormat:@"SNS enabled"];
 }
 
 + (void)_initializeWOApp {
@@ -89,6 +96,8 @@ static NSString *rapidTurnAroundPath = nil;
   debugOn = [WOApplication isDebuggingEnabled];
   if (!debugOn)
     [[self logger] setLogLevel:NGLogLevelInfo];
+  else
+    NSLog(@"Note: WOApplication debugging is enabled.");
 
   if (classLock == nil) classLock = [[NSRecursiveLock alloc] init];
   ud = [NSUserDefaults standardUserDefaults];
@@ -98,7 +107,7 @@ static NSString *rapidTurnAroundPath = nil;
   if ([ud boolForKey:@"WOContactSNS"])
     [self _setupSNS];
   else
-    [self logInfoWithFormat:@"SNS support disabled."];
+    [[self logger] logWithFormat:@"SNS support disabled."];
   
   NSDateClass = [NSDate class];
   WOTemplateClass = [WOTemplate class];
@@ -226,7 +235,7 @@ static NSString *rapidTurnAroundPath = nil;
   e    = [keys objectEnumerator];
   while((key = [e nextObject]) != nil) {
     if ([key hasPrefix:@"WO"] || [key isEqualToString:@"NSProjectSearchPath"])
-      [self logInfoWithFormat:@"[default]: %@ = %@",
+      [self logWithFormat:@"[default]: %@ = %@",
         key,
         [[ud objectForKey:key] description]];
   }
@@ -262,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;
@@ -345,7 +355,7 @@ static NSString *rapidTurnAroundPath = nil;
 
 - (void)processHupSignal:(int)_signal {
   /* this isn't called immediatly */
-  [self logInfoWithFormat:@"terminating on SIGHUP ..."];
+  [self logWithFormat:@"terminating on SIGHUP ..."];
   [self terminate];
 }
 
@@ -364,7 +374,7 @@ static NSString *rapidTurnAroundPath = nil;
   
   if (self->path == nil) {
     if ((self->path = [[self _lookupAppPath] copy]) == nil) {
-      [self logDebugWithFormat:@"could not find wrapper of application !"];
+      [self debugWithFormat:@"could not find wrapper of application !"];
       missingPath = YES;
       return nil;
     }
@@ -407,11 +417,11 @@ static NSString *rapidTurnAroundPath = nil;
   NSDictionary *td;
   
   if ((t = [NSThread currentThread]) == nil) {
-    [self logErrorWithFormat:@"missing current thread !!!"];
+    [self errorWithFormat:@"missing current thread !!!"];
     return nil;
   }
   if ((td = [t threadDictionary]) == nil) {
-    [self logErrorWithFormat:
+    [self errorWithFormat:
             @"missing current thread's dictionary (thread=%@) !!!",
             t];
     return nil;
@@ -511,18 +521,18 @@ static NSString *rapidTurnAroundPath = nil;
   if (_request == nil) return nil;
   
   /* first look into form values */
-  if ((sessionId = [_request formValueForKey:WORequestValueSessionID])) {
+  if ((sessionId = [_request formValueForKey:WORequestValueSessionID])!=nil) {
     if ([sessionId length] > 0)
       return sessionId;
   }
   
   /* now look into the cookies */
-  if ((sessionId = [_request cookieValueForKey:[self name]])) {
+  if ((sessionId = [_request cookieValueForKey:[self name]]) != nil) {
     if ([sessionId respondsToSelector:@selector(objectEnumerator)]) {
       NSEnumerator *e;
       
       e = [(id)sessionId objectEnumerator];
-      while ((sessionId = [e nextObject])) {
+      while ((sessionId = [e nextObject]) != nil) {
         if ([sessionId length] > 0 && ![sessionId isEqual:@"nil"])
           return sessionId;
       }
@@ -553,7 +563,7 @@ static NSString *rapidTurnAroundPath = nil;
 - (WOSession *)createSessionForRequest:(WORequest *)_request {
   if ([self respondsToSelector:@selector(createSession)]) {
     /* call deprecated method */
-    [self logWarnWithFormat:@"calling deprecated -createSession .."];
+    [self warnWithFormat:@"calling deprecated -createSession .."];
     return [self createSession];
   }
   else {
@@ -575,7 +585,7 @@ static NSString *rapidTurnAroundPath = nil;
 
   if ([self respondsToSelector:@selector(restoreSession)]) {
     /* call deprecated method */
-    [self logWarnWithFormat:@"calling deprecated -restoreSession .."];
+    [self warnWithFormat:@"calling deprecated -restoreSession .."];
     return [self restoreSession];
   }
   
@@ -583,7 +593,7 @@ static NSString *rapidTurnAroundPath = nil;
     WOSessionStore *store;
     
     if ((store = [self sessionStore]) == nil) {
-      [self logErrorWithFormat:@"missing session store ..."];
+      [self errorWithFormat:@"missing session store ..."];
     }
     else {
       session = [store restoreSessionWithID:_sid request:[_ctx request]];
@@ -612,7 +622,7 @@ static NSString *rapidTurnAroundPath = nil;
       if ([sid respondsToSelector:@selector(objectEnumerator)]) {
         NSEnumerator *e;
         
-        [self logErrorWithFormat:@"got multiple session IDs !"];
+        [self errorWithFormat:@"got multiple session IDs !"];
         
         e = [sid objectEnumerator];
         while ((_sid = [e nextObject])) {
@@ -622,7 +632,7 @@ static NSString *rapidTurnAroundPath = nil;
           if ((session = [self restoreSessionWithID:_sid inContext:_ctx]))
             return session;
           
-          //NSLog(@"WARNING: did not find session for sid %@", _sid);
+          //[self warnWithFormat:@"did not find session for sid %@", _sid);
         }
       }
     }
@@ -637,7 +647,7 @@ static NSString *rapidTurnAroundPath = nil;
   
   if ([self respondsToSelector:@selector(saveSession:)]) {
     /* call deprecated method */
-    [self logWarnWithFormat:@"calling deprecated -saveSession: .."];
+    [self warnWithFormat:@"calling deprecated -saveSession: .."];
     [self saveSession:[_ctx session]];
     return;
   }
@@ -657,7 +667,7 @@ static NSString *rapidTurnAroundPath = nil;
     if (perfLogger) {
       NSTimeInterval rt;
       rt = [[NSDateClass date] timeIntervalSince1970] - startSnSleep;
-      [perfLogger logInfoWithFormat:@"[woapp]: session -sleep took %4.3fs.",
+      [perfLogger logWithFormat:@"[woapp]: session -sleep took %4.3fs.",
                                     rt < 0.0 ? -1.0 : rt];
     }
     
@@ -676,7 +686,7 @@ static NSString *rapidTurnAroundPath = nil;
     if (perfLogger) {
       NSTimeInterval rt;
       rt = [[NSDateClass date] timeIntervalSince1970] - startStore;
-      [perfLogger logInfoWithFormat:@"[woapp]: storing sn in store took %4.3fs.",
+      [perfLogger logWithFormat:@"[woapp]: storing sn in store took %4.3fs.",
                                     rt < 0.0 ? -1.0 : rt];
     }
   }
@@ -685,7 +695,7 @@ static NSString *rapidTurnAroundPath = nil;
   if (perfLogger) {
     NSTimeInterval rt;
     rt = [[NSDateClass date] timeIntervalSince1970] - startSave;
-    [perfLogger logInfoWithFormat:@"[woapp]: saveSessionForContext took %4.3fs.",
+    [perfLogger logWithFormat:@"[woapp]: saveSessionForContext took %4.3fs.",
                                   rt < 0.0 ? -1.0 : rt];
   }
 }
@@ -754,11 +764,11 @@ static NSString *rapidTurnAroundPath = nil;
 #endif
   
   if ([self respondsToSelector:@selector(handleSessionCreationError)]) {
-    [self logWarnWithFormat:@"called deprecated -handleSessionCreationError method"];
+    [self warnWithFormat:@"called deprecated -handleSessionCreationError method"];
     return [self handleSessionCreationError];
   }
   
-  [self logErrorWithFormat:@"could not create session for context %@", _ctx];
+  [self errorWithFormat:@"could not create session for context %@", _ctx];
   
   [response setStatus:200];
   [response appendContentString:@"<h4>Session Creation Error</h4>\n<pre>"];
@@ -784,12 +794,12 @@ static NSString *rapidTurnAroundPath = nil;
 
 - (WOResponse *)handleSessionRestorationErrorInContext:(WOContext *)_ctx {
   if ([self respondsToSelector:@selector(handleSessionRestorationError)]) {
-    [self logWarnWithFormat:@"calling deprecated "
+    [self warnWithFormat:@"calling deprecated "
                             @"-handleSessionRestorationError method"];
     return [self handleSessionRestorationError];
   }
   
-  [self logErrorWithFormat:@"could not restore session for context %@", _ctx];
+  [self errorWithFormat:@"could not restore session for context %@", _ctx];
   return nil;
 }
 
@@ -808,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 logDebugWithFormat:@"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;
 }
 
@@ -940,11 +965,11 @@ static NSString *rapidTurnAroundPath = nil;
   Class     dynamicElementClass = NSClassFromString(_name);
 
   if (dynamicElementClass == Nil) {
-    [self logWarnWithFormat:@"did not find dynamic element class %@ !", _name];
+    [self warnWithFormat:@"did not find dynamic element class %@ !", _name];
     return nil;
   }
   if (![dynamicElementClass isDynamicElement]) {
-    [self logWarnWithFormat:@"class %@ is not a dynamic element class !", _name];
+    [self warnWithFormat:@"class %@ is not a dynamic element class !", _name];
     return nil;
   }
   
@@ -1021,17 +1046,15 @@ static NSString *rapidTurnAroundPath = nil;
   start = [self memoryStatistics];
 #endif
   
-  pool = [[NSAutoreleasePool alloc] init];
+  pool      = [[NSAutoreleasePool alloc] init];
   
-  languages = [_ctx hasSession]
-    ? [(WOSession *)[_ctx session] languages]
-    : [[_ctx request] browserLanguages];
+  languages = [_ctx resourceLookupLanguages];
 
   if ((rm = [[_ctx component] resourceManager]) == nil)
     rm = [self resourceManager];
   
-  page = [rm pageWithName:(_name != nil ? _name : @"Main")
-             languages:languages];
+  page      = [rm pageWithName:(_name != nil ? _name : @"Main")
+                  languages:languages];
   [page ensureAwakeInContext:_ctx];
   
   page = [page retain];
@@ -1047,8 +1070,8 @@ static NSString *rapidTurnAroundPath = nil;
              [[start objectForKey:@"VmSize"] intValue];
     lib    = [[stop objectForKey:@"VmLib"] intValue] -
              [[start objectForKey:@"VmLib"] intValue];
-    [self logDebugWithFormat:@"loaded component %@; rss=%i vm=%i lib=%i.",
-      _name, rss,vmsize,lib];
+    [self debugWithFormat:@"loaded component %@; rss=%i vm=%i lib=%i.",
+            _name, rss,vmsize,lib];
   }
 #endif
   
@@ -1077,7 +1100,7 @@ static NSString *rapidTurnAroundPath = nil;
 }
 
 - (WOResponse *)handlePageRestorationErrorInContext:(WOContext *)_ctx {
-  [self logErrorWithFormat:
+  [self errorWithFormat:
           @"could not restore page for context-id %@\n  in context %@",
           [_ctx currentElementID], _ctx];
   
@@ -1098,7 +1121,7 @@ static NSString *rapidTurnAroundPath = nil;
   WOResponse *r  = nil;
   
   if ([self respondsToSelector:@selector(handleException:)]) {
-    [self logWarnWithFormat:@"calling deprecated -handleException method !"];
+    [self warnWithFormat:@"calling deprecated -handleException method !"];
     return [self handleException:_exc];
   }
   
@@ -1111,21 +1134,21 @@ static NSString *rapidTurnAroundPath = nil;
        ? 1 : 0;
     }
     if (doCore) {
-      [self logFatalWithFormat:@"%@: caught (ctx=%@):\n  %@.",
-           self, _ctx, _exc];
+      [self fatalWithFormat:@"%@: caught (ctx=%@):\n  %@.",
+              self, _ctx, _exc];
       abort();
     }
   }
 #endif
   
   if (_ctx == nil) {
-    [self logFatalWithFormat:@"%@: caught (without context):\n  %@.",
-                             self, _exc];
+    [self fatalWithFormat:@"%@: caught (without context):\n  %@.",
+            self, _exc];
     [self terminate];
   }
   else if (rq == nil) {
-    [self logFatalWithFormat:@"%@: caught (without request):\n  %@.",
-                             self, _exc];
+    [self fatalWithFormat:@"%@: caught (without request):\n  %@.",
+            self, _exc];
     [self terminate];
   }
   else {
@@ -1143,7 +1166,7 @@ static NSString *rapidTurnAroundPath = nil;
     NSString *str = nil;
     NSString *bt  = nil;
     
-    [self logErrorWithFormat:@"%@: caught:\n  %@\nin context:\n  %@.",
+    [self errorWithFormat:@"%@: caught:\n  %@\nin context:\n  %@.",
             self, _exc, _ctx];
 
 #if LIB_FOUNDATION_LIBRARY
@@ -1152,7 +1175,7 @@ static NSString *rapidTurnAroundPath = nil;
 #endif
     
     if ((r = [WOResponse responseWithRequest:rq]) == nil)
-      [self logErrorWithFormat:@"could not create response !"];
+      [self errorWithFormat:@"could not create response !"];
     
     [r setHeader:@"text/html" forKey:@"content-type"];
     [r setHeader:@"no-cache" forKey:@"cache-control"];
@@ -1227,7 +1250,7 @@ static NSString *rapidTurnAroundPath = nil;
 
 #if !LIB_FOUNDATION_LIBRARY
 - (id)valueForUndefinedKey:(NSString *)_key {
-  [self logWarnWithFormat:@"tried to access undefined KVC key: '%@'",
+  [self warnWithFormat:@"tried to access undefined KVC key: '%@'",
          _key];
   return nil;
 }