mirror of
https://github.com/gnustep/libs-gsweb.git
synced 2025-05-30 00:31:34 +00:00
* GSWeb/GSWAssociation.h
replace logTakeValue: by _logPullValue:inComponent: replace logSetValue: by logPushValue:inComponent: * GSWeb/GSWAssociation.m replace logTakeValue: by _logPullValue:inComponent: replace logSetValue: by logPushValue:inComponent: respect GNUstep coding standard (curly brackets placement, etc.) implement -debugDescription * GSWeb/GSWConstantValueAssociation.m replace logTakeValue: by _logPullValue:inComponent: replace logSetValue: by logPushValue:inComponent: fix -debugDescription * GSWeb/GSWKeyValueAssociation.m replace logTakeValue: by _logPullValue:inComponent: replace logSetValue: by logPushValue:inComponent: simplify -description * GSWeb/GSWKeyValueAssociation.h remove unneedded declarations * GSWeb/GSWConstantValueAssociation.m remove unneedded declarations git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gsweb/trunk@37903 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
97e527ebed
commit
37ad587ea1
7 changed files with 222 additions and 210 deletions
21
ChangeLog
21
ChangeLog
|
@ -1,3 +1,24 @@
|
|||
2014-05-22 Manuel Guesdon <mguesdon@orange-concept.com>
|
||||
* GSWeb/GSWAssociation.h
|
||||
replace logTakeValue: by _logPullValue:inComponent:
|
||||
replace logSetValue: by logPushValue:inComponent:
|
||||
* GSWeb/GSWAssociation.m
|
||||
replace logTakeValue: by _logPullValue:inComponent:
|
||||
replace logSetValue: by logPushValue:inComponent:
|
||||
respect GNUstep coding standard (curly brackets placement, etc.)
|
||||
implement -debugDescription
|
||||
* GSWeb/GSWConstantValueAssociation.m
|
||||
replace logTakeValue: by _logPullValue:inComponent:
|
||||
replace logSetValue: by logPushValue:inComponent:
|
||||
fix -debugDescription
|
||||
* GSWeb/GSWKeyValueAssociation.m
|
||||
replace logTakeValue: by _logPullValue:inComponent:
|
||||
replace logSetValue: by logPushValue:inComponent:
|
||||
simplify -description
|
||||
* GSWeb/GSWKeyValueAssociation.h
|
||||
remove unneedded declarations
|
||||
* GSWeb/GSWConstantValueAssociation.m
|
||||
remove unneedded declarations
|
||||
2014-05-22 Manuel Guesdon <mguesdon@orange-concept.com>
|
||||
* GSWeb/GSWUtils.m
|
||||
fix rangeOfData:range:
|
||||
|
|
|
@ -115,8 +115,11 @@ NEW FEATURE: negate. add a "!" in front of your key path and the result will be
|
|||
inComponent:(GSWComponent*)component;
|
||||
-(void)logSynchronizeParentToComponentForValue:(id)value
|
||||
inComponent:(GSWComponent*)component;
|
||||
-(void)logTakeValue:(id)value;
|
||||
-(void)logSetValue:(id)value;
|
||||
|
||||
-(void)_logPullValue:(id)value
|
||||
inComponent:(GSWComponent*) component;
|
||||
-(void)_logPushValue:(id)value
|
||||
inComponent:(GSWComponent*) component;
|
||||
|
||||
-(NSString*)debugDescription;
|
||||
-(void)setDebugEnabledForBinding:(NSString*)bindingName
|
||||
|
|
|
@ -118,17 +118,6 @@ static Class NSStringClass = Nil;
|
|||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// init
|
||||
-(id)init
|
||||
{
|
||||
if ((self=[super init]))
|
||||
{
|
||||
}
|
||||
_negate = NO;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)dealloc
|
||||
{
|
||||
DESTROY(_bindingName);
|
||||
|
@ -137,18 +126,20 @@ static Class NSStringClass = Nil;
|
|||
[super dealloc];
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// YES if we negate the result before returnig it.
|
||||
-(BOOL)negate
|
||||
{
|
||||
return _negate;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(void) setNegate:(BOOL) yn
|
||||
{
|
||||
_negate = yn;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
- (BOOL)_hasBindingInParent:(GSWComponent*) parent
|
||||
{
|
||||
return YES;
|
||||
|
@ -206,11 +197,13 @@ static Class NSStringClass = Nil;
|
|||
return NO;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
- (BOOL) isValueSettableInComponent:(GSWComponent*) comp
|
||||
{
|
||||
return [self isValueSettable];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
- (BOOL) isValueConstantInComponent:(GSWComponent*) comp
|
||||
{
|
||||
return [self isValueConstant];
|
||||
|
@ -219,7 +212,6 @@ static Class NSStringClass = Nil;
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
// setValue:inComponent:
|
||||
|
||||
-(void)setValue:(id)value
|
||||
inComponent:(GSWComponent*)component
|
||||
{
|
||||
|
@ -233,59 +225,66 @@ static Class NSStringClass = Nil;
|
|||
|
||||
//--------------------------------------------------------------------
|
||||
// valueInComponent:
|
||||
|
||||
-(id)valueInComponent:(GSWComponent*)component;
|
||||
{
|
||||
return [self subclassResponsibility:_cmd];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// added in WO5?
|
||||
// they call it booleanValueInComponent:
|
||||
- (BOOL) boolValueInComponent:(GSWComponent*)component
|
||||
{
|
||||
id value = [self valueInComponent: component];
|
||||
int length = 0;
|
||||
NSString * tmpStr = nil;
|
||||
|
||||
if (! value) {
|
||||
if (_negate) {
|
||||
return YES;
|
||||
}
|
||||
if (value==nil)
|
||||
{
|
||||
if (_negate)
|
||||
return YES;
|
||||
else
|
||||
return NO;
|
||||
}
|
||||
if ([value isKindOfClass: NSNumberClass])
|
||||
{
|
||||
if (_negate)
|
||||
return (![value boolValue]);
|
||||
else
|
||||
return [value boolValue];
|
||||
}
|
||||
else if ([value isKindOfClass: NSStringClass])
|
||||
{
|
||||
NSString* tmpStr = nil;
|
||||
int length = [value length];
|
||||
if (length >= 2 && length <= 5)
|
||||
{
|
||||
tmpStr = [value lowercaseString];
|
||||
if ([tmpStr isEqual:@"no"]
|
||||
|| [tmpStr isEqual:@"false"]
|
||||
|| [tmpStr isEqual:@"nil"]
|
||||
|| [tmpStr isEqual:@"null"])
|
||||
{
|
||||
if (_negate)
|
||||
return YES;
|
||||
else
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
if ([tmpStr isEqual:@"0"])
|
||||
{
|
||||
if (_negate)
|
||||
return YES;
|
||||
else
|
||||
return NO;
|
||||
}
|
||||
if (_negate)
|
||||
return NO;
|
||||
else
|
||||
return YES;
|
||||
}
|
||||
if (_negate)
|
||||
return NO;
|
||||
}
|
||||
if ([value isKindOfClass: NSNumberClass]) {
|
||||
if (_negate) {
|
||||
return (! [value boolValue]);
|
||||
}
|
||||
return [value boolValue];
|
||||
}
|
||||
if ([value isKindOfClass: NSStringClass]) {
|
||||
length = [value length];
|
||||
if ((length >= 2) && (length <= 5)) {
|
||||
tmpStr = [value lowercaseString];
|
||||
if ([tmpStr isEqual:@"no"] || [tmpStr isEqual:@"false"] || [tmpStr isEqual:@"nil"] || [tmpStr isEqual:@"null"]) {
|
||||
if (_negate) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
if ([tmpStr isEqual:@"0"]) {
|
||||
if (_negate) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
if (_negate) {
|
||||
return NO;
|
||||
}
|
||||
else
|
||||
return YES;
|
||||
}
|
||||
if (_negate) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
|
@ -473,31 +472,7 @@ static Class NSStringClass = Nil;
|
|||
LoggedUnlock(associationsLock);
|
||||
}
|
||||
|
||||
/*
|
||||
//====================================================================
|
||||
@implementation GSWAssociation (GSWAssociationOldFn)
|
||||
//--------------------------------------------------------------------
|
||||
// value
|
||||
|
||||
-(id)value
|
||||
{
|
||||
GSWContext* context=[[GSWApplication application] context];
|
||||
[self valueInComponent:GSWContext_component(context)];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// setValue:inComponent:
|
||||
//OldFn
|
||||
-(void)setValue:(id)value
|
||||
{
|
||||
GSWContext* context=[[GSWApplication application] context];
|
||||
[self setValue:(id)value
|
||||
inComponent:GSWContext_component(context)];
|
||||
}
|
||||
@end
|
||||
*/
|
||||
//====================================================================
|
||||
|
||||
// returns the binding String as in the wod.
|
||||
// override in subclasses
|
||||
- (NSString*) bindingInComponent:(GSWComponent*) component
|
||||
|
@ -512,11 +487,9 @@ static Class NSStringClass = Nil;
|
|||
return YES;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(NSString*)keyPath
|
||||
{
|
||||
//OK
|
||||
[self subclassResponsibility:_cmd];
|
||||
return nil;
|
||||
}
|
||||
|
@ -564,6 +537,28 @@ static Class NSStringClass = Nil;
|
|||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(void)_logPullValue:(id)value
|
||||
inComponent:(GSWComponent*) component
|
||||
{
|
||||
[GSWApp logTakeValueForDeclarationNamed:_declarationName
|
||||
type:_declarationType
|
||||
bindingNamed:_bindingName
|
||||
associationDescription:[self debugDescription]
|
||||
value:value];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(void)_logPushValue:(id)value
|
||||
inComponent:(GSWComponent*) component
|
||||
{
|
||||
[GSWApp logSetValueForDeclarationNamed:_declarationName
|
||||
type:_declarationType
|
||||
bindingNamed:_bindingName
|
||||
associationDescription:[self debugDescription]
|
||||
value:value];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(void)logTakeValue:(id)value
|
||||
{
|
||||
|
@ -635,9 +630,7 @@ static Class NSStringClass = Nil;
|
|||
//--------------------------------------------------------------------
|
||||
-(NSString*)debugDescription
|
||||
{
|
||||
//OK
|
||||
[self subclassResponsibility:_cmd];
|
||||
return nil;
|
||||
return NSStringFromClass([self class]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
@ -659,34 +652,32 @@ static Class NSStringClass = Nil;
|
|||
static id EONullNull=nil;
|
||||
//TODO MultiThread Protection ?
|
||||
if (!EONullNull)
|
||||
{
|
||||
EONullNull=[NSNull null];
|
||||
}
|
||||
id retValue=nil;
|
||||
|
||||
if (keyPath && object && object!=EONullNull)
|
||||
{
|
||||
NS_DURING
|
||||
{
|
||||
retValue=[object valueForKeyPath:keyPath];
|
||||
NS_DURING
|
||||
{
|
||||
retValue=[object valueForKeyPath:keyPath];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
NSLog(@"Attempt to get %@ -%@ raised an exception (%@)",
|
||||
[object class],
|
||||
keyPath,
|
||||
localException);
|
||||
localException = [localException exceptionByAddingToUserInfoKey:@"Invalid Ivars/Methods"
|
||||
format:@"-[%@ %@]",
|
||||
[object class],
|
||||
keyPath];
|
||||
|
||||
[localException raise];
|
||||
}
|
||||
NS_ENDHANDLER;
|
||||
if (retValue==EONullNull)
|
||||
retValue=nil;
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
NSLog(@"Attempt to get %@ -%@ raised an exception (%@)",
|
||||
[object class],
|
||||
keyPath,
|
||||
localException);
|
||||
localException = [localException exceptionByAddingToUserInfoKey:@"Invalid Ivars/Methods"
|
||||
format:@"-[%@ %@]",
|
||||
[object class],
|
||||
keyPath];
|
||||
|
||||
[localException raise];
|
||||
}
|
||||
NS_ENDHANDLER;
|
||||
if (retValue==EONullNull)
|
||||
retValue=nil;
|
||||
}
|
||||
|
||||
return retValue;
|
||||
}
|
||||
|
@ -697,56 +688,64 @@ static Class NSStringClass = Nil;
|
|||
inComponent:(GSWComponent*)object
|
||||
forKeyPath:(NSString*)keyPath
|
||||
{
|
||||
|
||||
id tmpObject = nil;
|
||||
NSString *tmpKey = nil;
|
||||
|
||||
if (keyPath) {
|
||||
NSRange r = [keyPath rangeOfString: @"."];
|
||||
|
||||
if (r.length == 0) {
|
||||
tmpObject = object;
|
||||
tmpKey = keyPath;
|
||||
} else {
|
||||
NSString *key = [keyPath substringToIndex: r.location];
|
||||
tmpObject = [object valueForKey: key];
|
||||
tmpKey = [keyPath substringFromIndex: NSMaxRange(r)];
|
||||
}
|
||||
if (tmpObject) //&& [object isKindOfClass:[GSWComponent class]]
|
||||
if (keyPath)
|
||||
{
|
||||
NSError * outError = nil;
|
||||
|
||||
BOOL ok = [tmpObject validateValue:&value forKey:tmpKey error:&outError];
|
||||
if (ok == NO)
|
||||
{
|
||||
NSException * exception=nil;
|
||||
NSDictionary * uInfo;
|
||||
NSString * errorStr = @"unknown reason";
|
||||
|
||||
uInfo = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
(value ? value : (id)@"nil"), @"EOValidatedObjectUserInfoKey",
|
||||
keyPath, @"EOValidatedPropertyUserInfoKey",
|
||||
nil];
|
||||
|
||||
if ((outError) && ([outError userInfo])) {
|
||||
errorStr = [[outError userInfo] valueForKey:NSLocalizedDescriptionKey];
|
||||
}
|
||||
|
||||
exception=[NSException exceptionWithName:@"EOValidationException"
|
||||
reason:errorStr
|
||||
userInfo:uInfo];
|
||||
|
||||
[object validationFailedWithException:exception
|
||||
value:value
|
||||
keyPath:keyPath];
|
||||
} else {
|
||||
// all fine, set the value
|
||||
|
||||
[tmpObject setValue:value
|
||||
forKey:tmpKey];
|
||||
}
|
||||
NSRange r = [keyPath rangeOfString: @"."];
|
||||
|
||||
if (r.length == 0)
|
||||
{
|
||||
tmpObject = object;
|
||||
tmpKey = keyPath;
|
||||
}
|
||||
else
|
||||
{
|
||||
NSString *key = [keyPath substringToIndex: r.location];
|
||||
tmpObject = [object valueForKey: key];
|
||||
tmpKey = [keyPath substringFromIndex: NSMaxRange(r)];
|
||||
}
|
||||
if (tmpObject) //&& [object isKindOfClass:[GSWComponent class]]
|
||||
{
|
||||
NSError * outError = nil;
|
||||
|
||||
BOOL ok = [tmpObject validateValue:&value
|
||||
forKey:tmpKey
|
||||
error:&outError];
|
||||
if (ok == NO)
|
||||
{
|
||||
NSException * exception=nil;
|
||||
NSDictionary * uInfo;
|
||||
NSString * errorStr = @"unknown reason";
|
||||
|
||||
uInfo = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
(value ? value : (id)@"nil"), @"EOValidatedObjectUserInfoKey",
|
||||
keyPath, @"EOValidatedPropertyUserInfoKey",
|
||||
nil];
|
||||
|
||||
if (outError
|
||||
&& [outError userInfo])
|
||||
{
|
||||
errorStr = [[outError userInfo] valueForKey:NSLocalizedDescriptionKey];
|
||||
}
|
||||
|
||||
exception=[NSException exceptionWithName:@"EOValidationException"
|
||||
reason:errorStr
|
||||
userInfo:uInfo];
|
||||
|
||||
[object validationFailedWithException:exception
|
||||
value:value
|
||||
keyPath:keyPath];
|
||||
}
|
||||
else
|
||||
{
|
||||
// all fine, set the value
|
||||
[tmpObject setValue:value
|
||||
forKey:tmpKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -39,12 +39,5 @@
|
|||
};
|
||||
|
||||
-(id)initWithValue:(id)aValue;
|
||||
-(NSString*)debugDescription;
|
||||
-(BOOL)isValueConstant;
|
||||
-(BOOL)isValueSettable;
|
||||
-(id)valueInComponent:(GSWComponent*)component;
|
||||
-(void)setValue:(id)aValue
|
||||
inComponent:(GSWComponent*)component;
|
||||
|
||||
@end
|
||||
#endif //GSWConstantValueAssociation
|
||||
|
|
|
@ -65,12 +65,7 @@ RCS_ID("$Id$")
|
|||
//--------------------------------------------------------------------
|
||||
-(NSString*)debugDescription
|
||||
{
|
||||
NSString* dscr=[NSString stringWithFormat:@"<%s %p - value=%@ (class: %@)>",
|
||||
object_getClassName(self),
|
||||
(void*)self,
|
||||
_value,
|
||||
[_value class]];
|
||||
return dscr;
|
||||
return NSStringFromClass([_value class]);
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
@ -88,7 +83,11 @@ RCS_ID("$Id$")
|
|||
//--------------------------------------------------------------------
|
||||
-(id)valueInComponent:(GSWComponent*)object
|
||||
{
|
||||
[self logTakeValue:_value];
|
||||
if (_debugEnabled)
|
||||
{
|
||||
[self _logPullValue:_value
|
||||
inComponent:object];
|
||||
}
|
||||
return _value;
|
||||
};
|
||||
|
||||
|
|
|
@ -40,15 +40,7 @@
|
|||
}
|
||||
|
||||
-(id)initWithKeyPath:(NSString*)aKeyPath;
|
||||
|
||||
-(id)valueInComponent:(GSWComponent*)component;
|
||||
-(void)setValue:(id)aValue
|
||||
inComponent:(GSWComponent*)component;
|
||||
-(BOOL)isValueConstant;
|
||||
-(BOOL)isValueSettable;
|
||||
|
||||
-(NSString*)keyPath;
|
||||
-(NSString*)debugDescription;
|
||||
@end
|
||||
|
||||
#endif //_GSWKeyValueAssociation_h__
|
||||
|
|
|
@ -75,7 +75,11 @@ RCS_ID("$Id$")
|
|||
// but we need:
|
||||
retValue=[GSWAssociation valueInComponent: component
|
||||
forKeyPath:_keyPath];
|
||||
|
||||
if (_debugEnabled)
|
||||
{
|
||||
[self _logPullValue:retValue
|
||||
inComponent:component];
|
||||
}
|
||||
return retValue;
|
||||
};
|
||||
|
||||
|
@ -86,31 +90,44 @@ RCS_ID("$Id$")
|
|||
NSException *ex = nil;
|
||||
|
||||
if ([_keyPath length]==0)
|
||||
{
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"No key path when setting value %@ in object of class %@ for association %@",
|
||||
aValue,NSStringFromClass([component class]),self];
|
||||
}
|
||||
{
|
||||
[NSException raise:NSInvalidArgumentException
|
||||
format:@"No key path when setting value %@ in object of class %@ for association %@",
|
||||
aValue,NSStringFromClass([component class]),self];
|
||||
}
|
||||
|
||||
NS_DURING {
|
||||
[component validateTakeValue:aValue
|
||||
forKeyPath:_keyPath];
|
||||
} NS_HANDLER {
|
||||
ex = localException;
|
||||
} NS_ENDHANDLER;
|
||||
NS_DURING
|
||||
{
|
||||
[component validateTakeValue:aValue
|
||||
forKeyPath:_keyPath];
|
||||
}
|
||||
NS_HANDLER
|
||||
{
|
||||
ex = localException;
|
||||
}
|
||||
NS_ENDHANDLER;
|
||||
|
||||
if (ex != nil) {
|
||||
[component validationFailedWithException:ex
|
||||
value:aValue
|
||||
keyPath:_keyPath];
|
||||
}
|
||||
if (_debugEnabled)
|
||||
{
|
||||
[self _logPushValue:aValue
|
||||
inComponent:component];
|
||||
}
|
||||
if (ex != nil)
|
||||
{
|
||||
[component validationFailedWithException:ex
|
||||
value:aValue
|
||||
keyPath:_keyPath];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) _setValueNoValidation:(id) aValue inComponent:(GSWComponent*) component
|
||||
- (void) _setValueNoValidation:(id) aValue
|
||||
inComponent:(GSWComponent*) component
|
||||
{
|
||||
if (_isValueSettable) {
|
||||
[component setValue:aValue forKeyPath:_keyPath];
|
||||
}
|
||||
if (_isValueSettable)
|
||||
{
|
||||
[component setValue:aValue
|
||||
forKeyPath:_keyPath];
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
@ -128,30 +145,18 @@ RCS_ID("$Id$")
|
|||
//--------------------------------------------------------------------
|
||||
-(NSString*)description
|
||||
{
|
||||
NSString* dscr=nil;
|
||||
|
||||
dscr=[NSString stringWithFormat:@"<%s %p -",
|
||||
object_getClassName(self),
|
||||
(void*)self];
|
||||
dscr=[dscr stringByAppendingFormat:@" keyPath=%@>",
|
||||
_keyPath];
|
||||
return dscr;
|
||||
return [NSString stringWithFormat:@"<%s %p - keyPath=%@>",
|
||||
object_getClassName(self),
|
||||
(void*)self,
|
||||
_keyPath];
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(NSString*)keyPath
|
||||
{
|
||||
return _keyPath;
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
-(NSString*)debugDescription
|
||||
{
|
||||
[self notImplemented: _cmd]; //TODOFN
|
||||
return nil;
|
||||
};
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue