You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by to...@apache.org on 2006/10/09 23:08:44 UTC
svn commit: r454514 - in
/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne: CAYObjAttribute.h
CAYObjAttribute.m CAYPersistentObject.h CAYPersistentObject.m
Author: torehalset
Date: Mon Oct 9 14:08:43 2006
New Revision: 454514
URL: http://svn.apache.org/viewvc?view=rev&rev=454514
Log:
* started to implement property key value validation
* NSNull values for attributes are returned as nil
Modified:
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h?view=diff&rev=454514&r1=454513&r2=454514
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h Mon Oct 9 14:08:43 2006
@@ -41,6 +41,4 @@
-(void)setMaxLength:(int)ml;
-(int)maxLength;
--(BOOL)isValueOfOkType:(id)value;
-
@end
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m?view=diff&rev=454514&r1=454513&r2=454514
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m Mon Oct 9 14:08:43 2006
@@ -85,24 +85,6 @@
return maxLength;
}
--(BOOL)isValueOfOkType:(id)value
-{
- // TODO: create a Dictionary like class mapper. perhaps two, one for each direction.
- if([[self javaType] isEqualToString:@"java.lang.String"])
- {
- return [value isKindOfClass:[NSString class]];
- }
- else if([[self javaType] isEqualToString:@"java.util.Date"])
- {
- return [value isKindOfClass:[NSDate class]];
- }
- else
- {
- NSLog(@"ERROR: unhandled java type %@", self);
- return NO;
- }
-}
-
-(NSString *)description
{
NSString *result = [[NSString alloc] initWithFormat:@"CAYObjAttribute {name = %@; javaType = %@, mandatory = %i, maxLength = %i}", [self name], [self javaType], [self isMandatory], [self maxLength]];
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h?view=diff&rev=454514&r1=454513&r2=454514
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h Mon Oct 9 14:08:43 2006
@@ -42,6 +42,7 @@
-(void)setValue:(id)value forKey:(NSString *)key;
-(id)valueForKey:(NSString *)key;
+-(BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError;
-(void)setToOneTarget:(CAYPersistentObject *)value forKey:(NSString *)key setReverse:(BOOL)setrev;
-(void)addToManyTarget:(CAYPersistentObject *)value forKey:(NSString *)key setReverse:(BOOL)setrev;
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m?view=diff&rev=454514&r1=454513&r2=454514
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m (original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m Mon Oct 9 14:08:43 2006
@@ -188,21 +188,13 @@
{
// a none-relationship property
id oldValue = [self valueForKey:key];
-
- // check value type
- CAYObjAttribute *attribute = [[objEntity attributes] valueForKey:key];
- if(![attribute isValueOfOkType:value])
- {
- NSLog(@"ERROR: %@.%@: %@(%@) not valid value type for attribute %@", [objEntity name], key, value, [value class], attribute);
- }
- else
- {
- [[self objectContext] propertyChanged:self forProperty:key fromOld:[values objectForKey:key] toNew:value];
- [values setValue:value forKey:key];
- }
- NSLog(@"DEBUG: %@.%@. attribute: %@. oldValue: %@. oldValue class: %@. ok: %d",[objEntity name], key, attribute, oldValue, [oldValue class], [attribute isValueOfOkType:value]);
+ // create diff and set value. validation done using key/value validation
+ [[self objectContext] propertyChanged:self forProperty:key fromOld:[values objectForKey:key] toNew:value];
+ [values setValue:value forKey:key];
+ CAYObjAttribute *attribute = [[objEntity attributes] valueForKey:key];
+ NSLog(@"DEBUG: %@.%@. attribute: %@. oldValue: %@. oldValue class: %@",[objEntity name], key, attribute, oldValue, [oldValue class]);
}
}
@@ -216,7 +208,85 @@
val = [fault resolveFault];
[values setValue:val forKey:key];
}
- return [values objectForKey:key];
+ if([val isKindOfClass:[NSNull class]])
+ {
+ // return nil instead of NSNull as it works better for formatters++
+ return nil;
+ }
+ return val;
+}
+
+-(BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError
+{
+ CAYObjEntity *objEntity = [[[self objectContext] entityResolver] lookupObjEntity:self];
+ CAYObjAttribute *attribute = [[objEntity attributes] valueForKey:key];
+
+ // check for mandatory field
+ if([attribute isMandatory])
+ {
+ if((!*ioValue) || [*ioValue isKindOfClass:[NSNull class]])
+ {
+ // TODO: append to NSError
+ return NO;
+ }
+ }
+
+ if([[attribute javaType] isEqualToString:@"java.lang.String"])
+ {
+ // TODO: check for max length
+ return [*ioValue isKindOfClass:[NSString class]];
+ }
+ else if([[attribute javaType] isEqualToString:@"java.util.Date"])
+ {
+ return [*ioValue isKindOfClass:[NSDate class]];
+ }
+ else if([[attribute javaType] isEqualToString:@"java.lang.Integer"])
+ {
+ if([*ioValue isKindOfClass:[NSNumber class]])
+ {
+ if(strcmp("i",[*ioValue objCType]) != 0)
+ {
+ // try to convert non-integer numbers to int
+ *ioValue = [NSNumber numberWithInt:[*ioValue intValue]];
+ }
+ return YES;
+ }
+ // TODO: append to NSError
+ return NO;
+ }
+ else if([[attribute javaType] isEqualToString:@"java.lang.Float"])
+ {
+ if([*ioValue isKindOfClass:[NSNumber class]])
+ {
+ if(strcmp("f",[*ioValue objCType]) != 0)
+ {
+ // try to convert non-float numbers to float
+ *ioValue = [NSNumber numberWithFloat:[*ioValue floatValue]];
+ }
+ return YES;
+ }
+ return NO;
+ }
+ else if([[attribute javaType] isEqualToString:@"java.lang.Double"])
+ {
+ if([*ioValue isKindOfClass:[NSNumber class]])
+ {
+ if(strcmp("d",[*ioValue objCType]) != 0)
+ {
+ // try to convert non-float numbers to float
+ *ioValue = [NSNumber numberWithDouble:[*ioValue doubleValue]];
+ }
+ return YES;
+ }
+ // TODO: append to NSError
+ return NO;
+ }
+ else
+ {
+ NSLog(@"ERROR: unhandled java type %@", attribute);
+ // TODO: append to NSError
+ return NO;
+ }
}
-(void)setToOneTarget:(CAYPersistentObject *)value forKey:(NSString *)key setReverse:(BOOL)setrev
@@ -259,7 +329,7 @@
if(!value)
{
- // TODO: throw
+ // TODO: throw.
NSLog(@"ERROR. can not add nil to %@.%@", [self class], key);
return;
}