libs-gsweb/GSWeb.framework/GSWInput.m
Manuel Guesdon bd47f4ea4a 2001-03-11 Manuel Guesdon <mguesdon@orange-concept.com>
* GSWeb.framework/GSWWOCompatibility.h/.m: added
        * GSWeb.framework/GNUmakefile: added GSWWOCompatibility.h/.m
        * GSWeb.framework/GSWApplication.h/m: added WOApplicationMain, handle WO/GSWeb names
        * GSWeb.framework/GSWContext.m: handle WO/GSWeb names, added traces
        * GSWeb.framework/GSWConstants.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWDynamicURLString.m: handle WO/GSWeb names
        * GSWeb.framework/GSWProjectBundle.m/.h: handle WO/GSWeb names, suppress warnings
        * GSWeb.framework/GSWSession.m: handle WO/GSWeb names
        * GSWeb.framework/GSWRequest.m: handle WO/GSWeb names
        * GSWeb.framework/GSWTemplateParser.m: handle WO/GSWeb names,
                added tag counts to help errors hunt
        * GSWeb.framework/GSWBundle.m: handle WO/GSWeb names, added traces
        * GSWeb.framework/GSWResourceManager.m: handle WO/GSWeb names
        * GSWeb.framework/GSWURLValuedElementData.m: handle WO/GSWeb names
        * GSWeb.framework/GSWComponentRequestHandler.m: handle WO/GSWeb names
        * GSWeb.framework/GSWDirectAction.m: handle WO/GSWeb names
        * GSWeb.framework/GSWForm.m/.h: handle WO/GSWeb names
        * GSWeb.framework/GSWHyperlink.m/.h: handle WO/GSWeb names
        * GSWeb.framework/GSWResourceRequestHandler.m: handle WO/GSWeb names
        * GSWeb.framework/GSWDirectActionRequestHandler.m: handle WO/GSWeb names
        * GSWeb.framework/GSWActiveImage.m/.h: handle WO/GSWeb names
        * GSWeb.framework/GSWBindingNameAssociation.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWBrowser.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWComponent.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWHTMLURLValuedElement.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWImageButton.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWInput.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWPopUpButton.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWString.h/.m: handle WO/GSWeb names
        * GSWeb.framework/GSWAssociation.m: handle WO/GSWeb names
        * GSWeb.framework/GSWCheckBox.m: handle WO/GSWeb names
        * GSWeb.framework/GSWCheckBoxList.m: handle WO/GSWeb names
        * GSWeb.framework/GSWComponentDefinition.m: handle WO/GSWeb names
        * GSWeb.framework/GSWRadioButton.m: handle WO/GSWeb names
        * GSWeb.framework/GSWRadioButtonList.m: handle WO/GSWeb names
        * GSWeb.framework/GSWText.m: handle WO/GSWeb names
        * GSWeb.framework/GSWTextField.m: handle WO/GSWeb names
        * GSWeb.framework/GSWDeployedBundle.m: warnings
        * GSWeb.framework/GSWeb.h: added include GSWeb/GSWSessionTimeOut.h, GSWWOCompatibility.h
        * GSWeb.framework/GSWAdaptor.m: traces
        * GSWeb.framework/GSWDefaultAdaptor.m: handle WO/GSWeb names, added traces
        * GSWeb.framework/GSWDefaultAdaptorThread.m/.h: handle WO/GSWeb names
        * GSWeb.framework/NSNonBlockingFileHandle.m: added traces
        * GSWeb.framework/GSWTemplateParserANTLR.m: handle WO/GSWeb names
        * GSWeb.framework/GSWTemplateParserXML.m: handle WO/GSWeb names
                added tag count to help errors hunt
                remove "Tag gsweb invalid" message
                handle unicode strings in node content traces
                remove html and body tags if they are not present in the template
        * GSWeb.framework/GSWTemplateParseXML.h: added ivar _isHTMLTag, _isBodyTag
        * GSWeb.framework/GSWSessionTimeOutManager.m: dealloc sessionOrderedTimeOuts instead
                of deallocating 2 times sessionTimeOuts
        * GSWExtensions.framework/French.lproj/GSWSessionRestorationErrorPage.gswc/GSWSessionRestorationErrorPage.html:
                tag mismatch, Encode french characters
        * GSWExtensions.framework/GSWSessionRestorationErrorPage.gswc/GSWSessionRestorationErrorPage.html:
                tag mismatch
        * GSWHTMLBareString.m: handle unicode strings in description
        * GSWExtensions.framework/French.lproj/GSWExceptionPage.gswc/GSWExceptionPage.html:
                Encode french characters, Tag Mismatch
        * GSWExtensions.framework/French.lproj/GSWPageRestorationErrorPage.gswc/GSWPageRestorationErrorPage.html:
                Encode french characters
        * GSWExtensions.framework/French.lproj/GSWSessionCreationErrorPage.gswc/GSWSessionCreationErrorPage.html:
                Encode french characters
        * GSWExtensions.framework/GSWExceptionPage.gswc/GSWExceptionPage.html:
                Tag Mismatch
        * GSWExtensions.framework/GSWExceptionPage.gswc/GSWExceptionPage.gswd:
                added convertHTMLEntities for strings
        * GSWeb.framework/GSWRepetition.m: added traces, fix "count" property bug, standardize ivars
        * GSWeb.framework/NSObject+IVarAccess+PerformSel.m: added traces, handle underscored ivars search


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gsweb/trunk@9332 72102866-910b-0410-8b05-ffd578937521
2001-03-11 17:15:44 +00:00

359 lines
11 KiB
Objective-C

/* GSWInput.m - GSWeb: Class GSWInput
Copyright (C) 1999 Free Software Foundation, Inc.
Written by: Manuel Guesdon <mguesdon@sbuilders.com>
Date: Feb 1999
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 <GSWeb/GSWeb.h>
//====================================================================
@implementation GSWInput
//--------------------------------------------------------------------
-(id)initWithName:(NSString*)name_
associations:(NSDictionary*)associations_
contentElements:(NSArray*)elements_
{
NSMutableDictionary* _attributedAssociations=[[associations_ mutableCopy] autorelease];
LOGObjectFnStartC("GSWInput");
NSDebugMLLog(@"gswdync",@"name_=%@ associations_:%@ elements_=%@",name_,associations_,elements_);
[_attributedAssociations removeObjectForKey:disabled__Key];
[_attributedAssociations removeObjectForKey:enabled__Key];//??
[_attributedAssociations removeObjectForKey:value__Key];//??
if (!WOStrictFlag)
[_attributedAssociations removeObjectForKey:handleValidationException__Key];
value = [[associations_ objectForKey:value__Key
withDefaultObject:[value autorelease]] retain];
NSDebugMLLog(@"gswdync",@"GSWInput: value=%@",value);
if ((self=[super initWithName:name_
attributeAssociations:_attributedAssociations
contentElements:elements_]))
{
disabled = [[associations_ objectForKey:disabled__Key
withDefaultObject:[disabled autorelease]] retain];
NSDebugMLLog(@"gswdync",@"GSWInput: disabled=%@",disabled);
if (!WOStrictFlag)
{
enabled = [[associations_ objectForKey:enabled__Key
withDefaultObject:[enabled autorelease]] retain];
NSDebugMLLog(@"gswdync",@"GSWInput: enabled=%@",enabled);
if (disabled && enabled)
{
ExceptionRaise0(@"GSWInput",@"You can't use 'diabled' and 'enabled' parameters at the same time.");
};
};
name = [[associations_ objectForKey:name__Key
withDefaultObject:[name autorelease]] retain];
NSDebugMLLog(@"gswdync",@"GSWInput: name=%@",name);
if (!WOStrictFlag)
{
handleValidationException = [[associations_ objectForKey:handleValidationException__Key
withDefaultObject:[handleValidationException autorelease]] retain];
NSDebugMLLog(@"gswdync",@"GSWInput: handleValidationException=%@",handleValidationException);
};
};
LOGObjectFnStopC("GSWInput");
return self;
};
//--------------------------------------------------------------------
-(void)dealloc
{
DESTROY(disabled);
DESTROY(enabled);//GSWeb Only
DESTROY(name);
DESTROY(value);
DESTROY(handleValidationException);//GSWeb Only
[super dealloc];
};
//--------------------------------------------------------------------
-(NSString*)elementName
{
return @"INPUT";
};
@end
//==============================================================================
@implementation GSWInput (GSWInputA)
//--------------------------------------------------------------------
-(NSString*)nameInContext:(GSWContext*)_context
{
//OK
GSWComponent* _component=nil;
NSString* _name=nil;
LOGObjectFnStartC("GSWInput");
if (name)
{
_component=[_context component];
_name=[name valueInComponent:_component];
}
else
{
_name=[_context elementID];
NSDebugMLLog(@"gswdync",@"_elementID=%@",[_context elementID]);
};
LOGObjectFnStopC("GSWInput");
return _name;
};
static int countAutoValue = 0;
//--------------------------------------------------------------------
- (NSString *)valueInContext:(GSWContext *)_context
{
//OK
GSWComponent *_component=nil;
NSString *_value=nil;
LOGObjectFnStartC("GSWInput");
countAutoValue++;
if(value)
{
_component=[_context component];
_value=[value valueInComponent:_component];
}
else
{
_value=[NSString stringWithFormat:@"%@.%d", [_context elementID], countAutoValue];
NSDebugMLLog(@"gswdync",@"_elementID=%@ _countAutoValue",[_context elementID], countAutoValue);
}
LOGObjectFnStopC("GSWInput");
return _value;
}
//--------------------------------------------------------------------
- (void)resetAutoValue
{
LOGObjectFnStartC("GSWInput");
countAutoValue = 0;
LOGObjectFnStopC("GSWInput");
}
//--------------------------------------------------------------------
-(BOOL)disabledInContext:(GSWContext*)_context
{
//OK
if (!WOStrictFlag && enabled)
return ![self evaluateCondition:enabled
inContext:_context];
else
return [self evaluateCondition:disabled
inContext:_context];
};
@end
//==============================================================================
@implementation GSWInput (GSWInputB)
//--------------------------------------------------------------------
-(void)takeValuesFromRequest:(GSWRequest*)request_
inContext:(GSWContext*)context_
{
//OK
BOOL _disabledInContext=NO;
LOGObjectFnStartC("GSWInput");
GSWAssertCorrectElementID(context_);// Debug Only
_disabledInContext=[self disabledInContext:context_]; //return 0
if (!_disabledInContext)
{
BOOL _wasFormSubmitted=[context_ _wasFormSubmitted];
if (_wasFormSubmitted)
{
GSWComponent* _component=[context_ component];
NSString* _nameInContext=[self nameInContext:context_];
NSString* _value=[request_ formValueForKey:_nameInContext];
NSDebugMLLog(@"gswdync",@"_nameInContext=%@",_nameInContext);
NSDebugMLLog(@"gswdync",@"_value=%@",_value);
if (!WOStrictFlag)
{
NS_DURING
{
[value setValue:_value
inComponent:_component];
};
NS_HANDLER
{
[self handleValidationException:localException
inContext:context_];
}
NS_ENDHANDLER;
}
else
[value setValue:_value
inComponent:_component];
};
};
LOGObjectFnStopC("GSWInput");
};
@end
//====================================================================
@implementation GSWInput (GSWInputC)
//--------------------------------------------------------------------
-(void)appendGSWebObjectsAssociationsToResponse:(GSWResponse*)response_
inContext:(GSWContext*)context_
{
//OK
BOOL _disabledInContext=NO;
LOGObjectFnStartC("GSWInput");
_disabledInContext=[self disabledInContext:context_]; //return 0
if (_disabledInContext)
[response_ _appendContentAsciiString:@" disabled"];
[self appendValueToResponse:response_
inContext:context_];
[self appendNameToResponse:response_
inContext:context_];
LOGObjectFnStopC("GSWInput");
};
//--------------------------------------------------------------------
-(void)appendValueToResponse:(GSWResponse*)response_
inContext:(GSWContext*)context_
{
//OK
GSWComponent* _component=nil;
LOGObjectFnStartC("GSWInput");
GSWSaveAppendToResponseElementID(context_);//Debug Only
_component=[context_ component];
if (value)
{
id _value=[value valueInComponent:_component];
NSDebugMLLog(@"gswdync",@"_value=%@",_value);
if (_value)
{
[response_ appendContentCharacter:' '];
[response_ _appendContentAsciiString:@"value"];
[response_ appendContentCharacter:'='];
[response_ appendContentCharacter:'"'];
[response_ appendContentHTMLAttributeValue:_value];
[response_ appendContentCharacter:'"'];
};
};
LOGObjectFnStopC("GSWInput");
};
//--------------------------------------------------------------------
-(void)appendNameToResponse:(GSWResponse*)response_
inContext:(GSWContext*)context_
{
//OK
NSString* _name=nil;
LOGObjectFnStartC("GSWInput");
_name=[self nameInContext:context_];
NSDebugMLLog(@"gswdync",@"_name=%@",_name);
if (_name)
{
[response_ appendContentCharacter:' '];
[response_ _appendContentAsciiString:@"name"];
[response_ appendContentCharacter:'='];
[response_ appendContentCharacter:'"'];
[response_ appendContentHTMLAttributeValue:_name];
[response_ appendContentCharacter:'"'];
};
LOGObjectFnStopC("GSWInput");
};
@end
//====================================================================
@implementation GSWInput (GSWInputD)
//--------------------------------------------------------------------
+(BOOL)hasGSWebObjectsAssociations
{
return YES;
};
@end
//====================================================================
@implementation GSWInput (GSWInputE)
//GSWeb additions {
-(void)handleValidationException:(NSException*)exception_
inContext:(GSWContext*)context_
{
BOOL _isValidationException=[exception_ isValidationException];
BOOL _raise=YES;
LOGObjectFnStartC("GSWInput");
if (_isValidationException)
{
GSWComponent* _component=[context_ component];
id _handleValidationException=[handleValidationException valueInComponent:_component];
BOOL _handle=NO;
if (!_handleValidationException)
{
_handleValidationException = [_component handleValidationExceptionDefault];
};
if (_handleValidationException)
{
if ([_handleValidationException isEqualToString:@"handleAndRaise"])
{
_handle=YES;
_raise=YES;
}
else if ([_handleValidationException isEqualToString:@"handle"])
{
_handle=YES;
_raise=NO;
}
else if ([_handleValidationException isEqualToString:@"raise"])
{
_handle=NO;
_raise=YES;
}
else
{
NSDebugMLog(@"Unknown case for handleValidationException %@",_handleValidationException);
};
};
if (_handle)
{
NSDebugMLog(@"Handled validation exception %@",exception_);
[_component setValidationFailureMessage:[[exception_ userInfo]objectForKey:@"message"]
forElement:self];
}
else
{
NSDebugMLog(@"Unhandled validation exception %@",exception_);
};
};
if (_raise)
{
NSDebugMLog(@"Raise exception %@",exception_);
exception_=ExceptionByAddingUserInfoObjectFrameInfo0(exception_,@"handleValidationException:inContext");
[exception_ raise];
};
LOGObjectFnStopC("GSWInput");
};
// }
@end