/** GSWDirectAction.m - GSWeb: Class GSWDirectAction Copyright (C) 1999-2002 Free Software Foundation, Inc. Written by: Manuel Guesdon Date: Feb 1999 $Revision$ $Date$ This file is part of the GNUstep Web Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. **/ static char rcsId[] = "$Id$"; #include //==================================================================== @implementation GSWDirectAction //-------------------------------------------------------------------- -(id)initWithRequest:(GSWRequest*)aRequest { LOGObjectFnStart(); if ((self=[super init])) { _context=[GSWContext contextWithRequest:aRequest]; [GSWApp _setContext:_context]; //NDFN [self _initializeRequestSessionIDInContext:_context]; }; LOGObjectFnStop(); return self; }; //-------------------------------------------------------------------- -(void)dealloc { DESTROY(_context); [super dealloc]; }; //-------------------------------------------------------------------- -(GSWRequest*)request { return [_context request]; }; //-------------------------------------------------------------------- -(GSWSession*)existingSession { //OK GSWSession* session=nil; BOOL hasSession=NO; LOGObjectFnStart(); hasSession=[_context hasSession]; if (hasSession) session=[_context existingSession]; if (!session) { NSString* sessionID=nil; sessionID=[[self request] sessionID]; if (sessionID) { NS_DURING { NSDebugMLLog(@"requests",@"sessionID=%@",sessionID); session=[GSWApp restoreSessionWithID:sessionID inContext:_context]; //No Exception if session can't be restored ! } NS_HANDLER { localException=ExceptionByAddingUserInfoObjectFrameInfo0(localException,@"in session create/restore"); LOGException(@"exception=%@",localException); //No Exception if session can't be restored ! session=nil; } NS_ENDHANDLER; }; }; LOGObjectFnStop(); return session; }; //-------------------------------------------------------------------- -(GSWSession*)existingSessionWithSessionID:(NSString*)aSessionID { //OK GSWSession* session=nil; BOOL hasSession=NO; LOGObjectFnStart(); hasSession=[_context hasSession]; if (hasSession) session=[_context existingSession]; if (!session) { if (aSessionID) { NS_DURING { NSDebugMLLog(@"requests",@"aSessionID=%@",aSessionID); session=[GSWApp restoreSessionWithID:aSessionID inContext:_context]; //No Exception if session can't be restored ! } NS_HANDLER { localException=ExceptionByAddingUserInfoObjectFrameInfo0(localException,@"in session create/restore"); LOGException(@"exception=%@",localException); //No Exception if session can't be restored ! session=nil; } NS_ENDHANDLER; }; }; LOGObjectFnStop(); return session; }; //-------------------------------------------------------------------- -(GSWSession*)session { BOOL hasSession=NO; GSWSession* session=nil; LOGObjectFnStart(); hasSession=[_context hasSession]; if (hasSession) session=[_context existingSession]; if (!session) { NSString* sessionID=nil; sessionID=[[self request] sessionID]; if (sessionID) { NS_DURING { session=[GSWApp restoreSessionWithID:sessionID inContext:_context]; } NS_HANDLER { localException=ExceptionByAddingUserInfoObjectFrameInfo0(localException,@"in session create/restore"); LOGException(@"exception=%@",localException); [localException raise]; }; NS_ENDHANDLER; if (!session) { ExceptionRaise(@"GSWDirectAction", @"Unable to restore sessionID %@.", sessionID); }; } else { // No Session ID: Create a new Session session=[_context session]; }; }; LOGObjectFnStop(); return session; }; //-------------------------------------------------------------------- // application -(GSWApplication*)application { return [GSWApplication application]; }; //-------------------------------------------------------------------- -(GSWComponent*)pageWithName:(NSString*)pageName { //OK GSWComponent* component=nil; LOGObjectFnStart(); NS_DURING { component=[[GSWApplication application]pageWithName:pageName inContext:_context]; } NS_HANDLER { LOGException(@"%@ (%@)", localException, [localException reason]); localException=ExceptionByAddingUserInfoObjectFrameInfo0(localException,@"In pageWithName:inContext:"); [localException raise]; }; NS_ENDHANDLER; LOGObjectFnStop(); return component; }; //-------------------------------------------------------------------- -(id )performActionNamed:(NSString*)actionName { //OK id actionResult=nil; NSString* actionSelName=nil; SEL actionSel=NULL; LOGObjectFnStart(); actionSelName=[NSString stringWithFormat:@"%@Action",actionName]; NSDebugMLLog(@"requests",@"actionSelName=%@",actionSelName); actionSel=NSSelectorFromString(actionSelName); NSDebugMLLog(@"requests",@"actionSel=%p",(void*)actionSel); if (actionSel) { NS_DURING { actionResult=[self performSelector:actionSel]; NSDebugMLLog(@"requests", @"_actionResult=%@ class=%@", actionResult, [actionResult class]); } NS_HANDLER { LOGException(@"%@ (%@)", localException, [localException reason]); localException=ExceptionByAddingUserInfoObjectFrameInfo0(localException,@"In performSelector:"); [localException raise]; }; NS_ENDHANDLER; } else { LOGError(@"No selector for: %@",actionSelName);//TODO actionResult=[self defaultAction];//No ?? }; LOGObjectFnStop(); return actionResult; }; //-------------------------------------------------------------------- -(id)defaultAction { LOGObjectFnStart(); LOGObjectFnStop(); return nil;//?? }; //-------------------------------------------------------------------- -(void)_initializeRequestSessionIDInContext:(GSWContext*)aContext { //OK GSWRequest* request=nil; NSString* gswsid=nil; LOGObjectFnStart(); request=[aContext request]; gswsid=[request formValueForKey:GSWKey_SessionID[GSWebNamingConv]]; if (!gswsid) { gswsid=[request cookieValueForKey:GSWKey_SessionID[GSWebNamingConv]]; }; if (gswsid) { //TODO }; LOGObjectFnStop(); }; @end //==================================================================== @implementation GSWDirectAction (GSWDirectActionA) -(GSWContext*)_context { //OK return _context; }; //-------------------------------------------------------------------- -(GSWSession*)_session { LOGObjectFnNotImplemented(); //TODOFN return nil; }; @end //==================================================================== @implementation GSWDirectAction (GSWTakeValuesConvenience) //-------------------------------------------------------------------- -(void)takeFormValueArraysForKeyArray:(NSArray*)keyArray { LOGObjectFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- -(void)takeFormValuesForKeyArray:(NSArray*)keyArray { LOGObjectFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- -(void)takeFormValueArraysForKeys:(NSString*)firstKey,... { LOGObjectFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- -(void)takeFormValuesForKeys:(NSString*)firstKey,... { LOGObjectFnNotImplemented(); //TODOFN }; @end //==================================================================== @implementation GSWDirectAction (GSWDebugging) //-------------------------------------------------------------------- -(void)logWithString:(NSString*)string { LOGObjectFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- -(void)logWithFormat:(NSString*)format,... { LOGObjectFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- +(void)logWithFormat:(NSString*)format,... { LOGClassFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- -(void)_debugWithString:(NSString*)string { LOGObjectFnNotImplemented(); //TODOFN }; //-------------------------------------------------------------------- -(void)debugWithFormat:(NSString*)format,... { LOGObjectFnNotImplemented(); //TODOFN }; @end