Author: torehalset
Date: Wed Sep 20 13:51:48 2006
New Revision: 448337

URL: http://svn.apache.org/viewvc?view=rev&rev=448337
Log:
started to check attribute type

Modified:
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h
    incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m
    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=448337&r1=448336&r2=448337
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h 
(original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.h Wed 
Sep 20 13:51:48 2006
@@ -26,11 +26,16 @@
 @interface CAYObjAttribute : NSObject <NSCoding> {
 
     NSString *name;
+    NSString *javaType;
     CAYObjEntity *objEntity;
     
 }
 
 -(void)setName:(NSString *)n;
 -(NSString *)name;
+-(void)setJavaType:(NSString *)t;
+-(NSString *)javaType;
+
+-(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=448337&r1=448336&r2=448337
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m 
(original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjAttribute.m Wed 
Sep 20 13:51:48 2006
@@ -26,13 +26,15 @@
 {
        [super init];
        [self setName:[coder decodeObjectForKey:@"name"]];
+       [self setJavaType:[coder decodeObjectForKey:@"type"]];
     
        return self;
 }
 
 -(void)encodeWithCoder:(NSCoder*)coder
 {
-       [coder encodeObject:name forKey:@"name"];
+       [coder encodeObject:[self name] forKey:@"name"];
+       [coder encodeObject:[self javaType] forKey:@"type"];
 }
 
 -(void)setName:(NSString *)n
@@ -47,9 +49,47 @@
        return name;
 }
 
+-(void)setJavaType:(NSString *)t
+{
+    [t retain];
+    [javaType release];
+    javaType = t;
+}
+
+-(NSString *)javaType
+{
+    return javaType;
+}
+
+-(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 = [EMAIL PROTECTED]", [self name], [self javaType]];
+    [result autorelease];
+    return result;
+}
+
 -(void)dealloc
 {
        [self setName:nil];
+    [self setJavaType:nil];
        [super dealloc];
 }
 

Modified: 
incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m?view=diff&rev=448337&r1=448336&r2=448337
==============================================================================
--- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m 
(original)
+++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m 
Wed Sep 20 13:51:48 2006
@@ -27,6 +27,7 @@
 #import "CAYFault.h"
 #import "CAYToManyFault.h"
 #import "CAYToOneFault.h"
+#import "CAYObjAttribute.h"
 
 @implementation CAYPersistentObject
 
@@ -188,8 +189,22 @@
     else
     {
         // a none-relationship property
-        [[self objectContext] propertyChanged:self forProperty:key 
fromOld:[values objectForKey:key] toNew:value];
-               [values setValue:value forKey:key];
+        id oldValue = [self valueForKey:key];
+
+        // check value type
+        CAYObjAttribute *attribute = [[objEntity attributes] valueForKey:key];
+        if(![attribute isValueOfOkType:value])
+        {
+            NSLog(@"ERROR: [EMAIL PROTECTED]@: %@(%@) 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: [EMAIL PROTECTED]@. attribute: [EMAIL PROTECTED] 
oldValue: [EMAIL PROTECTED] oldValue class: [EMAIL PROTECTED] ok: 
%d",[objEntity name], key, attribute, oldValue, [oldValue class], [attribute 
isValueOfOkType:value]);
+        
     }
 }
 


Reply via email to