Author: torehalset Date: Mon Jan 8 14:18:03 2007 New Revision: 494223 URL: http://svn.apache.org/viewvc?view=rev&rev=494223 Log: * moved logic for random data key * added CAYPersistentObject#awakeFromInsert
Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m?view=diff&rev=494223&r1=494222&r2=494223 ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYObjectContext.m Mon Jan 8 14:18:03 2007 @@ -36,6 +36,7 @@ #import "CAYRelationshipQuery.h" #import "CAYGenericResponse.h" #import "CAYObjectIdQuery.h" +#import "CAYUtil.h" @implementation CAYObjectContext @@ -313,65 +314,20 @@ // set persistant state [o setPersistenceState:PSTATE_NEW]; - // create random data for key - int randombytes[8]; - int i; - for(i = 0; i < 8; i++) - { - randombytes[i] = rand(); - } - NSData *randomdata = [[NSData alloc] initWithBytes:&randombytes length:8]; - CAYObjectId *oid = [[CAYObjectId alloc] init]; // need to search by class as o does not have an ObjectId with entityName yet CAYObjEntity *objEntity = [[self entityResolver] objEntityForClass:[o class]]; [oid setEntityName:[objEntity name]]; - [oid setTempKey:randomdata]; + [oid setTempKey:[CAYUtil createRandomData:8]]; [o setObjectId:oid]; - [randomdata release]; CAYNodeDiff *diff = [[CAYNodeCreateOperation alloc] initWithNodeId:oid]; [[self objectStore] registerDiff:diff]; [diff release]; [[self objectStore] setObject:o forId:oid]; - - // init values with NSNull objects - NSEnumerator *enumerator = [[objEntity attributes] keyEnumerator]; - NSString *attribute; - while(attribute = [enumerator nextObject]) - { - if(![[o valuesRaw] objectForKey:attribute]) - { - NSLog(@"DEBUG: setting attribute %@ to NSNull", attribute); - [[o valuesRaw] setObject:[NSNull null] forKey:attribute]; - } - } - - // init relationships - enumerator = [[objEntity relationships] keyEnumerator]; - NSString *relationshipName; - while(relationshipName = [enumerator nextObject]) - { - if(![[o valuesRaw] objectForKey:relationshipName]) - { - CAYObjRelationship *relationship = [[objEntity relationships] objectForKey:relationshipName]; - if([relationship isToMany]) - { - NSLog(@"DEBUG: setting relationship %@ to empty array", relationship); - NSMutableArray *array = [[NSMutableArray alloc] init]; - [[o valuesRaw] setObject:array forKey:relationshipName]; - [array release]; - } - else - { - NSLog(@"DEBUG: setting attribute %@ to NSNull", relationship); - [[o valuesRaw] setObject:[NSNull null] forKey:relationshipName]; - } - } - } - [oid release]; + [o awakeFromInsert]; [o release]; } Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h?view=diff&rev=494223&r1=494222&r2=494223 ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.h Mon Jan 8 14:18:03 2007 @@ -51,4 +51,6 @@ -(void)unsetReverseRelationship:(CAYPersistentObject *)value forKey:(NSString *)key; -(void)willConnect:(CAYPersistentObject *)value forKey:(NSString *)key; +-(void)awakeFromInsert; + @end Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m?view=diff&rev=494223&r1=494222&r2=494223 ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYPersistentObject.m Mon Jan 8 14:18:03 2007 @@ -545,6 +545,45 @@ // TODO: give error if different data contexts? } +-(void)awakeFromInsert +{ + // init values with NSNull objects + CAYObjEntity *objEntity = [[[self objectContext] entityResolver] lookupObjEntity:self]; + NSEnumerator *enumerator = [[objEntity attributes] keyEnumerator]; + NSString *attribute; + while(attribute = [enumerator nextObject]) + { + if(![[self valuesRaw] objectForKey:attribute]) + { + NSLog(@"DEBUG: setting attribute %@ to NSNull", attribute); + [[self valuesRaw] setObject:[NSNull null] forKey:attribute]; + } + } + + // init relationships + enumerator = [[objEntity relationships] keyEnumerator]; + NSString *relationshipName; + while(relationshipName = [enumerator nextObject]) + { + if(![[self valuesRaw] objectForKey:relationshipName]) + { + CAYObjRelationship *relationship = [[objEntity relationships] objectForKey:relationshipName]; + if([relationship isToMany]) + { + NSLog(@"DEBUG: setting relationship %@ to empty array", relationship); + NSMutableArray *array = [[NSMutableArray alloc] init]; + [[self valuesRaw] setObject:array forKey:relationshipName]; + [array release]; + } + else + { + NSLog(@"DEBUG: setting attribute %@ to NSNull", relationship); + [[self valuesRaw] setObject:[NSNull null] forKey:relationshipName]; + } + } + } +} + -(void)dealloc { [self setObjectId:nil]; Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h?view=diff&rev=494223&r1=494222&r2=494223 ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.h Mon Jan 8 14:18:03 2007 @@ -25,5 +25,6 @@ } +(BOOL)nilSafe:(id)a isEqualTo:(id)b; ++(NSData *)createRandomData:(int)length; @end Modified: incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m URL: http://svn.apache.org/viewvc/incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m?view=diff&rev=494223&r1=494222&r2=494223 ============================================================================== --- incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m (original) +++ incubator/cayenne/sandbox/CocoaCayenne/CocoaCayenne/CAYUtil.m Mon Jan 8 14:18:03 2007 @@ -37,4 +37,16 @@ return [a isEqualTo:b]; } ++(NSData *)createRandomData:(int)length +{ + int randombytes[length]; + int i; + for(i = 0; i < length; i++) + { + randombytes[i] = rand(); + } + NSData *randomdata = [[[NSData alloc] initWithBytes:&randombytes length:length] autorelease]; + return randomdata; +} + @end